android /proc/bus/usb/devices,如何将/ proc/bus/usb/devices条目映射到/ dev/sdX设备?

这不是那么容易,也没有很好的文档记录(至少从一个高层次的角度来看)。以下内容应该可以在3.1以上版本的内核中使用(至少)。

我发现最简单(可能不是唯一的方法)是从块设备条目导航并测试每个块设备,直到找到与USB条目匹配的设备。

例如,假设在/sys/block块设备,如sdb,你可以找到硬件设备描述符条目是这样的:

# cd /sys/block

# cd `readlink sdb`; cd ../../../../../..

# ls -l

total 0

drwxr-xr-x 6 root root 0 Aug 14 10:47 1-1:1.0

-rw-r--r-- 1 root root 4096 Aug 14 10:52 authorized

-rw-r--r-- 1 root root 4096 Aug 14 10:52 avoid_reset_quirk

-r--r--r-- 1 root root 4096 Aug 14 10:47 bcdDevice

-rw-r--r-- 1 root root 4096 Aug 14 10:49 bConfigurationValue

-r--r--r-- 1 root root 4096 Aug 14 10:47 bDeviceClass

-r--r--r-- 1 root root 4096 Aug 14 10:49 bDeviceProtocol

-r--r--r-- 1 root root 4096 Aug 14 10:49 bDeviceSubClass

-r--r--r-- 1 root root 4096 Aug 14 10:49 bmAttributes

-r--r--r-- 1 root root 4096 Aug 14 10:49 bMaxPacketSize0

-r--r--r-- 1 root root 4096 Aug 14 10:49 bMaxPower

-r--r--r-- 1 root root 4096 Aug 14 10:49 bNumConfigurations

-r--r--r-- 1 root root 4096 Aug 14 10:49 bNumInterfaces

-r--r--r-- 1 root root 4096 Aug 14 10:49 busnum

-r--r--r-- 1 root root 4096 Aug 14 10:52 configuration

-r--r--r-- 1 root root 65553 Aug 14 10:47 descriptors

-r--r--r-- 1 root root 4096 Aug 14 10:52 dev

-r--r--r-- 1 root root 4096 Aug 14 10:49 devnum

-r--r--r-- 1 root root 4096 Aug 14 10:52 devpath

lrwxrwxrwx 1 root root 0 Aug 14 10:47 driver -> ../../../../../../bus/usb/drivers/usb

drwxr-xr-x 3 root root 0 Aug 14 10:52 ep_00

-r--r--r-- 1 root root 4096 Aug 14 10:47 idProduct

-r--r--r-- 1 root root 4096 Aug 14 10:47 idVendor

-r--r--r-- 1 root root 4096 Aug 14 10:52 ltm_capable

-r--r--r-- 1 root root 4096 Aug 14 10:47 manufacturer

-r--r--r-- 1 root root 4096 Aug 14 10:49 maxchild

lrwxrwxrwx 1 root root 0 Aug 14 10:52 port -> ../1-0:1.0/port1

drwxr-xr-x 2 root root 0 Aug 14 10:52 power

-r--r--r-- 1 root root 4096 Aug 14 10:47 product

-r--r--r-- 1 root root 4096 Aug 14 10:52 quirks

-r--r--r-- 1 root root 4096 Aug 14 10:47 removable

--w------- 1 root root 4096 Aug 14 10:52 remove

-r--r--r-- 1 root root 4096 Aug 14 10:47 serial

-r--r--r-- 1 root root 4096 Aug 14 10:49 speed

lrwxrwxrwx 1 root root 0 Aug 14 10:47 subsystem -> ../../../../../../bus/usb

-rw-r--r-- 1 root root 4096 Aug 14 10:47 uevent

-r--r--r-- 1 root root 4096 Aug 14 10:52 urbnum

-r--r--r-- 1 root root 4096 Aug 14 10:49 version

鉴于上述情况,您应该能够将一个或多个USB设备字段映射到/proc/bus/usb/devices的内容。我发现,序列号是最容易匹配,因此,如果你是以上cat serial,你会得到相同的序列号为上市:

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0

D: Ver= 2.00 Cls=00(>ifc) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P: Vendor=0781 ProdID=5575 Rev=01.26

S: Manufacturer=SanDisk

S: Product=Cruzer Glide

S: SerialNumber=4C530100801115115112

C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA

I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

如果你去/sys/block,你可以列出完整每个设备的存储驱动程序sysfs条目中主机设备条目的路径。通常情况下,我这样做是使用一些编程方法,而不是在shell提示符下,但在这里你可以看到链接本身:

# ls -l sd*

lrwxrwxrwx 1 root root 0 Aug 14 10:45 sda -> ../devices/pci0000:00/0000:00:10.0/host32/target32:0:0/32:0:0:0/block/sda

lrwxrwxrwx 1 root root 0 Aug 14 10:47 sdb -> ../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host33/target33:0:0/33:0:0:0/block/sdb

请注意,你不能让你的链接显示的数字做任何假设。根据总线子系统的不同,映射可能会非常不同。例如,在树莓派,它看起来像这样:

# ls -l sd*

lrwxrwxrwx 1 root root 0 Aug 13 23:54 sda -> ../devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/host3/target3:0:0/3:0:0:0/block/sda

lrwxrwxrwx 1 root root 0 Aug 13 23:54 sdb -> ../devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/host4/target4:0:0/4:0:0:0/block/sdb

所以,最好的办法是采取在上面列出的方法和导航相对于存储驱动程序,找到USB设备描述符。

我很好奇这个更权威的答案。上述方法是通过反复试验得出的,但一直在努力研究几种不同的设备和内核。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值