SD卡自动烧录固件
背景
在生产的过程中SD卡自动烧录很方便,那要怎么做呢?
主要有分以下2种情况:
- 芯片可以从SD卡启动
- 芯片不能从SD卡启动
芯片可以从SD卡启动
类似M5502S.
这种情况有2种方式:
准备SD卡
每个平台可能有所不一样,以M5S为例,分区并格式化SD卡,并将其volume name
改成特定的“BOOTEXT”
将SD卡的loader拷贝进SD卡准备uboot
准备可支持自动运行烧录脚本的ubootauto-burn
功能模式在uboot的配置中默认是关闭的,需要将其打开。
修改默认的环境变量bootargs
和bootcmd
,让其默认就执行SD里面的自动烧录脚本镜像
类似于:#define CONFIG_BOOTCMD_UPGRADE "fatload mmc 0:1 0xa00000 ${auto_script}; source 0xa00000"
将编译好的uboot拷贝进SD卡
准备自动烧录脚本
烧录的固件可从TFTP server
或者SD卡里获取,这里以SD卡来烧录boot loader和dtb为例:echo ============================== echo led all off echo echo ========= Bootloader ========= echo ==>reading Bootloader... fatload mmc 0:1 0xa00000 xxxxx.bin echo ==>erasing org-Bootloader+Env... sf probe sf erase 0x0 0x60000 echo ==>writing new-Bootloader... sf write 0xa00000 0x0 0x50000 echo ==>reading dtb... fatload mmc 0:1 0xa00000 m5s-sf.dtb echo ==>erasing org-dtb... sf erase 0x60000 0x10000 echo ==>writing new-dtb... sf write 0xa00000 0x60000 0x10000 echo ============================== echo led all on echo echo === Please Unplug TF card! === echo ============================== check_sd
生成自动烧录脚本镜像
使用mkimage
工具(/uboot源码/tools/
)可将一个脚本文本文件转化成可以在uboot的cmdline种自动运行的二进制脚本镜像。
命令类似于:./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Autorun" -d autorun-${FlashType}.sh autorun-${FlashType}.img
其中
autorun-${FlashType}.sh
即为上面准备的自动烧录脚本。
将生成的autorun-${FlashType}.img
拷贝进SD卡
注意:autorun-${FlashType}.img
的名字要和第2点中的${auto_script}
对应准备要烧录的固件
将要烧录的固件拷贝进SD卡启动
将启动模式配置成SD卡启动,有些硬件平台可自动识别,或需修改启动顺序。
插卡,上电启动
使用Linux系统烧录
这里不做过多的讨论,大致原理就是从SD卡启动一个精简的Linux系统,然后在该Linux系统中完成烧录
芯片不能从SD卡启动
类似Hi3516DV100,Uboot只能通过串口烧录进去。
流程:
- 串口烧录Uboot
- 然后通过Uboot去烧录
Uboot上电启动时首先去判断有无插上TF卡,有插上TF卡,就去读取里面的是否有升级的固件(内核和文件系统),这里可以做些校验和判断。一切都可以之后,就可以按照分区配置开始擦除和烧写。 - 拔卡重启
烧写完成之后,拔卡重启,可做成自动的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论