LINUX.ORG.RU

Запуск EFI ядра Linux на Zynq 7000 серии

 , ,


0

1

Здравствуйте. Имеется следующая проблема. Пытаюсь запустить EFI ядро Linux на Zynq 7000 серии. Собрал последний uboot с поддержкой EFI. Собрал arm-efi grub. Создал 2 раздела на SD карте. Первый 512mb с BOOT.bin, dtb, ядром и grub. Второй ext4 c корнем.

U-Boot 2021.01-00102-g43adebe34b-dirty (Oct 24 2021 - 20:40:28 +0300)

CPU:   Zynq 7z020
Silicon: v3.1
DRAM:  ECC disabled 1 GiB
Flash: 0 Bytes
NAND:  1024 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, mdio bus e000b000, phyaddr -1, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - be:b0:d9:e9:06:c9
eth0: ethernet@e000b000
ZYNQ GEM: e000c000, mdio bus e000c000, phyaddr -1, interface gmii
Could not get PHY for eth1: addr -1

Hit any key to stop autoboot:  0 
Zynq> 
Zynq> load mmc 0:1 0x1f00000 dtb/zynq-mine.dtb
11689 bytes read in 24 ms (475.6 KiB/s)
Zynq> load mmc 0:1 0x2000000 EFI/grub/grubarm.efi
98304 bytes read in 30 ms (3.1 MiB/s)
Zynq> bootefi 0x2000000 0x1f00000

Попадаем в grub и он загружает ядро Linux EFI, но застревает на данном моменте

EFI stub: Booting Linux Kernel...
EFI stub: Using DTB from configuration table
EFI stub: Exiting boot services and installing virtual address map...

