從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的體系結構,還依賴於嵌入式系統板級裝置...