суббота, 29 мая 2021 г.

TerraMaster F4-210 & Ubuntu

У меня дома опрометчиво появился новый зверек - TerraMaster F4-210, модель с 2Гб памяти за $260 на SoC Realtek1296 - arm64. И я решил его начать использовать. Использовать - это значит сделать цифровым сердцем дома - поставить dhcp/dns/tor, homeassistant, vpn и прочие радости NAS - transmission, dlna, aria2.

Но вот незадача - не получается. Там сейчас стоит OpenWrt 15.05 + кастомный linux kernel 4.4.18. Для использования моего zigbee stick cc2531 понадобился новый модуль ядра - cdc-acm. Для использования wireguard vpn нужен либо модуль ядра tun (если запускать wireguard в user space) либо собственный модуль wireguard. cdc-acm я с грехом пополам как-то собрал. Не совсем правильно - модуль грузится и отображается в lsmod со статусом  [permanent], что говорит о том, что у него не реализована функция выгрузки. tun грузиться и работать нормально не захотел. Я подозреваю, что проблема в неправильной конфигурации ядра при сборке модуля. Но правильной конфигурации у меня нет :(. Хотя исходники есть - на официальном сайте.

Все, что нашел по аппарату сложил сюда.

Сначала я попытался собрать инфу с рабочей платы:

Еще есть прошивка:
  • firmware, с помощью которого можно восстановить убитый NAS после неудачного обновления как написано на официальном форуме - через USB
  • php7-all.tar - архив PHP Web UI, идет на флешке, вставленной в USB 2.0 разъем платы.
  • Последняя прошивка - TOS_A1.0_Install_ARM4.2_4.2.12_2104281637_2104281658.ins - вся файловая система NAS


И в общем я решил попробовать накатить туда ubuntu или другой линукс.

Есть очень сильно похожая плата - Banana Pi BPI-W2 на таком же процессоре. Там есть описанная возможность установить разные линуксы, в том числе ubuntu и openWrt. На моей плате есть uart (такой же порт как в TV Box Zidoo-X9S - TX и RX можно подключить с разъема, а землю с любого места платы, поскольку uart разъем на плате - jst с шагом 2мм немного маловат для подключения трех стандартных монтажных проводов). С uart терминалом можно войти либо в SPI prompt (d/g/r> prompt, если зажать ctrl+q в uart терминале перед включением платы), либо в uboot (Realtek> prompt, если предварительно зажать Esc в uart терминале перед включением платы), либо в сам OpenWrt Linux, если ничего не нажимать.

Далее попробовал загрузить ядро. Поскольку scsi в данной сборке uboot судя по всему нет, то ядро грузил с USB поскольку перепрошивать eMMC не пока сыкотно. Ну, допустим, я знаю параметры загрузки текущего ядра OpenWrt: `rdinit=/sbin/init  mtdparts=RtkSFC:128k(factory),512k(uboot),320k(logo),1408k(afw),64k(dtb),7680k(kernel),5632k(initrd)  earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 loglevel=7 U-boot=2015.07 (Nov 27 2019 - 14:31:13)`

device-tree есть с рабочей системы - см. mtd map, mtd dump выше. Больше всего на мой взгляд похож 'NVR_18/linux-4.4.18/arch/arm64/boot/dts/realtek/rtd-1296-saola-2GB-HDMI.dts' из исходников. С некоторыми изменениями - там разные bootargs, initrd-start, end, и другие параметры. Может они как-то динамически меняются во время сборки OpenWrt.

Сделал дампы uart:

  • plain1.cap.txt - простая загрузка
  • spi.cap.txt -  вход SPI prompt (если зажать ctrl+q в uart терминале перед включением платы)
  • ubuntu4.cap.txt - безуспешная попытка загрузки другого ядра (предварительно зажать Esc в uart терминале перед включением платы для входа в uboot console - Realtek>)
  • ubuntu2-bootm.cap.txt - безуспешная попытка загрузить ядро через комманду uboot `bootm`
Что можно делать в консоле SPI prompt непонятно. На сайте Banana Pi W2 в инструкции есть несколько команд, но мне не совсем понятно, что они делают. На форуме zidoo есть некоторое описание, но неполное.

На форуме Armbian нашел похожий тред по запуску Armbian на похожем железе, запустил примерно так:

`usb start && fatload usb 0:1 $kernel_loadaddr uimage && fatload usb 0:1 $fdt_loadaddr tm_f4-210.dtb && env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 noinitrd root=/dev/sda2  rootfs=ext2 init=/bin/bash && bootr`
...
И загрузилось старое ядро - 4.4.18-g8bcbd8a-dirty :(

Попробовал загрузить ядро как написано тут - через комманду `bootm`. Получил вот такое сообщение:
Realtek> fatload usb 0:1 $kernel_loadaddr uimage
reading uimage
10630032 bytes read in 667 ms (15.2 MiB/s)
Realtek> fatload usb 0:1 $fdt_loadaddr tm_f4-221.dtb
reading tm_f4-221.dtb
65536 bytes read in 32 ms (2 MiB/s)
Realtek> env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 noinitrd root=/dev/sda1 rootfs=vfat 
Realtek> bootm $kernel_loadaddr - $fdt_loadaddr
Wrong Image Format for do_booti command
ERROR: can't get kernel image!


Че делать дальше пока не знаю.