U-Boot2017.01的啓動過程比較複雜,本文分爲6部分講述,筆者將主要過程和函數調用關係整理成一個文檔方便查看,文檔鏈接爲
U-Boot2017.01啓動過程分析pdf
U-Boot2017.01源碼分析及啓動命令解析
啓動過程6部分內容如下
01-U-Boot2017.01 啓動過程概述
02-U-Boot2017.01 SPL階段分析
03-U-Boot2017.01 U-Boot階段分析
04-U-Boot2017.01 加載內核過程
05-U-Boot2017.01 bootz加載過程
06-U-Boot2017.01 讀取uEnv.txt過程
uboot讀取uEnv.txt的過程如下:
/***********************************************
加載uEnv.txt
***********************************************/
s ==== fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
/* mmcdev=0 include/environment/ti/mmc.h line_10*/
/* loadaddr=0x82000000 include/configs/ti_armv7_common.h line_49 */
/* bootenvfile=uEnv.txt include/environment/ti/mmc.h line_20 */
s ==== fatload mmc 0 0x82000000 uEnv.txt
cmd is fatload
/*U_BOOT_CMD(
fatload, 7, 0, do_fat_fsload,
"load binary file from a dos filesystem","... ..."
);*/
do_fat_fsload(cmd/fat.c)
|--> do_load(fs/fs.c)
|--> fs_read(fs/fs.c)
|--> fs_get_info(fs/fs.c)
|--> fat_read_file(fs/fat/fat.c)
|--> file_fat_read_at(fs/fat/fat.c)
|--> printf("reading %s\n", filename);
reading uEnv.txt
|--> do_fat_read_at(fs/fat/fat.c)
|--> ret = file_fat_read_at(fs/fat/fat.c)
|--> if(ret)
printf("** Unable to read file %s **\n",filename); ** Unable to read file uEnv.txt **