驱动模块
文章平均质量分 59
Peter9412
一个比较菜的程序员
展开
-
2021-11-19 内核几种常见的并发控制机制
内核几种常见的并发控制机制 1.中断屏蔽 2.原子量操作 3.自旋锁基于忙等待的并发控制机制 4.信号量基于阻塞的并发控制机制 5.互斥锁基于阻塞的并发控制机制原创 2021-11-19 17:59:06 · 201 阅读 · 0 评论 -
2021-11-14注册字符设备和字符设备驱动
注册字符设备 首先应该定义两个结构体:1.字符设备结构体,2.对应文件操作的结构体 1.字符设备结构体如下: struct cdev { struct kobject kobj;//表示该类型实体是一种内核对象 struct module *owner;//填THIS_MODULE,表示该字符设备从属于哪个内核模块 const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址 struct list_head list;//链表指针域 dev_原创 2021-11-14 15:59:09 · 220 阅读 · 0 评论 -
2021-11-14字符设备驱动基础
字符设备驱动基础 1.Linux内核对设备的分类 分为七类文件种类:1.-:普通文件 2.d:目录文件 3.p:管道文件 4.s:本地socket文件 5.l:链接文件 6.c:字符设备 7.b:块设备 上述7类中的1,2,5三种在外存中是有具体的内容,即包含文件内容,文件名和元信息inode(元信息是指时间戳或者大小等信息)三种信息,并且其中5链接文件中的软链接直接指向文件,其文件内容是指向的地址,而硬链接是指文件内容和元信息是用的同一个,但是文件名又创建了一个(即起了一个别名)。而上述的其余四类在外存中原创 2021-11-14 12:58:52 · 327 阅读 · 0 评论 -
2021-11-13模块参数,依赖以及模块编程和应用编程区别
内核模块–参数和依赖 1.模块传参 在insmod xxx.ko加载模块时,可以在后面添加参数,类似于应用编程中的主函数传参。只是这里的入口函数没有参数列表,因此参数需要用对应的函数来设置参数,即module_param(接收的全局变量名,传递的参数类型,权限一般为0664)用来传递单个数据,module_param_array(接收的全局变量名,传递的参数类型,存放数组变量大小的地址即&num(当确定传参个数不越界可以写NULL),权限一般为0664)。代码例子如下: #include <l原创 2021-11-13 18:46:59 · 1432 阅读 · 0 评论 -
2021-11-13内核模块编译
内核模块编译方法 新功能加载 分为静态加载和动态加载两部分。 1.静态加载 将新的驱动代码即.c文件加到内核源码的相应驱动目录下(即同一目录下),并修改同一目录下的Makefile和Kconfig文件,并且在make menuconfig图形化界面下选中该文件<*>,以保证可以编译进内核源码。这种方法在内核启动时候就会运行该驱动代码。 2.动态加载 2.1新功能代码即.c文件放在内核源码的相应驱动目录下(即同一目录下),与静态加载类似,区别在于make menuconfig图形化界面下选中该文件原创 2021-11-13 10:59:03 · 877 阅读 · 0 评论