之前的博客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