1. 程式人生 > >嵌入式Linux開發——(十一)u-boot原始碼分析

嵌入式Linux開發——(十一)u-boot原始碼分析

1、U-Boot的特性:

    ①開放原始碼

    ②支援多種嵌入式作業系統核心:Linux、NetBSD、VxWorks、QNx、RTEMS、ARTOS、 LynxOS

    ③支援多種架構的CPU:PowerPC、ARM、x86、MIPS、XScale

    ④豐富的裝置驅動原始碼,如:串列埠、乙太網、SDRAM、Flash等

    ⑤支援的目標板環境變數多種儲存方式:Flash、EEPROM、RAM

    ⑥CRC32檢驗,檢驗Flash中核心,RAMDISK映象是否損壞

    ⑦上電自檢功能:SDRAM、FLASH大小檢測、故障檢測,CPU型號

    ⑧特殊功能:XIP核心引導

      獲取最新U-Boot網址:http://sourceforge.net/project/U-Boot

2、U-Boot原始碼結構(基於U-Boot-1.1.6)

    1)U-Boot-1.1.6根目錄下共有26個子目錄,可分為4類

        ①平臺相關的或開發板相關的

        ②通用的函式

        ③通用裝置驅動程式

        ④U-Boot工具示例程式、文件

          相應資料夾:

 

 

 

    2)“CONFIG_”除了設定一些引數外,主要用來設定U-Boot的功能,選擇使用檔案的哪一部分。而“CFG_”用來設定細節的參                數。

3、U-Boot編譯流程

 

 

4、U-Boot的啟動過程原始碼分析

    1)U-Boot第一階段程式碼分析

       檔案:cpu/arm920t/start.S   和   board/smdk2410/lowlevel_init.S

        ①硬體裝置初始化:設定為管理模式(SVC)、關閉WATCHDOG、設定時鐘、 關閉MMU、CACHE

        ②為載入Bootloader的第二階段程式碼尊卑RAM空間:初始化記憶體晶片,使它使能

        ③複製整個U-Boot程式碼到SDRAM空間中

        ④設定好棧

            棧的設定靈活性很大,只要讓SP暫存器指向一段沒有被使用的記憶體即可。

        ⑤跳轉到第二階段程式碼的C入口點

            在跳轉之前,還要清楚BSS段(初始值為0,無初始值的全域性變數、靜態變數)。

    2)U-Boot第二階段程式碼分析

       檔案:Lib_arm/board.c  中 start_armboot函式開始。

       ①初始化本階段用到的硬體裝置

          最主要是設定系統時鐘、初始化串列埠。

      ②檢測系統記憶體對映(memory map)

      ③U-Boot命令的格式

         即使是核心的啟動,也是通過U-Boot命令來實現的,U-Boot中每個命令都是通過U_BOOT_CMD巨集來定義。

         U_BOOT_CMD(name,  maxargs,  repetable,  command, “usage”, “help”)

     ④為核心設定啟動引數

        Boot通過標記列表向核心傳遞引數。