其实之前写过简单版本,不过最近居然还有人搜到这里要解决问题,看来AI没给到具体的帮助,那我还是自己写一个详细教程.
petalinux构建默认为了节约空间,会清理源码,这里要保留源码.
修改PetaLinux工程下的build/conf/local.conf,然后给注释上.
# INHERIT += "rm_work"
然后新建Platform这一条应该没什么疑问.
随便新建个工程,比如u-boot (也可以是fsbl/kernel等等,这里具体从哪个开始切入问题不大.)
然后选launch.json,把elf换成我们的u-boot.elf文件,是否勾上Stop At Entry根据你需要.
内嵌dtb就用u-boot-dtb.elf
这时候可以Build -> Debug,然后尽快暂停,会出现一个错误提示要记住
我这里要建立一个Path Map,让源码映射正确起来.
断开,重新开始调试,源码现在就正确了.
但是有人不想下载什么代码,而是想直接attach到目标,或者手动也是可以的,先改调试配置.
这时候进去后不知道是什么,因为RAM是随机的,他可能是任何代码.
在下面XSDB Console做一下CPU复位,先让CPU停下乱跑(当然如果你启动模式是NOR/TF卡这些已经正常跑起来了)
xsdb% targets
1 APU
2* ARM Cortex-A9 MPCore #0 (Hardware Breakpoint)
3 ARM Cortex-A9 MPCore #1 (Running)
4 xc7z010
xsdb% targets -set 2
xsdb% rst -processor
Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x0 (Vector Catch)
xsdb%
用dow命令下载elf (如果是常规启动当然不用)
Downloading Program -- /home/taterli/code/petalinux/zynq/images/linux/zynq_fsbl.elf
section, .text: 0x00000000 - 0x0000672f
section, .handoff: 0x00006730 - 0x0000677b
section, .init: 0x0000677c - 0x00006787
section, .fini: 0x00006788 - 0x00006793
section, .rodata: 0x00006794 - 0x000069fc
section, .data: 0x00006a00 - 0x00008683
section, .mmu_tbl: 0x0000c000 - 0x0000ffff
section, .ARM.exidx: 0x00010000 - 0x00010007
section, .init_array: 0x00010008 - 0x0001000b
section, .fini_array: 0x0001000c - 0x0001000f
section, .rsa_ac: 0x00010010 - 0x0001103f
section, .bss: 0x00011040 - 0x00011573
section, .drvcfg_sec: 0x00011574 - 0x00011577
section, .heap: 0x00011578 - 0x0001357f
section, .stack: 0xffff0000 - 0xffffd3ff
100% 0MB 0.0MB/s 00:01
Setting PC to Program Start Address 0x00000000
Successfully downloaded /home/taterli/code/petalinux/zynq/images/linux/zynq_fsbl.elf
xsdb% dow /home/taterli/code/petalinux/zynq/images/linux/u-boot.elf
Downloading Program -- /home/taterli/code/petalinux/zynq/images/linux/u-boot.elf
section, .text: 0x04000000 - 0x040003a7
section, .efi_runtime: 0x040003a8 - 0x0400122b
section, .text_rest: 0x04001240 - 0x040b279b
section, .rodata: 0x040b27a0 - 0x040dc658
section, .hash: 0x040dc65c - 0x040dc673
section, .data: 0x040dc678 - 0x040e529f
section, .got.plt: 0x040e52a0 - 0x040e52ab
section, __u_boot_list: 0x040e52ac - 0x040e7b53
section, .efi_runtime_rel: 0x040e7b54 - 0x040e7c4b
section, .rel.dyn: 0x040e7c50 - 0x040fe60f
section, .bss_start: 0x040e7c50 - 0x040e7c4f
section, .bss: 0x040e7c50 - 0x040fad5f
section, .bss_end: 0x040fad60 - 0x040fad5f
100% 0MB 0.0MB/s 00:34
最后控制台输入con正常运行.
比如要考虑U-Boot重定位问题,那么xsdb也要处理.这些具体看文档或者问AI应该都可以得到答案.