Привет, хочу поведать об очередных экспериментах со старыми приставками и linux.
Покупал я как-то на авито телек, и в дар к нему отдали ростелекомовскую приставку Hyboard Z123. Приставка оказалась довольно-таки примитивной, работает на embedded linux со старым ядром 3.10, и запускает только приложение wink. Не имеет wifi, зато имеет 1 usb, ethernet 100Mbit, и аж целых 512МБ ОЗУ (DDR3-1600) с 256MB NAND flash памяти. SoC оказался Hi3798mv100 — это китайский SoC armv7hf cortex-a7 1.5Ghz 4core + Mali 450. SoC имеет 7 не совместимых между собой ревизий — A, B, C, D, E, F, G. В моем случае SoC оказался ревизии F (hi3798mdmo1f).




Вскрыл её — и увидел uart на плате. Судя по инету — есть два вида распиновок. Но если даже если и больше — не проблема вызвонить землю и найти 3.3v — а оставшиеся rx и tx пробовать перебором.



Подключился — но консоль загрузчика оказалась залоченной. На ОС логина/пароля я тоже не знал. Через HiTool по аппаратному XMODEM приставка тоже не хотела грузиться. Зная что загрузочное устройство задается подтяжками — попытался загрузиться с usb замыканием 107 и 108 контактов — но это тоже залочено.
Погуглил — и кастомов не нашел + народ жалуется, что приставка не шьется, так как ростелеком её залочил в хвост и гриву. Хотел уж было забить, но нашел на github два SDK: один с ядром 3.18, а второй с 4.4 (для работы обоих потребуется виртуалка c Ubuntu 12.04 32bit). Решил собрать свой fastboot (прокаченный аналог uboot) + debian rootfs — но проблемка: как и писал выше — все залоченно. А причина — прошлые приставки от ростелекома, которые всякие васяны с авито прошивали бесплатными IPTV плейлистами и продавали за 1000 рублей с надписью «вечное ТВ с 5000 каналами» — ростелеком решил прикрыть эту лавочку, и зашил в OTP (однократно программируемую память) SoC свой ключ, которым подписал свой miniboot (аналог uboot) и ядро с rootfs. По итогу даже после прошивки своего fastboot на программаторе я получил кирпич. Ключей для подписи в открытом доступе тоже нет, и по итогу — приставка стала не интересна. Может быть потом куплю новый незалоченный SoC для нее на али и сделаю nand программатор. А пока что приставка кирпич.
Но ведь я нашел SDKшки и уже приготовился к играм с ними, не хотелось бы просто так все это заканчивать. Поэтому я стал искать еще приставки на таком SoC — сначала пробовал Formuler Z+ (uart колодка есть, но дорожки к ней не идут — надо паяться к ногам SoС), потом Skyway Play (uart на плате нет вообще + bga SoC ) — загрузчики у них не были залочены, но из-за неудобного uart они тоже пошли мимо кассы.
И наконец-таки я нашел Formuler Z nano. У этой приставки тоже не был залочен загрузчик, но uart хотя бы выведен на контрольные пины (что неудобно, но хоть что-то). Приставка имеет вышеупомянутый SoC (ревизии G — hi3798mdmo1g), все те же 512MB ОЗУ и 4GB EMMC, + есть wifi n150 2.4Ghz (rtl8152). По портам — HDMI, композитное видео (просто конвертор с HDMI внутри), 2xUSB 2.0 и MicroSD слот. Ниже на фото плата уже после апгрейда (о нем ниже).




