Перейти к содержанию
    

Как корректно сгенерить и запустить FDT образ KERNEL+DTB+ROOTFS для Zynq-7000

Всем привет!

Осваиваю сабж, продвинулся довольно далеко (особенно, если сравнивать с нулём). Пока сижу на плате Qmtech с Z7020 последний вариант. Она запускается только с SD-карточки (JTAG не в счёт). С карточки из комплекта (Peta)Linux 2018.x подымается, на карточке boot.ini и image.ub.

Использую Unified 2023.1.1. Сделал виртуалку VMWare  с Ubuntu 22.04, установил на ней всё для сборки Linux и прочих шалобушек (тоже под 2023.1). Поиграл недельку на бубне и удалось собрать u-boot, ядро, rootfs, devtree. Теперь пытаюсь это всё запустить на железке.

Как рассказывает AMD, самый простой вариант фасовки SD-карты - с помощью файла extlinux.conf. В этом случае файл BOOT.ini должен содержать стандартный набор трёх файлов: FSBL, bit, U-Boot. Соответствующий пример BIF-файла:

Quote

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
    [bootloader]D:\Projects\PLM\Xilinx\XC7Z020_STARTER_KIT_V01\Linux1\fsbl\executable.elf
    D:\Projects\PLM\Xilinx\XC7Z020_STARTER_KIT_V01\Linux1\zynq_wrapper.bit
    D:\Projects\PLM\Xilinx\XC7Z020_STARTER_KIT_V01\Linux1\images\u-boot.elf
}

Файл executable.elf - это FSBL (имя файла - автоматически), сгенерированный с помощью wsct и скрипта (zynq_wrapper.xsa - экспортированное "оборудование" из проекта Vivado):

Quote

set hwdsgn [hsi::open_hw_design zynq_wrapper.xsa]
hsi::current_hw_design
hsi::generate_app -hw $hwdsgn -os standalone -proc ps7_cortexa9_0 -app zynq_fsbl -compile -sw fsbl -dir fsbl/
hsi::close_hw_design $hwdsgn

Файл extlinux.conf генерируется при компиляции ядра, но в нём я добавил параметр для загрузки корневой файловой системы ROOTFS (файл uramdisk.image.gz). Возможно, это надо было добавить как-то в конфигуратор сборки и тогда не пришлось бы править руками. Доработанный файл содержит следущее (добавил только initrd=/uramdisk.image.gz и поправил в mmc0):

Quote

label linux
  kernel /boot/uImage
  devicetree /boot/system.dtb
  append initrd=/boot/uramdisk.image.gz console=ttyPS0,115200 root=/dev/mmc0 rw rootwait

загрузчик U-Boot по умолчанию ищет extlinux.elf в папках /extlinux или /boot/extlinux. На SD-карту (отформатировать в формате FAT32) записал следующие файлы:

Quote

BOOT.INI
boot\uImage
boot\system.dtb
boot\uramdisk.image.gz
boot\extlinux\extlinux.conf

Вставил карточку в плату - всё взлетело! Вот начало лога загрузки:

Spoiler

