В предыдущей статье мы рассмотрели процесс сборки загрузчика. Теперь мы рассмотрим ядро Linux, исходные коды которого поддерживает компания StarFive в репозитории https://github.com/starfive-tech/linux. Кроме того, мы рассмотрим создание скриптов загрузки ядра (boot.scr) для U-Boot. Компания StarFive одновременно ведет две версии ядра: 5.15.x и 6.1.x. Нас интересует стабильная ветка 6.1.x, поэтому мы возьмем snapshoot тега VF2_6.1_v3.8.2: Таким образом исходный код ядра, соответствующий тегу VF2_6.1_v3.8.2, мы имеем в каталоге ./linux-starfive-6.1.31-3.8.2/. Как установить необходимый toolchain мы рассказали в предыдущей статье. Конфигурационный файл для VisionFive2 starfive_visionfive2_defconfig находится в каталоге ./linux-starfive-6.1.31-3.8.2/arch/riscv/configs/ и для того, чтобы получить конфигурационный файл ./linux-starfive-6.1.31-3.8.2/.config, пригодный для последующего редактирования и многократного использования для наших нужд, выполним следующий скрипт (в каталоге ./linux-starfive-6.1.31-3.8.2/): Теперь мы можем внести некоторые изменения в конфигурацию ядра, перед сборкой. Например, добавив следующие строки: мы обеспечим возможность использования мыши в терминале. Кроме того, следует обратить внимание на драйвер графического ускорителя: ведь SoC JH7110 имеет в своем составе GPU Imagination MG BXE-4-32 MC1. После изменений файла ./linux-starfive-6.1.31-3.8.2/.config, для повторного конфигурирования исходного кода, необходимо выполнить команду make oldconfig: Полный скрипт сборки ядра может выглядеть, например, следующим образом: Выполнив данный скрипт в каталоге ./linux-starfive-6.1.31-3.8.2/ мы получим образы ядра: ./linux-starfive-6.1.31-3.8.2/arch/riscv/boot/Image{,.lzma} и модули ./linux-starfive-6.1.31-3.8.2/_dist/lib/modules/6.1.31 для установки в каталог /lib/modules/ корневой файловой системы. DeviceTree-файл ./linux-starfive-6.1.31-3.8.2/arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtb, а также файл ./linux-starfive-6.1.31-3.8.2/arch/riscv/boot/dts/starfive/vf2-overlay/vf2-overlay-uart3-i2c.dtbo надо будет установить в каталог /boot/starfive/ корневой файловой системы. Далее нам понадобится утилита mkimage, которая входит в состав исходных кодов U-Boot, необходимая для подписи образов. Все необходимые адреса памяти для загрузки ядра, devicetree и скриптов можно найти в файле ./u-boot-2021.10-3.8.2-orig/include/configs/starfive-visionfive2.h: Подписать образы Image и Image.lzma можно с помощью следующих комманд: Здесь мы используем значение переменной kernel_addr_r=0x40200000 и версию ядра 6.1.31. Полученные файлы uImage и uzImage необходимо скопировать в каталог /boot/ корневой файловой системы для того, чтобы загрузчик мог найти эти образы. Загрузчик U-Boot использует скрипты /boot/boot.scr для того, чтобы получить информацио о том, какие образы надо загружать в пямять, по каким адресам должны располагаться эти образы и как передавать управление для последующей загрузки системы. Мы приготовим три исходных скрипта для загрузки с SD-карты (mmc1), EMMC Flash (mmc0), а также NVME диска (nvme0): boot.sdhc.script: boot.emmc.script: boot.nvme.script: И подпишем их с помощью утилиты mkimage: Полученные скрипты: boot.sdhc.scr, boot.emmc.scr и boot.mvme.scr необходимо поместить в каталог /boot/ корневой файловой системы. Для загрузки с SD-карты, необходимо создать символическую ссылку: Если мы правильно скопировали созданные нами образы, в результате мы будем иметь следующее дерево каталогов: Здесь необходимо отметить, что в рассматриваемом нами случае, загрузочный носитель, будь то SD-карта или NVME диск, имеет два раздела: На первом расположена fat32 файловая система, а U-Boot, расположенный в QSPI Nor Flash, предполагает загрузку со второго раздела, на котором расположена ext4 корневая файловая система операционной системы. Если мы зазместим загрузчик GRUB на первом разделе: то мы также сможем загружать операционную систему с помощью следующих команд (в терминале U-Boot): Готовые образы файловых систем: visionfive2.efi32fs и visionfive2.ext4fs можно загрузить из каталога releases FTP-сервера https://ftp.radix.pro/, и с помощью скрипта write-efiboot-image по инструкции создать загрузочную SD-карту с операционной системой Radix cross Linux. Информацию об установке и настройке RcL вы можете найти на страницах Download, Install, а также в разделе Devices, посвященном SBC VisionFive2. Отметим здесь, что система Radix cross Linux имеет в своем составе все необходимые пакеты, как для создания собственного сервера, так и для разработки собственных програм с помощью таких средств как GCC-12.2.0, LLVM-16.0.2, QtCreator, Glade, Cambalache и многих других. Кроме того, в системе предустановлены Libreoffice-7.6.2.1, Firefox-118.0.1, Thunderbird-115.3.1, что позволяет использовать SBC VisionFive2 в качестве (old school) персональной машины. Полный перечень пакетов представлен в файле visionfive2.pkglist.