zhousiyv 发表于 2014-09-09 14:25

关于usb模块中创建设备节点

ldd3的这一行

https://github.com/martinezjavier/ldd3/blob/master/usb/usb-skeleton.c#L287
文档里(https://www.kernel.org/doc/htmldocs/usb/API-usb-register-dev.html)
提到this should be called by all USB drivers that use the USB major number.

我的问题是, 可以不用the USB Major number, 自己分配一个主设备吗?

humjb_1983 发表于 2014-09-09 19:13

呵呵,这个需求不是很明白,这个函数的作用是注册usb设备,usb设备的major都是分配好的,如何不用?

linuxfellow 发表于 2014-09-09 21:17

回复 1# zhousiyv
理论上可以,现在新的驱动都不再使用设备号。但是那样的话,你就饶过了内核里提供的传统的驱动接口。你就得自己考虑用户如何不通过设备号找到设备文件,进而读写。


   

Tinnal 发表于 2014-09-09 21:19

真的不明百LZ相干嘛,想乱改改学点东西?

这个函数别人根本没有让你的传Major和minor。那人只不过把内部实现说一下而已。
你要改,你可以把整个usb/core/file.c的功能自己都重写呀,反正也不复杂。

Tinnal 发表于 2014-09-09 21:27

linuxfellow 发表于 2014-09-09 21:17 static/image/common/back.gif
回复 1# zhousiyv
理论上可以,现在新的驱动都不再使用设备号。但是那样的话,你就饶过了内核里提供的传 ...

没这回事吧?不要设备号,除非直接使用sys、netlink或proc接口。如果是这样,就又回到以前的devfs上去了。社区抛弃这种直接由内核创建设备文件的方式是有他们的考虑的,设备号还是要的,这样才体现设备驱动跟设备名称的分离。

linuxfellow 发表于 2014-09-09 22:24

回复 5# Tinnal
标准做法是这样,如果有人一定要绕过设备号,他就可以那样写


   

zhousiyv 发表于 2014-09-09 23:01

回复 5# Tinnal


试了一下,是可以的,其实就是alloc_chrdev_region一下, 不是绕开设备号什么的. 可以说说不用设备号怎么弄吗, 直接给链接也行.

arm-linux-gcc 发表于 2014-09-10 20:53

本帖最后由 arm-linux-gcc 于 2014-09-10 20:55 编辑

回复 7# zhousiyv

调用usb_register_dev,具体看usb-skeleton.c(这个是个框架性的例子,写自己的usb设备驱动时可以参照它)

linuxfellow 发表于 2014-09-10 22:02

回复 4# Tinnal
新的驱动构架下,主设备号已经失去了其原来的意义,系统不再用主设备号去匹配设备,而是用设备名的驱动名去匹配。如果驱动能找到同样名字的设备,就是一个匹配,相应的设备驱动就会被加载,反之亦然。至于接口是通过/dev/drvname 还是通过sysfs, 有驱动程序决定。Device_create有一个选项:是否生成设备文件(/dev/drvname). 所以新驱动构件下,主设备号的目的只是为了保证设备名的唯一性,失去了原来的意义。给不给没有任何影响。

   

Tinnal 发表于 2014-09-10 22:50

linuxfellow 发表于 2014-09-10 22:02 static/image/common/back.gif
回复 4# Tinnal
新的驱动构架下,主设备号已经失去了其原来的意义,系统不再用主设备号去匹配设备,而是用 ...

首先,你前半句说的是设备的管理,而非用用户应用和驱动的接口。用windows来说类比设备管理器。
其次,sys目录的主要目的,更多的是向应用暴露内核的信息和参数而非应用接口。用windows来类比,就是设备管理器里头看到的设备参数,当然,某些参数也是可以配的,但我们还是会认为这是参数,而不是设备的对外接口。

最后,Linux确实慢慢的演变。至少,目前看到已经有很多的内核功能(虽然不是驱动)如route,udev采用了netlink,cgroup、ftrace 等采用了建立一个纯虚拟的文件系统。而非以前的系统调用或proc接口。驱动接口的趋势是什么样的,不好说,但目前/dev目录还是驱动的主要访问方式,而/dev目录目前的实现,就是需要主设备号来找设备的。
页: [1] 2
查看完整版本: 关于usb模块中创建设备节点