U-Boot 2023.01 (Jul 28 2023 - 11:08:15 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 82:49:95:0b:a9:a6
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
1:      linux
Retrieving file: /boot/uramdisk.image.gz
Retrieving file: /boot/uImage
append: initrd=/boot/uramdisk.image.gz console=ttyPS0,115200 root=/dev/mmc0 rw rootwait
Retrieving file: /boot/system.dtb
## Booting kernel from Legacy Image at 02000000 ...
   Image Name:   Linux-6.1.0-xilinx
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4621576 Bytes = 4.4 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 03100000 ...
   Image Name:   
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    9156096 Bytes = 8.7 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 01f00000
   Booting using the fdt blob at 0x1f00000
Working FDT set to 1f00000
   Loading Kernel Image
   Loading Ramdisk to 1e218000, end 1ead3600 ... OK
   Loading Device Tree to 1e212000, end 1e217ac6 ... OK
Working FDT set to 1e212000

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 6.1.0-xilinx (root@dimonira-virtual-machine) (arm-buildroot-linux-gnueabihf-gcc.br_real (Buildroot 2023.05.1) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000

...

Попробовал пару команд, вроде система живёт:

Spoiler

Welcome to Zynq Linux!
Z7020 login: random: crng init done
macb e000b000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
root
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 82:49:95:0B:A9:A6  
          inet addr:192.168.81.79  Bcast:192.168.81.255  Mask:255.255.255.0
          inet6 addr: fe80::88d9:bc12:fae4:ff8b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:130 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15744 (15.3 KiB)  TX bytes:4960 (4.8 KiB)
          Interrupt:39 Base address:0xb000 

# uname -a
Linux Z7020 6.1.0-xilinx #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023 armv7l GNU/Linux

Пока что-то не могу найти к конфигураторе ядра где задать строку приглашения. Но это не главное.

Главное, что я теперь бьюсь над другим вариантом "комплектования" SD-карты, как на карте продавца - boot.ini и image.ub. Первый, как я понял годится тот же. Второй должен содержать сборную солянку из трёх образов, плюс скрипт типа boot.scr (?)

Для генерации image.ub надо сделать текстовый файл image.its, содержимое которого похоже на файлы device tree.

Вот в варианте без boot.scr:

Spoiler

/dts-v1/;
  
/ {
    description = "U-Boot fitImage for qmtech kernel";
    #address-cells = <1>;
  
    images {
        kernel {
            description = "Linux Kernel";
            data = /incbin/("uImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "none";
            load = <0x10000000>;
            entry = <0x10000000>;
            hash {
                algo = "sha1";
            };
        };
        fdt {
            description = "Flattened Device Tree blob";
            data = /incbin/("system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
        ramdisk {
            description = "ramdisk";
            data = /incbin/("uramdisk.image.gz");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
    };
    configurations {
        default = "conf";
        conf {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel";
            fdt = "fdt";
            ramdisk = "ramdisk";
            hash {
                algo = "sha1";
            };
        };
    };
};

А это вариант с boot.scr:

Spoiler

/dts-v1/;
  
/ {
    description = "U-Boot fitImage for qmtech kernel";
    #address-cells = <1>;
  
    images {
        kernel {
            description = "Linux Kernel";
            data = /incbin/("images/uImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "gzip";
            load = <0x3000000>;
            entry = <0x3000000>;
            hash {
                algo = "sha1";
            };
        };
        fdt {
            description = "Flattened Device Tree blob";
            data = /incbin/("images/system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
        ramdisk {
            description = "ramdisk";
            data = /incbin/("images/uramdisk.image.gz");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "lzma";
            hash {
                algo = "sha1";
            };
        };
        bootscript {
            description = "Bootscript";
            data = /incbin/("boot.scr");
            type = "script";
            compression = "none";
        };           
    };
    configurations {
        default = "conf";
        conf {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel";
            fdt = "fdt";
            ramdisk = "ramdisk";
            bootscript = "bootscript";
            hash {
                algo = "sha1";
            };
        };
    };
};

В файле boot.scr написал следующее (где-то увидел, допилил до своего):

Quote

setenv bootargs "console=ttyPS0,115200 root=/dev/mmc0 rw rootwait"
bootm  0x10000000
echo "Bad image or kernel!"
reset

Файлы uImage, system.dtb, uramdisk.image.gz и boot.scr должны лежать рядом с image.its. Команда для компиляции:

Quote

mkimage -f image.its image.ub

Компиляция проходит успешно без ошибок и предупреждений (без бубна однако не обошлось). Например, лог для случая без boot.scr выглядит так:

Spoiler

FIT description: U-Boot fitImage for qmtech kernel
Created:         Sat Jul 29 20:28:30 2023
 Image 0 (kernel)
  Description:  Linux Kernel
  Created:      Sat Jul 29 20:28:30 2023
  Type:         Kernel Image
  Compression:  uncompressed
  Data Size:    4621640 Bytes = 4513.32 KiB = 4.41 MiB
  Architecture: ARM
  OS:           Linux
  Load Address: 0x10000000
  Entry Point:  0x10000000
  Hash algo:    sha1
  Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
 Image 1 (fdt)
  Description:  Flattened Device Tree blob
  Created:      Sat Jul 29 20:28:30 2023
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    10951 Bytes = 10.69 KiB = 0.01 MiB
  Architecture: ARM
  Hash algo:    sha1
  Hash value:   d2836712687057664c45433564f4b0d834aafc28
 Image 2 (ramdisk)
  Description:  ramdisk
  Created:      Sat Jul 29 20:28:30 2023
  Type:         RAMDisk Image
  Compression:  uncompressed
  Data Size:    9156160 Bytes = 8941.56 KiB = 8.73 MiB
  Architecture: ARM
  OS:           Linux
  Load Address: unavailable
  Entry Point:  unavailable
  Hash algo:    sha1
  Hash value:   951e1d29cf7ec56242bf8306303dee63b883ff66
 Default Configuration: 'conf'
 Configuration 0 (conf)
  Description:  Boot Linux kernel with FDT blob + ramdisk
  Kernel:       kernel
  Init Ramdisk: ramdisk
  FDT:          fdt
  Hash algo:    sha1
  Hash value:   unavailable

На этом "успех" заканчивается, ибо после записи на флешку boot.ini и image.ub загрузки либо вообще нет, либо грузится только u-boot и не может загрузить ядро - заканчивается переходом в TFTPD и он умирает. Почему-то u-boot не видит файл образа на карточке, хотя по уверениям AMD он должен искать первым делом именно файл с именем image.ub.

Вот пример лога загрузки:

Spoiler

U-Boot 2023.01 (Jul 28 2023 - 11:08:15 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 2e:84:28:f3:69:77
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
No EFI system partition
BootOrder not defined
EFI boot manager: Cannot load any image
JTAG: Trying to boot script at 3000000
## Executing script at 03000000
Wrong image format for "source" command
JTAG: SCRIPT FAILED: continuing...
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
BootOrder not defined
EFI boot manager: Cannot load any image
MMC Device 1 not found
no mmc device at slot 1
Invalid bus 0 (err=-19)
Failed to initialize SPI flash at 0:0 (error -19)
QSPI: SCRIPT FAILED: continuing...


no devices available
NAND: SCRIPT FAILED: continuing...
NOR: Trying to boot script at 3000000
## Executing script at 03000000
Wrong image format for "source" command
NOR: SCRIPT FAILED: continuing...
starting USB...
Bus usb@e0002000: USB EHCI 1.00
scanning bus usb@e0002000 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device

Device 1: unknown device
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.81.64 (2843 ms)
*** Warning: no boot file name; using 'C0A85140.img'
...

Пробовал загружать в u-boot образ вручную и запускать его:

Quote

fatload mmc 0 0x1000000 image.ub

bootm 0x1000000

Лог типа такого:

Spoiler

Zynq> fatload mmc 0 0x1000000 image.ub
13790752 bytes read in 768 ms (17.1 MiB/s)
Zynq> bootm 0x1000000
## Loading kernel from FIT Image at 01000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel' kernel subimage
     Description:  Linux Kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x010000d0
     Data Size:    4621640 Bytes = 4.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x10000000
     Entry Point:  0x10000000
     Hash algo:    sha1
     Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 01000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'ramdisk' ramdisk subimage
     Description:  ramdisk
     Type:         RAMDisk Image
     Compression:  lzma compressed
     Data Start:   0x0146b27c
     Data Size:    9156160 Bytes = 8.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   951e1d29cf7ec56242bf8306303dee63b883ff66
   Verifying Hash Integrity ... sha1+ OK
WARNING: 'compression' nodes for ramdisks are deprecated, please fix your .its file!
## Loading fdt from FIT Image at 01000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x01468708
     Data Size:    10951 Bytes = 10.7 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   d2836712687057664c45433564f4b0d834aafc28
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x1468708
Working FDT set to 1468708
   Uncompressing Kernel Image
Error: Bad gzipped data
gzip compressed: uncompress error -1
Must RESET board to recover
resetting ...

Вопросы следующие:

1. ramdisk должен быть сжатый или нет? Где-то в логе увидел, что сжатие не поддерживается. Удалил признак сжатия из .its - предупреждение ушло, но пришло другое, что-то об другой ошибке с тем же результатом - сброс.

2. Есть ошибка на декомпрессию ядра:

Quote

   Uncompressing Kernel Image
Error: Bad gzipped data
gzip compressed: uncompress error -1
Must RESET board to recover
resetting ...

Странно, что в варианте с extlinux.conf все образы работают. Как должно быть?

3. Адреса загрузки - это вообще песня! какие они должны быть? Что надо прописывать в its и что в скрипте загрузки boot.scr?

4. Самый интересный вопрос, почему u-boot не видит образа image.ub на карточке, если, как уверяет AMD, в случае environment по умолчанию, он должен искать именно его? 

У AMD есть следующее поведение "по умолчанию" (я это перевёл😞

Spoiler

Загрузка с SD карты
-------------------

Например, при загрузке с устройств MMC (SD-карта или eMMC) следующий сценарий запускается из файла
boot.scr по умолчанию в среде U-Boot, предоставляемой Xilinx.

Это может быть изменено в зависимости от ваших потребностей.

if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" ; then
   if test -e ${devtype} ${devnum}:${distro_bootpart} /image.ub; then
      fatload ${devtype} ${devnum}:${distro_bootpart} 0x10000000 image.ub;
      bootm 0x10000000;
      exit;
   fi

   if test -e ${devtype} ${devnum}:${distro_bootpart} /Image; then
      fatload ${devtype} ${devnum}:${distro_bootpart} 0x00200000 Image;;
   fi

   if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then
      fatload ${devtype} ${devnum}:${distro_bootpart} 0x00100000 system.dtb;
   fi

   if test -e ${devtype} ${devnum}:${distro_bootpart} /rootfs.cpio.gz.u-boot; then
      fatload ${devtype} ${devnum}:${distro_bootpart} 0x04000000 rootfs.cpio.gz.u-boot;
      booti 0x00200000 0x04000000 0x00100000
      exit;
   fi

   booti 0x00200000 - 0x00100000
   exit;
fi

Дополнительные сведения об использовании команд boot и загрузочной системы приведены на странице U-Boot.

Следует отметить, что в этой схеме файлы должны быть найдены в корневом каталоге файловой системы и
соответствовать схеме именования:

-------------------------------------------------------------------------------------------
        Компонент                                      Имя файла            Адрес загрузки
-------------------------------------------------------------------------------------------
U-Boot combined image file (image.ub)                  image.ub               0x10000000
Linux kernel image file (если image.ub не найден)      Image                  0x00200000
Linux device tree file (если image.ub не найден)       system.dtb             0x00100000
Linux root filesystem image (если image.ub не найден)  rootfs.cpio.gz.u-boot  0x04000000
-------------------------------------------------------------------------------------------
Примечание: В таблице выше представлены значения по умолчанию, указанные в предварительно созданном
обеспечении. Инструменты PetaLinux автоматически настроят адреса флэш-памяти и загрузки соответствующим
образом, чтобы они соответствовали относительным размерам каждого раздела полезной нагрузки.

ВАЖНО отметить, что при загрузке с устройств MMC U-Boot загрузит все отдельные компоненты с загрузочного
носителя в виде файлов. При загрузке с флэш-устройств все компоненты загружаются с помощью U-Boot, за
исключением system.dtb. Для флэш-устройств предполагается, что файл system.dtb предварительно загружен
FSBL по правильному адресу при загрузке из файла BOOT.BIN.

Адреса Xilinx по умолчанию
--------------------------

В режиме загрузки JTAG U-Boot будет искать boot.scr.uimg в DDR по адресу 0x20000000. Это задается
переменной окружения SCRIPTADDR. В режиме загрузки eMMC/SD программа U-Boot будет искать файл с именем
boot.scr.uimg в основном разделе файловой системы FAT. При загрузке с устройств QSPI или NAND U-Boot
ожидает, что файл boot.scr.uimg будет перепрошит по адресу 0x3E80000. Это значение настраивается в
переменной CONFIG_BOOT_SCRIPT_OFFSET.

Приоритет метода загрузки
-------------------------

Таким образом, порядок приоритета поиска загрузочных компонентов выглядит следующим образом:

1. Файл extlinux.conf (ищется в папках /extlinux или /boot/extlinux).
2. Файл boot.scr + файл image.ub.
3. Файл boot.scr + отдельные файлы (образ, system.dtb и т.д.).

Нашёл тут про про boot.scr, но пока не вдавался, мозги уже кипят.

В итоге, менял адреса, убирал упоминание о компрессии (не само сжатие ядра и rootfs), добавлял/убирал boot.scr - ничего не вышло. С использованием extlinux.conf всё грузится от лично, а в варианте boot.ini+image.ub - ничего!

Кто может указать на косяки? Как должно быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня продолжил танцевать с бубном... Пока безуспешно.

На свой 1-й вопрос я почти ответил: ramdisk должен быть несжатый, но он у меня такой и был, несмотря на то, что назывался uramdisk.image.gz. Компрессия всё равно была отключена. Единственная разница исходного rootfs.cpio и uramdisk.image.gz - в подписи (которая делалась командой sudo mkimage -A arm -T ramdisk -C gzip -d rootfs.cpio uramdisk.image.gz). Подпись эта - некий заголовок в начале файла uramdisk.image.gz, а дальше идёт rootfs.cpio. Но, вычитал у AMD, что, как я понял, подпись нужна только для случая "старого" способа формирования образов в виде отдельных файлов. Для "нового" же, который называется FDT (с "плоскими" образами), вроде как не надо подписывать (тут подробнее).

Поэтому решил попробовать вставить в сборный образ rootfs.cpio вместо uramdisk.image.gz. Для этого доработал image.its (заодно сразу указал пути в папку, где лежат исходные образы после buildroot):

Spoiler

/dts-v1/;
  
/ {
    description = "U-Boot fitImage for qmtech kernel";
    #address-cells = <1>;
  
    images {
        kernel {
            description = "Linux Kernel";
            data = /incbin/("./buildroot/images/uImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "gzip";
            load = <0x8000>;
            entry = <0x8000>;
            hash {
                algo = "sha1";
            };
        };
        fdt {
            description = "Flattened Device Tree blob";
            data = /incbin/("./buildroot/images/system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
        ramdisk {
            description = "ramdisk";
            data = /incbin/("./buildroot/images/rootfs.cpio");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
    };
    configurations {
        default = "conf";
        conf {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel";
            fdt = "fdt";
            ramdisk = "ramdisk";
            hash {
                algo = "sha1";
            };
        };
    };
};

Заодно задал адрес старта ядра тот же, который был задан в конфигурации buildroot в настройках kernel.

Компилировал той же командой:

Quote

mkimage -f image.its image.ub

Лог:

Spoiler

FIT description: U-Boot fitImage for qmtech kernel
Created:         Mon Jul 31 10:47:47 2023
 Image 0 (kernel)
  Description:  Linux Kernel
  Created:      Mon Jul 31 10:47:47 2023
  Type:         Kernel Image
  Compression:  gzip compressed
  Data Size:    4621640 Bytes = 4513.32 KiB = 4.41 MiB
  Architecture: ARM
  OS:           Linux
  Load Address: 0x00008000
  Entry Point:  0x00008000
  Hash algo:    sha1
  Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
 Image 1 (fdt)
  Description:  Flattened Device Tree blob
  Created:      Mon Jul 31 10:47:47 2023
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    10951 Bytes = 10.69 KiB = 0.01 MiB
  Architecture: ARM
  Hash algo:    sha1
  Hash value:   d2836712687057664c45433564f4b0d834aafc28
 Image 2 (ramdisk)
  Description:  ramdisk
  Created:      Mon Jul 31 10:47:47 2023
  Type:         RAMDisk Image
  Compression:  uncompressed
  Data Size:    9156096 Bytes = 8941.50 KiB = 8.73 MiB
  Architecture: ARM
  OS:           Linux
  Load Address: unavailable
  Entry Point:  unavailable
  Hash algo:    sha1
  Hash value:   59d1b8b6db75d67820a74fd505648de893717c0b
 Default Configuration: 'conf'
 Configuration 0 (conf)
  Description:  Boot Linux kernel with FDT blob + ramdisk
  Kernel:       kernel
  Init Ramdisk: ramdisk
  FDT:          fdt
  Hash algo:    sha1
  Hash value:   unavailable

Но это ничего не принесло.

Лог загрузки был такой:

Spoiler

U-Boot 2023.01 (Jul 28 2023 - 11:08:15 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 62:c5:12:96:6a:05
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
No EFI system partition
BootOrder not defined
EFI boot manager: Cannot load any image
JTAG: Trying to boot script at 3000000
## Executing script at 03000000
Wrong image format for "source" command
JTAG: SCRIPT FAILED: continuing...
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
BootOrder not defined
EFI boot manager: Cannot load any image
MMC Device 1 not found
no mmc device at slot 1
Invalid bus 0 (err=-19)
Failed to initialize SPI flash at 0:0 (error -19)
QSPI: SCRIPT FAILED: continuing...


no devices available
NAND: SCRIPT FAILED: continuing...
NOR: Trying to boot script at 3000000
## Executing script at 03000000
Wrong image format for "source" command
NOR: SCRIPT FAILED: continuing...
starting USB...
Bus usb@e0002000: USB EHCI 1.00
scanning bus usb@e0002000 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device

Device 1: unknown device
ethernet@e000b000 Waiting for PHY auto negotiation to complete.. done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.81.87 (3016 ms)
*** Warning: no boot file name; using 'C0A85157.img'
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'C0A85157.img'.
Load address: 0x0
Loading: *
TFTP server died; starting again
missing environment variable: pxeuuid
Retrieving file: pxelinux.cfg/01-62-c5-12-96-6a-05
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/01-62-c5-12-96-6a-05'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A85157
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A85157'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A8515
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A8515'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A851
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A851'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A85
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A85'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A8
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A8'.
Load address: 0x2000000
Loading: T 
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0A
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0A'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C0
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C0'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/C
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/C'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/default-arm-zynq-zynq
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/default-arm-zynq-zynq'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/default-arm-zynq
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/default-arm-zynq'.
Load address: 0x2000000
Loading: T 
TFTP server died; starting again
Retrieving file: pxelinux.cfg/default-arm
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/default-arm'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Retrieving file: pxelinux.cfg/default
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'pxelinux.cfg/default'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Config file not found
BOOTP broadcast 1
DHCP client bound to address 192.168.81.87 (9 ms)
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'boot.scr.uimg'.
Load address: 0x3000000
Loading: *
TFTP server died; starting again
BOOTP broadcast 1
DHCP client bound to address 192.168.81.87 (6 ms)
Using ethernet@e000b000 device
TFTP from server 192.168.81.18; our IP address is 192.168.81.87
Filename 'boot.scr.uimg'.
Load address: 0x2000000
Loading: *
TFTP server died; starting again
Zynq> 

U-boot не видит image.ub несмотря на то, что в случае "using default environment" (см. лог) должени искать именно его.

Тогда я попробовал загрузить image.ub вручную. Лог был такой:

Spoiler

Zynq> fatload mmc 0 0x8000 image.ub
13790688 bytes read in 768 ms (17.1 MiB/s)
Zynq> bootm 0x8000
## Loading kernel from FIT Image at 00008000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel' kernel subimage
     Description:  Linux Kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x000080d0
     Data Size:    4621640 Bytes = 4.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    sha1
     Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 00008000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'ramdisk' ramdisk subimage
     Description:  ramdisk
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x0047327c
     Data Size:    9156096 Bytes = 8.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   59d1b8b6db75d67820a74fd505648de893717c0b
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 00008000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x00470708
     Data Size:    10951 Bytes = 10.7 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   d2836712687057664c45433564f4b0d834aafc28
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x470708
Working FDT set to 470708
   Uncompressing Kernel Image
Error: Bad gzipped data
gzip compressed: uncompress error -1
Must RESET board to recover
resetting ...


U-Boot 2023.01 (Jul 28 2023 - 11:08:15 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment
...

Вроде как u-boot образ "съел", распознал, но теперь не может распаковать ядро - ошибка декомпрессии gzip. Почему в "простом" случае отдельных файлов-образов ошибки декомпрессии ядра не было? Что не хватает?

И главное, где должно находиться и как выглядеть это "environment"? В файле сценария boot.scr? (до него пока не дошёл, как я понял, тот, что я делал ранее (первый пост), был для "старого" случая, а для нового с FDT он уже другой).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сначала потренировался через JTAG загрузку.

1. Грузится FSL
2. Грузится U-Boot
3. Грузится image.itb
Всё загружается автоматом через xsct и запускается

А потом уже на SPI/eMMC  записал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык, по отдельности они все грузятся с карточки. Я же в первом посте написал - через extlinux.conf. Система работает. А вот создать один образ из отдельных не получается.

Кстати, загрузка с SD и с SPI отличаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как часто бывает, ошибка приходит не одна. И тогда очень муторно разобраться.

Сегодня таки я одну нашёл, исправил, и сборный image.ub вручную загружается корректно.

Оказалось, что несмотря на настройки компиляции ядра в buildroot, что ядро надо сжать с помощью gzip:

buildroot_kernel_cfg.thumb.png.bf776aff2355e4c481ad90ada6081ed2.png

Ядро в итоге компилируется без сжатия, как я понял. Ибо, как только я исправил its:

Spoiler

/dts-v1/;
  
/ {
    description = "U-Boot fitImage for qmtech kernel";
    #address-cells = <1>;
  
    images {
        kernel {
            description = "Linux Kernel";
            data = /incbin/("./buildroot/images/uImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "none";
            load = <0x8000>;
            entry = <0x8000>;
            hash {
                algo = "sha1";
            };
        };
        fdt {
            description = "Flattened Device Tree blob";
            data = /incbin/("./buildroot/images/system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
        ramdisk {
            description = "ramdisk";
            data = /incbin/("./buildroot/images/rootfs.cpio");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "none";
            hash {
                algo = "sha1";
            };
        };
    };
    configurations {
        default = "conf";
        conf {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel";
            fdt = "fdt";
            ramdisk = "ramdisk";
            hash {
                algo = "sha1";
            };
        };
    };
};

И сгенерил новый image.ub, то после загрузки u-boot с SD карты успешно загрузил образ командами:

Quote

Zynq> fatload mmc 0 3000000 image.ub
13790688 bytes read in 767 ms (17.1 MiB/s)
Zynq> bootm 3000000
...

Лог загрузки такой:

Spoiler

## Loading kernel from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel' kernel subimage
     Description:  Linux Kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x030000d0
     Data Size:    4621640 Bytes = 4.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    sha1
     Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'ramdisk' ramdisk subimage
     Description:  ramdisk
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x0346b27c
     Data Size:    9156096 Bytes = 8.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   59d1b8b6db75d67820a74fd505648de893717c0b
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x03468708
     Data Size:    10951 Bytes = 10.7 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   d2836712687057664c45433564f4b0d834aafc28
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x3468708
Working FDT set to 3468708
   Loading Kernel Image
   Loading Ramdisk to 1e21a000, end 1ead5600 ... OK
   Loading Device Tree to 1e214000, end 1e219ac6 ... OK
Working FDT set to 1e214000

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 6.1.0-xilinx (root@dimonira-virtual-machine) (arm-buildroot-linux-gnueabihf-gcc.br_real (Buildroot 2023.05.1) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000
earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
printk: bootconsole [cdns0] enabled
Memory policy: Data cache writealloc
cma: Reserved 16 MiB at 0x1f000000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 12 pages/cpu s16788 r8192 d24172 u49152
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: earlycon
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 482120K/524288K available (7168K kernel code, 248K rwdata, 1940K rodata, 1024K init, 121K bss, 25784K reserved, 16384K cma-reserved, 0K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
GIC physical location is 0xf8f01000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
rcu: srcu_init: Setting srcu_struct sizes based on contention.
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 167MHz, resolution 6ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x26703d7dd8, max_idle_ns: 440795208065 ns
Switching to timer-based delay loop, resolution 6ns
Console: colour dummy device 80x30
printk: console [tty0] enabled
printk: bootconsole [cdns0] disabled
Booting Linux on physical CPU 0x0
Linux version 6.1.0-xilinx (root@dimonira-virtual-machine) (arm-buildroot-linux-gnueabihf-gcc.br_real (Buildroot 2023.05.1) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000
earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
printk: bootconsole [cdns0] enabled
Memory policy: Data cache writealloc
cma: Reserved 16 MiB at 0x1f000000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 12 pages/cpu s16788 r8192 d24172 u49152
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: earlycon
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 482120K/524288K available (7168K kernel code, 248K rwdata, 1940K rodata, 1024K init, 121K bss, 25784K reserved, 16384K cma-reserved, 0K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
GIC physical location is 0xf8f01000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
rcu: srcu_init: Setting srcu_struct sizes based on contention.
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 167MHz, resolution 6ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x26703d7dd8, max_idle_ns: 440795208065 ns
Switching to timer-based delay loop, resolution 6ns
Console: colour dummy device 80x30
printk: console [tty0] enabled
printk: bootconsole [cdns0] disabled
Calibrating delay loop (skipped), value calculated using timer frequency.. 333.33 BogoMIPS (lpj=1666666)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100060
rcu: Hierarchical SRCU implementation.
rcu:    Max phase no-delay instances is 1000.
smp: Bringing up secondary CPUs ...
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU1: Spectre v2: using BPIALL workaround
smp: Brought up 1 node, 2 CPUs
SMP: Total of 2 processors activated (666.66 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 512 (order: 3, 32768 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 256 KiB pool for atomic coherent allocations
thermal_sys: Registered thermal governor 'step_wise'
cpuidle: using governor menu
amba f8801000.etb: Fixing up cyclic dependency with replicator
amba f8803000.tpiu: Fixing up cyclic dependency with replicator
amba f8804000.funnel: Fixing up cyclic dependency with replicator
amba f889c000.ptm: Fixing up cyclic dependency with f8804000.funnel
amba f889d000.ptm: Fixing up cyclic dependency with f8804000.funnel
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
e0000000.serial: ttyPS0 at MMIO 0xe0000000 (irq = 26, base_baud = 6249999) is a xuartps
printk: console [ttyPS0] enabled
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
EDAC MC: Ver: 3.0.0
FPGA manager framework
Advanced Linux Sound Architecture Driver Initialized.
vgaarb: loaded
clocksource: Switched to clocksource arm_global_timer
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 4, 65536 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PCI: CLS 0 bytes, default 64
armv7-pmu f8891000.pmu: hw perfevents: no interrupt-affinity property, guessing.
Trying to unpack rootfs image as initramfs...
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
workingset: timestamp_bits=30 max_order=17 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  В© 2001-2006 Red Hat, Inc.
io scheduler mq-deadline registered
io scheduler kyber registered
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
gpio gpiochip0: (zynq_gpio): not an immutable chip, please consider fixing it!
dma-pl330 f8003000.dma-controller: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dma-controller:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd: module loaded
loop: module loaded
CAN device driver interface
Freeing initrd memory: 8944K
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 39 (36:40:30:ca:05:75)
e1000e: Intel(R) PRO/1000 Network Driver
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
usbcore: registered new interface driver usb-storage
i2c_dev: i2c /dev entries driver
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s
EDAC MC: ECC not enabled
Xilinx Zynq CpuIdle Driver started
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
ledtrig-cpu: registered to indicate activity on CPUs
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
timer #0 at (ptrval), irq=42
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
fpga_manager fpga0: Xilinx Zynq FPGA Manager registered
mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA
NET: Registered PF_INET6 protocol family
Segment Routing with IPv6
In-situ OAM (IOAM) with IPv6
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered PF_PACKET protocol family
can: controller area network core
NET: Registered PF_CAN protocol family
can: raw protocol
can: broadcast manager protocol
can: netlink gateway - max_hops=1
Registering SWP/SWPB emulation handler
of-fpga-region fpga-full: FPGA Region probed
of_cfs_init
of_cfs_init: OK
ALSA device list:
  No soundcards found.
Freeing unused kernel image (initmem) memory: 1024K
Run /init as init process
mmc0: new high speed SDHC card at address aaaa
mmcblk0: mmc0:aaaa SE16G 14.8 GiB 
 mmcblk0: p1
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Saving 256 bits of non-creditable seed for next boot
Starting haveged: haveged: command socket is listening at fd 3
OK
Starting network: OK
Starting dhcpcd...
dhcpcd-10.0.1 starting
8021q: 802.1Q VLAN Support v1.8
forked to background, child pid 92
macb e000b000.ethernet eth0: PHY [e000b000.ethernet-ffffffff:00] driver [RTL8211E Gigabit Ethernet] (irq=POLL)
macb e000b000.ethernet eth0: configuring for phy/rgmii-id link mode

Welcome to Zynq Linux!
Z7020 login: random: crng init done
macb e000b000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
root

Осталось разобраться с тем, почему u-boot не хочет грузить image.ub в дефолтотвом environment?

Я попробовал получить этот самый environment с помощью команды printenv и вот что получил:

Spoiler

Zynq> printenv
arch=arm
baudrate=115200
board=zynq
board_name=zynq
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr -q ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 jtag mmc0 mmc1 qspi nand nor usb0 usb1 pxe dhcp 
bootcmd=run distro_bootcmd
bootcmd_dhcp=devtype=dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
bootcmd_jtag=echo JTAG: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo JTAG: SCRIPT FAILED: continuing...;
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_nand=nand info && nand read ${scriptaddr} ${script_offset_f} ${script_size_f} && echo NAND: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo NAND: SCRIPT FAILED: continuing...;
bootcmd_nor=cp.b ${script_offset_nor} ${scriptaddr} ${script_size_f} && echo NOR: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo NOR: SCRIPT FAILED: continuing...;
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
bootcmd_qspi=sf probe 0 0 0 && sf read ${scriptaddr} ${script_offset_f} ${script_size_f} && echo QSPI: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo QSPI: SCRIPT FAILED: continuing...;
bootcmd_usb0=devnum=0; run usb_boot
bootcmd_usb1=devnum=1; run usb_boot
bootcmd_usb_dfu0=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && dfu 0 ram 0 60 && echo DFU0: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo DFU0: SCRIPT FAILED: continuing...;
bootcmd_usb_dfu1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && dfu 1 ram 1 60 && echo DFU1: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo DFU1: SCRIPT FAILED: continuing...;
bootcmd_usb_thor0=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 0 ram 0 && echo THOR0: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo THOR0: SCRIPT FAILED: continuing...;
bootcmd_usb_thor1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 1 ram 1 && echo THOR1: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo THOR1: SCRIPT FAILED: continuing...;
bootdelay=2
bootfile=boot.scr.uimg
bootfstype=fat
bootm_low=0
bootm_size=20000000
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
ethact=ethernet@e000b000
ethaddr=ae:0a:96:27:3d:bf
fdt_addr_r=0x1f00000
fdtcontroladdr=1eada3d0
kernel_addr_r=0x2000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x0
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
modeboot=sdboot
pxefile_addr_r=0x2000000
ramdisk_addr_r=0x3100000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo EXTLINUX FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
script_offset_f=fc0000
script_offset_nor=0xE2FC0000
script_size_f=0x40000
scriptaddr=3000000
soc=zynq
stderr=serial@e0000000
stdin=serial@e0000000
stdout=serial@e0000000
ubifs_boot=if ubi part ${bootubipart} ${bootubioff} && ubifsmount ubi0:${bootubivol}; then devtype=ubi; devnum=ubi0; bootfstype=ubifs; distro_bootpart=${bootubivol}; run scan_dev_for_boot; ubifsumount; fi
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=xilinx

Environment size: 5903/131067 bytes

И я что-то не наблюдаю, где здесь загрузка образа с именем image.ub? А вот загрузка с помощью extlinux.conf, которая получается без проблем (первый пост) как раз в наличии.

Видимо, надо смотреть конфигурацию u-boot, что-то там не настроено или "слетели" настройки по умолчанию.

 

Получил окружение u-boot с поставляемой SD-карты, в нём как раз image.ub присутствует:

Spoiler

U-Boot 2019.01 (Apr 07 2023 - 03:00:06 +0000) Xilinx Zynq ZC702

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
eth0: ethernet@e000b000
U-BOOT for QMTECH_Starter_Kit_V2_XC7Z020

ethernet@e000b000 Waiting for PHY auto negotiation to complete..... done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
DHCP client bound to address 192.168.81.65 (759 ms)
Hit any key to stop autoboot:  0 
Zynq> printenv
arch=arm
autoload=no
baudrate=115200
board=zynq
board_name=zynq
boot_img=BOOT.BIN
boot_targets=mmc 
bootcmd=run default_bootcmd
bootdelay=4
bootenv=uEnv.txt
clobstart=0x10000000
console=console=ttyPS0,115200
cp_kernel2ram=mmcinfo && fatload mmc ${sdbootdev} ${netstart} ${kernel_img}
cpu=armv7
default_bootcmd=run uenvboot; run cp_kernel2ram && bootm ${netstart}
dfu_mmc_info=set dfu_alt_info ${kernel_image} fat 0 1\\;dfu_mmc=run dfu_mmc_info && dfu 0 mmc 0
dfu_ram=run dfu_ram_info && dfu 0 ram 0
dfu_ram_info=setenv dfu_alt_info image.ub ram $netstart 0x1e00000
dnsip=192.168.81.18
dtb_img=system.dtb
dtbnetstart=0x23fff000
ethact=ethernet@e000b000
ethaddr=00:0a:35:00:1e:53
fault=echo ${img} image size is greater than allocated place - partition ${img} is NOT UPDATED
fdtcontroladdr=1f2c3800
gatewayip=192.168.81.18
importbootenv=echo "Importing environment from SD ..."; env import -t ${loadbootenv_addr} $filesize
install_boot=mmcinfo && fatwrite mmc ${sdbootdev} ${clobstart} ${boot_img} ${filesize}
install_bootenv=mmcinfo && fatwrite mmc ${sdbootdev} ${clobstart} ${bootenv_img} ${filesize}
install_kernel=mmcinfo && fatwrite mmc ${sdbootdev} ${clobstart} ${kernel_img} ${filesize}
ipaddr=192.168.81.65
kernel_img=image.ub
load_boot=tftpboot ${clobstart} ${boot_img}
load_dtb=tftpboot ${clobstart} ${dtb_img}
load_kernel=tftpboot ${clobstart} ${kernel_img}
loadaddr=0x10000000
loadbootenv=load mmc $sdbootdev:$partid ${loadbootenv_addr} ${bootenv}
loadbootenv_addr=0x00100000
modeboot=sdboot
nc=setenv stdout nc;setenv stdin nc;
netboot=tftpboot ${netstart} ${kernel_img} && bootm
netmask=255.255.255.0
netstart=0x10000000
psserial0=setenv stdout ttyPS0;setenv stdin ttyPS0
sd_uEnvtxt_existence_test=test -e mmc $sdbootdev:$partid /uEnv.txt
sd_update_dtb=echo Updating dtb from SD; mmcinfo && fatload mmc ${sdbootdev}:1 ${clobstart} ${dtb_img} && run install_dtb
sdbootdev=0
serial=setenv stdout serial;setenv stdin serial
serverip=192.168.0.111
soc=zynq
stderr=serial@e0000000
stdin=serial@e0000000
stdout=serial@e0000000
test_crc=if imi ${clobstart}; then run test_img; else echo ${img} Bad CRC - ${img} is NOT UPDATED; fi
test_img=setenv var "if test ${filesize} -gt ${psize}; then run fault; else run ${installcmd}; fi"; run var; setenv var
thor_mmc=run dfu_mmc_info && thordown 0 mmc 0
thor_ram=run dfu_ram_info && thordown 0 ram 0
uenvboot=if run sd_uEnvtxt_existence_test; then run loadbootenv; echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi
update_boot=setenv img boot; setenv psize ${bootsize}; setenv installcmd "install_boot"; run load_boot ${installcmd}; setenv img; setenv psize; setenv installcmd
update_dtb=setenv img dtb; setenv psize ${dtbsize}; setenv installcmd "install_dtb"; run load_dtb test_img; setenv img; setenv psize; setenv installcmd
update_kernel=setenv img kernel; setenv psize ${kernelsize}; setenv installcmd "install_kernel"; run load_kernel ${installcmd}; setenv img; setenv psize; setenv installcmd
vendor=xilinx

Environment size: 3045/524284 bytes
Zynq> 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/3/2023 at 12:05 AM, gosha-z said:

Смотрел. Там мало что объясняется. Шаг влево, шаг вправо - неизвестность. И до успешного результата ничего не доведено.

Пока что я понял, что в доках Xilinx всё заточено под Petalinux, так что image.ub - это там. Если компилировать u-boot самому, то всё будет по-другому. Разбираю...

-------------------------------

В итоге победил, система грузится из image.ub.

Изучая окружение u-boot, которое я получил с помощью команды printenv, я понял, что мне эти скрипты не осилить. Точнее, не сами скрипты, а как их поменять в настройках конфигурации u-boot.

В итоге я решил попробовать простой путь - изменить переменную окружения bootcmd, которая изначально была определена так

Quote

run distro_bootcmd

Эта distro_bootcmd выполняет различные варианты загрузки с разных устройств и по сети. Мне это всё вроде не нужно (для платы), поэтому заменил команду на следующие:

Quote

imagestart=0x3000000; imagename=image.ub; mem dev 0; fatload mmc 0 ${imagestart} ${imagename}; bootm ${imagestart};

Команду вводил в этом меню конфигурирования u-boot:

1387313451_bootcmdu-boot.thumb.png.7f625a450eb470d21b31d51b1be6492d.png

 

 

Больше ничего не менял, запустил сборку u-boot. После этого пересобрал boot.ini с новым u-boot.elf и записал на SD-карту файлы boot.ini и image.ub. Система загрузилась без проблем.

Лог загрузки следующий:

Spoiler

U-Boot 2023.01 (Aug 04 2023 - 16:50:42 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 0a:99:9d:88:cd:23
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
Unknown command 'mem' - try 'help'
13790688 bytes read in 768 ms (17.1 MiB/s)
## Loading kernel from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel' kernel subimage
     Description:  Linux Kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x030000d0
     Data Size:    4621640 Bytes = 4.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    sha1
     Hash value:   82eeb2b97a5a7d3a815d9a5abfdb53a29a27d323
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'ramdisk' ramdisk subimage
     Description:  ramdisk
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x0346b27c
     Data Size:    9156096 Bytes = 8.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   59d1b8b6db75d67820a74fd505648de893717c0b
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 03000000 ...
   Using 'conf' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x03468708
     Data Size:    10951 Bytes = 10.7 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   d2836712687057664c45433564f4b0d834aafc28
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x3468708
Working FDT set to 3468708
   Loading Kernel Image
   Loading Ramdisk to 1e21a000, end 1ead5600 ... OK
   Loading Device Tree to 1e214000, end 1e219ac6 ... OK
Working FDT set to 1e214000

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 6.1.0-xilinx (root@dimonira-virtual-machine) (arm-buildroot-linux-gnueabihf-gcc.br_real (Buildroot 2023.05.1) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000
earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
printk: bootconsole [cdns0] enabled
Memory policy: Data cache writealloc
cma: Reserved 16 MiB at 0x1f000000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 12 pages/cpu s16788 r8192 d24172 u49152
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: earlycon
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 482120K/524288K available (7168K kernel code, 248K rwdata, 1940K rodata, 1024K init, 121K bss, 25784K reserved, 16384K cma-reserved, 0K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
GIC physical location is 0xf8f01000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
rcu: srcu_init: Setting srcu_struct sizes based on contention.
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 167MHz, resolution 6ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x26703d7dd8, max_idle_ns: 440795208065 ns
Switching to timer-based delay loop, resolution 6ns
Console: colour dummy device 80x30
printk: console [tty0] enabled
printk: bootconsole [cdns0] disabled
Booting Linux on physical CPU 0x0
Linux version 6.1.0-xilinx (root@dimonira-virtual-machine) (arm-buildroot-linux-gnueabihf-gcc.br_real (Buildroot 2023.05.1) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Fri Jul 28 15:51:19 MSK 2023
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000
earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
printk: bootconsole [cdns0] enabled
Memory policy: Data cache writealloc
cma: Reserved 16 MiB at 0x1f000000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 12 pages/cpu s16788 r8192 d24172 u49152
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: earlycon
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 482120K/524288K available (7168K kernel code, 248K rwdata, 1940K rodata, 1024K init, 121K bss, 25784K reserved, 16384K cma-reserved, 0K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
GIC physical location is 0xf8f01000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
rcu: srcu_init: Setting srcu_struct sizes based on contention.
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 167MHz, resolution 6ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x26703d7dd8, max_idle_ns: 440795208065 ns
Switching to timer-based delay loop, resolution 6ns
Console: colour dummy device 80x30
printk: console [tty0] enabled
printk: bootconsole [cdns0] disabled
Calibrating delay loop (skipped), value calculated using timer frequency.. 333.33 BogoMIPS (lpj=1666666)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100060
rcu: Hierarchical SRCU implementation.
rcu:    Max phase no-delay instances is 1000.
smp: Bringing up secondary CPUs ...
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU1: Spectre v2: using BPIALL workaround
smp: Brought up 1 node, 2 CPUs
SMP: Total of 2 processors activated (666.66 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 512 (order: 3, 32768 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 256 KiB pool for atomic coherent allocations
thermal_sys: Registered thermal governor 'step_wise'
cpuidle: using governor menu
amba f8801000.etb: Fixing up cyclic dependency with replicator
amba f8803000.tpiu: Fixing up cyclic dependency with replicator
amba f8804000.funnel: Fixing up cyclic dependency with replicator
amba f889c000.ptm: Fixing up cyclic dependency with f8804000.funnel
amba f889d000.ptm: Fixing up cyclic dependency with f8804000.funnel
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
e0000000.serial: ttyPS0 at MMIO 0xe0000000 (irq = 26, base_baud = 6249999) is a xuartps
printk: console [ttyPS0] enabled
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
EDAC MC: Ver: 3.0.0
FPGA manager framework
Advanced Linux Sound Architecture Driver Initialized.
vgaarb: loaded
clocksource: Switched to clocksource arm_global_timer
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 4, 65536 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PCI: CLS 0 bytes, default 64
armv7-pmu f8891000.pmu: hw perfevents: no interrupt-affinity property, guessing.
Trying to unpack rootfs image as initramfs...
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
workingset: timestamp_bits=30 max_order=17 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  В© 2001-2006 Red Hat, Inc.
io scheduler mq-deadline registered
io scheduler kyber registered
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
gpio gpiochip0: (zynq_gpio): not an immutable chip, please consider fixing it!
dma-pl330 f8003000.dma-controller: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dma-controller:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd: module loaded
loop: module loaded
CAN device driver interface
Freeing initrd memory: 8944K
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 39 (0a:99:9d:88:cd:23)
e1000e: Intel(R) PRO/1000 Network Driver
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
usbcore: registered new interface driver usb-storage
i2c_dev: i2c /dev entries driver
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s
EDAC MC: ECC not enabled
Xilinx Zynq CpuIdle Driver started
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
ledtrig-cpu: registered to indicate activity on CPUs
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
timer #0 at (ptrval), irq=42
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA
fpga_manager fpga0: Xilinx Zynq FPGA Manager registered
NET: Registered PF_INET6 protocol family
Segment Routing with IPv6
In-situ OAM (IOAM) with IPv6
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered PF_PACKET protocol family
can: controller area network core
NET: Registered PF_CAN protocol family
can: raw protocol
mmc0: new high speed SDHC card at address aaaa
can: broadcast manager protocol
mmcblk0: mmc0:aaaa SE16G 14.8 GiB 
can: netlink gateway - max_hops=1
 mmcblk0: p1
Registering SWP/SWPB emulation handler
of-fpga-region fpga-full: FPGA Region probed
of_cfs_init
of_cfs_init: OK
ALSA device list:
  No soundcards found.
Freeing unused kernel image (initmem) memory: 1024K
Run /init as init process
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Saving 256 bits of non-creditable seed for next boot
Starting haveged: haveged: command socket is listening at fd 3
OK
Starting network: OK
Starting dhcpcd...
dhcpcd-10.0.1 starting
8021q: 802.1Q VLAN Support v1.8
forked to background, child pid 91
macb e000b000.ethernet eth0: PHY [e000b000.ethernet-ffffffff:00] driver [RTL8211E Gigabit Ethernet] (irq=POLL)
macb e000b000.ethernet eth0: configuring for phy/rgmii-id link mode

Welcome to Zynq Linux!
Z7020 login: random: crng init done
macb e000b000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
root

 

Окружение для нового u-boot стало таким:

Spoiler

Zynq> printenv
arch=arm
baudrate=115200
board=zynq
board_name=zynq
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr -q ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 jtag mmc0 mmc1 qspi nand nor usb0 usb1 pxe dhcp 
bootcmd=imagestart=0x3000000; imagename=image.ub; mem dev 0; fatload mmc 0 ${imagestart} ${imagename}; bootm ${imagestart};
bootcmd_dhcp=devtype=dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
bootcmd_jtag=echo JTAG: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo JTAG: SCRIPT FAILED: continuing...;
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_nand=nand info && nand read ${scriptaddr} ${script_offset_f} ${script_size_f} && echo NAND: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo NAND: SCRIPT FAILED: continuing...;
bootcmd_nor=cp.b ${script_offset_nor} ${scriptaddr} ${script_size_f} && echo NOR: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo NOR: SCRIPT FAILED: continuing...;
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
bootcmd_qspi=sf probe 0 0 0 && sf read ${scriptaddr} ${script_offset_f} ${script_size_f} && echo QSPI: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo QSPI: SCRIPT FAILED: continuing...;
bootcmd_usb0=devnum=0; run usb_boot
bootcmd_usb1=devnum=1; run usb_boot
bootcmd_usb_dfu0=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && dfu 0 ram 0 60 && echo DFU0: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo DFU0: SCRIPT FAILED: continuing...;
bootcmd_usb_dfu1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && dfu 1 ram 1 60 && echo DFU1: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo DFU1: SCRIPT FAILED: continuing...;
bootcmd_usb_thor0=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 0 ram 0 && echo THOR0: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo THOR0: SCRIPT FAILED: continuing...;
bootcmd_usb_thor1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 1 ram 1 && echo THOR1: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo THOR1: SCRIPT FAILED: continuing...;
bootdelay=2
bootm_low=0
bootm_size=20000000
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
ethaddr=1e:df:b1:05:a5:cb
fdt_addr_r=0x1f00000
fdtcontroladdr=1eada3d0
kernel_addr_r=0x2000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x0
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
modeboot=sdboot
pxefile_addr_r=0x2000000
ramdisk_addr_r=0x3100000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo EXTLINUX FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
script_offset_f=fc0000
script_offset_nor=0xE2FC0000
script_size_f=0x40000
scriptaddr=3000000
soc=zynq
stderr=serial@e0000000
stdin=serial@e0000000
stdout=serial@e0000000
ubifs_boot=if ubi part ${bootubipart} ${bootubioff} && ubifsmount ubi0:${bootubivol}; then devtype=ubi; devnum=ubi0; bootfstype=ubifs; distro_bootpart=${bootubivol}; run scan_dev_for_boot; ubifsumount; fi
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=xilinx

Environment size: 5937/131067 bytes
Zynq> 

 

Сделал сравнение окружения для прежнего u-boot и нового:

9825108_printenv.thumb.png.c028cc1152199fb73fb82704c824d11a.png

 

Чтобы получить окружение u-boot, я временно переименовал image.ub, чтобы он не грузился. В итоге u-boot после замены bootcmd заканчивает попытку загрузки очень быстро:

Spoiler

U-Boot 2023.01 (Aug 04 2023 - 16:50:42 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 512 MiB
Core:  19 devices, 14 uclasses, devicetree: board
Flash: 0 Bytes
NAND:  0 MiB
MMC:   mmc@e0100000: 0
Loading Environment from FAT... *** Error - No Valid Environment Area found
*** Warning - bad env area, using default environment

In:    serial@e0000000
Out:   serial@e0000000
Err:   serial@e0000000
Net:   
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 1e:df:b1:05:a5:cb
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
Unknown command 'mem' - try 'help'
Failed to load 'image.ub'
Wrong Image Format for bootm command
ERROR: can't get kernel image!

Никаких попыток загрузки с других источников нет.

Так что получилось топорно, но я пока не силён в линуксах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...