Одноплатный компьютер NanoPi M4

В данной теме я решил завести блог по компьютеру “NanoPi M4”. Основная цель это сделать домашний NAS сервер или как ещё его называют сетевое хранилище.
До этого я уже пробовал Blueendless BS-U35wf WiFI HDD, но он мне не подошел в виду того что поставить что-то прошивка была ограничена только FTP и SMB. А альтернативных прошивок не было.

Тогда я понял что мне нужен целиком документированная железка с функцией NAS и возможностью делать свои прошивки. Просмотрев кучу однопалатных компьютеров я остановился на NanoPi M4.

Далее я буду рассказывать про свои эксперименты с этим компьютером. А так же про то как его можно запрограммировать.

2 Симпатий

Чем “NanoPi M4” лучше Малики?


Плюсов у “NanoPi M4” много.
Основной плюс для меня это NAS для дома. Без слежки и полностью доступный для меня. По тестам из интернета скорости на 5% выше Малинки. Как только дойдут руки обязательно проверю.

Официальный сайт:
https://www.friendlyarm.com/index.php?route=product/product&product_id=234

Суть в том что на плате выведены пины PCIEх1 на которых можно повесить плату расширения и подключить диски.

Документация на плату “NanoPi M4”
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4
https://drive.google.com/drive/folders/1nFyaZ8mnfjuoXtK6gzpxVhyrdyqKtJfC

Второе отличие полностью доступна документация в отличии от малинки. Минус цена на 30% больше.

Чип Rock RK3399


Документация на SOC включая модуль питания и клоковое дерево, видео адаптер, ПДП и и прочее.
https://github.com/rockchip-linux/docs
Документация по ARM
https://static.docs.arm.com/ddi0487/ea/DDI0487E_a_armv8_arm.pdf?_ga=2.177989413.1685755406.1578677715-331273053.1574956729

В SOC встроена загрузка с 4 носителей. Вставить в слотом снифер для microSD-карт можно получить JTAG отладку. У малинки до JTAG не доберешься. JTAG это аппаратный отладчик для его работы не нужна ни ОС ни загрузки. Он позволяет остановить процессор и начать выполнять команды по тактам, а так же он позволяет читать и менять регистры.


Минус оригинальный снифер стоит 15$ и отладчик 10-25$

Так что с такой платой можно писать ОС и свой загрузчик. Хотя достаточно U-Boot загрузчика он умеет отлаживать через COM порт. Который выведен на пины платы (смотри рис 2 между USB).

GPU - закрыто.
Правда формат инструкций отреверсели
https://github.com/cwabbott0/mali-isa-docs/blob/master/Midgard.md
А загрузка задач в GPU у ARM в исходниках.

Т.е. по факту имеем 95% информации для написания своего драйвера GPU.

Для программистов которые решат написать свою ОС понадобится TRM. Там описаны регистры SOC в дополнение к тому что на GIT более детально что ли
http://rockchip.fr/Rockchip%20RK3399%20TRM%20V1.3%20Part1.pdf
http://rockchip.fr/Rockchip%20RK3399%20TRM%20V1.3%20Part2.pdf

Заказал я плату уже давно на Aliexpress. Но первый продавец не пережил короновирус, поэтому пришлось делать возврат средств и заказывать в другом магазине. Посылка из магазина дошла за 14 дней.
Нашел где заказать снифер всего за 100 рублей, а JTAG-отладчик у меня уже есть.
Правда походу со снифером облом, продавец сделал посылку не отслеживаемой. Уже 60 дней в пути, а извещения как не было так и нет. Как вы думаете стоит ли подождать и просить возврат средств? Трекинг показывает, что это сборные грузы которые доставляют раз в 60 дней. Есть вариант, что посылка не попала в первую партию тогда есть смысл просить продлить ещё на 30 дней или просить выслать повторно? Какой из 3-х вариантов выбрать?

С Али 2-3 месяца вроде вполне норм если бесплатный/самый дешевый способ доставки…

Я впрочем и с Banggood ждал несколько месяцев в прошлом году вместо обещанных 7-15 рабочих дней ) Но там вроде бы много у кого в тот период так случилось и потом вернули часть цены внутренними кредитами.

Подожду ещё, просто на алиэкспресс написано что 8.03.20 прибыло в Россию и где-то у нас пропало.