Для начала с помощью SDK я собрал свой fastboot. Из интересного при сборке — выбор ревизии SoC, настройка памяти, и загрузочного устройства — все это делается через выбор соответствующего reg файла (+ в случае nand задаются параметры nand). У меня emmc + два чипа памяти на плате. SoC имеет 32битную шину, а значит каждый чип памяти 16 бит.
Выбираем hi3798mdmo1g_hi3798mv100_ddr3_1gbyte_16bitx2_4layers_CHANGHONG_emmc.reg. Да, в этом reg указано 1GB ОЗУ, но меньше в SDK нет, и это не страшно — все прекрасно пашет и с 512MB ОЗУ, если в параметры ядра добавить mem=512M.
Rootfs debian создаем через debootstap (для armhf архитектуры), ядро с модулями берем из SDK. Да, оно версии 4.4, зато пашет видео через hdmi (которое очевидно сломали в свежих ядрах, ведь soc не в mainline linux).
Но перед превращением приставки в десктоп на debian хотелось бы сделать апгрейд — увеличить флешку и ОЗУ. Лимитов на размер emmc нет, но особо много тут тоже не нужно. 16-32Gb для «комфортных игрушек» хватит более чем — поэтому я взял emmc bga153 на 32gb (KLMBG2JETD-B041) с разбитого старого планшета, также взял два 16битных чипа DDR3L-1600 (K4B4G1646D) с DDR3 PC3L плашки (Samsung 1Rx16 2Gb). SoС умеет и 2Gb ОЗУ, но шина памяти у SoC — 32 бита. То есть для 2Gb ОЗУ наша плата должна иметь 4 8битных чипа. А у нас тут 2 16битных чипа, и в SDK нет reg файлов для 2Gb с 2x16bit чипами по гигу (да и найти такие чипы очень сложно), поэтому для этой платы максималка — 1Gb ОЗУ. DDR3 чипы катаем на 0.45 свинцовые шары, а EMMC на 0.3. Флюс берем неактивный, чтобы потом не вымывать из-под чипа. НЕ БЕРЕМ ФЛЮС NC-559 (ибо он обязателен к отмывке) и ТТ (ибо в высокочастотных цепях он проводящий и ОЗУ будет работать с ошибками или вообще не будет).
После запайки всей этой радости emmc видна сразу, как и ОЗУ (ибо reg у нас и так был на 1GB, но не забываем в параметры ядра потом добавить mem=1G). Грузимся с usb замыканием 107 и 108 (fat32 диск с нашим fastboot.bin), и шьем все что нужно прямо из консоли fastboot через команды вида fatload/mmc write. Из linux это самый адекватный способ прошивки, если не хочется юзать виртуалку с виндой и HiTool.
И бинго — наш слабый и бесполезный arm неттоп на debian12 готов. Ниже видео с демонстрацией прекрасной скорости работы нашего монстра мульдимедиа индустрии (нет).
Как видите — получилась игрушка со скоростью работы ниже плинтуса. Еще модуль аппаратного ускорения видео жестко хочет 256-320М ОЗУ для работы, поэтому пришлось его выключить (ибо ОЗУ и так мало). ZRAM модуля в SDK для ядра из SDK тоже нет. Также прибавьте к этому сложность поиска вышеназванных приставок на авито (их или нет вообще, или они продаются за неадекватный прайс) — и в итоге получили дорогую бесполезную игрушку. Но делалось все это не ради целесообразности, а по фану. Так что поигрался — и хватит (подумал я).
Но нет😊. При очередном ленивом листании avito я наткнулся на огромное количество приставок Wifire Snowbox Palm2 A312 за менее чем 300 рублей. По железу они имеют все тот же SoC (ревизии f — hi3798mdmo1f), 512Mb RAM и 4Gb EMMC. Также имеется wifi n300 2.4Ghz/5Ghz rtl8192du и 100Mbit lan. По портам — все те же 2xUSB 2.0 и MicroSD. UART выведен на отдельные пины, что очень удобно (белый разъем внизу платы). Он тоже может иметь два вида распиновок (об этом в инструкции по прошивке по ссылке в конце статьи).




