[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Осторожно: в статье я постарался подробно написать обо всём, за что вы так любите DTF: аппаратный моддинг и ковыряние в железе, хакинг Linux и обход проприетарной оболочки, а также программирование и портирование софта с других платформ. Но есть нюанс...

Я большой фанат портативных гаджетов с полноценными QWERTY-клавиатурами: ноутбуков, коммуникаторов и различных хэндхелдов. Когда в мои руки попадает девайс с Linux или Windows CE в том или ином виде, я стараюсь максимально расширить функционал устройства и порой даже портирую программы с других платформ! Недавно мне удалось купить детский обучающий ноутбук с MIPS-процессором и поворотным дисплеем всего за 1 000 рублей. Интересно узнать о том, как я хакнул девайс и причём здесь Dingoo A320? Тогда жду вас под катом!

❯ Предыстория

В конце 2000-х годов, цена на бюджетные ноутбуки снизилась настолько, что купить полноценный лэптоп мог почти каждый студент. Если в начале нулевых годов миниатюрность была роскошью и стоила довольно дорого по отношению к обычным 15-дюймовым бюджетникам, то с выходом Asus EEEPC в 2007 году, маленькие нетбуки с 7-дюймовыми дисплеями наоборот образовали новый сегмент рынка недорогих портативных устройств.

Сейчас мы с вами привыкли, что большинство ноутбуков работает на базе процессоров с двумя архитектурами — x86_64 и ARM. Однако в те времена, инженеры и производители активно экспериментировали и с альтернативными архитектурами — например, MIPS. В 2009 году, некая китайская компания Noah Educational Holdings, которая занималась разработкой портативных устройств для обучения дошколят и школьников младших классов, выпустила на рынок свой собственный миниатюрный обучающий ноутбук — Noah NP5000.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Обычно, когда читатель слышит ‭«детский ноутбук‭», он представляет себе небольшое устройство с почти полноценной QWERTY-клавиатурой, небольшим монохромным ЖК-дисплеем и набором некоторых обучающих программ. При этом замоддить такие устройства не представляется возможным — в них используются микроконтроллеры с масочной ROM (прожигаемой на заводе), которые скорее всего являются близкими родственниками процессоров тех самых Тетрисов!

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Однако в случае с NP5000 всё было совершенно по другому — дисплей здесь уже цветной, а не монохромный, вместо батареек используется полноценный аккумулятор, да и в целом девайс выглядит действительно как взрослый миниатюрный нетбук с поворотным экраном! При включении пользователя встречает заставка с логотипом компании и характерным пингвинчиком, рабочий стол, напоминающий Windows XP и определенный набор обучающих программ на китайском языке.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

В один день я листал Goofish (китайский аналог Авито) в поисках интересных гаджетов и именно пингвинчик и привлёк моё внимание. Информации о том, на каком процессоре работает ноутбук, можно ли на него устанавливать сторонние приложения и что он вообще умеет в сети не было. Однако приятная цена в 1 000 рублей и желание заполучить интересный девайс в коллекцию взяли верх — и я решил рискнуть!

Мчу на своем болиде за ноутбуком для дошколят!
Мчу на своем болиде за ноутбуком для дошколят!

Когда девайс приехал ко мне, я немного поковырял его родную оболочку, попытался выйти в терминал, поставить пакеты OpenWRT — но всё тщетно, оболочка тщательно была закрыта от ушлых детских ручек! Поэтому я решил разобрать девайс и узнать, на каком процессоре он работает и есть ли у нас UART, на котором можно поискать рут-консоль или хотя-бы консоль U-Boot.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

❯ Что внутри?

Разбирается маленький нетбук почти также, как и его взрослые собратья — через клавиатуру! Со стороны поддона виднеется съёмная крышка, которая на x86-устройстве должна содержать в себе место под HDD и слоты для оперативной памяти. Однако в нашем случае, здесь скрывается кое-что поинтереснее: видите характерное место под миниджек с подписанными пинами RX и TX? Это и есть UART, о котором я говорил в прошлом абзаце.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Плата ноутбука выделяется низкой плотностью монтажа и отсутствием какого либо охлаждения. Процессор, оперативная память и флэшка скрыты под большим защитным экраном на винтиках, в то время как дополнительные модули скрываются под экранами, которые припаяны к плате.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

В качестве процессора используется легендарный Ingenic JZ4757! Это готовая система на кристалле, включающая в себя MIPS-ядро собственной разработки с микроархитектурой XBurst, работающее на частоте до 380МГц, видеоконтроллер с возможностью вывода картинки на дисплей или телевизор, аудиокодек, USB-хост и т. п. Слева от процессора расположились два чипа ОЗУ типа SDRAM, в сумме образующие 64Мб, а чуть ниже распаяна NAND-флэшка от компании Samsung на 2Гб. Справа снизу ‭«спрятался‭» чип часов реального времени — с которого при желании можно было бы взять шину I2C!

Что странно — маркировка флэшки была наполовину затерта с завода, при том что ноутбук ни разу не разбирался... видимо использовали Б/У-накопитель?
Что странно — маркировка флэшки была наполовину затерта с завода, при том что ноутбук ни разу не разбирался... видимо использовали Б/У-накопитель?

Я не зря назвал процессоры от Ingenic легендарными. Дело в том что именно JZ'шки использовались во многих легендарных портативных гаджетах нулевых годов. Например, JZ4732 использовался в популярной эмуляторной игровой консоли Dingoo A320, а JZ4725 использовался в журнале Vogue с экранчиком и OpenHardware-ноутбуке Ben NanoNote. Ingenic славились своей открытостью к сообществу моддеров и свободно предоставляла исходный код ядра Linux, BSP для Windows CE и даже код своей проприетарной прошивки для MP4-плееров!

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Далее я решил подпаяться к UART'у, дабы почитать что у нас туда пишет система. Вне зависимости от чипсета или устройства, довольно часто на UART летят логи загрузчика и ядра, а иногда на нём можно найти и рутовую консоль. Благодаря такому ‭«бэкдору‭» можно попытаться хакнуть самые разные устройства: например, тонкие клиенты на процессорах Marvell или незамысловатый ТВ-бокс. В качестве USB-UART преобразователя я использую плату с ESP32 с постоянным RESET'ом на микроконтроллере (дабы не вмешивался в работу шины):

Не забываем общую массу, иначе на шине будет мусор!
Не забываем общую массу, иначе на шине будет мусор!

❯ Хакаем

Далее я включил ноутбук, настроил Putty на свой COM-порт с бодрейтом 115200 и увидел логи. Выяснилось что в качестве загрузчика используется всеми любимый U-Boot (в котором нельзя прервать процесс загрузки), а в качестве ядра — Linux версии аж 2.6! И конечно же на этом терминале висела полноценная рут-консоль!

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Далее я сразу решил проверить с какой системой мне придется иметь дело: заглянул в top, обнаружив что используется оболочка Qtopia (формальная альтернатива Xorg и DirectFB для КПК на Linux), пошерстил по папкам с бинарниками и посмотрел inittab. Наша задача — заставить ноутбук запускаться с текстовым терминалом на дисплее, а Qtopia запускать уже по желанию.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Весьма интересен и тот момент, что Qtopia использовалась также в линейке гиковских Linux-КПК Sharp Zaurus. Однако "заврик" построен на процессоре XScale с архитектурой ARM, поэтому софт оттуда без пересборки запустить не выйдет :(

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Сначала я закомментировал запуск Qtopia в скрипте автозагрузки - inittab'е. Однако если просто ‭«прибить‭» оболочку — после включения ноутбука нас будет встречать пустой экран без какого либо взаимодействия. Поскольку у меня не было возможности изменить cmdline ядра и перенаправить консоль на терминал fbcon, я решил это сделать уже в юзерспейсе с помощью системного вызова TIOCCONS, однако он по каким-то причинам выдавал ошибку. Тогда пришлось немного костылить и дублировать терминал с помощью getty:

getty -l /login.sh 115200 tty0 ... #!/bin/sh clear /bin/login

После этого у меня начал нормально работать терминал! Правда, без скроллинга... пока не знаю почему. Теперь, когда у нас есть рутовая консоль и полноценный busybox, можно немного поэкспериментировать!

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

❯ Портируем эмуляторы

Далее я решил попробовать портировать эмуляторы с родственной данному ноутбуку Dingoo A320. В родной системе почти никакие эмуляторы не работали даже после подкидывания всех необходимых библиотек (в том числе и uclibc с SDL), однако после chroot'а в систему от Dingoo A320 у меня запустились часть эмуляторов. Однако в этом ноутбуке используется оригинальный кривой драйвер фреймбуфера без патчей, который постоянно сыпет ошибками и не умеет работать в виртуальном разрешении. Из-за этого, часть эмуляторов выглядело... примерно вот так:

В эмуляторе был некорректно реализован скейлинг, который портил память
В эмуляторе был некорректно реализован скейлинг, который портил память

А часть вот так:

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

И я понял что без патчей в исходном коде не обойтись. Для сборки программ под старые Linux-машины, кросс-компилятор из репозиториев свежих дистрибутивов не подойдет — слишком новая версия glibc. Более того, некоторые устройства могут использовать uclibc вместо glibc, как, например, та же самая динга. Поэтому может потребоваться установка уже готового тулчейна — благо для динги он сохранился в сети. Распаковываем архив в /opt/, добавляем в переменную PATH путь к папке bin/ и пробуем собирать тестовую программу. Всё работает!

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Далее предстояло найти исходный код эмуляторов для динги. Часть из них можно найти на гите (в качестве портов на GCW-Zero), часть — на сайте OpenHandhelds. Первым дело я решил портировать эмулятор GameBoy Color. Поскольку эмулятор работает поверх библиотеки SDL, в первую очередь я изменил видеорежим с 240x320 на 800x480...

if (!(fbSurface = SDL_SetVideoMode(240, 320, vmode[2], flags))) die("SDL: can't set video mode: %s\n", SDL_GetError()); screen = SDL_CreateRGBSurface(0, 160, 144, 16, 0, 0, 0, 0);

И ожидаемо ничего не получил, никто растягивать картинку за меня не будет! Поэтому я сначала написал простейшую функцию скейлинга картинки на флоатах с заранее посчитанным шагом интерполяции, затем оптимизировал её до fixed-point арифметики, а после и вовсе решил ‭«запечь‭» координаты для сэмплинга в один большой массив.

void BlitScale(SDL_Surface* srcSurface, SDL_Surface* dstSurface, framebuffer_scale_t* scales) { int i, j; for (i = 0; i < dstSurface->h; i++) { for (j = 0; j < dstSurface->w; j++) { framebuffer_scale_t scale = scales[i * dstSurface->w + j]; uint16_t* pixel = &srcSurface->pixels[(scale.y * srcSurface->w + scale.x)]; uint16_t* dstPixel = &dstSurface->pixels[(i * dstSurface->w + j)]; *dstPixel = *pixel; } } }
[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Крайний вариант был самым быстрым, однако в нативном разрешении ноутбука я получил примерно 50%-скорости от реальной консоли — т. е., по сути, не играбельно. При этом в видеорежиме 240x320 всё работало нормально и упор был явно не в скорость растягивания картинки... по каким-то причинам либо блиттер SDL работал слишком медленно, либо драйвер фреймбуфера спотыкался об преобразование форматов пикселя из-за чего всё и тормозило.

Далее я решил попробовать запустить другие эмуляторы. NES, Sega Master System и другие консоли работали отлично... пока я не устанавливал разрешение выше 240x320. Ради интереса, я запустил оболочку для Linux-консолей gmenu2x с Ben NanoNote, которая вместо SDL использует DirectFB и получил вот такую картину. Epic fail...

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

❯ Накатываем Debian

После этого я решил попробовать накатить всем известный Debian. В отличии от эмуляторов, здесь пересобирать ничего не нужно: достаточно лишь собрать rootfs с необходимыми пакетами, отформатировать SD-карточку и chroot'унутся в систему. Для сборки можно использовать две утилиты — debootstrap и multistrap:

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Сначала я хотел накатить что-то относительно современное по типу Debian Buster или Jessie, однако вскоре выяснилось, что ядро 2.6 эти версии системы не поддерживают...Оказалось что последней версией Debian, поддерживающей ядро 2.6, был Squeeze вышедший в далёком 2011 году. После сборки и копирования рутфс, необходимо было выполнить вторую стадию установки системы, а именно фактическую распаковку и установку пакетов:

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Сначала я хотел накатить что-то относительно современное по типу Debian Buster или Jessie, однако вскоре выяснилось, что ядро 2.6 эти версии системы не поддерживают...

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...

Оказалось что последней версией Debian, поддерживающей ядро 2.6, был Squeeze вышедший в далёком 2011 году. После сборки и копирования рутфс, необходимо было выполнить вторую стадию установки системы, а именно фактическую распаковку и установку пакетов:

Установка БАЗОВЫХ пакетов занимает около 20 минут!
Установка БАЗОВЫХ пакетов занимает около 20 минут!

Далее мне удалось подкинуть некоторые пакеты и даже попытаться запустить иксы (на 64Мб ОЗУ!)... но затем я погряз в зависимостях и всё таки решил попытаться подкинуть сеть. Выяснилось что в ядре есть поддержка встроенного в чипсет Ethernet-контроллера, однако PHY на плате то не распаян!

❯ Заключение

Вот такая статья о попытке превратить китайский бюджетный MIPS-ноутбук в портативную игровую консоль у нас с вами получилось. И хотя в определенном смысле мне удалось добиться успехов — выйти в рутовую консоль, накатить Debian и запустить эмуляторы в половинном разрешении, всё равно это всё таки больше Epic fail... Но по крайней мере, эти бессонные ночи были очень веселыми!

А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.

Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty. А ещё мне можно отправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, ретро-ПК железо - всё это я очень люблю :) Всем огромное спасибо!

Но это ещё не всё!

NP5000 — не единственная обучающая модель. В Китае есть куча интересных ноутбуко-подобных гаджетов за шапку сухарей, которые я могу попробовать хакнуть, потенциально с положительным результатом! Если вам интереса подобная тематика в будущем — проголосуйте в опросе ниже.

[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...
[Лонг] Я купил MIPS-ноутбук для дошколят, хакнул его и попытался превратить в игровой...
Как вам девайс?
Интересная штучка… Если честно, в момент актуальности я был бы и сам не прочь притворится китайским школьником, чтобы такой заполучить…
Эх, вот бы такой к нам в конце нулевых… девайс бы уже раскопали не хуже Dingoo A320 и Vogue!
У девайса сомнительная ценность как у КПК. Но поиграться норм.
Девайс вообще не понравился.
monobogdan, ты собрался все девайсы на MIPS'е собрать? NTT Docomo Sigmarion в качестве HPC, NP5000 как ноут, SmartQ Z Watch как часы, планшет на MIPS'е…
Ну всё правильно. Ноутбук для детей, а monobogdan — 24-летняя ляля на диете, которая хочет поколупаться в крутой игрушечке с линуксом и MIPS-процессором!!!
Ваше мнение о статье?
Статья торт. Ковырять неизвестные устройства мы любим!
Статья тортосодержащая, идентичная натуральной. Автор как будто кота сосиской подразнил :(
Статья не торт, а кал. С такими статьями DTF больше не будет тортом!
44
7
4
3
1
1
1
15 комментариев