uboot移植之tag傳參

2021-09-20 15:44:32 字數 1026 閱讀 3320

1:什麼是tag

(1)tag是一種資料結構,用於uboot向核心傳遞引數,乙個tag代表了乙個引數,uboot在向kernel傳參時,就是通過乙個個tag來實現的。

(2)每個tag都有乙個tag_header(乙個結構體),包含了tag的型別和大小,然後tag中剩餘的部分tag_***來當作傳參的tag

2:kernel如何知道tag的起始位址。

uboot啟動核心的最後通過thekernel (0, machid, bd->bi_boot_params);來啟動核心,這三個引數,第乙個固定是0,;第二個是機器碼;第三個就是tag的存放的起始位址,也就是setup_start_tag。這三個引數分別存放在暫存器r0 r1 r2中。

3:kernel如何知道tag的結束位址

在tag傳參的過程中,有乙個setup_start_tag(atag_core型別)和setup_end_tag (atag_none型別),setup_start_tag表示tag開始傳參,setup_end_tag 表示傳參的結束,這兩個tag之間的tag就是實際的向核心傳遞的tag。

總結:uboot和kernel都是在ddr中執行的,uboot先執行,最後通過

thekernel (0, machid, bd->bi_boot_params);

跳轉到執行kernel,uboot向kernel傳參的實現就是uboot和kernel規定一種傳參的資料格式(tag),然後uboot將需要傳遞給kernel的引數存放到ddr的某段記憶體中,然後將 這段記憶體的起始位址傳遞給kernel,然後kernel通過這個位址來讀取傳遞的引數。

在uboot的移植的時候需要注意的是

(1)tag傳參部分的**是不需要修改的,我們需要做的是需要開啟或者關閉相應的巨集定義,用來確定向核心傳遞哪些引數

(2)如果核心啟動不成功,則需要考慮uboot傳參是否正確。傳參不成功首先看uboot中bootargs設定是否正確,其次看uboot是否開啟了相應巨集以支援傳參。

uboot移植之uboot和kernel的引數傳遞

從uboot啟動核心的形式thekernel 0,machid,bd bi boot params 可以看出uboot給核心傳遞了3個引數,第1個是0,第2個是機器碼,第3個是引數列表在sdram的起始位置 剛好滿足一下呼叫核心的條件 r0 0。r1 機器型別id r2 啟動引數標記列表在ram 中...

uboot移植之uboot命令體系解析

1 回歸到main loop uboot啟動第二階段的最後,進入死迴圈main loop 函式,命令列中沒輸出一次命令,就會執行一次main loop函式,完成一次命令的獲取 解析和執行。2 uboot命令體系的實現原理 uboot中裡面維護了很多命令,每個命令對應乙個結構體變數,當我們在命令列輸入...

移植U Boot之BootLoader簡介

一 bootloader的認識 bootloader的作用是初始化硬體裝置,準備好軟體環境,將作業系統核心複製到記憶體中,然後啟動核心。為了開發方便,工程師們增強了bootloader的功能,實際上,在生產的產品中並不需要這些功能,為了提高我們的開發效率而增加功能而已。bootloader跟硬體關係...