dil

Переступил через очередные грабли

Feb 14, 2017 17:57


Как я писал в 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)

полезности, android, грабли, linux, смартфон, huawei

Up