Bootm命令用來從memory啟動內核,bootm命令的執(zhí)行流程如下圖所示。
在串口終端輸入bootm命令后,執(zhí)行do_bootm函數(shù)來完成相應的功能。Do_bootm函數(shù)首先調用bootm_start函數(shù)。(如果不輸入,應該也有。)

Bootm_start函數(shù)的主要作用是獲取內核映像文件的相關信息,并保存到全局變量images中,image是struct bootm_headers結構類型,用來保存可執(zhí)行內核映像的相關信息,主要包括內核映像的加載地址、起始地址、可執(zhí)行入口地址等。
獲取內核映像的相關信息是為后面的加載內核做準備;
內核可執(zhí)行映像文件頭包含了這些信息,這是通過工具mkimage加上去的。接下來執(zhí)行bootm_load_os函數(shù)。
if (load !=image_start) {
memmove_wd ((void *)load,
(void *)image_start, image_len, CHUNKSZ);
}
Image_start是不包括內核映像文件頭的內核起始位置,也就是zImage的起始位置。
內核加載完成后,下面開始執(zhí)行內核映像,這是通過調用函數(shù)do_bootm_linux來實現(xiàn)的,下面來看do_bootm_linux的執(zhí)行過程。
Do_bootm_linux首先驅動內核的入口地址,代碼如下所示。
theKernel=(void (*)(int, int, uint))images- >ep;
Images.ep為內核可執(zhí)行映像文件的入口地址及zImage的起始地址,它是從內核映像文件頭獲取的,在前面的bootm_start函數(shù)中已經為它賦值,代碼如下所示。
images.ep=image_get_ep (&images.legacy_hdr_os_copy);
如果需要,準備給內核傳遞的啟動參數(shù),然后獲取啟動內核需要的兩個參數(shù):machid和傳遞給內核參數(shù)的位置,這兩個參數(shù)都保存在全局數(shù)據(jù)結構體變量bd的成員變量中,如下所示。
bd- >bi_boot_params
machid=bd- >bi_arch_number;
最后調用內核映像的第一個可執(zhí)行函數(shù),把控制權移交給內核,代碼如下所示。
theKernel (0, machid, bd- >bi_boot_params);
-
內核
+關注
關注
4文章
1468瀏覽量
42874 -
Linux
+關注
關注
88文章
11760瀏覽量
219019 -
函數(shù)
+關注
關注
3文章
4417瀏覽量
67504 -
Uboot
+關注
關注
4文章
131瀏覽量
29939
發(fā)布評論請先 登錄
Linux內核自解壓過程分析
Uboot的命令之間有什么區(qū)別?
CAD中如何快速重復執(zhí)行命令?
mfc程序執(zhí)行流程小結,MFC程序的執(zhí)行順序
linux技術:WAF運行命令執(zhí)行方法
使用匿名管道技術獲取CMD命令的執(zhí)行結果
LabVIEW中執(zhí)行系統(tǒng)命令VI介紹
Linux命令執(zhí)行Bypass常見姿勢介紹
Linux命令執(zhí)行Bypass常見姿勢
Uboot命令實現(xiàn)大致流程圖
uboot命令的執(zhí)行過程是什么
cmd_tbl_t結構體變量調用命令信息
bootm命令的執(zhí)行流程
評論