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

字符设备驱动简单问题
#define MEMDEV_NR_DEVS 2 //表示设备数
#define MEMDEV_MAJOR 251 //表示主设备号

dev_t devno=MKDEV(MEMDEV_MAJOR,0);//通过主设备号 与 次设备号 构造新的设备号

register_chrdev_region(devno,2,"memdev"); //devno表示要申请的设备号 2表示设备号的个数 

上面代码表示 有 2个两个设备号 ,也就是说会有两个设备

打开设备操作 mem_open(struct inode *inode,struct file *filp)
{
  struct mem_dev *dev; //设备描述结构
  int num=MINOR(inode->i_rdev) ;  
  if(num>= MEMDEV_NR_DEVS) //这是什么意思??? MEMDEV_NR_DEVS为2 ,设备为2个  
  //num返回的次设备号应该是0和 1啊,,怎么是num>MEMDEV_NR_DEVS
  而不是num>MEMDEV_NR_DEVS-1 ,,也就说次备号不能大于1啊,,
  总共才两个次设备号 ,,第一个是0,第二个是1,,,
  return -ENODEV;

}








------解决方案--------------------
当然是2了,你没看到if条件满足会错误返回吗!如果换成1,那其中一个设备不就会错误返回了 

------解决方案--------------------
楼主没看仔细吧?代码里写的是“num>= MEMDEV_NR_DEVS”,这个和num >= MEMDEV_NR_DEVS -1 不是一样的效果么?