Мой метод получения рута на Яндекс Станции Макс временный (до перезагрузки) и требует ее подключение к ПК через 7-штырьковый разъем внизу колонки. Хочется сделать его постоянным - а для этого потребуется вносить изменения на ЕММС. Так при этом есть риск окирпичивания - нужен донор, который не жалко.
Нашел я на Авито самую дешевую колонку с заблокированной подпиской, оплатил доставку - и только при получении до меня дошло, что я пропёрся и купил станцию первого поколения. В следующий раз буду умнее - а пока что появился новый подопытный, над которым не жалко поиздеваться.
Быстрый поиск информации по реверсингу устройства приводит на форум, где парни описали тестпоинты на плате. Меня интересуют:
UART0 TX: TP136`
UART0 RX: TP137
USB0 D-: TP248
USB0 D+: TP249
FEL: TP250
Reset: TP101
Еще нужна земля, и я взял +5 вольт с коннектора питания, в надежде, что в будущем смогу подключить к Станции флешку.
Припаял провода, подключил к компу через промежуточную плату (которая подходит также и к Макс) - работает. На UART пишется лог загрузки, замыкаю FEL на землю - ПК определяет новое устройство.
На одном из форумов я увидел упоминание утилиты bpi-fel-mass-storage. Идея следующая - через режим FEL на устройство загружается небольшой образ Linux, устройство переводится в режим эмуляции mass storage device и отдает содержимое флешки как диск. Далее этот диск можно править с ПК. Есть GUI (как по мне - бесполезный, скрипты удобнее).
Пробую - в системе обнаруживается дисковое устройство, однако, никаких данных считать с него нельзя ни под Windows, ни под Ubuntu.
Наткнулся, кстати, на особенность.
Сперва я подумал, что у меня на устройстве заблокирован ввод по UART (по аналогии с режимом silent=1 в Станции Макс), так как Станция не реагировала на мой ввод в Putty. По итогу выработал такую последовательность подключения колонки к компу: отключаю вообще всё, закрываю Putty, вставляю USB провод UART2USB в ПК, запускаю Putty и подключаюсь к СОМ порту (вижу черное окно), вставляю питание в колонку (вижу как пошел лог загрузки), после этого вставляю провод USB для FEL и, если надо, перезагружаюсь в FEL. HDMI подключаю последним.
После загрузки в мини Линукс, доступна его консоль. Видно, что есть устройства /dev/mmcblk2*, командой cat получаем их содержимое - судя по текстовым строкам на экране, оно не зашифровано.
Я хочу сдампить содержимое флешки на будущее - чтобы иметь возможность отката при ошибке.
Дампить через СОМ порт - так себе удовольствие, на скорости 115200 уйдет неделя, чтобы забрать 8 гб данных. Но, посмотрев в образ мини Линукса, увидел, что Icenowy любезно подложил туда полный комплект USB Function драйверов, включая RNDIS (у меня не заработал) и также Serial. USB Serial дает вполне неплохую скорость передачи.
Настройка Станции в качестве USB Serial девайса производится по статье.
Сперва выгружаем драйвер USB Storage:
rmmod g_mass_storage
rmmod usb_f_mass_storage
Либо комментируем две предпоследние строки в /initrd рамдиска. Пересобрать рамдиск можно любой кухней для Андроида.
Затем запускаем драйвера USB Serial:
modprobe libcomposite
modprobe u_serial
modprobe usb_f_acm
modprobe usb_f_obex
modprobe usb_f_serial
modprobe g_serial
stty -F /dev/ttyGS0 raw -echo -echoe -echok -echoctl -echoke
Последняя строка настраивает режим ttyGS0. На самом деле нужен только параметр raw, так как остальные параметры действуют на получаемые данные, а мы данные только отправляем.
После этого запускаем на ПК Putty, выбираем появившийся СОМ порт. Скорость ставим любую (в нашем случае USB Serial эту настройку игнорирует), не забываем ставить Flow Control в None, и включаем запись лога "All session output" в файл.
Для теста можно отправить строку:
echo "Hello from target side" > /dev/ttyGS0
Чтобы увидеть ее в Putty. Если строки нет - значит что-то сделано не так. Например, у меня работало нестабильно в USB3 порту на материнке.
Для отправки содержимого флешки Станции используем конструкцию:
cat /dev/mmcblk2 | gzip | base64 > /dev/ttyGS0
base64 я добавил на всякий случай. Хоть он и увеличит время, но избавит от возможных нюансов при работе Putty с бинарными данными.
gzip - хорошо экономит время за счет упаковки данных. Так как в начале флешки много нулей - первые пол гигабайта передаются буквально за минуту.
А вот чтобы получить полностью всю флешку - придется оставить ПК и Станцию на ночь, выгнав интересующуюся новой штуковиной кошку из комнаты.
В процессе отправки периодически смотрим на экран Putty или в лог, что ничего не повисло и данные пишутся. Так как нет терпения - можно зайти в putty.log как в архив (Far Manager понимает и base64 и gzip) и поизучать что надампилось в процессе.
Смотрим - и понимаем, что что-то идет не так :)
Оказывается, при передаче по USB Serial часть байтов теряется, в результате получаем битый архив. И включение назад XON/XOFF в stty и в Putty тут не помогает.
Зато на помощь приходит продвинутая технология 1980ых годов - протоколы передачи через модем: XMODEM, YMODEM, ZMODEM, которые справляются с потерянными байтами.
Для получения файлов на стороне Windows используем терминал Tera Term, а под устройство компилирую статический lrszs. Почему он - просто его исходник нагуглился первым.
wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
./configure --host=aarch64-linux-gnu --disable-nls
make CC=aarch64-linux-gnu-gcc LDFLAGS=-static
Передаем файлы так:
lsz --ymodem файл_для_передачи </dev/ttyGS0 >/dev/ttyGS0
В тератерме выбираем File - Transfer - Ymodem - Receive. Почему-то Zmodem на устройстве крашится, поэтому указываю Ymodem.
Передача устройств /dev/mmcblk2* через lsz не работает - но это уже мелочи. Мелкие хорошо жмутся в /tmp, а большие можно порубить на куски и передавать частями.
P.S.
Ломать станцию первого поколения как-то даже не спортивно - никакого шифрования данных, нужные тестпоинты известны. Я пока не знаю, как буду использовать это бесполезное приобретение - может выведу УСБ на корпус, соберу какую-нибудь прошивку на базе армбиан, взяв версию ядра, а может и само ядро и драйвера от Яндекса, и приспособлю запускать Kodi или эмулятор приставок вместо не работающего квазара. Всё зависит от свободного времени.
Я не претендую на идеальность данного решения - мне оно самому не нравится, но, главное, что работает. Наверняка есть способы работы с флешкой устройства напрямую без извращений с USB Serial - но я Станцию получил только вчера, и пишу здесь информацию, полученную за первый день исследования.