Как мы видели, в качестве десктопа (даже для офисной работы) этот SoC едва ли подходит, но как мини-сервер на linux за такие деньги — более чем, ибо старые orange pi с подобным железом (и без корпуса) на авито начинаются от 1000-1500 рублей. Поэтому я прикупил 5 штук и начал свои опыты.
SDK для сбора fastboot есть, debian rootfs для armv7hf сделать через debootstrap и упаковать в образ ext4 тоже не проблема. Проблема — старое ядро в SDK с мелким количеством модулей. Этот китайский SoC не в mainline linux, поэтому я смутно понимал как собрать для него ядро. В поисках патчей или готовых исходников я вновь полез в гугл и нашел две репы на github. Первая репа содержало ядро для всех Hi3716 / Hi3796 / Hi3798 версий (в том числе и для Hi3798MV200/Hi3798MV300, что вообще является armv8), но ветка для Hi3798MV100 была wip и сломана. Вторая репа содержала ядро для китайской приставки EC6108V9C на Hi3798MV100 SoC, и последняя версия ядра была 6.3rc5. Более чем нормально для debian 12. Привел конфиг ядра к debian подобному виду и собрал — все заработало. Последний штрих — создание «установщика» — fastboot который грузится с usb флешки и при запуске прошивает девайс файлами с этой же флешки (читая bootargs), после чего ребутит приставку. Кстати, помимо замыкания 107 и 107 для загрузки с usb флешки (в случае c A312 это можно сделать через дырочки дна не разбирая корпус) можно также просто очистить первый мегабайт emmc из uboot.
Свою сборку по старой традиции я выложил тут в теме приставки на 4pda. Но сборка была с косяками — emmc не работала на полной скорости (+microsd) + в mainline linux на момент 6.3rc5 еще не попал драйвер wifi (а этот с github разраба не работал — wifi интерфейс был виден, но mac адрес был нулевым и не подключался к любым точкам доступа). Из-за этих косяков сборку качали мало, но потом на все том же 4pda чел под ником woff сделал патчи для emmc и wifi, с которыми вышеописанные проблемы исчезли. Я их добавил в свою сборку, после чего количество скачиваний стало расти, правда wifi все-равно периодически рвал соединение. Спасло новое ядро 6.14.2 — в нем уже был майнлайн драйвер для realtek 8192du и wifi работал шикарно, собрал с этим ядром debian 13 (upd. 10.2025).
Тут можно скачать сборки debian с инструкциями для этой приставки. Бонусом там же рассказываю как вывести uart на av разъем и сделать для него кабель из комплектного RCA кабеля, и все про тот же апгрейд до 1Gb RAM. Плата кстати целиком на свинцовом припое, отлично паяется даже при низких температурах. Но качество платы — фигня, не перегревайте её лишний раз во избежании отрывания каких-нибудь площадок и дорожек.
Ну и напоследок — добавим капельку образовача для тех, кто хочет сам собрать сборку:
##############################KERNEL##############################
#зависимости
apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev dpkg-dev gcc-arm-linux-* debhelper-compat bc libdw-dev libssl-dev rsync
#defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- xxx_defconfig
#config
.....
#сборка
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- bindeb-pkg -j $(nproc)
##############################ROOTFS##############################
#зависимости
apt install binfmt-support debootstrap qemu qemu-user-static
#файл rootfs т. к. emmc
dd status=progress if=/dev/zero of=deb-root.img bs=1M count=1024
#делаем фс 32 бита, так как soc 32 бита
mkfs.ext4 -O ^64bit deb-root.img -L deb-rootfs
#монтируем и переходим
mount -o loop deb-root.img /mnt
cd /mnt
#ставим дебиан 13
debootstrap --arch=armhf --variant=minbase --foreign --include=locales,util-linux,apt-utils,systemd-sysv,iproute2,curl,wget,expect,ca-certificates,openssh-server,isc-dhcp-client,vim-tiny,nano,bzip2,usbutils,netbase,parted,wireless-regdb,wireless-tools,iw,bash,bash-completion,dialog,htop,ifupdown,kmod,lm-sensors,lsscsi,mc,mtd-utils,nano,pciutils,udhcpc,iputils-ping,e2fsprogs trixie . https://deb.debian.org/debian/
mount -v --bind /dev dev
mount -vt devpts devpts dev/pts -o gid=5,mode=620
mount -t proc proc proc
mount -t sysfs sysfs sys
mount -t tmpfs tmpfs run
LC_ALL=C LANGUAGE=C LANG=C chroot . /debootstrap/debootstrap --second-stage
LC_ALL=C LANGUAGE=C LANG=C chroot . dpkg --configure -a
#заполняем sources.list
nano /etc/apt/sources.list
#допиливаем остальные мелочи
echo '/dev/mmcblk0p1 / auto errors=remount-ro 0 1' >> etc/fstab
echo "hi3798mv100" > etc/hostname
echo "Europe/Moscow" > etc/timezone
cp /usr/share/zoneinfo/Europe/Moscow etc/localtime
echo "en_US.UTF-8 UTF-8" > etc/locale.gen
echo "ru_RU.UTF-8 UTF-8" >> etc/locale.gen
echo "LANG=ru_RU.UTF-8" > etc/locale.conf
#генерим локали
LC_ALL=C LANGUAGE=C LANG=C chroot . /bin/bash
locale-gen
#включаем логин на uart
ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyAMA0.service
#кидаем логи в озу
nano /etc/systemd/journald.conf
....
[Journal]
Storage=volatile
.....
#закидываем и ставим пакеты с ядром и headers
.....
apt autoremove; apt-get autoclean; apt-get clean; apt clean
#завершаем
umount *; umount */*;rm -r dev/*
