未知usb网卡挂载驱动的问题。

蜗牛爬珠峰 2018-10-18 04:36:09
我现在有一个usb设备,连接到Windows下,安装驱动之后会新增一个RNDIS的网络设备进行通讯。
现在我连接到 Linux 下,希望同样能作为网络设备通讯;但 idVendor 和 idProduct 对于 Linux 是未知的。
我连接到一个虚拟机 Ubuntu,有以下结果:

$ dmesg | tail
[ 79.612133] usb 2-2: new full-speed USB device number 3 using ohci-pci
[ 79.937340] usb 2-2: New USB device found, idVendor=238b, idProduct=0a21
[ 79.937343] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 79.937344] usb 2-2: Product: DMR Radio
[ 79.937346] usb 2-2: Manufacturer: Hytera Communications
[ 80.282770] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 80.286007] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 80.399206] usbcore: registered new interface driver cdc_ether
[ 80.404402] usbcore: registered new interface driver rndis_host
[ 80.421516] usbcore: registered new interface driver rndis_wlan

如果我连接Beaglebone Black到Ubuntu,能得到这样的结果:

[18589.177391] usb 1-1: new high-speed USB device number 3 using ehci-pci
[18589.350159] usb 1-1: New USB device found, idVendor=1d6b, idProduct=0104
[18589.350162] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[18589.350164] usb 1-1: Product: BeagleBoneBlack
[18589.350166] usb 1-1: Manufacturer: BeagleBoard.org
[18589.350167] usb 1-1: SerialNumber: 1118BBBK0915
[18589.378733] rndis_host 1-1:1.0 eth0: register 'rndis_host' at usb-0000:00:0b.0-1, RNDIS device, c4:f3:12:6a:2e:53
[18589.390869] cdc_ether 1-1:1.2 eth1: register 'cdc_ether' at usb-0000:00:0b.0-1, CDC Ethernet Device, c4:f3:12:6a:2e:56
[18589.395434] cdc_acm 1-1:1.4: ttyACM0: USB ACM device
[18589.509924] rndis_host 1-1:1.0 enxc4f3126a2e53: renamed from eth0
[18589.584217] cdc_ether 1-1:1.2 enxc4f3126a2e56: renamed from eth1
[18589.656674] IPv6: ADDRCONF(NETDEV_UP): enxc4f3126a2e53: link is not ready
[18589.724689] IPv6: ADDRCONF(NETDEV_UP): enxc4f3126a2e56: link is not ready

看起来如果能让他调用相应的驱动,就可以将我的未知设备挂载为网络设备,利用 udev rules 什么的。我也尝试使用 /sys/bus/usb/drivers/rndis_host/bind 文件,但这方面是新手,不太会。

其他相关的:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 238b:0a21
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

$ lsmod | grep usbnet
usbnet 45056 3 rndis_host,cdc_ether,rndis_wlan
mii 16384 1 usbnet



$ usb-devices
--------- other usb devices ----

T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=fe Prot=fe MxPS= 8 #Cfgs= 1
P: Vendor=238b ProdID=0a21 Rev=00.00
S: Manufacturer=Hytera Communications
S: Product=DMR Radio
C: #Ifs= 3 Cfg#= 1 Atr=c0 MxPwr=4mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=ff Driver=(none)
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
...全文
888 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
/sys/bus/usb/drivers/rndis_host/bind是可以这样用的,你的想法没错
可以先到/sys/bus/usb/drivers/usb目录,查看idproduct和idvendor,是你自己的设备
然后进入该目录,比如是1-1.1之类的,进去后会看到各个不同的接口地址,应当是1-1.1:1.0 1-1.1:1.1之类的
再进入该目录,然后才能找到rndis_host的对应接口,有可能是多个,rndis_host的接口类型bInterfaceClass,bInterSubclass,bInterProtocol分别应该是e0,01和03,找到设备后再来个echo "1-1.1:1.0" >/sys/bus/usb/drivers/rndis_host/bind就可以绑定该设备为rndis_host来驱动,如果能驱起来的话,那么你应该会看到网卡之类的东西起来了,如果想自动的,那么你当然可以在/etc/udev/rules.d里编辑自己文件来加载文件驱动,做法你可以去查看udev的规则,或者把你的echo ....>bind指令放入自启脚本来完成,不过自启脚本换口不管用
Wenxy1 2018-10-29
  • 打赏
  • 举报
回复
idVendor 和 idProduct是未知的,运行时硬件这些id是已知的,insmod时做为参数传给驱动呢?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