Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте…

в 14:05, , рубрики: bodyawm_ништячки, c++, GNU, ingenic, mips, timeweb_статьи, гаджеты, Ноутбуки, хакинг

Осторожно: в статье я постарался подробно написать обо всём, за что вы так любите Хабр: аппаратный моддинг и ковыряние в железе, хакинг 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-процессоре и все заверте… - 1

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

Пример такого детского ноутбука

Пример такого детского ноутбука

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 3

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

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

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 5

Девайс помог привезти в Россию мой подписчик Роман и сервис YouCanBuy, за что им огромное спасибо! Также этой статьи не было бы без подписчика Андрея, который занял мне определенную сумму для заказа ништячков из Китая, за что ему отдельная благодарность!

❯ Что внутри?

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 6

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 7

В качестве процессора используется легендарный 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-процессоре и все заверте… - 9

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

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

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

❯ Хакаем

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 11

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 12

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

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

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 13

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

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

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

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

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

Разрешение оригинальной Dingoo A320 — 240x320, а в ноутбуке — 800x480

Разрешение оригинальной Dingoo A320 240x320, а в ноутбуке — 800x480

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 16

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

if (!(fbSurface = SDL_SetVideoMode(240, 320, vmode[2], flags)))
		die("SDL: can't set video mode: %sn", 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-процессоре и все заверте… - 17

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

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 18

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

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 19

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 20

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

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

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

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

❯ Заключение

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

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

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

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

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 22
Например, некие Readboy с 32 bit high-speed processor. Что же за processor там может скрываться?

Например, некие Readboy с 32 bit high-speed processor. Что же за processor там может скрываться?
Или легендарные мини-ноутбуки Ben NanoNote!

Или легендарные мини-ноутбуки Ben NanoNote!


Очень важно! Разыскиваются девайсы для будущих статей!

Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 26

А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т.п, о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!

Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте… - 27

Автор: bodyawm

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js