Как я писал в
ru-linux’е, мой новый Huawei’ский смартфон почему-то ненормально виделся линуксом. То есть, при втыкании смартфона в ноутбук линукс сообщал, что видит подключённое андроидное устройство, но показывал только тамошний виртуальный CD-ROM. А вот файловая система самого смартфона (по MTP) почему-то оказывалась совершенно недоступна, и adb этого смартфона не видел, и fastboot тоже.
Причём, как выявилось в результате многочисленных экспериментов, этот дефект проявлялся только на одном экземпляре линукса, который грузится с внешнего диска. А в точно таком же линуксе на десктопе, и даже на том же самом ноутбуке, только грузящемся с внутреннего диска, всё нормально работало.
И в винде тоже нормально видится. Более того, под тем самым невидящим линуксом, если передать это USB-устройство в виртуальную машинку с виндой, так она его нормально видит.
Или вот если на смартфоне запустить drivedroid, который эмулирует CD/DVD или UMS, то они тоже нормально видятся. Но drivedroid только с виртуальными дисками работает, а доступа к реальной файловой системе самого смартфона не даёт.
А ещё оказалось, что если смартфон воткнуть в ноутбук ДО загрузки того линукса с внешнего диска, то после загрузки линукс его успешно видит и по MTP, и через adb. А вот если воткнуть в уже загруженный линукс, как это обычно делается, тогда уже стабильно не видит.
Долго я тыкался, пытаясь понять, отчего такое происходит, и как это исправить. В конце концов, как водится, получилось эти грабли обойти, но что это за фигня, я так и не понял. Короче, так:
По рекомендации товарища в ru-linux’е, запускал lsusb -v, пытаясь найти, в чём на одном и том же ноутбуке разница в том линуксе, где он работает, и в том, где нет. А также при втыкании смартфона до загрузки линукса, и после. Ан, практически никакой разницы. Потом пытался найти в dmesg -w, тоже толком ничего. И только сравнив выводы lsmod, обнаружил, что при перевтыкании смартфона грузятся новые модули: usbserial, usb_wwan, и ещё какой-то option. Попробовал их удалить, а система ругалась, что они кем-то используются, поэтому пришлось rmmod -f, и они, наконец, удалились. Перевоткнул смартфон, а всё равно так же не видится.
И только глубоко покопавшись в syslog’е, наконец понял, отчего эти модули грузятся: почему-то в этом USB-устройстве обнаруживается пачка серийных портов от GSM-модемов. Хотя в смартфоне и мобильный интернет, и wifi, и USB tethering выключёны.
Feb 13 19:32:18 usb 1-2: new high-speed USB device number 4 using xhci_hcd
Feb 13 19:32:19 usb 1-2: New USB device found, idVendor=12d1, idProduct=107e
Feb 13 19:32:19 usb 1-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
Feb 13 19:32:19 usb 1-2: Product: Android
Feb 13 19:32:19 usb 1-2: Manufacturer: Android
Feb 13 19:32:19 usb 1-2: SerialNumber: GSL0216921007638
Feb 13 19:32:19 option 1-2:1.0: GSM modem (1-port) converter detected
Feb 13 19:32:19 usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
Feb 13 19:32:19 option 1-2:1.2: GSM modem (1-port) converter detected
Feb 13 19:32:19 usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
Feb 13 19:32:19 option 1-2:1.3: GSM modem (1-port) converter detected
Feb 13 19:32:19 usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
И это только при втыкании смартфона в линукс, загруженный с внешнего диска. Если его воткнуть заранее или в другие линуксы, они ничего подобного не видят и лишние модули не грузят, хотя сами модули везде есть.
Попробовал снова поудалять эти модули и тщательнее проверить, насколько это поможет. Оказалось, что если удалить хотя бы option, то MTP и adb начинают работать. Но и тут подвернулись очередные грабли..
Просто так модуль не удалялся: rmmod: ERROR: Module option is in use, хотя я совершенно не понимаю, кто им пользовался..
И даже rmmod -f не всегда срабатывал, иногда вот так:
rmmod: ERROR: ../libkmod/libkmod-module.c:777 kmod_module_remove_module() could not remove 'option': Device or resource busy
rmmod: ERROR: could not remove module option: Device or resource busy
Хуже того, при повторных попытках rmmod -f option система иногда вообще рушилась в kernel panic:
Короче, решил попробовать запретить всю эту пачку ненужных мне модулей, вписал их с опцией blacklist в /etc/modprobe.d/blacklist.conf, пересобрал initramfs, перегрузил систему, а фиг - при втыкании смартфона они почему-то всё равно грузятся..
Погуглил, вписал install option /bin/true в /etc/modprobe.d/option.conf , и вот тогда этот option наконец перестал грузиться. usbserial и usb_wwan продолжают грузиться, но они толком не мешают, MTP и adb теперь нормально работают..
Оригинал этой записи в личном блоге.
(
| Комментировать
в Dreamwidth)