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即可。
————————————————
版权声明:本文为CSDN博主「weixin_43189165」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43189165/article/details/97761784