当我将 Motorola Triumph 插入 Fedora 17 Linux 机器的 USB 端口时,Linux 机器上出现了一系列无休止的错误,因为它拼命尝试将手机安装为 USB 驱动器。类似这样的内容:
Jun 23 10:26:00 zooty kernel: [528926.714884] end_request: critical target error, dev sdg, sector 4
Jun 23 10:26:00 zooty kernel: [528926.715865] sd 16:0:0:1: [sdg] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jun 23 10:26:00 zooty kernel: [528926.715869] sd 16:0:0:1: [sdg] Sense Key : Illegal Request [current]
Jun 23 10:26:00 zooty kernel: [528926.715872] sd 16:0:0:1: [sdg] Add. Sense: Invalid field in cdb
Jun 23 10:26:00 zooty kernel: [528926.715876] sd 16:0:0:1: [sdg] CDB: Read(10): 28 20 00 00 00 00 00 00 04 00
如果我继续告诉手机允许 Linux 安装 USB 存储,消息就会停止,并且我会得到一个已安装的驱动器,但如果我只想使用调试桥,我的 Linux 日志将继续充满这些垃圾。我可以使用一些 udev 魔法让系统忽略这个特定的 USB 存储设备吗?
我刚刚注意到,如果我告诉手机启用 USB 存储,让 Linux 识别新磁盘,然后再次告诉手机禁用 USB 存储,我会收到一条有关容量变为零的额外日志消息,但无休止的消息喷涌会停止,所以我想一个解决方法是立即启用和禁用 USB。
答案1
您可以告诉 usb-storage 模块忽略 VID/PID 组合
创建一个文件,例如 /etc/modprobe.d/android.conf,其内容如下
选项 usb-storage quirks=vid##:pid##:i
其中 vid/pid 以十六进制表示,无前缀
此技术的一个严重限制是,某些安装将在 initread 阶段加载 usb-storage 驱动程序,此时 /etc 尚未存在且尚未生效,因此它可能会在没有忽略的情况下加载。要解决这个问题,您可以修改 inittread 存档,或者您可以卸载并重新加载 usb-storage 模块(如果系统中没有其他东西正在使用它)。
另一个缺点是,如果您决定要安装它,您必须重新加载没有怪癖的驱动程序(例如使用 insmod)。
也许有人有更好的方法?