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

2021-06-23 08:41:09 字數 1650 閱讀 6427

從uboot啟動核心的形式thekernel (0, machid, bd->bi_boot_params)

可以看出uboot給核心傳遞了3個引數,第1個是0,第2個是機器碼,第3個是引數列表在sdram的起始位置

剛好滿足一下呼叫核心的條件

• r0=0。

• r1=機器型別id;

• r2=啟動引數標記列表在ram 中起始基位址

①在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函式中

指定機器碼

gd->bd->bi_arch_number = mach_type_mini2440 

而mach_type_mini2440定義在include/asm-arm/mach-types.h

#define mach_type_mini2440             1999

需對應核心的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行**

machine_start(mini2440, "mini2440 test")

而mini2440定義在linux/arch/arm/tools/mach-types

mini2440        mach_mini2440        mini2440        1999

②在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函式中

指定引數位置

gd->bd->bi_boot_params = 0x30000100;

對應核心的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行**

.boot_params    = s3c2410_sdram_pa + 0x100,

如果uboot沒有給出

gd->bd->bi_boot_params的值,則linux預設去這個位址定址tag

如果uboot給出了

gd->bd->bi_boot_params的值

,則linux則按照uboot的給的這個位址去定址tag

所以即使uboot中設定

gd->bd->bi_boot_params = 0x30000000或

0x30000200

或0x300000300

(或許設定乙個空閒的記憶體區就可以)

而核心的.boot_params    = s3c2410_sdram_pa + 0x100,

(就用不到了)

也能順利啟動核心

,已試過

在試驗中發現uboot中設定gd->bd->bi_boot_params

=0或將

gd->bd->bi_boot_params

注釋掉,都未能順利啟動核心

。貌似在uboot

必須為gd->bd->bi_boot_params

指定乙個值才行,而linux的

.boot_params 始終都沒有用到。

gd是乙個全域性結構體指標,用於uboot中各個檔案中重要的引數傳遞,其成員見

看一下uboot在sdram 0x30000100處給核心傳遞了什麼東東,見

參考嵌入式linux應用開發完全手冊ch15.1 p243

**:

uboot移植之uboot命令體系解析

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

uboot移植 uboot啟動回顧

一 uboot啟動的第一階段start.s 路徑uboot cpu s5pc11x start.s 1 include 標頭檔案包含,config.件原始碼中不存 在,配置後自動生成 路徑 include linux config.h 2 include 標頭檔案包含,version.件原始碼中不存...

u boot移植詳解 初識u boot

u boot是一種普遍用於嵌入式系統中的bootloader。bootloader是基於特定硬體平台來實現的,因此幾乎不可能為所有的嵌入式系統建立乙個通用的bootloader,不同的處理器架構都有不同的bootloader,bootloader不但依賴於cpu的體系結構,還依賴於嵌入式系統板級裝置...