当前位置:嗨网首页>书籍在线阅读

07-块设备驱动注册与注销

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.2.4 块设备驱动注册与注销

块设备驱动中的第一个工作通常是注册它们自己到内核,完成这个任务的函数是register_ blkdev(),其原型为:

int register_blkdev(unsigned int major, const char *name);

major参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被显示。如果major为0,内核会自动分配一个新的主设备号,register_blkdev()函数的返回值就是这个主设备号。如果register_blkdev()返回一个负值,表明发生了一个错误。

与register_blkdev()对应的注销函数是unregister_blkdev(),其原型为:

int unregister_blkdev(unsigned int major, const char *name);

这里,传递给register_blkdev()的参数必须与传递给register_blkdev()的参数匹配,否则这个函数返回-EINVAL。

值得一提的是,在Linux 2.6内核中,对register_blkdev()的调用完全是可选的,register_blkdev()的功能已随时间正在减少,这个调用最多只完成两件事。

① 如果需要,分配一个动态主设备号。

② 在/proc/devices中创建一个入口。

在将来的内核中,register_blkdev()可能会被去掉。但是目前的大部分驱动仍然调用它。代码清单13.8给出了一个块设备驱动注册的模板。

代码清单13.8 块设备驱动注册模板

1 xxx_major = register_blkdev(xxx_major, "xxx");

2 if (xxx_major <= 0) { / 注册失败 /

3 printk(KERN_WARNING "xxx: unable to get major number\n");

4 return -EBUSY;

5 }