免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2397 | 回复: 1
打印 上一主题 下一主题

mknod和register_chrdev_region()得到的设备号有什么区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-02 15:26 |只看该作者 |倒序浏览
我参看这里:
http://apps.hi.baidu.com/share/detail/33924984

这个把内存当做是字符设备驱动有个问题看不懂,
C/C++ code
static int __init memdev_init(void)  
{  
         int result;  
         int err;  
         int i;  
         
         //申请设备号  
         dev_t devno = MKDEV(251, 0);  
         
         if(mem_major)  
                   result= register_chrdev_region(devno, MEMDEV_NUM, "memdev");//注意静态申请的dev_t参数和动态dev_t参数的区别  
         else{        //静态直接传变量,动态传变量指针  
                   result= alloc_chrdev_region(&devno, 0, MEMDEV_NUM, "memdev");  
                   mem_major= MAJOR(devno);  
         }  
         
         if(result< 0){  
                   printk("can'tget major devno:%d\n", mem_major);  
                   returnresult;  
         }  




驱动如上,但是手动创建的设备文件是: #mknod /dev/memdev0 c 254 0

为什么驱动里注册的主设备号不是254 而且251 ?谢谢

论坛徽章:
0
2 [报告]
发表于 2012-03-05 09:57 |只看该作者
这两个函数都不是创建设备号,register_chrdev_region 是根据你提供的设备号范围注册设备号,如
static struct char_device_struct *
__register_chrdev_region(unsigned int major, unsigned int baseminor,
                           int minorct, const char *name)
注释:
/* Register a single major with a specified minor range */
(register_chrdev_region() 调用__register_chrdev_region())
而mknod是根据你提供的住设备号及次设备号,创建一个设备文件而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP