LINUX.ORG.RU
ФорумAdmin

Не грузится U-Boot'ом ядро в вида FIT на Allwinner H5

 , ,


0

1

Всем привет. Не знаю куда правильно адресовать такого рода посты. Но попробую сюда.

В общем проблема такая: Ядро не грузится дальше Starting kernel ...
Система: Orange Pi Zero Plus2 H5
Собираю образ на базе OpenWRT. По итогу имею 2 варианта развития событий:
1. Классический uImage сжатый lzma и отдельно dtb файл. Всё это грузит U-Boot командой booti <addr> - <addr>
2. Новомодный FIT образ того же ядра с тем же dtb но уже два в одном. Грузит тот же U-Boot но уже командой bootm <addr>

В первом варианте всё грузится без каких-то проблем. Всё хорошо.
Во втором варианте дело доходит до Starting kernel и система зависает колом.
Образ собираю следующей командой:

mkimage -E -f Image.its Image.new

Где в Image.its следующее содержание:
/dts-v1/;

/ {
        description = "ARM64 OpenWrt FIT (Flattened Image Tree)";
        #address-cells = <1>;

        images {
                kernel@1 {
                        description = "ARM64 OpenWrt Linux-5.4.60";
                        data = /incbin/("arch/arm64/boot/Image.lzma");
                        type = "kernel";
                        arch = "arm64";
                        os = "linux";
                        compression = "lzma";
                        load = <0x40008000>;
                        entry = <0x40008000>;
                        hash@1 {
                                algo = "crc32";
                        };
                        hash@2 {
                                algo = "sha1";
                        };
                };

                fdt@1 {
                        description = "ARM64 OpenWrt xunlong_orangepi-zero-plus2 device tree blob";
                        data = /incbin/("sun50i-h5-orangepi-zero-plus2.dtb");
                        type = "flat_dt";
                        arch = "arm64";
                        compression = "none";
                        load = <0x4FA00000>;
                        hash@1 {
                                algo = "crc32";
                        };
                        hash@2 {
                                algo = "sha1";
                        };
                };

        };

        configurations {
                default = "config@1";
                config@1 {
                        description = "OpenWRT";
                        kernel = "kernel@1";
                        fdt = "fdt@1";
                };
        };
};

По итогу происходит вот такая загрузка:
U-Boot 2020.04 (Aug 28 2020 - 09:44:29 +0000) Allwinner Technology

CPU:   Allwinner H5 (SUN50I)
Model: OrangePi Zero Plus2
DRAM:  512 MiB
MMC:   Device 'mmc@1c11000': seq 1 is in use by 'mmc@1c10000'
mmc@1c0f000: 0, mmc@1c10000: 2, mmc@1c11000: 1

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
=> fatload mmc 0 53E00000 Image.new
3561732 bytes read in 513 ms (6.6 MiB/s)
=> setenv bootargs console=ttyS0,115200 earlyprintk root=PARTUUID=5452574f-02 rootwait earlycon=uart,mmio32,0x01c28000
=> bootm 53E00000
## Loading kernel from FIT Image at 53e00000 ...
   Using 'config@1' configuration
   Trying 'kernel@1' kernel subimage
     Description:  ARM64 OpenWrt Linux-5.4.60
     Type:         Kernel Image
     Compression:  lzma compressed
     Data Start:   0x53e0043c
     Data Size:    3537003 Bytes = 3.4 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x40008000
     Entry Point:  0x40008000
     Hash algo:    crc32
     Hash value:   1003b68e
     Hash algo:    sha1
     Hash value:   94d9ea6a0f543649d294b50bd2a7bba1857cf538
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 53e00000 ...
   Using 'config@1' configuration
   Trying 'fdt@1' fdt subimage
     Description:  ARM64 OpenWrt xunlong_orangepi-zero-plus2 device tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x5415fca8
     Data Size:    23641 Bytes = 23.1 KiB
     Architecture: AArch64
     Load Address: 0x4fa00000
     Hash algo:    crc32
     Hash value:   fc8daabb
     Hash algo:    sha1
     Hash value:   6c18b66e1c9bb6dfb289701e1a478e294cb3568c
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Loading fdt from 0x5415fca8 to 0x4fa00000
   Booting using the fdt blob at 0x4fa00000
   Uncompressing Kernel Image
   Loading Device Tree to 0000000049ff7000, end 0000000049fffc58 ... OK

Starting kernel ...

Если взять те же образы но ВНЕ FIT упаковки, то всё грузится вот так:
U-Boot 2020.04 (Aug 28 2020 - 09:44:29 +0000) Allwinner Technology

CPU:   Allwinner H5 (SUN50I)
Model: OrangePi Zero Plus2
DRAM:  512 MiB
MMC:   Device 'mmc@1c11000': seq 1 is in use by 'mmc@1c10000'
mmc@1c0f000: 0, mmc@1c10000: 2, mmc@1c11000: 1

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
=> load mmc 0 53E00000 Image.lzma
3537067 bytes read in 506 ms (6.7 MiB/s)
=> fatload mmc 0 0x4FA00000 sun50i-h5-orangepi-zero-plus2.dtb
23641 bytes read in 5 ms (4.5 MiB/s)
=> setenv bootargs console=ttyS0,115200 earlyprintk root=PARTUUID=5452574f-02 rootwait earlycon=uart,mmio32,0x01c28000
=bootm 0x53E00000 - 0x4FA00000
## Booting kernel from Legacy Image at 53e00000 ...
   Image Name:   Linux
   Image Type:   AArch64 Linux Kernel Image (lzma compressed)
   Data Size:    3537003 Bytes = 3.4 MiB
   Load Address: 40080000
   Entry Point:  40080000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 4fa00000
   Booting using the fdt blob at 0x4fa00000
   Uncompressing Kernel Image
   Loading Device Tree to 0000000049ff7000, end 0000000049fffc58 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 5.4.60 (spider@horoshiki.ru) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r14283-42d14ace3e)) #0 SMP Fri Aug 28 09:44:29 2020
[    0.000000] Machine model: OrangePi Zero Plus2


Я что-то делаю не так? Или оно само не живое?

data = /incbin/(«arch/arm64/boot/Image.lzma»);

Это кажись не то. Просто возьми Image и сожми (сначала можно попробовать не сжатый).

mkimage -E -f Image.its Image.new

В принципе ‘-E’ для ядра не нужно. Для fit-образа u-boot-а раньше нужно было, а сейчас и он без него грузится.

arson ★★★★★ ()
Ответ на: комментарий от arson

$ cat arch/arm64/boot/.Image.lzma.cmd
{ cat arch/arm64/boot/Image | lzma -9; printf \010\130\066\001; } > arch/arm64/boot/Image.lzma

Хотя нет, у меня это через fit-образ нормально грузит.

arson ★★★★★ ()
Ответ на: комментарий от arson

такое дело, что оно не грузится только командой bootm.
Есть там у U-Boot команда lzmadec
и если сделать так:

lzmadec 0x53e0043c 0x40008000

а потом booti 0x40008000,
то всё отлично загрузится. т.е. по сути fit образ «живой», но вот его «прямая» интерпретация не алё....

Spider55 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.