免费注册 查看新帖 |

Chinaunix

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

linux设备驱动程序相关问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-09 21:37 |只看该作者 |倒序浏览
请问 关于函数 int register_chrdev_region(dev_t first,unsigned int count,char *name);这个函数的参数具体是什么意思
特别是第二个参数,书上说是所请求的连续设备编号的个数。是不是说要请求多个编号,一个编号对应一个设备,也就是说要用于多个设备吗?

论坛徽章:
0
2 [报告]
发表于 2015-01-09 22:12 |只看该作者
总算明白了一点
这个first参数的高12位已经制定了主设备号,而后面的count是用来指定次设备号的,因为内核中可能已经分配了很多以该主设备号为主设备号的设备编号,所以已经用了许多次设备号,给一个范围让它去找,一直找到一个没有被分配的次设备号

论坛徽章:
0
3 [报告]
发表于 2015-01-09 22:34 |只看该作者
又有些模糊了,
  1. static struct char_device_struct  
  2.     {  
  3.         struct char_device_struct *next;    // 指向散列冲突链表中的下一个元素的指针  
  4.         unsigned    int major;              // 主设备号  
  5.         unsigned    int baseminor;          // 起始次设备号  
  6.         int minorct;                        // 设备编号的范围大小  
  7.         char    name[64];                   // 处理该设备编号范围内的设备驱动的名称  
  8.         struct file_operations *fops;       // 没有使用  
  9.         struct cdev *cdev;                  // 指向字符设备驱动程序描述符的指针  
  10.     }*chrdevs[CHRDEV_MAJOR_HASH_SIZE];  
复制代码
这个结构体是对应一个字符设备的,不解为什么次设备号是一个范围,那该如何引用这个设备呢

论坛徽章:
0
4 [报告]
发表于 2015-01-09 22:35 |只看该作者
为什么linux驱动开发板块这么冷清啊,让我一个人自说自唱啊{:3_184:}

论坛徽章:
0
5 [报告]
发表于 2015-01-26 14:09 |只看该作者
以32位机为例,其中高12表示主设备号,低20为表示次设备号。
该结构体的主要目的是分配一个主设备号(一个主设备号代表一类设备,其可以包含多个具体设备,因此可以在该主设备号下申请多个此设备号来代表这些具体的设备),起始次设备号默认为0,次设备号为0——1048575,不过通常用0--255.关于设备编号的范围,我个人感觉应该是关于该类设备设备相关的具体设备的估计值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP