本节讲解了register_chrdev函数,并且重点讲解了内核内部对字符设备驱动的管理机制。

5.2.7.1、register_chrdev(#include <linux/fs.h>)

(1)作用,驱动向内核注册自己的file_operations。驱动自己通过调用内核提供的register_chrdev函数向内核注册自己后,应用程序就可以使用这个驱动了
(2)参数
(3)inline和static

static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)
register_chrdev(设备号, 设备名字, my_file_operations)

static: 防止函数名字重复
inline: 函数是不能定义在头文件里面的(头文件被包含时会原地展开,造成重复定义),用inline(很短的函数用inline,函数开销变小,提高效率)可以只把函数体替换过去,不把函数名替换过去。
const char * : const向函数内部传参 ,字符串指针
const struct file_operations:const输入型参数

5.2.7.2、内核如何管理字符设备驱动

(1)内核中有一个数组[255]用来存储注册的字符设备驱动。(设备号是有限的)
(2)register_chrdev内部将我们要注册的驱动的信息(主要是 )存储在数组中相应的位置
(3)cat /proc/devices查看内核中已经注册过的字符设备驱动(和块设备驱动)

cat /proc/devices

(4)好好理解主设备号(major)的概念
设备号(1~255)可以让内核分配;也可以自己指定,如果指定的已经被占用,则注册失败--》 身份证号

5.2.7.3、回顾和展望
(1)回顾:inline、static等关键字
(2)回顾:/proc文件系统的作用
(3)展望:将来深入学习驱动时可以去跟register_chrdev到内部看,验证我们上面讲的原理

posted on 2018-07-01 15:40  Ocean&Star  阅读(157)  评论(0编辑  收藏  举报