Подзабросил я свой сайт — его никто не читает, да и мне лень тратить время чтобы что-то сюда писать. Тем не менее, жизнь не стоит на месте, и интересного происходил довольно-таки много.
Листал я авито от нечего делать, и увидел интересный лот — какая-то контора продает сотню абсолютно новых Depo Sky A60 тонких клиентов по 600 рублей. Я бы прошел мимо, но два гигабитных порта уж очень приглянулись за такой прайс.
Железо за такие деньги более чем достойное:
SoC: Marvell Kirkwood 88F6282 (1.6Ghz, armv5, 1 core)
RAM: 1Gb DDR2-533
Flash: 1Gb NAND (TSOP48)
LAN: 1Gbit x2
USB: 6xUSB2.0
DVI-I, Audio+mic, RS-232.
Также в наличии аудио и старое видео на PCI-E (SiS VOLARI Z11).
Второй PCI-E выведен на mini pci-e внутри корпуса.



Сначала были мысли типа «а сныкали/закрыли ли разработчики uart в который пишет uboot, или есть шансы что он все-таки будет на плате», но при копании с тонким я был приятно удивлен — uboot пишет прямо на внешний COM порт. Вот такой кабель потребуется для подключения к uboot консоли. Можно взять на озоне за три сотки. Параметры подключения классические — 115200n8.
Сразу же возникла идея ставить такую штуку с Openwrt до роутера для прозрачного rutube+adguardhome для всей локалки. Но обломчик — поиск кастомов для железки ничего не дал.
Поиск стоковых прошивок тоже был нелегким, но все-таки я наткнулся на эту тему на doozan форуме. В ней человек с таким же устройством выкладывает стоковые прошивки + жалуется, что не может запустить на этом клиенте образы debian с doozan форума. «Хм, под этот старый тонкий есть актуальное ядро?» подумал я. Начал шерстить doozan форум, и понял, что этот SoC уже в mainline linux, поэтому нет проблемы взять: ванильное ядро + кастомный конфиг (c dozan форума) + rootfs любого дистра для armv5 = и получить полноценную ОС для этого тонкого. Только вот нужен еще dts для моего девайса, которого у меня конечно же не было. В стоковой прошивке его тоже не было (ибо там старое ядро 2.6.39). Надеясь на быстрое решение проблемы (чтобы кто-то подкинул мне готовый dts 😄), я создал эту тему на все том же doozan форуме.
Довольно быстро мы подобрали нормальный dts от похожего устройства. Правда возникли некоторые сложности (не рабочее usb из-за конченного хаба, что по i2c регулирует мощность портов, не рабочее старое видео и аудио) — но меня это мало волновало. Современная нормальная ОС завелась на дешевом девайсе с двумя гигабитными сетевыми — а большего я и не ждал. Также владелец doozan форума (bodhi) добавил этот тонкий клиент в список поддерживаемых для своих сборок.
Поиграв немного с debian я решил впихнуть на девайс openwrt, ибо для описанной выше цели она будет поудобнее. Сначала я взял mainline ядро + rootfs от похожего девайса + положил модули ядра в rootfs. Все работало, но не нравились ошибки при установки kmod пакетов, ибо модули с репозиториев openwrt к кастомному ядру не подходили. Немного погуглив я выяснил, что marvel kirkwood в openwrt и так поддерживается, но образов для этого тонкого клиента конечно же никто не делал. Ну значит сделаю я🙂.
Нашел девайс максимально похожий на тонкий клиент с поддержкой openwrt — им оказался cisco on100. Далее «сборка» openwrt для тонкого делалась из образа для cisco on100, она заключалась в замене dtb для тонкого + перепаковка ubifs под флешку в тонком. Как итог — Openwrt работает, репы включая kmod пакеты тоже работают. Но проблемы тоже есть: добавились болячки из дерева устройств (не рабочие usb/pci-e/video/audio) + подлянку принесли разрабы openwrt — они собирают ядра для kirkwood без highmem, поэтому видно только 768МБ ОЗУ.
Девайс не имеет аппаратного ната (hardware nat offload) в нормальном понимании, но это компенсируется софтовым костылем в ядре в драйвере платформы (NFP), так что если ставить девайс до роутера для прозрачного rutube — скорости приличные (все 500MBit от провайдера отдает как минимум) +не забывайте врубать софтовое ускорение средствами ядра (software offload). Также без nat тестировал между двумя компами через тонкий клиент — получил цифры в районе 800+MBit.

