Делаем домашний сервер из: MXQ pro 4K

в 9:31, , рубрики: linux, сервер

К вопросу о том, "что за дом без серверной стойки для души и экспериментов":
серверная в подвале, с круглосуточно гудящими аппаратами - теперь в прошлом. Для серьезных вещей удобнее купить VDS на хостинге, а для несерьезных...

Ну вот, например, попалась смарт-приставка для TV MXQ pro 4K.

Делаем домашний сервер из: MXQ pro 4K - 1

По описанию на маркетплейсе - там и 64Gb, и тут же одновременно 512Gb (интересно, что именно они имели ввиду?) при цене, скажем так, пакета апельсинов.
Ну, что ж, надо глянуть, чего там внутри.

Ну, софт особо не интересует — Андроид, стандартные для таких приставок приложения типа онлайн‑кинотеатров, ничего необычного.

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

Делаем домашний сервер из: MXQ pro 4K - 2

На плате - аж три USB-порта, старинный полноразмерный слот для SD-карт, HDMI-выход, сетевой разъем, аудиовыход и еще что-то, возможно гнездо для дополнительного IR-приемника

Уже по опыту зная, что в подобных устройствах может быть примерно любой процессор, и даже надпись на нем не гарантирует что он именно такой как написано - сразу ищем serial port. И находим - четыре площадки под гребенку - это наверняка он.
Теперь надо разобраться что есть что: тут очень помогает простейший карманный осциллограф - там где четко 0 - Gnd, где более-менее постоянные 3в - Rx, где 3в с импульсами-провалами - Tx, данные передает.

А вот фиг, Gnd есть, остальные контакты просто висят в воздухе. А почему? А потому что рядом с ними площадки для распайки двух резисторов, на которых этих резисторов нет.

Делаем домашний сервер из: MXQ pro 4K - 3

С помощью все того же осциллографа убеждаемся, что там, на площадках, есть искомые Rx-Tx, значит можно туда подпаяться, а лучше - припаять резисторы и гребенку, пригодится.
Резисторы можно примерно любые подходящие по размеру, сопротивлением до 200 Ом - они там токоограничивающие, но если не планируется подключать ничего кроме USB-TTL адаптера то можно особо не заморачиваться.

С какой-нибудь платы-донора (например, от старой материнки) феном снимаем пару подходящих резисторов, и феном же пришлепываем на места (спойлер - это была самая сложная часть работы. И при этом - самая необязательная).

Теперь на пинах гребенки есть сигнал, остается подключить адаптер и смотреть, что там.

Там - на скорости 1500000 бод виден процесс загрузки. Всё стандартно: SPL, U-Boot, kernel...

