Vitis 调试bootloader详细版

/ 0评 / 0

其实之前写过简单版本,不过最近居然还有人搜到这里要解决问题,看来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应该都可以得到答案.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注