之前的博客https://blog.csdn.net/daoshengtianxia/article/details/105775590是通过手动一步一步下载写入flash升级dtb,kernel等,
前提uboot需要移植好网络等相关驱动,本文使用的硬件平台是野火的limx6ull mini的emmc版本;
1、需要uboot使能 FAT_WRITE功能,野火提供的uboot默认没有使能,在ebf_6ull_uboot/include/configs/mx6ullevk.h的最后加入:
#define CONFIG_FAT_WRITE,然后重新编译,位置如下图;
2、编写uboot的 执行脚本如下,
setenv update_uboot 'if tftpboot ${loadaddr} ${file_ubot}; then '\
'mmc dev ${mmcdev} 0; mmc write ${loadaddr} 0x2 0x3fe; fi;'
setenv update_dtb 'if tftpboot ${loadaddr} ${fdt_file}; then '\
'fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${fdt_file} ${filesize}; fi;'
setenv update_kernel 'if tftpboot ${loadaddr} ${image}; then '\
'fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} ${filesize}; fi;'
setenv update_scr 'if tftpboot ${loadaddr} ${file_scr}; then '\
'fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${file_scr} ${filesize}; source ${loadaddr}; saveenv; fi;'
关于update_uboot脚本慎用!使用前请确保写入地址是对的,目前尚未验证这个脚本!
3、将如上的脚本保存到my_environment_emmc文本文件里,放入u-boot的tools目录下,执行:(关于这个编译脚本的命令含义可以参考网络上的)
编译脚本:
./mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr example script" -d my_environment_emmc my_environment_emmc.scr
编译出来结果如上图,
4、启动开发板,tftp下载到内存运行,
(1)前提定义好loadaddr,file_scr,运行:
tftpboot ${loadaddr} ${file_scr}
我的 loadaddr 变量如下:
我的 file_scr 变量如下:
(2)执行刚刚下载u-boot环境变量脚本(目的是将“更新脚本”等环境变量设置好):source ${loadaddr}
(3)执行:(保存环境变量以便重启后还能使用)
saveenv
5、将需要更新的内核,dtb放到ftp目录里,在uboot下执行如下一些命令:
比如更新dtb:run update_dtb
更新kernel:
最后重启开发板即可验证。
参考链接(野火论坛的自己编译uboot内核等教程):https://www.firebbs.cn/forum.php?mod=viewthread&tid=28400&highlight=%E7%BC%96%E8%AF%91