Дисклеймер: Возможно, проблема решена, а возможно и нет. Пока слежу за ситуацией, потом обновлю статью. Само решение – в конце статьи, а под дисклеймером – симптомы и мои метания вокруг телефона без связи.
О самом телефоне
- Xperia X Performance Dual
- РСТ, покупался в РФ
- Android 8.0
- Прошивка 41.3.A.2.107
- Magisk 19.3
- Резервная копия TA раздела до рутования была сделана
- Ядро пересобрано включенным в него TA разделом и Magisk по инструкции с 4pda через Rootkernel V5.23, но уже с новым Magisk’ом
Доброе, мать вашу, утро
Сегодня утром мой телефон обрадовал меня тем, что сел полностью в ноль. Беру телефон, а он моргает красным диодом и даже дисплей не включается.
Странность заключалась в том, что ещё около получаса назад этот же телефон меня разбудил и бодро показывал 25%. Ушатанность батареи невелика – на 25% ещё можно сгонять из города в город, по глухой местности, заставляя телефон прыгать по плохо ловящимся БСкам, при этом слушая музыку по Bluetooth. Проценты телефон считает правильно, то есть система подаёт сигнал на отключение только достигнув 1%. Резкого скачка, например, с 8% до 1% с последующим выключением не наблюдалось.
Хотя в квартире в последние дни стало холоднее – но всё же не 0 градусов, чтобы он мог от холода быстро разрядиться.
Зарядка при этом тоже поначалу не помогала – минут 10 он не мог включиться, лёжа на зарядке.
Поплясав немного вокруг телефона с зарядкой, попытался перезагрузить через Power+Vol Up – о чудо! Он начал грузиться и появился экран зарядки с 1%.
Я обрадовался и чуть подзарядив, запустил Android. Всё запустилось, заработало. Но меня ждал сюрприз…
Телефон перестал ловить вообще что-либо. Пока я тыкался по настройкам – он висел в Emergency calls only.
Я полез в статистику батареи – вся батарея угрохалась как раз на сетевую активность.
Перезагрузки, переключение в самолёт и обратно, перестановка/протирание симки, перестановка её в другой слот – не помогли.
Я уже подумал, что чё то с Yota, хотя второй телефон на мегафоне работал (по сути он регался на тех же БС). В голове выстраивалась цепочка: Yota упала, телефон свалился в поиск сети, регистрация не проходила, батарея садилась. Но не всё так просто…
Я обнаружил, что SIM-карта переименовалась с YOTA в CARD 1. Я начал подозревать что проблема всё-таки либо в аппарате, либо в SIM-карте.
Телефон всё вроде как видит и корректно получает всю инфу. Например, IMEI читается корректно.
Попробовал начать ручной поиск сети. А вот херушки. Нажимаю на ручной поиск – на долю секунды появляется сообщение “ищем сети” – и всё, сообщение пропадает.
Жопа! Пора тащить в СЦ! – думаю я. Мысленно распрощавшись с телефоном, я решил всё же докопаться до истины.
Идём в Netmonitor. О, чудо! Он что-то показывает, телефон выловил какие-то БСки. Значит радиочасть всё-таки работает…
Параллельно я открыл logcat в отдельном окне. И тут я заметил интересное сообщение при попытке поиска сетей вручную из Settings.apk…
09-24 12:10:42.638 24974 24974 I tad : Trim Area daemon starting. 09-24 12:10:42.638 24974 24974 I tad : Using trim area info (0,16) from arguments. 09-24 12:10:42.638 24974 24974 E tad : Failed to open /data/local/tmp/TA.img (No such file or directory) 09-24 12:10:42.638 24974 24974 E tad : Failed to configure TA library.
Итак, проблема оказалась в TA. Подтверждение этому – нерабочий X-Reality.
На девственном неразлоченном аппарате при переключении режимов цвета становятся насыщеннее, а на убитых DRM-ключах разницы при переключении не будет.
У меня был второй случай, но так как TA был зашит в ядро – этого не должно было происходить, X-Reality должен был работать.
Разбираемся
Приехав уже на работу, я начал смотреть, что ж там в каталоге про который велась речь в logcat:
F8132:/ # ls -la /data/local/tmp/ total 16 drwxrwx--x 2 shell shell 4096 2019-09-24 12:15 . drwxr-x--x 5 root root 4096 2019-08-30 11:40 .. -rw-rw---- 1 root root 834 2019-09-24 17:10 cmdline -rw-rw---- 1 root root 311 2019-09-24 17:10 init.ta_poc-log.txt
И правда TA.img отсутствует. Но есть лог – init.ta_poc-log.txt:
F8132:/ # cat /data/local/tmp/init.ta_poc-log.txt Executing init.ta_poc.sh: - /data/local/tmp/TA.img not found! - Copying /sbin/TA.img to /data/local/tmp/TA.img cp: bad '/sbin/TA.img': Permission denied - Wiping drm folders (credmgr, drm and mediadrm) All done! Executing init.ua_modem_switcher.sh: - Removing old modem_switcher_status file - Running /sbin/ua-modem-switcher binary - ua-modem-switcher finished with status 255 All done!
Упс! Оказывается почему-то TA отсюда исчез. Не совсем понятно, по какой причине. При этом TA должен копироваться из /sbin/TA.img, но скрипт почему-то этого сделать не смог. Ну и в самом конце – ua-modem-switcher завершился с ошибкой – видимо как раз из-за отсутствия TA.
Гуглёж по ошибке ни к чему не привёл, поэтому разбираемся самостоятельно.
Итак. /sbin/TA.img – это symlink на /root/TA.img.
F8132:/ $ ls -la /sbin/ total 472 drwxr-xr-x 3 root root 520 1971-10-13 23:02 . drwxr-xr-x 26 root root 1340 1971-10-13 23:02 .. lrwxrwxrwx 1 root root 13 1971-10-13 23:02 .core -> /sbin/.magisk drwxr-xr-x 6 root root 160 1971-10-13 23:02 .magisk lrwxrwxrwx 1 root root 12 1971-10-13 23:02 TA.img -> /root/TA.img lrwxrwxrwx 1 root root 10 1971-10-13 23:02 adbd -> /root/adbd lrwxrwxrwx 1 root root 13 1971-10-13 23:02 charger -> /root/charger lrwxrwxrwx 1 root root 23 1971-10-13 23:02 checkabortedflash -> /root/checkabortedflash lrwxrwxrwx 1 root root 13 1971-10-13 23:02 fota-ua -> /root/fota-ua lrwxrwxrwx 1 root root 14 1971-10-13 23:02 fsckwait -> /root/fsckwait -rwxr-xr-x 1 root root 141664 1971-10-13 23:02 magisk lrwxrwxrwx 1 root root 12 1971-10-13 23:02 magiskhide -> /sbin/magisk -rwxr-xr-x 1 root root 337056 1971-10-13 23:02 magiskinit lrwxrwxrwx 1 root root 16 1971-10-13 23:02 magiskpolicy -> /sbin/magiskinit lrwxrwxrwx 1 root root 8 1971-10-13 23:02 mr -> /root/mr lrwxrwxrwx 1 root root 12 1971-10-13 23:02 resetprop -> /sbin/magisk lrwxrwxrwx 1 root root 9 1971-10-13 23:02 ric -> /root/ric lrwxrwxrwx 1 root root 15 1971-10-13 23:02 slideshow -> /root/slideshow lrwxrwxrwx 1 root root 12 1971-10-13 23:02 su -> /sbin/magisk lrwxrwxrwx 1 root root 16 1971-10-13 23:02 supolicy -> /sbin/magiskinit lrwxrwxrwx 1 root root 16 1971-10-13 23:02 tad_static -> /root/tad_static lrwxrwxrwx 1 root root 23 1971-10-13 23:02 ua-modem-switcher -> /root/ua-modem-switcher lrwxrwxrwx 1 root root 13 1971-10-13 23:02 ueventd -> /root/ueventd lrwxrwxrwx 1 root root 21 1971-10-13 23:02 wait4tad_static -> /root/wait4tad_static lrwxrwxrwx 1 root root 15 1971-10-13 23:02 watchdogd -> /root/watchdogd lrwxrwxrwx 1 root root 14 1971-10-13 23:02 wipedata -> /root/wipedata
Permission denied, говорите? Да как бы нет, вроде как всё должно работать – права 644.
F8132:/ # ls -la /root/ total 14288 drwxr-x--- 2 root root 340 1971-10-13 20:31 . drwxr-xr-x 26 root root 1340 1971-10-13 20:31 .. -rw-r--r-- 2 root root 2097152 2019-06-13 14:27 TA.img -rwxr-x--- 2 root root 1800120 2019-06-13 14:27 adbd -rwxr-x--- 2 root root 838552 2019-06-13 14:27 charger -rwxr-x--- 2 root root 820216 2019-06-13 14:27 checkabortedflash -rwxr-x--- 2 root root 2261616 2019-06-13 14:27 fota-ua -rwxr-x--- 2 root root 925904 2019-06-13 14:27 fsckwait -rwxr-x--- 2 root root 1570360 2019-06-13 14:27 mr -rwxr-x--- 2 root root 649800 2019-06-13 14:27 ric -rwxr-x--- 2 root root 706728 2019-06-13 14:27 slideshow -rwxr-x--- 2 root root 633128 2019-06-13 14:27 tad_static -rwxr-x--- 2 root root 649784 2019-06-13 14:27 ua-modem-switcher lrwxrwxrwx 2 root root 7 2019-06-13 14:27 ueventd -> ../init -rwxr-x--- 2 root root 607856 2019-06-13 14:27 wait4tad_static lrwxrwxrwx 2 root root 7 2019-06-13 14:27 watchdogd -> ../init -rwxr-x--- 2 root root 1043032 2019-06-13 14:27 wipedata
Может для него установлены какие-нибудь ACL? Этого я ещё не проверял.
Режим Ванги (ОБНОВЛЕНО: см. ниже)
У меня есть два подозреваемых в этой ситуации, именно их я ставил в последнюю неделю:
- FDE.AI
- Обновление Magisk Manager 7.3.4
Я думаю, что FDE.AI тут всё же не при чём, в его логах ничего особо нет. Его я ставил за несколько дней до того, как это случилось, с ним я несколько раз перезагружался и всё было нормально, а вот Magisk Manager я ставил как раз не так давно (день или два назад). Также меня смутило то, что вообще начало появляться Permission denied – может начиная с Magisk Manager 7.3.4 скрипты начали запускаться с нерутовыми uid/gid? Непонятно.
По коммитам у Magisk Manager ничего подобного нет.
(ОБНОВЛЕНИЕ) FDE.AI
Всё-таки проблема в FDE.AI. Я попробовал ещё раз его установить и TA.img снова пропал.
А почему сеть пропала-то вообще?
TA раздел содержит уникальные настройки конкретного телефона. Что-то подобное есть у разных устройств. Например, у роутеров TP-Link есть раздел ART, содержащий уникальные для каждого роутера настройки, у телефонов Siemens для этого было отведено место в EEPROM.
Настройки уникальные для каждого конкретного устройства. Иными словами, у двух РСТшных Xperia X Performance Dual из одной партии не может быть одинакового TA раздела. Прошив чужие настройки в аппарат мы можем получить очень нестабильную его работу в лучшем случае. В худшем мы получим кирпич. В случае с Sony, я так понимаю, кирпич в любом случае обеспечен. При повреждении TA раздела в СЦ вам не помогут никак, это решается только заменой материнской платы.
Я подозреваю, что в TA зашит статус операторских блокировок SIM-карт. Система не смогла прочитать эти данные и не смогла корректно инициализировать модуль мобильной сети.
В нашем случае при загрузке TA-раздел никуда не делся, он на своём месте – просто в запущенной системе мы используем не его, а его копию из файла. Поэтому мы смогли корректно загрузиться с реальным TA, но в Android в дело вступает демон tad. Он подхватывает образ раздела из файла, но так как файл не скопировался, то tad не смог инициализировать некоторые устройства, которые инициализируются при полном старте системы, например, модуль мобильной сети.
При всём этом, кстати, Bluetooth и Wi-Fi работали, через Wi-Fi я даже мог что-то сделать, например, написать часть этой статьи. Возможно, они как то сконфигурировались с настройками из реального раздела TA.
Решение! (Возможное)
Внимание:
- Всё выше и нижеописанное относится только к аппаратам Sony! На других аппаратах TA раздел отсутствует! Если у вас подобные симптомы на другом аппарате – это решение не для вас и проблема в другом!
- Всё выше и нижеописанное относится к случаю, когда у вас вшита копия TA раздела в ядро через Rootkernel. Если у вас drm-fix или вы восстановили TA раздел через рекавери/fastboot обратно туда, где он был – это решение тоже не для вас!
- Всё нижеописанное проверено только на одном аппарате – Xperia X Performance с Android 8.0 (41.3.A.2.107). С другим аппаратом или прошивкой может не прокатить.
- Если вы сделаете всё правильно, то по идее сломаться ничего не должно, но всё же жопа может вас настигнуть! Я вас предупредил! ДЕЛАЕТЕ ВСЁ НА СВОЙ СТРАХ И РИСК!
- Не забывайте, пожалуйста, про резервные копии аппарата! На случай если что-то пойдёт не так!
- Если аппарат не загрузится, то зайдите в Recovery и просто удалите /data/local/tmp/TA.img чтобы вернуться к исходному состоянию. Если и в этом случае всё плохо – придётся либо вайпать userdata, либо шить всё заново вообще
- Решение ещё тестируется, о результатах сообщу позже
Почему решение возможное?
Потому что не очень понятно:
- Почему файл удалился? Должен ли он удаляться?
- Почему файл не может быть скопирован с ошибкой Permission denied, если вручную я могу это сделать? При том, что права у него выставлены на чтение всем.
Что нужно сделать?
Нам нужно вручную скопировать /root/TA.img в /data/local/tmp/TA.img.
Если у вас есть любая другая правильная копия TA раздела, то можно использовать её вместо /root/TA.img.
Способ 1: Любой файловый менеджер, например, ES Проводник или Root Explorer.
В примере используется ES Проводник
Включаем режим рута и подтверждаем права superuser’а
Идём в каталог /root
Копируем файл TA.img
Идём в каталог /data/local/tmp
Вставляем файл
Перезагружаемся
Способ 2: Терминал
Открываем терминал
Вводим su и подтверждаем права superuser’а
Вводим:
cp /root/TA.img /data/local/tmp/TA.img reboot
Аппарат перезагрузится
Что должно произойти после этого?
Телефон снова сможет регистрироваться в сети. X-reality заработает. При разблокировке у меня произошло обновление NFC. Лог init.ta_poc-log.txt будет выглядеть так:
F8132:/ $ cat /data/local/tmp/init.ta_poc-log.txt Executing init.ta_poc.sh: - Found /data/local/tmp/TA.img - Chown-ing /data/local/tmp/TA.img - Chmod-ing /data/local/tmp/TA.img All done! Executing init.ua_modem_switcher.sh: - Removing old modem_switcher_status file - Running /sbin/ua-modem-switcher binary - ua-modem-switcher finished with status 0 All done!
Скрипт не будет копировать TA, так как он уже есть, а ua-modem-switcher завершится корректно с кодом 0.