zImage內核鏡像下載到開發板之后,可以使用u-boot的go命令進行直接跳轉,這個時候內核直接解壓啟動。
但是此時的內核無法掛載文件系統,因為go命令沒有將內核需要的相關啟動參數從u-boot中傳遞給內核。
傳遞相關啟動參數必須使用u-boot的bootm命令進行跳轉,但是u-boot的bootm命令只能處理uImage鏡像。
uImage相對于zImage在頭部多了64個byte,即為0x40。
(這里你應該知道了為什么要使用bootm命令,以及為什么要是有uImage格式)
在前面我們曾經分析過Uboot的啟動流程,兩個階段。
程序最終執行common/main.c中的main_loop。在此之前都是進行一些初始化工作,U-Boot的main_loop函數相當于main主函數。
main_loop函數的結構很復雜,它所做的工作與具體的平臺無關,主要目的是處理用戶輸入的命令和引導內核啟動。
(終于看到了引導內核加載)
main_loop 函數的調用關系錯綜復雜,而且摻雜關系復雜的條件編譯,我們抓住與命令實現密切相關的操作來分析命令的實現原理。
命令實現的大致流程如下圖所示。
-
Linux
+關注
關注
87文章
11123瀏覽量
207886 -
命令
+關注
關注
5文章
658瀏覽量
21927 -
開發板
+關注
關注
25文章
4766瀏覽量
96149 -
Uboot
+關注
關注
4文章
124瀏覽量
28053
發布評論請先 登錄
相關推薦
評論