Есть предположение, что ядро стартует, только выхлоп загрузки не попадает в консоль. printenv

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 ${fdti
boot_efi_bootmgr=if fdt addr ${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=setenv devtype dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${sc;
bootcmd_jtag=echo JTAG: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo JTAG: SCRIPT FAILED: con;
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 sc;
bootcmd_nor=cp.b ${script_offset_nor} ${scriptaddr} ${script_size_f} && echo NOR: Trying to boot script at ${scriptad;
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;
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 t;
bootcmd_usb_dfu1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && dfu 1 ram 1 60 && echo DFU1: Trying t;
bootcmd_usb_thor0=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 0 ram 0 && echo THOR0: Tryi;
bootcmd_usb_thor1=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f && thordown 1 ram 1 && echo THOR1: Tryi;
bootdelay=2
bootm_low=0
bootm_size=30000000
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
fdt_addr_r=0x1f00000
fdtcontroladdr=3ead3110
kernel_addr_r=0x2000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
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 sc;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; ft
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soce
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Foi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${e
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=env exists bootubipart || env set bootubipart UBI; env exists bootubivol || env set bootubivol boot; if ubi
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=xilinx

Файлы на 0 разделе карты

.
├── boot
│   └── grub
│       ├── arm-efi
│       │   ├── acpi.mod
│       │   ├── adler32.mod
│       │   ├── affs.mod
│       │   ├── afs.mod
│       │   ├── afsplitter.mod
│       │   ├── all_video.mod
│       │   ├── archelp.mod
│       │   ├── bfs.mod
│       │   ├── bitmap.mod
│       │   ├── bitmap_scale.mod
│       │   ├── blocklist.mod
│       │   ├── boot.mod
│       │   ├── bswap_test.mod
│       │   ├── btrfs.mod
│       │   ├── bufio.mod
│       │   ├── cat.mod
│       │   ├── cbfs.mod
│       │   ├── chain.mod
│       │   ├── cmdline_cat_test.mod
│       │   ├── cmp.mod
│       │   ├── cmp_test.mod
│       │   ├── command.lst
│       │   ├── configfile.mod
│       │   ├── core.efi
│       │   ├── cpio_be.mod
│       │   ├── cpio.mod
│       │   ├── crc64.mod
│       │   ├── cryptodisk.mod
│       │   ├── crypto.lst
│       │   ├── crypto.mod
│       │   ├── ctz_test.mod
│       │   ├── datehook.mod
│       │   ├── date.mod
│       │   ├── datetime.mod
│       │   ├── diskfilter.mod
│       │   ├── disk.mod
│       │   ├── div_test.mod
│       │   ├── dm_nv.mod
│       │   ├── echo.mod
│       │   ├── efifwsetup.mod
│       │   ├── efi_gop.mod
│       │   ├── efinet.mod
│       │   ├── elf.mod
│       │   ├── eval.mod
│       │   ├── exfat.mod
│       │   ├── exfctest.mod
│       │   ├── ext2.mod
│       │   ├── extcmd.mod
│       │   ├── f2fs.mod
│       │   ├── fat.mod
│       │   ├── fdt.mod
│       │   ├── file.mod
│       │   ├── font.mod
│       │   ├── fshelp.mod
│       │   ├── fs.lst
│       │   ├── functional_test.mod
│       │   ├── gcry_arcfour.mod
│       │   ├── gcry_blowfish.mod
│       │   ├── gcry_camellia.mod
│       │   ├── gcry_cast5.mod
│       │   ├── gcry_crc.mod
│       │   ├── gcry_des.mod
│       │   ├── gcry_dsa.mod
│       │   ├── gcry_idea.mod
│       │   ├── gcry_md4.mod
│       │   ├── gcry_md5.mod
│       │   ├── gcry_rfc2268.mod
│       │   ├── gcry_rijndael.mod
│       │   ├── gcry_rmd160.mod
│       │   ├── gcry_rsa.mod
│       │   ├── gcry_seed.mod
│       │   ├── gcry_serpent.mod
│       │   ├── gcry_sha1.mod
│       │   ├── gcry_sha256.mod
│       │   ├── gcry_sha512.mod
│       │   ├── gcry_tiger.mod
│       │   ├── gcry_twofish.mod
│       │   ├── gcry_whirlpool.mod
│       │   ├── geli.mod
│       │   ├── gettext.mod
│       │   ├── gfxmenu.mod
│       │   ├── gfxterm_background.mod
│       │   ├── gfxterm_menu.mod
│       │   ├── gfxterm.mod
│       │   ├── gptsync.mod
│       │   ├── gzio.mod
│       │   ├── halt.mod
│       │   ├── hashsum.mod
│       │   ├── hello.mod
│       │   ├── help.mod
│       │   ├── hexdump.mod
│       │   ├── hfs.mod
│       │   ├── hfspluscomp.mod
│       │   ├── hfsplus.mod
│       │   ├── http.mod
│       │   ├── iso9660.mod
│       │   ├── jfs.mod
│       │   ├── jpeg.mod
│       │   ├── json.mod
│       │   ├── keystatus.mod
│       │   ├── ldm.mod
│       │   ├── linux.mod
│       │   ├── loadenv.mod
│       │   ├── loopback.mod
│       │   ├── lsacpi.mod
│       │   ├── lsefimmap.mod
│       │   ├── lsefi.mod
│       │   ├── lsefisystab.mod
│       │   ├── lsmmap.mod
│       │   ├── ls.mod
│       │   ├── lssal.mod
│       │   ├── luks2.mod
│       │   ├── luks.mod
│       │   ├── lvm.mod
│       │   ├── lzopio.mod
│       │   ├── macbless.mod
│       │   ├── macho.mod
│       │   ├── mdraid09_be.mod
│       │   ├── mdraid09.mod
│       │   ├── mdraid1x.mod
│       │   ├── memdisk.mod
│       │   ├── memrw.mod
│       │   ├── minicmd.mod
│       │   ├── minix2_be.mod
│       │   ├── minix2.mod
│       │   ├── minix3_be.mod
│       │   ├── minix3.mod
│       │   ├── minix_be.mod
│       │   ├── minix.mod
│       │   ├── mmap.mod
│       │   ├── moddep.lst
│       │   ├── modinfo.sh
│       │   ├── mpi.mod
│       │   ├── msdospart.mod
│       │   ├── mul_test.mod
│       │   ├── net.mod
│       │   ├── newc.mod
│       │   ├── nilfs2.mod
│       │   ├── normal.mod
│       │   ├── ntfscomp.mod
│       │   ├── ntfs.mod
│       │   ├── odc.mod
│       │   ├── offsetio.mod
│       │   ├── part_acorn.mod
│       │   ├── part_amiga.mod
│       │   ├── part_apple.mod
│       │   ├── part_bsd.mod
│       │   ├── part_dfly.mod
│       │   ├── part_dvh.mod
│       │   ├── part_gpt.mod
│       │   ├── partmap.lst
│       │   ├── part_msdos.mod
│       │   ├── part_plan.mod
│       │   ├── part_sun.mod
│       │   ├── part_sunpc.mod
│       │   ├── parttool.lst
│       │   ├── parttool.mod
│       │   ├── password.mod
│       │   ├── password_pbkdf2.mod
│       │   ├── pbkdf2.mod
│       │   ├── pbkdf2_test.mod
│       │   ├── pgp.mod
│       │   ├── png.mod
│       │   ├── priority_queue.mod
│       │   ├── probe.mod
│       │   ├── procfs.mod
│       │   ├── progress.mod
│       │   ├── raid5rec.mod
│       │   ├── raid6rec.mod
│       │   ├── read.mod
│       │   ├── reboot.mod
│       │   ├── regexp.mod
│       │   ├── reiserfs.mod
│       │   ├── romfs.mod
│       │   ├── scsi.mod
│       │   ├── search_fs_file.mod
│       │   ├── search_fs_uuid.mod
│       │   ├── search_label.mod
│       │   ├── search.mod
│       │   ├── serial.mod
│       │   ├── setjmp.mod
│       │   ├── setjmp_test.mod
│       │   ├── sfs.mod
│       │   ├── shift_test.mod
│       │   ├── signature_test.mod
│       │   ├── sleep.mod
│       │   ├── sleep_test.mod
│       │   ├── smbios.mod
│       │   ├── squash4.mod
│       │   ├── strtoull_test.mod
│       │   ├── syslinuxcfg.mod
│       │   ├── tar.mod
│       │   ├── terminal.lst
│       │   ├── terminal.mod
│       │   ├── terminfo.mod
│       │   ├── test_blockarg.mod
│       │   ├── testload.mod
│       │   ├── test.mod
│       │   ├── testspeed.mod
│       │   ├── tftp.mod
│       │   ├── tga.mod
│       │   ├── time.mod
│       │   ├── tpm.mod
│       │   ├── trig.mod
│       │   ├── tr.mod
│       │   ├── true.mod
│       │   ├── udf.mod
│       │   ├── ufs1_be.mod
│       │   ├── ufs1.mod
│       │   ├── ufs2.mod
│       │   ├── video_colors.mod
│       │   ├── video_fb.mod
│       │   ├── videoinfo.mod
│       │   ├── video.lst
│       │   ├── video.mod
│       │   ├── videotest_checksum.mod
│       │   ├── videotest.mod
│       │   ├── xfs.mod
│       │   ├── xnu_uuid.mod
│       │   ├── xnu_uuid_test.mod
│       │   ├── xzio.mod
│       │   ├── zfscrypt.mod
│       │   ├── zfsinfo.mod
│       │   ├── zfs.mod
│       │   └── zstd.mod
│       ├── fonts
│       ├── grub.cfg
│       ├── grubenv
│       └── locale
├── BOOT.bin
├── dtb
│   ├── devicetree.dtb
│   └── zynq-mine.dtb
├── EFI
│   └── grub
│       └── grubarm.efi
├── initrd
│   └── initrd.img-5.4.0-1006-raspi2
└── kernel
    ├── vmlinuz-4.15.0-1060-raspi2
    └── vmlinuz-5.4.0-1006-raspi2

grub.cfg

set default=0
set timeout=5

menuentry "Astra Linux for Raspberry Pi 2" {
	UUID=00501d8a-b7f3-403e-9735-a056f96033ed
	linux /kernel/vmlinuz-4.15.0-1060-raspi2 console=tty0 console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait earlyprintk
	initrd /initrd/initrd.img-5.4.0-1006-raspi2
}

Заранее спасибо



Последнее исправление: kiruseni (всего исправлений: 1)

Мне кажется надо копать в этом направлении. https://github.com/utmapp/UTM/issues/2682 Тот же самый вопрос, зависание там же. Там перевели в режим только консоль и все заработало.

set debug
set default=0
set timeout=5

menuentry "Astra Fucking Linux for Raspberry Pi 2" {
	UUID=00501d8a-b7f3-403e-9735-a056f96033ed
	linux /kernel/vmlinuz-4.15.0-1060-raspi2 console=ttyPS0,115200 root=UUID=$UUID rw earlyprintk rootfstype=ext4 rootwait text
	initrd /initrd/initrd.img-5.4.0-1006-raspi2
}

Если не ошибаюсь параметр text говорит грузиться только в режиме консоли, но не помогло.

kiruseni
() автор топика
Ответ на: комментарий от NAY_GIGGER

Есть предположение почему может не работать еще.

uart0: serial@e0000000 {
   compatible = "xlnx,xuartps", "cdns,uart-r1p8";
   status = "disabled";
   clocks = <&clkc 23>, <&clkc 40>;
   clock-names = "uart_clk", "pclk";
   reg = <0xE0000000 0x1000>;
   interrupts = <0 27 4>;
  };

uart0 хочет драйвер xilinx uart, возможно его нет в ядре. Какие есть шаги решения данной проблемы, если вносить изменения в ядро нельзя?

kiruseni
() автор топика
Ответ на: комментарий от kiruseni

вносить изменения в ядро нельзя

Это как? Ядро под GPL2, берите и делайте.

Или вас «запугали» любители слепо следовать букве корпоративного закона?

NAY_GIGGER
()

Кхм...

Не могли бы Вы описать поведение системы – монитор моргает?

Есть подозрение что UUID у Вас не соответствует реальному. Т.е., загрузиться пытается, но ничего не находит.

Я ещё раз предлагаю Вам запустить эту самую доблестную Astra Linux for ARM в QEMU. Как это сделать, pdf на 50 страниц. Пока Вы не сэмулируете процесс загрузки и не поймёте как именно данный Linux грузиться будет на ARM9 (и вообще будет ли), Вы будете биться головой о стену. На QEMU, как я и писал Вам ранее, куда как проще посмотреть что и как.

Впрочем, я не настаиваю – дело это всё Ваше.

P.S. Там и gdb можно попробовать подстегнуть, но я не уверен взлетит или нет.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)

Вы пытаетесь запустить ядро, в названии которого есть «raspi2», на совсем другой плате. Не удивительно, что оно не работает — там просто может не быть необходимых драйверов, не говоря уже о том, что оно может собираться из особой ветки, которая работает только на Raspberry Pi.

ValdikSS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.