Получив свой экземпляр (заказал еще до того как вышел LicheeRV Dock), я конечно же полез за официальной инструкцией к производителю...
В принципе, я никогда не интересовался продуктами вроде Banana Pi или Orange Pi от Allwinner, взглянув на официальное чудо, я понял почему от этих продуктов все так воротят нос:
Прошивки для не китайцев "заботливо" лежат на MEGA (хочешь качать - плати деньги...)
Для прошивки карт используется "замечательный" инструмент под названием PhoenixCard (судя по китайским фо��умам он не слушается даже китайцев), который работает под Windows (что всегда хорошо!)
Официальный "SDK" обернут вместе c rootfs и разбит на архивы общей суммой >10 Gb (да-да и лежит на MEGA - то есть все равно заплатишь)
И изюминка - все образы в комплекте расчитаны на карты ёмкостью больше 16 Gib (у наших друзей написано 16 GB - card_needs_≥16GB.txt)
Квест про реверс (он в конечном счете не понадобился) и печальное ковыряние палкой данного продукта жизнедеятельности (то что я собрал с помощью SDK, так и не заработало...) мы опустим, так как, я наконец наткнулся на гайд для Sipeed Nezha от дяди Samuel'a Holland'a спасибо ему за это огромное...
И Sipeed LicheeRV и Sipeed Nezha обе используют SoC Allwinner D1 (sun20iw1p1), поэтому опыт полученный для Nezha применим и к данному случаю.
Я собрал данный гайд в кучу и объединил под общим проектом.
Содержимое
boot0 : zsbl (zero stage boot loader) используется вместо U-Boot SPL, как пишет автор, временно из-за инициализации DRAM
opensbi : практически ванильный с небольшими изменениями в MTIMER
u-boot : очень сильно изменен по сравнению с ванильным, но куда лучше чем то, что предоставляется в SDK
linux : очень большая проделанная работа причем на базе 5.16.0-rc1 (почти самое свежее)
riscv-gnu-toolchain : фактически везде используемый toolchain от RISC-V Foundation
Пока в проекте используется слегка модифицированный dts:
выключен emac
удалена запись spi-nand
По схематике вроде emac не должен сильно портить картину для LicheeRV Dock, но лучше включать что-то вдумчиво, тем более судя по всему он не совместим с LicheeRV 86 Panel, теже самые мысли по поводу NAND - поддержку его тоже лучше добавлять вдумчиво.
Сборка
Подтягиваем все подмодули:
$ git submodule update --init --recursiveПосле чего просто делаем make:
$ makeСобственного для этого всё и затевалось...
Если необходим внешний toolchain, а не идущий в комплекте либо предоставляем TARGET_CROSS_PREFIX:
$ TARGET_CROSS_PREFIX=riscv64-unknown-linux-gnu makeЛибо просто можно прибить гвоздями прямо в Makefile после объявления:
TARGET_CROSS_PREFIX=riscv64-unknown-linux-gnu
ifndef TARGET_CROSS_PREFIX
...
$ makeБыстрое развертывание образа
В итоге мы получаем следующие файлы:
sun20i_d1_spl/nboot/boot0_sdcard_sun20iw1p1.bin
u-boot.toc1
u-boot/arch/riscv/dts/sun20i-d1-nezha-lichee.dtb
build-linux/arch/riscv/boot/Image.gz
initramfs.img.gz
boot0 в данный момент ожидает u-boot, opensbi, dtb в формате TOC1 (что бы это ни значило), конфиг файл для построения образа достаточно прозрачен:
[opensbi]
file = opensbi/build/platform/generic/firmware/fw_dynamic.bin
addr = 0x40000000
[dtb]
file = u-boot/arch/riscv/dts/sun20i-d1-nezha-lichee.dtb
addr = 0x44000000
[u-boot]
file = u-boot/u-boot-nodtb.bin
addr = 0x4a000000Но с этим связана одна из задач, убрать boot0 совсем и вместо него использовать U-Boot SPL.
Пример прошивки карты (подразумевается что карта это /dev/sdd и она пустая, я просто затер начало - dd if=/dev/zero of=/dev/sdd bs=4096 count=100) :
# parted /dev/sdd --script mklabel gpt
# parted /dev/sdd --script mkpart primary ext2 40MiB 100MiB
# parted /dev/sdd --script mkpart primary ext4 100MiB 100%
# mkfs.ext2 /dev/sdd1 # partion with kernel, dtb, initramfs
# mkfs.ext4 /dev/sdd2 # partition for rootfs
# mount /dev/sdd1 /mnt/sdcard/
# cp build-linux/arch/riscv/boot/Image.gz /mnt/sdcard/
# cp u-boot/arch/riscv/dts/sun20i-d1-nezha-lichee.dtb /mnt/sdcard/ # we use dtb from u-boot !
# cp initramfs.img.gz /mnt/sdcard/
# umount /mnt/sdcard
# dd if=sun20i_d1_spl/nboot/boot0_sdcard_sun20iw1p1.bin of=/dev/sdd bs=8192 seek=16
# dd if=u-boot.toc1 of=/dev/sdd bs=512 seek=32800 # large offset thats why we make first partion on 40 MiBОбратите внимание, что мы используем dtb из U-Boot, а не линуксовый. Разделы можно делать любые - как душе угодно, в U-Boot есть и fat, и ext, так что можно все запихать в один раздел, пока в наличии только простой rootfs с busybox, я планирую класть rootfs на NFS и доступ к нему посредством g_ether или WiFi. К сожалению Ethernet нету, так проще было и ядро грузить по сети (надеюсь получится через OpenOCD...).
Команды для U-Boot (пока не стал убирать их в env, так как не решил как именно буду грузиться) :
> load mmc 0:1 ${kernel_addr_r} Image.gz
> load mmc 0:1 ${ramdisk_addr_r} initramfs.img.gz
> load mmc 0:1 ${fdt_addr_r} sun20i-d1-nezha-lichee.dtb
> setenv bootargs "earlycon=sbi console=ttyS0,115200n8 root=/dev/ram0 rw rdinit=/init"
> booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
Смотрим:
licheerv # uname -a
Linux nezha 5.16.0-rc1-13291-g2ca6d83489cd #2 PREEMPT Tue Jan 18 20:23:04 MSK 2022 riscv64 GNU/LinuxИ приступаем к более интересным зада��ам...
Заключение
А задач очень много, особо хотелось бы отметить, что здесь использовался стандартный toolchain со стандартным gcc, у Xuantie есть собственная версия gcc c поддержкой кастомных инструкций и на это дело хотелось бы посмотреть в первую очередь.
Судя по всему у Allwinner D1 есть даже векторное расширение на 128 бит.
Есть JTAG, который нужно освоить в первую очередь, есть RISC-V HPM...
Про саму плату хочу отметить, что стоит она 1 918,51 руб. (цена на 19 января 2022, 14:12 - я её успел купить за 1 835,14 руб.) с carrier board c wifi, это на данный момент самый дешевый Linux SBC сразу готовый к работе без возни с проводами (и пусть кто знает дешевле напишет об этом, серьезно хочу знать).
Не говоря уж про, что это самый дешевый доступный RISC-V с MMU на данный момент.
Библиография
https://linux-sunxi.org/Allwinner_Nezha - сюда смотрим в первую очередь!
https://www.eevblog.com/forum/embedded-computing/risc-v-vector-extension-on-the-allwinner-d1/
UPDATE
Добавляю ссылки по теме, Fedora и страницчка посвященная Lichee RV на sunxi: