Linux驱动 字符设备

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()

取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!