u boot原始碼配置原理分析

2021-06-21 15:16:54 字數 2323 閱讀 9300

華清遠見嵌入式學院講師。

u-boot的源**預設是不針對任何目標平台的,當我們要移植u-boot到乙個特定的目標平台時,需要生成針對目標平台的配置檔案。u-boot目前已經支援的晶元可以在include/configs/下面找到。比如我們要編譯針對s3c2410晶元的u-boot.bin,那麼我們就需要在u-boot原始碼根路徑下執行:

make smdk2410_config

這樣我們的u-boot原始碼就是針對smdk2410平台了。(注:smdk2410是三星專門為 其arm9晶元s3c2410做的reference board,即參考板,國內大部分基於s3c2410的開發板都是參考smdk2410來做的)

那麼,make smdk2410_config背後到底了做了什麼工作呢?u-boot是如何生成針對smdk2410平台的配置的?下面我們就來分析這一過程。由於make命令會呼叫makefile,所以我們要分析這個makefile裡面相關的部分。

smdk2410_config是u-boot原始碼根路徑下的makefile的乙個目標,相關的**如下:

smdk2410_config : unconfig

@$(mkconfig) $(@:_config=) arm arm920t smdk2410 null s3c24x0

unconfig:

@rm -f $(obj)include/config.h $(obj)include/config.mk \

$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

在執行make smdk2410_config的時候會先執行unconfig目標,負責清理掉以前的配置資訊。然後就會執行@$(mkconfig) $(@:_config=) arm arm920t smdk2410 null s3c24x0,mkconfig是makefile的乙個變數,定義如下:

mkconfig := $(srctree)/mkconfig

可見,mkconfig就是原始碼頂級目錄下的mkconfig檔案,這個檔案是乙個shell指令碼程式,所以在執行make smdk2410_config的時候,系統就會執行mkconfig這個指令碼,arm arm920t smdk2410 null s3c24x0則是傳遞個這個指令碼的五個引數。

mkconfig這個指令碼程式實際上就為我們生成了兩個檔案,乙個是include/config.h,另乙個是include/config.mk。我們可以在make smdk2410_config之前看一下include下面是沒有這兩個檔案的。config.h裡面只有一句話:

/* automatically generated - do not edit */

#include

其實就是為我們包含了目標平台的配置標頭檔案。另乙個檔案config.mk裡面則有如下內容:

arch = arm

cpu = arm920t

board = smdk2410

soc = s3c24x0

其實這裡面定義了四個變數,分別是體系結構(arm)、處理器核(arm920t)、目標板(smdk2410)、片上系統(s3c24x0)。

上面的這個include/config.mk檔案會在makefile裡面被包含,對應的**如下:

ifeq ($(objtree)/include/config.mk,$(wildcard $(objtree)/include/config.mk))

# load arch, board, and cpu configuration

include $(objtree)/include/config.mk

export arch cpu board vendor soc

也就是說,makefile會判斷include下面有沒有config.mk這個檔案,如果有就包含這個檔案,這就相當於在makefile裡面定義了arch、cpu、board和soc這四個變數。這樣u-boot就知道自己是針對哪個目標平台的了。

在u-boot頂層目錄下面也有乙個config.mk檔案,這個檔案裡面主要定義了交叉編譯器選項及編譯規則:

# load other configuration

include $(topdir)/config.mk

那麼這個config.mk和include下的config.mk就包含了我們編譯u-boot時的所有資訊。其實關鍵就是include下的config.mk檔案,makefile包含這個檔案以後就知道目標平台的資訊了。

uboot原始碼分析(3)

正式開始了第二階段 relocate部分的 負責把u boot stage2的 從flash儲存器載入到記憶體,如下 163 ifndef config skip relocate uboot 164relocate 165 adr r0,start 獲取當前 存放位址 00000000 166 l...

uboot原始碼 MMC分析

1 作業系統下,mmu是開啟的,即linux驅動使用的都是虛擬位址。純裸機程式不會開啟mmu,全部使用實體地址。2 uboot早期也是純實體地址工作,但是現在的uboot開啟了mmu做了虛擬位址對映。1 linux的驅動是模組化設計。2 uboot移植了linux驅動源 3 uboot中的硬體驅動比...

Task原理原始碼分析

進入updatedependencies 函式 進入task類中的run 方法 在上面的task的run方法中,呼叫了抽象方法,runtask 那就意味著關鍵的操作都要依賴於子類的實現,task的子類shufflemaptask,resulttask,要執行它們的runtask,才能執行我們自定義的...