当前位置: 技术问答>linux和unix
次设备号问题,大家指教。谢谢
来源: 互联网 发布时间:2016-04-15
本文导语: 次设备号是如何分配的,看了v4l2中的videodev.c只看到了注册主设备号,在open时直接就用unsigned int minor = iminor(inode);接收次设备号了。这个次设备号是怎么来的,是自动分配的吗?要怎么完成次设备号的设置? ...
次设备号是如何分配的,看了v4l2中的videodev.c只看到了注册主设备号,在open时直接就用unsigned int minor = iminor(inode);接收次设备号了。这个次设备号是怎么来的,是自动分配的吗?要怎么完成次设备号的设置?
|
在具体的v4l2实现代码里需要调用
int video_register_device(struct video_device *vfd, int type, int nr)
* @nr: which device number (0 == /dev/video0, 1 == /dev/video1, ...
* -1 == first free)
nr就是对应的此设备号。如果是-1的话,会自动选择第一个未用的。
int video_register_device(struct video_device *vfd, int type, int nr)
* @nr: which device number (0 == /dev/video0, 1 == /dev/video1, ...
* -1 == first free)
nr就是对应的此设备号。如果是-1的话,会自动选择第一个未用的。
|
在2.4.18的内核里面,video_register_device()有如下一段程序:
...
/* pick a minor number */
down(&videodev_register_lock);
if (-1 == nr) {
/* use first free */
for(i=base;iminor=i;
up(&videodev_register_lock);
...
这段程序确定了设备的次设备号。
从这段程序可以看出,如果驱动调用本函数时没有指定次设备号,则自动分配一个,否则,根据驱动给定的参数确定
注册函数的末尾调用了devfs_register来注册设备,传递的参数就是video的主设备号81和上面得到的次设备号
...
/* pick a minor number */
down(&videodev_register_lock);
if (-1 == nr) {
/* use first free */
for(i=base;iminor=i;
up(&videodev_register_lock);
...
这段程序确定了设备的次设备号。
从这段程序可以看出,如果驱动调用本函数时没有指定次设备号,则自动分配一个,否则,根据驱动给定的参数确定
注册函数的末尾调用了devfs_register来注册设备,传递的参数就是video的主设备号81和上面得到的次设备号
|
2.6下次设备号是用来区分具体的设备的吧(比如说有2个U盘它们的主设备号相同,但次设备号不同)
内核根本不知道次设备号的存在
可能是这样的
内核根本不知道次设备号的存在
可能是这样的