This post in English

Дисклеймер: Возможно, проблема решена, а возможно и нет. Пока слежу за ситуацией, потом обновлю статью. Само решение – в конце статьи, а под дисклеймером – симптомы и мои метания вокруг телефона без связи.

О самом телефоне

  • 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. Всё запустилось, заработало. Но меня ждал сюрприз…

No SIM card – это первый слот, там SIM-карты нет. Во второй слот SIM-карта вставлена, но регистрация не прошла

Телефон перестал ловить вообще что-либо. Пока я тыкался по настройкам – он висел в 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.