Linux字符设备驱动程序的框架(新写法)

本文深入探讨Linux驱动注册函数的变化,从老版本的简单使用到新版本引入的MAJOR和MINOR宏,解释了如何更有效地管理主设备号和次设备号。通过具体代码示例,清晰地展示了新旧版本之间的区别和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是老版本内核的的Linux驱动注册函数写法:

major = register_chrdev(0, "hello", &hello_fops); /* (major,  0), (major, 1), ..., (major, 255)都对应hello_fops */


新版本内核Linux驱动注册函数写法
#define MAJOR(devid) ((unsigned int) ((devid) >> 20))  /* 主设备号 */

#define MINOR(devid) ((unsigned int) ((devid) & MINORMASK))   /* 次设备号,这个定义在内核头文件中 */


static struct cdev hello_cdev;   /* 定义cdev类型的一个结构体变量 */



dev_t  devid;                                           / * 存放主设备号和次设备号 主设备号为高12位,次设备号为低20位 */
MINOR(devid)                         /*取出次设备号*/
MAJOR(devid)                      /*取出主设备号*/
MKDEV(major, 0)                  /*把主设备号和次设备号组合成一个dev_t类型的设备号,这里取得次设备号是0*/

下面给出代码就一目了然了:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值