uboot第二階段

************************************uboot第二階段**************************************
第二階段: C階段
在DRAM中
注重SoC外部Board內部
***************************************************************************************

補充C知識: typedef int (init_fnc_t) (void); //就是對一個 int (void)類型的函數類型進行取別名init_fnc_t
init_fnc_t *init_sequence[] //這裏定義一個函數數組
***************************************************************************************


Uboot第二階段正式開始分析:
init_sequence[] //定義一個函數數組,循環遍利初始化
cpu_init //CPU初始化,空函數,在第一階段SoC已經初始化好了
board_init //板級初始化(網卡初始化、機械碼、內存傳參)
dm9000_pre_init //網卡初始化
gd->bd->bi_arch_number = MACH_TYPE; //存放機械碼
gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);//0x30000100,內存傳參
interrupt_init //定時器初始化
env_init //環境變量初始化
init_baudrate //波特率設置
serial_init //串口初始化,這裏是空的
console_init_f //控制檯初始化,_f表示第一階段初始化,_r表示第二階段,這裏是空的
display_banner //顯示版本信息
print_cpuinfo //顯示各個時鐘頻率
checkboard //檢驗開發板名字
init_func_i2c //i2c函數初始化,設置速度和從機
dram_init //DDR初始化,設置幾片內存,內存起始地址,內存大小
display_dram_config //打印DDR的配置
mem_malloc_init //初始化uboot自己的堆內存
mmc_initialize //SD/MMC的初始化,爲下一步將OS移植到DRAM做準備
nand_init //Nand初始化
env_relocate //環境變量重定位,將SD/Nand中的環境變量,重定位到DRAM中
gd->bd->bi_ip_addr=getenv_IPaddr ("ipaddr")//從環境變量中獲取IP地址 gd數據結構賦值
gd->bd->bi_enetaddr[reg] //獲取MAC地址 gd數據結構賦值
devices_init //這裏是空的,當前第二階段不需要
jumptable_init //跳轉表 只有左值,沒有右值,無需要關注
console_init_r //控制檯第二初始化,真正的控制檯初始化
enable_interrupts //空函數
load_addr
board_late_init //這裏是空的
eth_initialize //空的
ide_init //空的
x210_preboot_init //LCD初始化和顯示LOGO
check_menu_update_from_sd //檢查自動更新,SD卡自動更新進Nand中,有利於工程師刷機,類似於U盤重裝系統
main_loop //主循環,用於解析命令,執行命令


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章