Chinaunix

标题: [请教]块设备驱动的一个问题 [打印本页]

作者: wubingzheng    时间: 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 编辑 ]
作者: wubingzheng    时间: 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,从而安装驱动)。

我不知道上面说的哪个地方出问题了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2