Итог своей «работы» я бы и не выкладывал, но один человек попросил создать отдельную темы и выложить — вот я и выложил в этой теме на все том-же doozan форуме. После этого девайс с openwrt заметили ребята с 4pda (вот моё сообщение, а болтали они о тонком еще раньше), и понеслось — сборку скачали около сотни раз, и оригинальный лот довольно-таки быстро раскупили с avito, но до сих пор этот тонкий новым можно найти на все том же авито от других продавцов за < 1000 рублей.
Даже нашелся «особо одаренный» барыга, который перепродавал эти тонкие с моей сборкой openwrt на авито в три раза дороже (вроде бы он барижит до сих пор). Я такое не поддерживаю, ибо драть втридорога за то, что ты просто существуешь и смог прошить чужую сборку по инструкции — тупо, да и других ребят лишаешь дешевого товара (который бы они могли купить для себя). Не покупайте у него ничего.
Ниже привожу своё переведенное сообщение с публикацией сборки
(на случай закрытия doozan форума):
ВНИМАНИЕ! НЕ ШЕЙТЕ ДРУГИЕ ДЕВАЙСЫ ЭТИМ ОБРАЗОМ! Он предназначен только для девайсов с флешкой Samsung NAND 1GiB 3,3V 8-bit, Manufacturer ID: 0xec, Chip ID: 0xd3.
Что можно скачать:
1) Debian (rootfs сделал через debootstrap, systemd логи лежат в ОЗУ) с конфигами ядра от bodhi
Ссылка (образы и инструкции)
2) OpenWRT с официальным ядром (kmod пакеты работают)
(официальное ядро без highmem, так что будет доступно только 768МБ ОЗУ)
Ссылка (образы и инструкции)
3) Стоковые прошивки и исходники (а также руководство с паролями)
Ссылка, зеркало, зеркало
Проблемы всех сборок (так как работа над FTD (dtb/dts) не закончена):
-usb — работают только очень маломощные девайсы (и то не всегда)
-mini pci-e — не работает
-videocard, soundcard — не работает
Дополнительные ссылки:
Тема, в которой мы работает над деревом устройств (usb, pci-e,…)
Тема с ядрами и rootfs debian 12 от bodhi (если вас не чем-то не устраивает эта сборка)
Если хотите собрать openwrt сами, то вот шикарная инструкция как это сделать (но для кастомизации под тонкий клиент потребуются скилы FDT/UBI/др), или если вас устраивает все по дефолту, то просто расковыряем образ похожего девайса:
me@pc:~/tmpdir$ wget https://downloads.openwrt.org/releases/23.05.5/targets/kirkwood/generic/openwrt-23.05.5-kirkwood-generic-cisco_on100-squashfs-sysupgrade.bin
me@pc:~/tmpdir$ tar xf openwrt-23.05.5-kirkwood-generic-cisco_on100-squashfs-sysupgrade.bin
me@pc:~/tmpdir$ cd sysupgrade-cisco_on100/
#find out where the uImage header and FTD are in order to delete
me@pc:~/tmpdir/sysupgrade-cisco_on100$ binwalk kernel
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 uImage header, header size: 64 bytes, header CRC: 0xF503333B, created: 2024-09-23 12:34:46, image size: 2791120 bytes, Data Address: 0x8000, Entry Point: 0x8000, data CRC: 0x62DCBA0C, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "ARM OpenWrt Linux-5.15.167"
64 0x40 Linux kernel ARM boot executable zImage (little-endian)
30160 0x75D0 xz compressed data
30652 0x77BC xz compressed data
2779640 0x2A69F8 Flattened device tree, size: 11544 bytes, version: 17
me@pc:~/tmpdir/sysupgrade-cisco_on100$ dd if=kernel of=zImage-baddtb bs=64 skip=1
me@pc:~/tmpdir/sysupgrade-cisco_on100$ binwalk zImage-baddtb
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Linux kernel ARM boot executable zImage (little-endian)
30096 0x7590 xz compressed data
30588 0x777C xz compressed data
2779576 0x2A69B8 Flattened device tree, size: 11544 bytes, version: 17
me@pc:~/tmpdir/sysupgrade-cisco_on100$ dd if=zImage-baddtb of=zImage bs=2779576 count=1
#make uImage with our FDT
me@pc:~/tmpdir/sysupgrade-cisco_on100$ cat kirkwood-promwad-thin-client.dtb >> zImage
me@pc:~/tmpdir/sysupgrade-cisco_on100$ mkimage -A arm -O linux -T kernel -C none -a 0x8000 -e 0x8000 -n Linux-5.15.167-1 -d zImage uImage5.15.167-1
#we need to be root when creating a rootfs so that there are no permissions issues
me@pc:~/tmpdir/sysupgrade-cisco_on100$ sudo -s
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# unsquashfs root
#enable ttyS0 console for login and shell
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# echo 'ttyS0::askfirst:/usr/libexec/login.sh' >> squashfs-root/etc/inittab
#set general ubi parametrs
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# echo '[ubifs]' > ubinize.cfg; echo 'mode=ubi' >> ubinize.cfg; echo 'image=ow.tmp' >> ubinize.cfg; echo 'vol_id=0' >> ubinize.cfg; echo 'vol_size=900MiB' >> ubinize.cfg; echo 'vol_type=dynamic' >> ubinize.cfg; echo 'vol_name=rootfs' >> ubinize.cfg ;echo 'vol_flags=autoresize' >> ubinize.cfg
#set nand parametrs
#erase block, page, and subpage parameters are taken from the nand flash datasheet
#logical UBI block parameters calculated according to the formula, and matches the value in the stock firmware
#the count of logical UBIFS blocks is calculated for the UBIFS size of 900M
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# mkfs.ubifs -q -r squashfs-root/ -m 2048 -e 129024 -c 8191 -o ow.tmp
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# ubinize -o ow23.05.5.ubi -m 2048 -p 128KiB -s 512 ubinize.cfg
root@pc:/home/me/tmpdir/sysupgrade-cisco_on100# chown me.me ow23.05.5.ubi uImage5.15.167-1