免费注册 查看新帖 |

Chinaunix

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

[请教]块设备驱动的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-20 16:01 |只看该作者 |倒序浏览
ldd3中有个块设备的例子 sbull.

sbull的例子里,在sbull_init中,调用了setup_device ,后者又调用 add_disk,来注册了四个设备。

add_disk在返回前是要调用读写方法读取设备上的一块内容的。 也就是说,在调用add_disk前,必须指定具体的设备(sbull的具体设备是一块指定的内存)。

那是不是说,在注册驱动时,就一定要确定下来所有的设备,而不是先注册驱动,再由用户在将来随意添加设备??

mknod和add_disk都可以在/dev下创建一个节点。这两者之间是什么关系呢?


不知道我把问题描述清楚了没有.

[ 本帖最后由 wubingzheng 于 2007-4-21 10:23 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-04-21 11:05 |只看该作者

回复 #1 wubingzheng 的帖子

我把问题换个问法吧:


2.4下,f_ops是在register_blkdev()的时候就跟主设备号绑定在一起了,系统维护的全局变量blk_dev_struct 数组,也把request跟主设备号联系起来。  所以当用户打开一个设备时,内核能够通过主设备号找到所有的信息。

2.6下,register_blkdev()的参数里没有了 f_ops, 内核也不维护全局数组了。 这一切都是由一个gendisk变量 通过add_disk(),把f_ops, request和主设备号联系起来。

问题就是:add_disk()在返回前,要调用读写方法(request)来实际读取设备的一部分。也就是说如果要调用add_disk,就一定要先确定下来具体的设备。(假如USB也是块设备的话,那么就是说,如果要调用add_disk,就要读取usb的数据,就一定要先把usb插上,这样才能add_disk,从而安装驱动)。

我不知道上面说的哪个地方出问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP