Подзабросил я свой сайт - его никто не читает, да и мне лень тратить время чтобы что-то сюда писать. Тем не менее, жизнь не стоит на месте, и интересного происходил довольно-таки много.
Листал я авито от нечего делать, и увидел интересный лот - какая-то контора продает сотню абсолютно новых Depo Sky A60 тонких клиентов по 600 рублей. Я бы прошел мимо, но два гигабитных порта уж очень приглянулись за такой прайс.
Железо за такие деньги более чем:
SoC: Marvell Kirkwood 88F6282 (1.6Ghz, armv5, 1 core)
RAM: 1Gb DDR2-667 (4x256 Hynix H5PS2G83AFR)
Flash: 1Gb NAND (TSOP-48 Samgung K9K8G08U0D)
LAN: 1Gbit x2 (Marvell 88E1121R-TFE1)
Video: XGI Volari Z11 (распаяно на PCI-E, 64MB VRAM DDR2 Hynix H5PS5182GFR)
Audio: Realtek ALC5621 (i2с/i2s) (+пассивный buzzer на одном из выходов)
USB: USB2.0 x6 (HUB: Microchip USB2517)
PCI-E: mini-PCIe на плате
COM: через DB9
RTC на плате (с батарейкой).
Девайс сделала Promwad для AK-Systems, и по итогу получился тонкий клиент AK-Systems AK1100. А Depo по сути взяла плату от AK-Systems и запихала в свой корпус, назвав девайс Depo Sky A60. Из значимых различий - количество usb портов - у AK1100 не 6 портов, а 4 (так как два порта смотрят внутрь корпуса).

Сначала были мысли типа "а спрятали ли/закрыли ли разработчики 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 от похожего устройства, но с наскока завели только сетевухи, а дальше все на какое-то время заглохло. Но потом у меня снова возник интерес к девайсу, и я стал допиливать остальное:

  • Для работы PCI-e прошлось поиграться в dts с gpio (исходя из board файла платы из сорцов стокового ядра) (upd: 09.2025)
  • Для работы светодиодов и кнопки - аналогично (upd: 09.2025)
  • Для работы звука пришлось его объявить в dts с верной i2c шиной и адресом (i2c0@1a)/i2s шиной/драйвером/и фиксированной частотой тактирования для 48кГц (динамику на плате не реализовали) + добавить аудио виджеты и маршруты - опять же, все это помог сделать board файл из сорцов стока + сделал в ОС включение каналов при старте и ресемплнинг всего на 48кГц в альсе. По итогу в debian полет нормальный, а в openwrt нужно собирать свои kmods (может как-нибудь потом..). И кстати, на плате есть пьезопищалка, что идет из аудиокодека, так что можно выводить звук не на джеки, а на нее. (upd: 09.2025)
  • Для работы видео пришлось портировать xgifb драйвер в новое ядро. Этот драйвер был в ядре 5.0.21, а из 5.1 его уже выпилили. Я довольно легко донес его до 6.15.2 с минимальными правками в несколько строк, только вот он не заработал - писал i/o error. Начал шерстить код драйвера - увидел, что в начале для обнаружения он долбит в обычные i/o ports. Стал пробовать xgifb и старые ядра - и оно работает на 5.16.20, а на 5.17 ломается с i/o errors. Нашел причину - коммит c1aa4b55aae4c283e57c07e71968504bfa7d4a13, в котором из драйвера pci-mvebu выкинули специфичную для arm функцию pci_ioremap_io(). Но в отличии от x86 - на arm нет настоящих i/o ports (делается эмуляцией), вот и валится оно. Я пробовал переписать xgifb видео драйвер, чтобы он не юзал i/o ports (а юзал альтернативные методы) - но ошибка не менялась чтобы я не делал. Тогда я решил вернуть старое поведение для pci-mvebu драйвера - впихнул участки совместимости из pci-mvebu 5.16.20 в pci-mvebu 5.17 - это проканало и все заработало. Теперь эти правки надо нести до 6.15.2, но я увидел, что код pci-mvebu активно менялся чуть ли не каждый релиз - а значит для честного фикса я буду должен убить месяц, чтобы пройти правками все версии ядра до актуального. Времени на это выделить я не могу, так что пошел более тупым методом - взял мой рабочий фикшенный pci-mvebu из 5.17 и просто портанул его на 6.15.2. Да, некоторые pci-e плюшки пропали, но едва ли обычный юзер заметит разницу - зато видео работает😁. Но на всякий случай оставил сборку debian без видео с актуальным pci-mvebu драйвером тоже. Ну а для openwrt по поводу видео заморачиваться не стал - ибо для 23.05.6 потребуется собирать свой kmod, а для 24.10.х потребуется собирать свой kmod + ковырять ядро, что сделает нерабочими kmod пакеты с репозиториев. (upd: 10.2025)
  • Для работы usb пришлось поломать голову - хаб USB2517 по i2c не отвечает, соответственно не конфигурируется и висит в воздухе с VID/PID 0000:0000, объявляя максимально допустимый ток для устройств - 0мА. Как итог - практически все устройства отказываются работать. В стоковой прошивке поведение аналогичное, разве что устройства все-таки работают (старым ядрам было пофиг на ограничения по току). И вишенка - в сорцах стоковой прошивки блок инициализации хаба закоментирован. Хм, больше похоже на косяк вендора... Читаю даташит - и реально, вендор выставил страпы (резисторами) в положение "бери конфиг с i2c флешки 24й серии" (которой около хаба нет), а надо было в положение "бери конфиг по i2c от soc". Ради теста перевел (пайкой) CFG_SEL1 страп резистор из pullup в pulldown - и хаб увиделся на i2c1@2c. Далее повесил хаб в dts с верной шиной/адресом/параметрами питания - и все заработало. Но паять резисторы 0603 не каждый захочет - так что стал искать альтернативы методы починки usb без пайки для народа - и нашел. Судя по даташиту - этот пин хаба конфигурацию ловит только после ресета, а остальное время - он служит для индикации HS_IND, а судя по board файлу из сорцов стоковой прошивки - к нему из SoC идет gpio чтобы считывать этот самый HS_IND. Я подумал - знать HS состояние для usb мне не к чему. А вот сделать свою правильную "подтяжку" с помощью этого gpio (чтобы избежать пайки) - самое то. С точки зрения проектирования - неправильно, зато без пайки. По итогу - этот gpio добавил в dts в нулевое состояние при старте - хаб видит этот 0 после ресета драйвером, и понимает что надо ловить конфиг по i2c. А после запуска ОС этот gpio освобождается (переводится в direction = in), чтобы не было драки между 0 на gpio у SoC и 1 на HS_IND пине у хаба. И все работает. (upd: 10.2025)

