A53 CPU(xilinx의 ZU5 내부)에서 Linux 커널을 부팅하려고 합니다. 두 가지 어려운 것이 있습니다. 첫 번째는 ZU5를 사용한 맞춤형 PCB입니다. 두 번째는 zu9eg가 포함된 ZCU102 SDK입니다.
시작 로그는 다음과 같습니다.
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.19 (build_station) (aarch64-buildroot-linux-gnu-gcc.br_real (B3
[ 0.000000] Machine model: ZynqMP
[ 0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[ 0.000000] printk: bootconsole [cdns0] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] OF: fdt: Invalid device tree blob header
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x000000087fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000007fefffff]
[ 0.000000] node 0: [mem 0x0000000800000000-0x000000087fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000087fffffff]
[ 0.000000] On node 0, zone Normal: 256 pages in unavailable ranges
[ 0.000000] cma: Reserved 256 MiB at 0x000000006fc00000
[ 0.000000] Failed to find device node for boot cpu
[ 0.000000] missing boot CPU MPIDR, not enabling secondaries
[ 0.000000] percpu: Embedded 17 pages/cpu s32600 r8192 d28840 u69632
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1033987
[ 0.000000] Kernel command line: earlycon clk_ignore_unused
[ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] software IO TLB: mapped [mem 0x000000006bc00000-0x000000006fc00000] (64MB)
[ 0.000000] Memory: 3779764K/4193280K available (8448K kernel code, 692K rwdata, 2232K rodata, 1472K)
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] random: get_random_bytes called from start_kernel+0x3f0/0x5fc with crng_init=0
[ 0.000000] timer_probe: no matching timers found
[ 0.000000] Kernel panic - not syncing: Unable to initialise architected timer.
[ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.15.19 #7
[ 0.000000] Hardware name: ZynqMP SL300 (DT)
[ 0.000000] Call trace:
[ 0.000000] dump_backtrace+0x0/0x190
[ 0.000000] show_stack+0x18/0x30
[ 0.000000] dump_stack_lvl+0x7c/0xa0
[ 0.000000] dump_stack+0x18/0x34
[ 0.000000] panic+0x14c/0x2f8
[ 0.000000] time_init+0x30/0x4c
[ 0.000000] start_kernel+0x4fc/0x5fc
[ 0.000000] __primary_switched+0xa4/0xac
[ 0.000000] ---[ end Kernel panic - not syncing: Unable to initialise architected timer. ]---
두 번째 어려움:
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.19 (build_station) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.11-rc3-13-g43899226b2) 11.3.0, GNU ld (GNU Binutils) 2.38) #2 SMP Fri Dec 2 12:32:23 2
[ 0.000000] Machine model: ZynqMP
[ 0.000000] efi: UEFI not found.
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x000000087fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000007fefffff]
[ 0.000000] node 0: [mem 0x0000000800000000-0x000000087fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000087fffffff]
[ 0.000000] On node 0, zone Normal: 256 pages in unavailable ranges
[ 0.000000] cma: Reserved 256 MiB at 0x000000006b800000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: MIGRATE_INFO_TYPE not supported.
[ 0.000000] psci: SMC Calling Convention v1.2
[ 0.000000] percpu: Embedded 18 pages/cpu s34456 r8192 d31080 u73728
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1033987
[ 0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait
[ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] software IO TLB: mapped [mem 0x000000007bf00000-0x000000007ff00000] (64MB)
[ 0.000000] Memory: 3771452K/4193280K available (13952K kernel code, 912K rwdata, 3908K rodata, 2048K init, 336K bss, 159684K reserved, 262144K cma-reserved)
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
두 번째 하드 드라이브에서 Linux가 부팅되고 동일한 장치 트리를 사용할 수 있습니다. 차이점을 알 수 있습니다. 첫 번째 하드코어에는 psci 감지 기능이 없습니다.
이것이 하드웨어 문제일 수 있는지 알고 싶습니다.
커널 명령줄: earlycon clk_ignore_unused
장치 Machine model: ZynqMP
트리에서. 그럼 장치 트리를 읽은 것 같나요?
도와 주셔서 감사합니다
편집: 추가 로그 Invalid device tree blob header
:
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.19 (test@build-station) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.11-rc3-13-g43899226b2) 11.3.0, GNU ld (GNU Binutils) 2.38) #12 SMP Mon Sep 11 12:45:03
[ 0.000000] OF: fdt: dt_root_size_cells = 2
[ 0.000000] OF: fdt: dt_root_addr_cells = 2
[ 0.000000] OF: fdt: search "chosen", depth: 0, uname:
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: cpus
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: cpu@0
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: cpu@1
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: idle-states
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: cpu-sleep-0
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: cpu-opp-table
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: opp00
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: opp01
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: opp02
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: opp03
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: zynqmp_ipi
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: mailbox@ff990400
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: dcc
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: pmu
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: psci
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: firmware
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: zynqmp-firmware
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: pcap
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: zynqmp-power
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: reset-controller
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: pinctrl
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: clock-controller
...
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: aux_ref_clk
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: dp_aclk
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: amba_pl@0
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: axi_bram_ctrl@a0000000
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: dma@80000000
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: dma-channel@80000000
[ 0.000000] OF: fdt: search "chosen", depth: 3, uname: dma-channel@80000030
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: puls4ic_sl300@80010000
[ 0.000000] OF: fdt: search "chosen", depth: 2, uname: system_management_wiz@80020000
[ 0.000000] OF: fdt: search "chosen", depth: 1, uname: chosen
[ 0.000000] OF: fdt: Command line is: earlycon clk_ignore_unused loglevel=8
[ 0.000000] OF: fdt: memory scan node memory, reg size 32,
[ 0.000000] OF: fdt: - 0, 7ff00000
[ 0.000000] OF: fdt: - 800000000, 80000000
[ 0.000000] OF: fdt: Looking for usable-memory-range property...
[ 0.000000] Machine model: ZynqMP SL300
[ 0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[ 0.000000] printk: bootconsole [cdns0] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] OF: fdt: -> unflatten_device_tree()
[ 0.000000] OF: fdt: Unflattening device tree:
[ 0.000000] OF: fdt: magic: 07074021
[ 0.000000] OF: fdt: size: 00006800
[ 0.000000] OF: fdt: version: 00006800
[ 0.000000] OF: fdt: Invalid device tree blob header : -9
매직 넘버는 0xD00DFEED여야 하는데 0x07074021이 있습니까? 내 uboot 시작 명령:
fatload mmc 0:1 $kernel_addr_r Image.gz
fatload mmc 0:1 $fdt_addr_r system.dtb
booti $kernel_addr_r - $fdt_addr_r
답변1
해결되었습니다. RAM 구성 문제입니다.
장치 트리의 메모리 섹션을 4GB 대신 2GB로 설정했는데 이제 작동합니다. 2GB가 있습니다. 이것은 잘못된 계산입니다.