这是老版本内核的的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类型的一个结构体变量 */

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


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

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

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


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


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


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

相关文章: