天天看點

以smdk2410開發闆為基礎的uboot學習筆記(1) 概覽

零:目的

在非開發模式下,即啟動加載模式下,uboot執行到最後,将linux的參數放在0x30000100為起始的地方,将linux核心放在0x30008000為起始的位址,然後跳轉到0x30008000處執行,剩下的就是linux的事了。

一:上電

uboot被燒寫到flash中以0x00000000為起始的地方。

開發闆硬體決定了上電後,開發闆從0x00000000處開始執行程式。

開始的幾條指令是與程式編譯時确定的位址無關的指令,做了些基本的設定後,将整個uboot代碼複制到記憶體中(以0x33f80000為起始的地方)。然後,通過一條指令:ldr pc , _start_armboot

跳轉到c語言代碼,正式使用程式編譯時确定的位址來執行程式。

二:架構

整個體系中,smdk2410開發闆的獨立檔案有:

/board/smdk2410 檔案夾

/include/config/smdk2410.h 檔案

對于不同的開發闆,類似。

其他的檔案則是通用的。

三:編譯指令

make smdk2410_config

make

得到我們想要的uboot映像。

四:配置

uboot的配置集中在 /include/config/smdk2410.h 中。

其中主要有兩類宏:

一類是選項,字首為"CONFIG_";

一類是參數,字首為"CFG_";

五:編譯連結

1.首先編譯 cpu/$(CPU)/start.S ,對于不同的CPU,還可能編譯cpu/$(CPU)下的其他檔案。

2.然後,對于開發闆相關的每個目錄,每個通用目錄都使用他們各自的Makefile生成相應的庫。

3.将1 2 步生成的 .o  .a 檔案按照 board/$(BOARDDIR)/config.mk 檔案中指定的代碼段起始位址 和 board/$(BOARDDIR)/U-BOOT.lds 連結接腳本進行連結。

4.第3步得到的是ELF格式的U-Boot,後面Makefile還會将它轉換為二進制格式,S-Record格式。

繼續閱讀