Yellow Rabbit

Slackware на Orange Pi Zero

Slackware на Orange Pi Zero

Orange Pi Zero это маленький неновый одноплатный компьютер от Shenzhen Xunlong Software CO. Limited.

Плата Orange Pi Zero

Установка Slackware

Установка достаточно подробно описана здесь. Конечно не для этой платы, но отличия не велики:

Два накопителя

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         2048     6143     4096    2M  1 FAT12
/dev/mmcblk0p2 *       6144  4200447  4194304    2G 83 Linux


Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1          2048  4196351  4194304    2G 82 Linux swap
/dev/sda2       4196352 30375935 26179584 12.5G 83 Linux

Пояснения к разбивке:

Я не устанавливал никакие пакеты относящиеся к X11 и занятым оказалось около 9G флешки. Должен заметить, что некоторые пакеты были с ошибками (dvd-rw и какая-то часть GCC-9), надеюсь, что это не очень помешает эксплуатации.

Останавливаемся на пункте 5.1 (Configuring U-Boot) инструкции.

Настройка загрузки U-Boot

Как я уже говорил с saveenv нам не повезло так что будем использовать скрипт U-Boot. Сначала скачаем исходники и подготовим каталоги:

WD=~/src/my-uboot # your work dir
mkdir -p ${WD}
cd $(WD}
git clone https://github.com/linux-sunxi/u-boot-sunxi.git u-boot

Теперь момент с версией питона: из-за отсутствия совместимости между версиями приходится прибегать к виртуальному окружению (знаю, что страх и ужас, но о чём думали создатели Питона неясно). Кроме того желательно указать тропу к пакетам.

 virtualenv -p /usr/bin/python2.7 my_uboot
 source my_uboot/bin/activate
 export PKG_CONFIG_PATH=/usr/lib64/pkgconfig

В этот же каталог скачиваем весьма удобный скрипт u-boot.SlackBuild для сборки U-Boot и набор для кроскомпиляции — я использовал gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz (распаковывать не надо). Локальная копия скрипта

Можно запускать сборку последней версии U-Boot:

./u-boot.SlackBuild

После успешной компиляции записываем образ U-Boot на SDcard, как это сделать описано в последних сообщениях скрипта:smile:.

Теперь подготовим загрузочный диск /dev/mmcblk0p2. Он отформатирован как ext4 потому что на сегодняшний день U-Boot не умеет загружаться с f2fs. Вот список файлов, которые должны быть на этом диске:

boot.scr
initrd-armv7 -> initrd-armv7-4.19.66
initrd-armv7-4.19.66
sun8i-h2-plus-orangepi-zero.dtb
zImage-armv7 -> zImage-armv7-4.19.66
zImage-armv7-4.19.66

Файл sun8i-h2-plus-orangepi-zero.dtb можно найти где-то в ${WD}/u-boot, boot.src мы сейчас сделаем, а остальные файлы нужно скопировать из /dev/sda2/boot.

Пишем скрипт загрузки boot.txt:

setenv bootcmd_dtb 'ext4load mmc 0:2 ${fdt_addr_r} /${fdtfile} ; fdt addr ${fdt_addr_r} 0x40000' 
setenv bootcmd_slk 'run bootcmd_dtb ; ext4load mmc 0:2 ${kernel_addr_r} /zImage-armv7 ; ext4load mmc 0:2 ${ramdisk_addr_r} /initrd-armv7' 
setenv slkconsole "console=ttyS0,115200n8"
setenv bootcmd_generic 'debug earlyprintk TERM=screen-256color '
setenv bootargs "${slkconsole} ${bootcmd_generic} root=/dev/sda2 rootfstype=f2fs rw waitforroot=5 nodhcp"
setenv bootcmd 'run bootcmd_slk ; bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r} ; '
run bootcmd

здесь mmc 0:2 это /dev/mmcblk0p2, root=/dev/sda2 rootfstype=f2fs потому что у меня так отформатиирован корневой раздел, nodhcp — понятия не имею, возможно не нужна.

Компилируем скрипт загрузки и помещаем получившийся файл boot.scr на /dev/mmcbl0p2

./u_boot-build/tools/mkimage -A arm -T script -d boot.txt boot.scr

Результат

Скриншот запуска Slackware на Orange Pi Zero