ZYNQ7045 系统升级实现方法(multiboot)

本文介绍了一种用于Zynq设备的不断电更新方法,通过特定的存储格式和地址分配,实现在系统运行时更新bit和kernel。文章详细解释了更新流程,包括初始状态设置、启动系统、更新文件及结论。

1.实现原理框图
在这里插入图片描述
系统分为6个部分组成:
fsbl:原始fsbl
googen_image:由3块组成分别为fsbl、bit、u-boot
update_image:由3块组成分别为fsbl、bit、u-boot
kernel_google:原始kernel
kernel_update:更新kernel
update_flag:更新标识
2.实现原理
flash存储格式及地址分配如上图所示
位于0x0位置的fsbl启动判断update_flag标识是否有效,如果无效则跳转到位置为0x100000的googen_image处,依次执行fsbl、加载bit、启动boot后跳转到位置为0xf00000的原始kernel中;
如果有效则跳转到位置为0x700000的update_image处,依次执行fsbl、加载bit、启动boot后跳转到位置为0x2200000的更新kernel中
通过该方法可实现不断电更新bit和kernel功能
3.操作方法
a.板子初始状态
通过jtag依次将fsbl、googen_image、kernel_google分别下载到地址0x0、0x100000、0xf00000处;
b.启动系统
通过网络接收更新文件update_image、kernel_update或者只接收其中一个,原始kernel接收更新文件后,依次下入地址:0x700000、0x2200000,如果只更新一个,只把文件写入相应的地址,写完之后向0x3c00000写入更新标识
c.更新文件
输入reboot命令,即可实现跳转,即运行update_image里面的bit,运行更新的kernel,或者只运行其中一个
4.结论
该方法可实现不断电更新zynq的bit和系统,目前已在项目中使用
注意
googen_image、update_image:可使用bootgen命令生成
可参考xapp1175
5.额外添加
petalinux下等待系统运行正常后,可通过flashcp命令直接操作flash,实现升级
例如flash分区为mtd0、mtd1、mtd2、mtd3,这些定义可在系统中查看
mtd0:boot
mtd1:env
mtd2:kernel
mtd3:space
假如要升级boot
首先将要升级的BOOT.BIN远程传输到本地,可使用scp命令
到本地后,运行
flashcp -v BOOT.BIN /dev/mtd0即可。
假如要升级kernel
首先将要升级的uimage.bin远程传输到本地,可使用scp命令
到本地后,运行
flashcp -v uimage.bin /dev/mtd2即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43189165

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值