Сделал запись вскрытия посылки из магазина RealQvol с моим FriendlyARM компьютером

Кратко о составе:

  • Сама палат компьютера с 4ГБ памяти
  • Карта памяти eMMC 16ГБ
  • Адаптер eMMC -> microSD
  • Кабель USB Type-C для питания
  • Блок питания
  • две антенны одна Wi-Fi другая BT
  • Кабель патч-корд из витая пара для локальной сети.
    Дополнительно
  • Алюминиевая подставка за место корпуса
  • USB2UART
  • Плата расширения она же шляпа с SATA контроллером “NanoPi M4 SATA HAT”
  • Шляпа комплектуется набором SATA кабелей.

Плюс заказал кучу лишнего.

Решил переводит Wiki от разработчика платы, на сайте у них правки закрыты поэтому свои перевод буду выкладывать здесь.
https://friendlyarm.fandom.com/ru/wiki/Friendlyarm_вики

Далее расскажу для чего нужен напильник и как им работать.

Не получать посылку учитывая возможность заражения по теории вероятности. Я бы на некоторое время воздержался и не стал бы рисковать собой и своей семьей.

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

Тут всё продуманно:

  1. Вся электроника боится статики поэтому на предприятиях борются с пылью. И как следствие это дает защиту и от вирусов. Но основные средства далее.
  2. Это упаковка. Упаковка отправляется в ведро, руки моются с мылом.
  • Вообще когда получаешь посылку, то она в пленке без намёка на пыль. Так что воздухом посылки видимо обдувают.
  • А заводская упаковка, маленькие пластиковые конвертики, они были ещё на заводе сделаны до начало эпидемии. Но вот в магазине упаковщик их хватал руками. Их можно протереть дезинфицирующем средством.
  • А вот бумажные конверты только в ведро.
  1. Так как вирус это органическое вещество, то он боится высоких температур. Просто прогреваем плату снифера на утюге в течении 5 минут, 100 °С достаточно то-бы убить любой вирус, а плате ничего не будет, так как её прогоняют через печь до 180 °С у ней температура плавления припоя только от 140 °С и выше в зависимости от типа припоя. А утюг он больше 180 °С и не выдаёт.

NanoPi я прогревать не стал она и так в заводской упаковке была.

Да вирус же вроде и не живет так долго, 100500 раз умрет пока посылка дойдет )

Основная опасность скорее в походе на почту, если там много людей.

Рассказываю для чего нужен напильник. Дело в том что разъем типа XHP-4 для UART имеет выступ.


И он никак не лезет между USB ниже показан уже вставленный разъем с права прекрасно виден угол от 2/3 сточенного выступа.

Зажимаем провода и стачиваем выступ до нуля

Далее подключаем как то рекомендует производитель

В заказе мне пришел USB2UART V1.1 с выставить тумблер в положение ON, поэтому однопометник мог начать стартовать при его подключении поэтому я рекомендую перевести выключатель в OFF, а питание брать через USB.

Второе на чем я завис был putty и кириллический текст в консоли.

Понятно что скорость не совпадает и пришлось действовать наугад. Ну не совсем наугад я изучил предварительно документацию и уже знал, что скорость 150000 бит/с (~1.5 Мбит/с)

Первый запуск

Заливаем прошивку. Задача может и простая, но у меня возникли трудности. Дело в том, что я не стал покупать SD-карту. У меня уже была карта на 4ГБ.
А разработчик предлагает записать образ на 8ГБ SD, загрузится с неё запустить eflasher, который скопирует образ на eMMC.
И кабеля hdmi-hdmi у меня тоже нет. Благо этот кабель на первых порах заменяет uart, а потом мы подключимся через ssh к виртуальному экрану нано-компьютера

В комплекте с eMMC идёт адаптер sd но с ним у меня ничего не получилось. Проблема с u-boot, который по разному распознает sd и eMMC.
root=/dev/mmcblk0p7
root=/dev/mmcblk1p7
Для того чтобы всё заработало надо поправить parameter.txt, который неизвестно где лежит в образе. А китайский софт настолько китайский, что хочется его переписать. Одно меня останавливает эта старая мудрость: лучшая программа должна состоять из 0 строк кода!

