В этой статье я хочу поделится с Вами своими наработками и достигнутыми успехами в разборе Xiaomi шлюза (Версия с евровилкой с беру.ру). Расскажу как установить на него альтернативное ПО, как восстанавливать шлюз с затертым софтом и даже оживлять шлюз с затертым u-boot.
---------МНОГО КАРТИНОК-------------
В первую очередь расскажу как подключится к плате шлюза и получить рут.
Для начала немного подробностей про шлюз.
В данной статье рассматривается версия шлюза построенная на процессоре imx6ull.
Немного технических характеристик платы:
- Wifi RTL8723BS — драйвер от него почему то подгружается отдельно.
- CPU IMX6ULL
- RAM 256 mb
- ROM 256 mb
- Модуль ZIgbee на базе JN5169.
На плате выведены служебные пятаки, P2 и P4. В идеале они сделаны под погопины, но к ним проще подпаятся.
P2 — это уарт 0 процессора куда выводится вся служебная информация, бутлог uboot и управление системой, можно использовать любой usb-uart адаптер.
P4 — USB OTG, который используется для заливки прошивки в nand. (Как полноценный OTG до конца я не смог его запустить, при подключении устройство определяется, но видимо чего то еще не хватает).
К пятакам P4 идельно подходит китайская плата usb переходника.
После того как все распаяно и подключено в первую очередь нужно получить root.
Я делал по этой инструкции (ссылка на мануал) но с небольшими уточнениями после пункта 5 необходимо набрать команду boot иначе система сидит и ждет команду, инструкцию видимо писали с надеждой что все разбираются в линуксах.
SSH сервер тоже по инструкции почему то не включился и включался только запуском вручную, команда для запуска /etc/init.d/dropbear start
Следующим этапом после получения рута я скопировал содержимое системы с помощью WinScp (при создании подключения выбираем режим SCP).
Дальше по хорошему нужно выполнить бэкап полной системы, на случай если эксперименты приведут к печальным последствиям (как у меня и произошло, а бэкап я не сделал)
Флеш память шлюза разбита на 4 раздела.
Свободного места как оказалось тоже не очень много, при этом в памяти очень много различных дубликатов файлов.
Поигравшись пару часиков я что-то изменил в софте и шлюз перестал загружаться :)
Теперь давайте разберемся как оживлять данную железку и заливать в нее все что угодно.
Выполнять действия только в том случаем если у вас кирпич!
Процессор Imx6ULL содержит всю информацию в открытом виде, все датащиты и референс мануалы доступны на сайте производителя после регистрации.
U-boot у меня еще грузился… Но пока я пытался восстановить случайно скопировал лишнюю команду и затер целиком нанд. А u-boot как оказалось находился в нанде. И получил кирпич.
Процессор поддерживает различные режимы загрузки. В референс мануале они все описаны.
На девелоперских платах обычно ставят переключатели, но тут ничего подобного нет. В датащите описано какие это конкретно пятаки процессора.
И тут китайцы сделали тоже очень приятный подарок. Они вывели их в очень удобное место и почти подписали )
На плате рядом с процессором распаяно два резистора, куда как раз подходят пины boot-mode.
Эти два резистора как раз и являются переключателями boot режимов, по умолчанию стоит на нанд, но сдвинув каждый из них в бок мы получим режим сериал бута.
Свой шлюз я перевел в сериал бут моде, в некотором роде этот режим удобнее тестировать различные прошивки.
Для заливки прошивки используется фирменная утилита от NXP mfgtools. Единственное в ней требуется подготовить профиль под процессор.
Скачиваем mfgtools. В архиве уже подготовленная версия со всеми необходимыми настройками.
Подключаем шлюз по USB. В serial boot режиме шлюз будет пытаться загрузить прошивку через USB интерфейс и на компьютере появится новое устройство HID.
Mfgtools в свою очередь сообщит что видит новое устройство.
Иногда компьютер его не видит, с чем именно связано сказать не могу.
После того как утилита его увидила нажимаем Start, и начнется процесс загрузки прошивки.
Утилита отформатирует нанд, зальет новый убут, ядро, дтб и рутфс. Рутфс входящий в архив был собран товарищем Aleksandr Faronov, он собрал чистую сборку линукса на Yocto. Разделы U-boot, Kernel, DTB были выдернуты из родной прошивки шлюза.
В этой сборке линукса загрузится только чистая система, больше там ничего не будет (зигби тоже пока не работает).
После того как утилита отработает в моем случае шлюз ничего делать не будет и грузится тоже, потому что как мы помним процессор в сериал бут моде.
Поэтому ему нужно дать загрзочный образ U-boot. В архиве с mfgtools лежит дополнительная утилитка uuu которая выполняет загрузку U-boot в Ram платы, перейдем в папку ее содержащую.
Закрываем mfgtools и переподключаем шлюз по новой, устройство HID снова должно определится, после выполняем команду.
uuu u-boot-small.imx
Плата начнет загружаться, но так как env у нее нет то встанет после загрузку U-boot. В консоли шлюза выполняем две команды, прописываем ENV для загрузки.
setenv bootargs 'console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs cma=96M mtdparts=gpmi-nand:3m(boot),7m(kernel),1m(dtb),-(rootfs)'
и стартуем загрузку boot начнется загрузка шлюза с нанда и с той прошивки которую мы залили.
По большому счету на этом все. В mfgtools в папке \Profiles\Linux\OS Firmware\files лежат все файлы прошивки, подменив которые можно загружать любую совместимую систему. Я пробовал загружать openwrt.
Система грузится, но я до конца не разобрался как подсунуть нужное ядро, и где его взять.
Надеюсь совместными усилиями мы все таки доведем данный шлюз до логического завершения )
Бэкап директорий шлюза. Телеграм для обсуждения.
DaemonGloom
Когда рассказываете про устройства xiaomi (шлюзы, выключатели и прочее), пожалуйста, указывайте их внутренние названия. Иначе те, кто попробуют повторить ваши шаги, просто убьют своё устройство.
Ваш шлюз — lumi.gateway.mieu01
lenz1986 Автор
Изменил заголовок
divanikus
Я бы добавил еще и артикульный код, чтобы наверняка: DGNWG05LM.
DaemonGloom
А вот это как раз не наверняка, потому что с таким артикулом бывают два типа устройств. Одно позволяет разблокировать работу в локальной сети просто через пару команд через припаянную консоль, а другое — это, в котором локальной работы нет совсем. Можно только подменить файл исполняемый на написанный энтузиастами, что позволит использовать часть функций через специальные модули.
divanikus
Вы с DGNWG02LM путаете. 05-е насколько я знаю вообще никакие не разблокируются.
lenz1986 Автор
Это как раз 5-й как оказалось
divanikus
02-й с китайской вилкой, 05-й с европейской.
DaemonGloom
Насколько помню, натыкался давно на отзывы, что 05 разблокировались через UART ранее нормально, а потом уже пошли новые версии, где это стало невозможно.
divanikus
Я на такое только в отношении 02 натыкался, про 05 не видел.
norguhtar
не смогут :) Там нет этих точек подключения.
DaemonGloom
Да точно таких нет, но есть крайне похожие. И с китайцев станется выпустить ещё новую похожую плату в будущем, а статья так останется на хабре.
С указанием конкретного кода устройства таких проблем уже нет.
norguhtar
Например? Предыдущая версия отличается значительно.
sleepes
Я думаю, умельцы найдутся. Так что все верно указали