【工作笔记】ERROR: Section image.ub.0 offset of 0x520000 overlaps with prior section end address of D19B00

【问题现象】

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --kernel --force

在使用petalinux-package将uboot、内核和根文件系统等进行打包生成一个BOOT.BIN文件,最后通过Xilinx的SDK或者vivado烧写到QSPI中时,出现以下错误:[ERROR] : Section image.ub.0 offset of 0x520000 overlaps with prior section end address of D19B00

【问题根因与解决方法】

之前,用同样的方法打包一个BOOT.BIN未出现这个错误,唯一不同的点在于两次使用的design_1_wrapper.hdf即FPGA部分的bitstream文件design_1_wrapper.bit不同,前一次正常的时候使用的bit文件大小为1M,后一次的bit文件有13M。

 查资料可知,zynq的uboot生成需要加载FPGA部分的硬件信息,可以说.bit文件内的硬件信息将会被写入uboot中。

petalinux的BOOT.BIN生成时,通过petalinux-config可以设置FLASH(BOOT.BIN要写入的FLASH)的分区和大小,在默认情况下,petalinux-config中显示的分区为下图,boot和bootenv的大小为0x520000,而如果.bit文件作为petalinux image的一部分插入(插入到哪里?存疑),0x520000将超出范围,因此需要延长uboot的偏移量。

 将partiton 1中的bootenv的大小修改为0x900000,偏移量扩展到0xE00000后,重新编译和打包后,将BOOT.BIN烧写到QSPI中启动即可。

再次prtalinuc-package成功:

【疑问】

为什么要把Flash的bootenv分区大小改为0x900000?如果bit文件是作为uboot的一部分插入的话,应该要改的应该是第一个分区boot的分区大小?而为什么改了bootenv的分区大小却可以了呢?

说明bit文件种的硬件信息是以boot的环境变量的方式被存到bootenv分区中的,所以bit文件的硬件信息越丰富,bootenv就越大,而boot分区种应该只存了uboot启动程序。

uboot在板子中运行后,进入uboot的命令行模式,通过printenv命令打印bootenv相关内容,最后一行的"Environment size: 3410/9437180 bytes"代表什么意思?

【参考资料】64903 - Zynq-7000 SoC (UG1165) – Booting Linux from QSPI flash does not work (xilinx.com)https://support.xilinx.com/s/article/64903?language=en_US

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值