Сборка загрузчика 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.
Tags:
u-boot, bootloader, orange pi, linux, embedded linux

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.