当前位置: 技术问答>linux和unix
字符设备驱动简单问题
来源: 互联网 发布时间:2017-01-19
本文导语: #define MEMDEV_NR_DEVS 2 //表示设备数 #define MEMDEV_MAJOR 251 //表示主设备号 dev_t devno=MKDEV(MEMDEV_MAJOR,0);//通过主设备号 与 次设备号 构造新的设备号 register_chrdev_region(devno,2,"memdev"); //devno表示要申请的设备号 2表示...
#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;
}
#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 不是一样的效果么?