Dts был готов, и а далее для debian я собрал ядро на основе конфига от bodhi, и собрал ubi контейнер с ubifs rootfs с параметрами для nand (которые подсмотрел в даташите + в логах стоковых прошивок) - и после правки envs в uboot (из-за новой разметки) - последний debian со свежим ядром завелся. Также владелец doozan форума (bodhi) добавил этот тонкий клиент в список поддерживаемых для своих сборок.
Поиграв немного с debian я решил впихнуть на девайс openwrt, ибо для некоторых задач она будет поудобнее. Сначала я взял mainline ядро с dtb + rootfs от похожего девайса cisco on100 (разве что из squashfs собрал ubi контейнер+ubifs для текущей nand) + положил модули ядра. Все работало, но не нравились ошибки при установки kmod пакетов, ибо модули с репозиториев openwrt к кастомному ядру не подходили. Немного погуглив я выяснил, что текущий SoC kirkwood в openwrt и так поддерживается, так что майнлайн ядро заменил ядром от cisco on100. Так все это и работало долгое время - kernel от cisco on100 + мой dtb + rootfs от cisco on 100 в ubifs.
Но потом народ на форуме попросил сборку в нормальном виде (с обновлениями через sysupgrade из веб интерфейса + фичей сброса в дефолт) - сделал согласно этому мануалу (+немного правок в сборочных рецептах) (upd. 10.2025).
Как итог - Openwrt работает, репы включая kmod пакеты работают, обновления через веб и сброс в дефолт тоже работает. Но подлянку принесли разрабы openwrt - они собирают ядра для kirkwood без highmem, поэтому видно только 768МБ ОЗУ. Но это мелочи.
И кстати, девайс не имеет аппаратного нат (hardware nat offload) в нормальном понимании, но это компенсируется софтовым костылем в ядре в драйвере платформы (NFP), так что если ставить девайс до роутера для прозрачного rutube - скорости приличные, все 500MBit от провайдера отдает как минимум (по WireGuard, другие протоколы сильно медленней из-за старого SoC). И не забывайте врубать софтовое ускорение средствами ядра (software offload), тоже будет побыстрее.
Также без nat я протестировал скорость между двумя компами через тонкий клиент - получил цифры в районе 800+MBit. Но все-таки не возлагайте на этот тонкий больших надежд, ибо очень старая armv5 архитектура и одно ядро (пусть и с высокой 1.6 ГГц частотой) - уже не фонтан. И в некоторых сценариях этот SoC будет проигрывать попсовому MT7621 и подобным.

Изначально итог своей работы я бы и не выкладывал, но на форуме попросили создать отдельную тему и выложить - вот я и выложил в этой теме на все том-же doozan форуме. После этого девайс заметили ребята с 4pda (вот моё сообщение, а болтали они о тонком еще раньше), и понеслось - сборку скачали около сотни раз, и оригинальный лот довольно-таки быстро раскупили с avito, но до сих пор этот тонкий новым можно найти на все том же авито от других продавцов за < 1000 рублей.
Даже нашелся "особо одаренный" барыга, который перепродавал эти тонкие с моей сборкой openwrt на авито в три раза дороже (вроде бы он барижит до сих пор). Я такое не поддерживаю, ибо драть втридорога за то, что ты просто существуешь и смог прошить чужую сборку по инструкции - тупо, да и других ребят лишаешь дешевого товара (который бы они могли купить для себя). Не покупайте у него ничего.


Ниже ссылки для скачивания сборок и мануалы:

1) Debian (rootfs сделал через debootstrap, systemd логи лежат в ОЗУ) с конфигами ядра от bodhi
Ссылка (образы и инструкции)
2) OpenWRT с официальным ядром (kmod пакеты работают)
(официальное ядро без highmem, так что будет доступно только 768МБ ОЗУ)
Ссылка (образы и инструкции)
3) Стоковые прошивки и исходники (а также руководство с паролями)
Ссылка, зеркало, зеркало

Дополнительные ссылки:
Тема, в которой мы работает над деревом устройств
Тема с ядрами и rootfs debian от bodhi (если вас не чем-то не устраивает эта сборка)

Сборка:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

CAPTCHA ImageChange Image