Всё же разработчик платы вернее чипа предусмотрел ещё один метод прошивки через USB.
Пришлось использовать метод установки через typeC. С завода eMMC идут с андроидом. который нормально стартует. И на плате моргает зеленый огонек питания. Так вот андроид вернее u-boot запускает USB.
Далее нам надо поставить драйвера для андроида ADB (android debug) и воспользоваться программой AndroidTool. Как выяснялось, эта программа умеет только писать образы и не умеет их читать.
u-boot поддерживает минимальный набор команд ADB. Для входа достаточно набрать

$sudo  reboot bootloader

И мы окажемся в консоли u-boot.

Но с начало по порядку AndroidTool по умолчанию язык китайский поэтому в конфигурационном файле правим номер язык с 1 на 2.
image

Далее я долго тупил, так как эта очередная китайская поделка, которая не работает и без исходников. По началу она ругалось, что нет устройство и тогда я понял, что надо поставить драйвер ADB. Потом она ругалось на несовпадение устройств. Перерыв весь интернет нашёл, что нажатием кнопки switch в программе можно перевести плату в режим заливки прошивки. Если верить интернету, то эта магическая кнопка перезагружает SOC в режим доверенной загрузки(trust.img), а от туда в MASKROM. MASKROM – это код начальной загрузки вытравленный на кристалле чипа. Этот код запускается в случае отсутствия других загрузочных устройств. А так же если закоротить контакты на sd и eMMC тем самым с имитировав их отсутствие. Кратковременное закорачивание с одновременным нажатием кнопки reset используется для входа в режим MASKROM с целью дальнейшей перепрошивки карт памяти и ПЗУ. Мне закорачевать не нужно, так как у меня работает U-Boot, который проделывает данный трюк программным путём. А те кто испортил u-boot могут воспользоваться следующей ссылкой. http://opensource.rock-chips.com/wiki_Rockusb#Maskrom_mode
После нажатия кнопки switch открываем файл parameter.txt откуда копируем имена разделов и их начальные адреса. Указываем образы для всех файлов.
Или можно нажать правой кнопкой и загрузить конфиг. RK_cfg.txt (6.0 КБ)
Ставя Ubuntu среди образов не хватила одного это misc, разделы нельзя пропускать иначе их порядковые номера не совпадут оставляем место под образ пустым и заливаем прошивку при помощи кнопки RUN.
Программа не дружит с моим хабом и нужно воткнуть кабель напрямую в компьютер. А ещё походу и перевод кривой “download”.

Плата стартует, цепляемся по uart перезагружаем плату и смотрим, что всё нормально запустилось.

Так как чип сильно греется, прикрепил нано компьютер к подставке она же очень большой радиатор. Греться от этого не перестала. Но до настройки ещё не скоро вначале надо залить годную прошивку.

Дальше надо поднять и настроить wi-fi: Сделать из консоли не трудно, но руководства расходятся.
Да и шифрование у меня WPA2. А в wpa_supplicant это сделано через одно место. При этом что делать тем у кого WPA3 вопрос открытый. А для WPA2 следует сделать следующие настройки
• в proto указываем версию WPA2
• pairwise — Для WPA2 укажите CCMP, а для WPA — TKIP.
• key_mgmt — Протоколы аутентификации. WPA-PSK для WPA-Personal
• psk — Хэш пароля.

Создаем хэш пароля для psk:
wpa_passphrase <<имя сети>> <<пароль>>

$ wpa_passphrase MYSSID password

Все готово, чтобы создать конфиг сети /etc/wpa_supplicant/wpa_supplicant.conf. Итоговый файл должен выглядеть как-то так.

ctrl_interface_group=0
ap_scan=1
ctrl_interface=/var/run/wpa_supplicant
network={
    proto=WPA2
    pairwise=CCMP
    key_mgmt=WPA-PSK
    ssid="MYSSID"
    psk=ce55977186ae1df2dffeb571acee8dacd92f49edddbdef53623132e3c24567ae
}

Далее нужно остановить процесс wpa_supplicant:
wpa_cli terminate
И настроить его запуск с нашим конфигом.

$ wpa_supplicant -B -i wlan0 -Dnl80211 -c /etc/wpa_supplicant.conf

И настроить DHCP на интерфейсе.
В Ubuntu добавляют запись в файл /etc/network/interfaces.

