Сборка загрузчика U-boot для Orange Pi Zero

В данной статье мы соберем bootloader для Orange Pi Zero. Это пригодится тем кто хочет в дальнейшем с помощью bootloader (u-boot)+ kernel + rootfs (busybox) собрать и запустить свою embedded систему на одно платном компьютере.

Что нам необходимо:
Hardware:

— Orange PI Zero.
— Преобразователь USB-TTL.
— SD карта (минимальный размер 4Гб, и класс не ниже 6-го).

Software:

— OS Ubuntu (у меня 19.04).
— Cross compiler.
— Serial terminal (у меня GTKTerm).



Одно платный компьютер Orange Pi Zero на базу процессора Allwinner H2(Cortex A7 ) 1.2 GHz. На одноплатнике такде присутствует графический ускоритель GPU Mali400MP2. Размер ОЗУ 512 Мб DDR3 SDRAM.

Поддерживаемые ОС: Armbian, Android, Lubuntu, Debian, Raspbian и т.д.
Цена: ~11$ (включая доставку в Украину).

Подключение Debug вывод Orange Pi Zero к ноутбуку:

Подключаем USB-TTL к Orange Pi соглаcно такой схемы:



Далее настраиваем GTKTerm (порт: USB0, скорость 115200, остальное по-умолчанию):



1. Сборка загрузчика U-boot для Orange Pi Zero


Das U-Boot — компьютерный загрузчик операционной системы, ориентированный на встроенные устройства архитектур MIPS, ARM и т.д.

Загрузка U-Boot происходит в два этапа:

  1. С начало первичный загрузчик BootROM копирует U-Boot SPL в оперативную память и передает ему управление.
  2. U-Boot SPL копирует основной загрузчик U-Boot в оперативную память передает ему управление.
  3. Далее U-boot загружает Kernel.

Откуда скачать (у меня версия U-Boot 2019.07-rc3):
ftp.denx.de/pub/u-boot

Далее распаковываем архив и переходим в корень.

1.1 Очищаем, результат прошлой сборки:

make distclean

1.2 Указывает defconfig, cross compiler и собирает загрузчик:

make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_zero_defconfig
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Зачем нужна кросс компиляция?
Ответ очень прост, так как у нас целевая платформа ARM (Orange Pi Zero), а собирает bootloader мы на ноутбуке или персональном компьютере (архитектура x86), мы должны компилировать с помощью cross compiler.


В результате мы получим:



Из всех файлов с префиксом u-boot. u-boot.bin, нам нужен файл с пост фиксом «u-boot-sunxi-with-spl.bin».

2. Подготавливаем разделы на SD карте


Как узнать какое имя у SD карты?
В каталоге /dev/ появится новая SD карта как SCSI-устройство (sda ...), либо как блочная MMC память (mmcblk0...)



В моем случаем имя SD карты — /dev/mmcblk0.

2.1 Отмантируем SD карту:

sudo umount /dev/mmcblk*

2.2 Разбивает SD карту на два раздела (1-й для U-boot, 2-й для корня системы):

sudo umount /dev/mmcblk0
sudo parted -s /dev/sdx \
mklabel msdos mkpart \
primary ext3 10M 26M \
mkpart primary ext4 26M 100%

2.3 Форматируем файловые системы на 1-м и 2-м разделе:

sudo mkfs.ext3 /dev/mmcblk0p1
sudo mkfs.ext4 /dev/mmcblk0p2

2.4 Записываем bootloader на SD карту:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

Вставляем SD карту в Orange Pi Zero и запускаем.

Если все правильно было выполнено, то на Debug порте будет следующий вывод:



Далее у вас посыпятся ошибки и u-boot снова перегрузиться, это нормально т.к мы не указали ему Kernel и rootfs.
Теги:
u-boot, bootloader, orange pi, linux, embedded linux

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.