Linux驱动 字符设备
2023-06-07
36
0
Linux驱动按类型分类字符设备,块设备,网络设备和其它设备。
字符设备
字符设备驱动编写时按如下步骤:
1.申请设备号
2.设备初始化
3.设备注册
设备号
Linux字符设备驱动需要一个设备号,这个设备号为一个32位的无符号整数,其中高12位代表主设备号,低20位表示次设备号。
主设备号在形式上标识这个驱动程序,即此驱动程序可以驱动的硬件设备。
次设备号是用来标识此驱动程序实际驱动的那个设备。
所以可以这样说,凡是使用同一驱动程序的硬件其主设备号是相同的,而次设备号是不相同的。
设备号相关宏函数
使用MKDEV(主设备号,次设备号)来生成某一个设备号。
unsigned int devno = MKDEV(1,2); //生成设备号
unsigned int mdevno = MAJOR(devno); //取得主设备号
unsigned int mdevno = MINOR(devno); //获取次设备号
即生成一个设备号,其中主设备号为1,次设备号为2。
使用MAJOR获取主设备号
使用MINOR获取次设备号
设备号的申请
设备号可以以静态的方式申请,即编写驱动程序时手动指定,也可以动态申请即由系统自动分配。
静态的方式可能因设备号已存在导致申请失败。
动态申请设备号的函数为 register_chrdev_region()
静态申请设备号的函数为 alloc_chrdev_region()
设备初始化
设备初始化函数为 cdev_init()
设备注册
cdev_add()