
Linux开发
文章平均质量分 76
基于linux的技术开发
禾仔仔
等待,纪律,享受孤独
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浮点数在内存中的储存
整数在计算机内存储存以二进制储存很容易理解,那浮点数怎么储存的呢?其实之所以想到要一探究竟是因为类似下面这段代码:#include <stdio.h>int main(void){ int num = 5.75; printf("%d",num); return 0;}由于大意,用占位符%d来打印浮点数,结果显示,当然这个也和编译器有关,有些就会强制类型转换,打印:5。在写如何储存之前不得插上一段二进制和十进制的互换(小数位):例:十进制的 0.125 化为二进制是多少呢原创 2020-08-27 23:19:24 · 231 阅读 · 0 评论 -
GDB调试简单介绍
通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码;在我们日常coding debug时,有时很难肉眼发现自己写的代码的问题之处,这时GDB就排上用场了。原创 2023-10-22 21:56:24 · 6384 阅读 · 0 评论 -
Debugfs文件系统的简介及简单使用
我还在读取一个又一个寄存器查gpio配置的时候,大佬,一下清晰明了的搞定了。会的就是多呀。学习了。原创 2021-04-02 16:48:40 · 5003 阅读 · 0 评论 -
goto的理解与使用
Goto记得学C语言时,老师就有讲过:"不要使用goto, 这是一个坏习惯,而且很危险!"各类书籍上也是这么说,所以之前写的代码几乎从来没有使用过goto。现在工作在搞Linux硬件驱动,内核源码里却有大量goto,看了些论坛大神的讨论,确实goto不应该多用,不然逻辑会搞得混乱。但是自己也得会,不然内核代码也是看的稀里糊涂。功能:goto语句可以使程序在没有任何条件的情况下跳转到指定的位置#include <stdio.h>int main(void){ char a;原创 2020-11-26 19:06:32 · 6625 阅读 · 0 评论 -
Linux系统查看内存使用情况
常用命令查看内存使用情况:free显示进程信息(包括CPU、内存使用等信息):top、ps查看驱动占用内存:lsmod原创 2021-10-13 16:31:15 · 136200 阅读 · 0 评论 -
Linux系统调用之一——概述导论
内核提供了用户进程和内核交互的一组接口;做过Linux开发的人应该也清楚系统调用的流程:应用->陷入内核、系统调用->驱动->硬件;然后也有不少人讲到0x80的中断。但系统调用的讲解有些片面,原理并不清晰,细节更是一笔带过,看了并不能让人耳目一新,大都新瓶旧酒,**比如0x80中断是怎么创建,又是怎么识别的**等,后面会介绍。所以,我想分享一些自己的学习,以及自己的理解原创 2022-01-03 16:34:46 · 5643 阅读 · 2 评论 -
Makefile中($(KERNELRELEASE),)执行分析
($(KERNELRELEASE),)是什么意思,又是怎么样影响执行的?看了一些人的解析,洋洋洒洒一大段,结果也说的不清不楚,通过查阅弄懂了这个问题,分享一下我的理解。原创 2021-01-11 17:39:19 · 8214 阅读 · 2 评论 -
Linux字符设备驱动从helloworld认识内核
字符设备是内核的接口的一种,用户空间和内核空间的交互的方式之一,这里侧重讲下字符设备,对模块知识略微提及,后面会单独发相关的帖。1、模块化Linux 内核整体结构很庞大,包含了很多的组件,目前最多的也是最好的处理方式:将需要的功能编译成模块,在需要的时候动态地加载,包含进内核当中。这也就是所谓的模块化。常用操作:insmod 将模块添加进内核rmmod 将模块从内核卸载lsmod 查看已安装到内核的模块modprobe 载入指定的个别模块,或是载入一组相依赖的 模块。 modprobe原创 2020-10-08 22:35:23 · 673 阅读 · 0 评论 -
Linux系统开机流程简介
前端时间跟着团队在搞Linux系统的内核移植,涉及到很多模块的加载顺序问题,就学习了些Linux系统开机的基本流程,就算给刚刚入手的小伙伴些学习参考吧。大致流程:原创 2020-08-29 19:22:53 · 486 阅读 · 0 评论 -
Linux编程中C语言头文件位置
Linux下引用的头文件位置...原创 2020-08-07 20:47:02 · 6606 阅读 · 0 评论 -
内核空间和用户空间简介以及两者之间的数据拷贝
1、内核空间和用户空间的概念简介在Linux中,操作系统和驱动程序运行在内核空间,应用程序运行在用户空间。两者不能简单的使用指针传递数据,因为Linux使用的虚拟内核机制,当内核空间使用用户空间指针时,对应的数据可能不在内存中(数据已被换出)。用户空间的内存采用段页式,内核空间也有自己的规则。32位的Linux内核虚拟地址空间,一般低3G的地址(0-3G)划分为用户空间,高1G的地址(3~4G)划为内核空间,也就是说内核空间可以使用的线性地址只有1G。另外也可以自行配置内核空间和用户空间的界限(大小原创 2020-10-11 22:29:53 · 4010 阅读 · 0 评论 -
字符设备驱动代码添加到内核源码树(环境Centos7)
1、 准备1、Linux内核文件(我用的4.19)阿里镜像:https://mirrors.aliyun.com/linux-kernel/v4.x/2、字符设备驱动源文件我自己简单的写了一个见我的另外的帖子:https://blog.csdn.net/weixin_43083491/article/details/108961701 helloword.c2、配置Kconfig1、准备将helloworld.c放入linux-4.19驱动下的字符设备目录。路径:linux-4.19/dr原创 2020-10-10 23:28:38 · 460 阅读 · 0 评论 -
内核dma_cache_maint介绍
外设和主芯片数据传输时,经常要手动刷新cache,要用到dma_cache_maint,这个内核函数到底在干什么呢?原创 2021-08-10 11:46:26 · 607 阅读 · 0 评论 -
Linux常见文件种类和扩展名简介
使用Linux经常会听到这样一句话:Linux下一切皆文件。也就是说我们的任何设备在Linux下都是文件,Linux中文件种类很多,就连数据间沟通的接口也有相应的文件来负责,我们可以通过ls -l来查看文件是哪类文件。1文件种类1.1常规文件(regular file)**‘-’**就是我们可以读写的类型文件,形式如[-rwxrwxrwx]中第一个字符’-’来表示1.1.1纯文本文件(ASCII)由各种字符、数字等组成,由权限的情况下,可以通过vim打开,或者cat、head等命令查看1.1原创 2020-08-13 15:51:25 · 1359 阅读 · 0 评论 -
platform_bus、device及driver 注册及介绍
在目前常用的bus, driver, device 框架中,这三者的关系及注册是怎么样的呢?让我们一探究竟原创 2021-08-06 16:21:17 · 1091 阅读 · 0 评论 -
Linux系统调用之二——调用机制
无论是GUI(用户图形接口)、应用程序,还是命令行接口最终都需要使用系统调用来实现。当我们要打开文件(open)然后进行写入(write)或者分配内存(malloc)时,此时将会切换到内核态,虽然我们并察觉不到;之后内核对调用进行检查,如果通过,则按照指令执行相应的操作,分配相应的资源。原创 2022-01-09 15:47:34 · 3816 阅读 · 0 评论 -
内核态do_gettimeofday()、用户态gettimeofday()获取指令执行时间
获取通过do_gettimeofday()或者gettimeofday()获取系统时间,进一步得到指令执行时间原创 2021-07-29 11:53:59 · 8357 阅读 · 1 评论 -
warning: implicit declaration of function ‘ioctl‘ [-Wimplicit-function-declaration]
授人以鱼不如授人以渔,解决这类warning告警问题。原创 2021-01-26 09:34:00 · 5307 阅读 · 0 评论 -
insmod: ERROR: could not insert module helloworld.ko: Operation not permitted
前面有说过如何创建字符设备的文章,原创 2021-01-08 11:40:09 · 2993 阅读 · 0 评论 -
浅析wake_up_interruptible及wait_event_interruptible
从函数名字上,就可以看出来这两个函数是唤醒有关的函数。实际上他们的功能:**唤醒注册到等待队列上的进程**原创 2021-03-04 20:11:43 · 3008 阅读 · 1 评论 -
空指针引用,导致linux内核panic(重启)
空指针引用,导致linux内核panic(重启)Kernel panic - not syncing: Fatal exceptionerror: Oops - bad mode: 0原创 2021-03-18 20:28:57 · 3097 阅读 · 0 评论 -
多线程并发时原子操作的简单探究
所谓**原子操作**,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。原创 2021-12-15 23:00:03 · 625 阅读 · 0 评论