DDR Version V1.09 20190628
In
ID:0xFFF
300MHz
LPDDR3
Bus Width=32 Col=10 Bank=8 Row=14 CS=2 Die Bus-Width=32 Size=1024MB
mach:14
OUT
Boot1 Release Time: May  4 2018 15:21:31, version: 2.49
ChipType = 0xc, 342
mmc2:cmd19,256
SdmmcInit=2 0
BootCapSize=2000
UserCapSize=7456MB
FwPartOffset=2000 , 2000
SdmmcInit=0 NOT PRESENT
StorageInit ok = 27978
SecureMode = 0
GPT 00@0x00012000(kernel),0x0000a000@0x00018000(boot),0x00010000@0x00022000(recovery),0x00020000@0x00032000(backup),0x00040000@0x00052000(cache),0x00008000@0x00092000(metada
ta),0x00002000@0x0009a000(kpanic),0x00400000@0x0009c000(system),-@0x0049c000(userdata)D��� signature is wrong
LOADER Check OK! 0x60000000, 44681
TOS    Check OK! 0x68400000, 55736
Enter Trust OS
INF TEE-CORE:init_primary_helper:319: Initializing (1.0.1-72-gf230aa2 #2 Fri Sep 29 10:22:10 UTC 2017 arm)
INF TEE-CORE:init_primary_helper:320: Release version: 2.0
INF TEE-CORE:init_teecore:79: teecore inits done


U-Boot 2014.10-RK322X-06 (May 23 2023 - 16:43:56)

CPU: rk322x
cpu version = 3
CPU's clock information:
    arm pll = 600000000HZ
    periph pll = 1200000000HZ
    ddr pll = 600000000HZ
    codec pll = 500000000HZ
Board:  Rockchip platform Board
Uboot as second level loader
DRAM:  Found dram banks: 1
Adding bank:0000000060000000(0000000040000000)
Reserve memory for trust os.
dram reserve bank: base = 0x68400000, size = 0x00100000
128 MiB
GIC CPU mask = 0x00000001
......
  

В общем, процессор rk322x, обьем "диска" (mmc) 7Gb, RAM - 1Gb, LPDDR3
Могло быть и хуже, так-то в общем неплохой 4-ядерный 32-битный процессор, хоть и устаревший.

Что из этого можно сделать?

Ну, например, можно сделать небольшой веб‑сервер, или что‑то подобное. Один гигабайт памяти — теперь считается немного, но если не размахиваться на J2EE решения то сойдет.
Или можно сделать десктоп — есть графический акселератор, есть куда подключать периферию — конечно, отнюдь не самая быстрая конфигурация, но для некоторых применений и этого достаточно.

В конце концов, для души и экспериментов — самое то.

Чем хороши процессоры Rockchip - системы на их базе сложно окирпичить, то есть если не удается запуститься со встроенной памяти, например, туда записано что-то не то - тогда они будут пытаться загрузиться с других доступных носителей, SD-карты, USB и так далее.
Но можно: например, конкретно эта модель в любом случае СНАЧАЛА читает загрузчик со встроенной mmc, и только ПОТОМ переходит к внешней. Если на внутренней вообще ничего не будет - это не проблема, а вот если сначала начнет загружаться, и зависнет в процессе...
Есть методы с закорачиванием вывода Clck чипа mmc, но надо его еще найти и подступиться. В общем, сломать при желании можно всё.

Но в данном случае не стал заниматься самостоятельной сборкой загрузчика и ОС, а взял готовое (именно поэтому подключение к RxTx и пайка резисторов по сути оказалась не нужна. На этот раз.)

Есть такой проект Armbian, и есть форум, на котором уже разобраны примеры с установкой ОС на подобное железо.

Кратко, процесс сводится к тому, что надо подобрать образ mutlitool.img, который успешно запустится на конкретном устройстве, и образ Armbian, который не менее успешно запустится после записи на встроенную mmc.

Конкретно с этим девайсом особых проблем быть не должно, потому что там стоит достаточно стандартная LPDDR3-память, и никаких особых извращений в процессе запуска системы не требуется.

Достаточно 2Gb SD-карты.
Допустим, она определилась в системе как /dev/sdb:

dd if=multitool.img of=/dev/sdb status=progress

Ждем, сразу вынимаем, загружаемся - первый запуск может быть довольно долгим, потому что программа будет расширять предзаписанный NTFS-раздел на всё доступное пространство SD-карты.

Заморгали красно-синие светодиоды - на экране, подключенном к HDMI, появляются диалоговые окна.

Делаем бекап (необязательно), потом Reboot, и тащим карту снова в компьютер.

На ней появился раздел MULTITOOL - там должен быть бекап, если делался, и туда же в images нужно записать образ ОС, в моем случае Armbian-unofficial_24.11.0-trunk_Rk322x-box_bookworm_edge_6.11.3_minimal.img (можно найти, где-то там на форуме пробегала ссылка, и не обязательно именно этот).

Потом отмонтировать раздел, чтобы он точно записался на карту, и потом снова загружать коробку с карточки.

На этот раз желательно сделать Erase flash, а потом записать новый образ системы. Карту вынуть, перезагрузиться — если всё прошло хорошо, то система загрузится, задаст несколько вопросов типа «Установите пароль», «Выберите локаль» — и собственно всё. Еще один перезапуск и должна работать.

По сути - обычный Debian с некоторыми дополнениями, типа armbian‑config, armbianmonitor и т. п. — что‑то уже установлено, что‑то устанавливается через apt.
Кто не доверяет чужим сборкам — может собрать свою собственную, начиная с ядра и заканчивая ОС, но это уже другая история.

Ну а еще можно вспомнить о том, что SD‑разьем — это по сути SPI‑интерфейс, куда можно что‑то подключить если написать драйвер работающий с SPI, что у этого процессора есть встроенный криптомодуль, умеющий аппаратно, например, sha256, что есть наконец IR‑приемник — при желании есть куда копать.

Автор: JBFW

Источник

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


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