安排主编号最好的方式, 我们认为, 是缺省使用动态分配, 而留给自己在加载时指定主编号的选项权, 或者甚至在编译时. scull 实现以这种方式工作; 它使用一个全局变量, scull_major, 来持有选定的编号(还有一个 scull_minor 给次编号). 这个变量初始化为 SCULL_MAJOR, 定义在 scull.h. 发布的源码中的 SCULL_MAJOR 的缺省值是 0, 意思是"使用动态分配". 用户可以接受缺省值或者选择一个特殊主编号, 或者在编译前修改宏定义或者在 insmod 命令行指定一个值给 scull_major. 最后, 通过使用 scull_load 脚本, 用户可以在 scull_load 的命令行传递参数给 insmod.

这是我们用在 scull 的源码中获取主编号的代码:

if (scull_major) {  dev = MKDEV(scull_major, scull_minor);  result = register_chrdev_region(dev, scull_nr_devs, "scull"); } else {  result = alloc_chrdev_region(&dev, scull_minor, scull_nr_devs, "scull");  scull_major = MAJOR(dev); } if (result < 0) {  printk(KERN_WARNING "scull: can't get major %d\n", scull_major);  return result; } 

本书使用的几乎所有例子驱动使用类似的代码来分配它们的主编号.

posted on 2011-12-06 23:06  风行雪舞  阅读(163)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量