1. 程式人生 > 其它 >U-BOOT啟動大致流程

U-BOOT啟動大致流程

  針對U-BOOT的分析,首先從連結檔案開始,這是針對編譯過的,沒有編譯過的,則直接從start.S檔案開始,這裡以u-boot-2009.11為例,對於S3C2440A來說,其核心是arm920t,所以其檔案位置位於cpu\arm920t\start.S

1. start.S最先執行的是start_code函式,此函式原始碼中,有如下動作

1.1 將CPU設定成SVC32模式

1.2 關閉看門狗、關中斷、設定時鐘分頻係數,這三部分一般會放到與板級相關的初始化檔案lowlevel_init.S中,位置:board\samsung\smdk2410\lowlevel_init.S

1.3 CPU初始化,關閉MMU、caches

1.4 跳轉到lowlevel_init.S檔案中的lowlevel_init函式,位置:board\samsung\smdk2410\lowlevel_init.S

2.lowlevel_init.S檔案中的lowlevel_init函式對記憶體控制器進行初始化,然後再返回到start.S中,接著後面的動作

3. 記憶體初始化後,返回到start.S中動作如下

3.1 將U-BOOT重定向到記憶體中執行,即複製到記憶體中去

3.2 對棧進行初始化

3.3 清BSS段

3.4 跳轉到board.c檔案中的start_armboot函式,位置:lib_arm\board.c

4.board.c檔案中的start_armboot函式大致做如下動作

4.1 NOR FLASH、NAND FLASH、串列埠、網絡卡、MMC等初始化,這些都是與具體的CPU、板上的器件強相關的初始化

4.2 跳轉到main.c檔案中的main_loop函式,位置:common\main.c

5.main.c檔案中的main_loop函式大致做如下動作

5.1 設定啟動次數、Modem功能、版本號、啟動延時等

5.2 迴圈讀取使用者輸入資訊,執行相應操作

其檔案的跳轉流程是start.S-->lowlevel_init.S-->start.S-->board.c-->main.c