auto wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Для buildroot

auto wlan0
iface wlan0 inet dhcp
    pre-up wpa_supplicant -B -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
    post-down killall -q wpa_supplicant   

Теперь, когда доступен WI-FI можно поднять SSH сменить пароль и получить дистанционный экран без кабеля hdmi-hdmi.

Дополнительные ссылки:
https://habr.com/ru/post/315960/
http://touch-max.ru/android/proshivki/proshivka-beelink-r89-tronsmart-orion-r28

http://rockchip.wikidot.com/fastboot
https://github.com/siemens/u-boot/blob/master/doc/README.android-fastboot-protocol
http://opensource.rock-chips.com/wiki_Boot_option

3 Симпатий

Пришёл снифер.
Забыл сказать что он не оригинальный и толще чем надо. Придётся стачивать



Сделал перевод процесса загрузки для систем на кристалле rockchip


И ещё несколько страниц

Что-то я давно не писал 27 дней. Даже не ожидал, что так затянется. Терпеть не могу линукс и болеть. За это время новостей немного, так как занимался другими проектами.

Тем временем изучил разные дистрибутивы. На Лубунту поднял VNC посмотрел десктоп о чем сделал запись на wiki. Графика мне не нужна, однако в меню много утилит не запустилось. В основном просто потому, что они не установлены. Причем после обновления. Такое впечатления, что я нету графическую оболочку запустил или меню не от той ОС.
Ещё мне не понравилось, что много ошибок dmesg при старте.

Дальше начал пробовать friandlywrt это сборка OpenWRT от разработчика платы. Долго её мучил. Основная проблема в том, что на UART выводиться отладка и нет консоли. Приходиться отлаживать через ssh. В принципе дистрибутив хороший. Однако так и не получилось настройка сети из-за netswitch. Да и вообще как-то странно wi-fi удалось настроить только 1 раз, а повторно никак.
Поучился собирать дистрибутив из исходников. Но уж долго они компилируются на моем ноутбуку 21 час. А так как я ни знал сколько надо ГБ для сборки, то пришлось опытным путем выяснять оказалось нужно 40 ГБ.
А ещё наш РКН заблокировал https://git.openwrt.org пришлось разбираться с настройками зеркал.

Понятно что нужен Debian родной и простой. Проблема в том, что собрать его с помощью buildroot не получилось. Для его сборке нужно 60 ГБ пришлось расчищать место. А инструкция от рокчип требует mkdebian_firmware.sh которого нет. А инструкция от friandlyarm как-то не работает.
На сомом деле img я таки получил от инструкции от Рок-чип. И нужно в него добавить заголовок… Тут есть несколько кейсов и наверно самый простой скачать утилиту imgRePackerRK с 4pda для перепаковки образов
https://4pda.ru/forum/index.php?showtopic=457790&st=460

Но я решил отложить этот вариант на по позже и проверить armbian там лежит debian в нескольких вариантах.
https://dl.armbian.com/nanopim4v2/

Этот образ оказался тем который мне нужен. Чистый без излишеств. Стоит netswitch но с ним я заморачиваться не стал. Так как настройка делается через CLI-GUI.
Залил образ debian на SD-диск. Он запустился без проблем спросил пароль от рута 1234. И тут же предложил сменить и завести нового пользователя. Что я и сделал.
После загрузки он показывает температуру, что меня очень порадовала 40° плюс минус 1°.
Далее запустил armbian-config подключился к wi-fi. В настройках putty надо выбрать utf-8 для правильного отображения. И далее в пару кликов настраивается wi-fi. А затем запускаем nand-sata-install что’бы скопировать образ с CD на eMMC. Очень удобно, что в это дистрибутиве есть apt, тем что легко поставить нужные пакеты и удалить не нужные. На самом деле лишнего там особо нет разве, что питон который скачивает при загрузуке обновления для ОС. Есть htop.
Апачь поставил через apt. Диск автоматически не монтируется, но ничего это настрою это мы умеем. Делается через fuse и udeb.
Обыскал дом на наличие зарядок. Жёсткому диску нужна на 12 В х 0.6 А. Нужная как всегда нашлась в последнем ящике. Проблема в том, что эта универсальная зарядка которая мне нужна для ноута.