首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >USB设备的伪序列号

问USB设备的伪序列号
EN

Unix & Linux用户
提问于 2010-12-03 13:03:43
回答 3查看 7K关注 0票数 9

我有一部手机通过USB连接到我的电脑上。

查看设备信息时,使用

代码语言:javascript
复制
sudo udevadm info --attribute-walk

产品和供应商id显示得很好,但不存在ATTR{串行}。我正在使用的应用程序(Android亚行)需要设备报告序列号才能正常工作。

有没有任何方法可以伪造设备的序列号,例如,使用udev规则?

说明:问题不在于如何获取USB设备的序列号,而在于如何设置序列号。

我有一部Android手机,它没有在USB上报告序列号,亚行的工具也不太喜欢这个。到目前为止,似乎还没有任何简单的解决办法。然而,在那些日子里,只要买一个合适的Android手机进行开发就很容易了。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2013-01-02 16:29:45

首先,确保设备没有报告序列号是真正的问题。如果adb devices没有访问/dev/bus/usb/下相应设备的权限,它将将序列号作为所有问号列出。另外,请记住,亚行启动了一个服务器,您可能需要杀死它才能让它重新探测。

假设这真的是设备的问题,我很快检查了亚行的源代码。register_device在core/adb/usb_linux.c中似乎直接从设备读取序列号。core/adb/usb_libusb.c调用libusb_get_device_descriptor来完成它,后者(检查libusb源代码)从sysfs或直接从设备获取它。所以不幸的是,udev的诡计不会有帮助。

你的选择似乎是:

  • 想办法让亚行在没有序列号的情况下工作。可能是补丁adb (它是开源的)。这是一个更多的问题,堆栈溢出,我认为。
  • 修补程序到内核usbfs驱动程序以伪造对亚行请求的响应。在我看来,这听起来比修补亚行要难得多。
  • 在假定亚行使用libusb的情况下,修补内核以允许在syfs中伪造串行#。
  • 修理坏了的硬件。
票数 1
EN

Unix & Linux用户

发布于 2011-01-27 08:29:07

可能它不是串行的,而是FTDI,所以您可以尝试这样做:

1)获取序列

代码语言:javascript
复制
sudo udevadm info --attribute-walk -n /dev/ttyUSB0  | sed -n '/FTDI/,/serial/p'

2)创建规则,并将XXXXXXXX替换为您找到的序列或假序列。

代码语言:javascript
复制
sudo echo 'SUBSYSTEM=="tty", ATTRS{serial}=="XXXXXXXX", GROUP="users", MODE="0660", SYMLINK+="myusbphone"' | sudo tee /etc/udev/rules.d/99-myusbphone.rules

3)放松规则

代码语言:javascript
复制
sudo udevadm control --reload-rules

。

在这种情况下,请尝试与此文章的作者联系。

票数 1
EN

Unix & Linux用户

发布于 2013-01-01 19:48:15

如果您知道特定设备的设备节点(例如/dev/sdb),可以使用以下命令查找它:udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

通常,如果您试图在/etc/udev/rues.d/51-android.Rule中创建一个自定义规则,那么在终端中编写lsusb将显示类似于Bus 002 Device 004: ID 062a:3270 Creative Labs的内容。在“ID”之后的四个字符--在本例中是062a--用于指示该文件中的特定idVendor。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/4516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档