日期:2014-05-16  浏览次数:21017 次

mknod和register_chrdev_region()得到的设备号有什么区别?
我参看这里:
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 ?谢谢

------解决方案--------------------
探讨

顺便问下,makefile中,赋值KDIR:=/lib/modules/$(shell uname -r)/build 到底是 := ,还是等于号?