免费注册 查看新帖 |

Chinaunix

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

[内核入门] 关于usb模块中创建设备节点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-09 14:25 |只看该作者 |倒序浏览
ldd3的这一行

https://github.com/martinezjavie ... 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, 自己分配一个主设备吗?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-09-09 19:13 |只看该作者
呵呵,这个需求不是很明白,这个函数的作用是注册usb设备,usb设备的major都是分配好的,如何不用?

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
3 [报告]
发表于 2014-09-09 21:17 |只看该作者
回复 1# zhousiyv
理论上可以,现在新的驱动都不再使用设备号。  但是那样的话,你就饶过了内核里提供的传统的驱动接口。你就得自己考虑用户如何不通过设备号找到设备文件,进而读写。


   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-09-09 21:19 |只看该作者
真的不明百LZ相干嘛,想乱改改学点东西?

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

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
5 [报告]
发表于 2014-09-09 21:27 |只看该作者
linuxfellow 发表于 2014-09-09 21:17
回复 1# zhousiyv
理论上可以,现在新的驱动都不再使用设备号。  但是那样的话,你就饶过了内核里提供的传 ...


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

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
6 [报告]
发表于 2014-09-09 22:24 |只看该作者
回复 5# Tinnal
标准做法是这样,如果有人一定要绕过设备号,他就可以那样写


   

论坛徽章:
0
7 [报告]
发表于 2014-09-09 23:01 |只看该作者
回复 5# Tinnal


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

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-09-10 20:53 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-09-10 20:55 编辑

回复 7# zhousiyv

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

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
9 [报告]
发表于 2014-09-10 22:02 |只看该作者
回复 4# Tinnal
新的驱动构架下,主设备号已经失去了其原来的意义,系统不再用主设备号去匹配设备,而是用设备名的驱动名去匹配。如果驱动能找到同样名字的设备,就是一个匹配,相应的设备驱动就会被加载,反之亦然。至于接口是通过/dev/drvname 还是通过sysfs, 有驱动程序决定。Device_create有一个选项:是否生成设备文件(/dev/drvname). 所以新驱动构件下,主设备号的目的只是为了保证设备名的唯一性,失去了原来的意义。给不给没有任何影响。

   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
10 [报告]
发表于 2014-09-10 22:50 |只看该作者
linuxfellow 发表于 2014-09-10 22:02
回复 4# Tinnal
新的驱动构架下,主设备号已经失去了其原来的意义,系统不再用主设备号去匹配设备,而是用 ...


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

最后,Linux确实慢慢的演变。至少,目前看到已经有很多的内核功能(虽然不是驱动)如route,udev采用了netlink,cgroup、ftrace 等采用了建立一个纯虚拟的文件系统。而非以前的系统调用或proc接口。驱动接口的趋势是什么样的,不好说,但目前/dev目录还是驱动的主要访问方式,而/dev目录目前的实现,就是需要主设备号来找设备的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP