最近在學習u-boot,關於u-boot的配置、編譯和鏈結,網上找到一篇比較好的博文,mark並推薦一下。
學習總結:
在編譯u-boot之前需根據自己的板子對u-boot進行配置,配置命令為make ***_config(***表示自己的開發板名稱)。那麼這條命令是怎麼對我們的u-boot進行配置的,配置過程中做了哪些操作呢?
make ***_config命令執行u-boot根目錄下的makefile檔案,這個檔案是我們配置和編譯u-boot的總綱。***_config在makefile中是乙個目標,我們在makefile中找到***_config的地方。
mkconfig := $(srctree)/mkconfig
smdk6410_config : unconfig
@$(mkconfig) $(@:_config=) arm s3c64xx smdk6410 samsung s3c6410
我們的目標是smdk6410_config,需要執行的操作是呼叫u-boot根目錄下的mkconfig指令碼,並將命令列中的引數傳給mkconfig。
既執行 ./mkconfig smdk6410 arm s3c64xx smdk6410 samsung s3c6410
那mkconfig指令碼做了哪些操作呢?這裡就不貼**,總結:
1.生成board name
2.建立鏈結檔案
3.建立/include/config.mk檔案
arch = arm
cpu = s3c64xx
board = smdk6410
vendor = samsung
soc = s3c6410
4.建立開發板相關標頭檔案/include/config.h
/* automatically generated - do not edit */
#include
至此,我們u-boot的配置工作完成。
編譯我們只需輸入make命令,命令根據u-boot根目錄下的makefile進行編譯。makefile會包含我們上面配置生成的檔案指導編譯。
1.包含/include/config.mk,根據配置生成的arch cpu board vendor soc資訊選擇交叉編譯工具
# load arch, board, and cpu configuration
include $(objtree)/include/config.mk
export arch cpu board vendor soc
ifndef cross_compile
ifeq ($(hostarch),ppc)
cross_compile =
else
ifeq ($(arch),ppc)
cross_compile = powerpc-linux-
endif
ifeq ($(arch),arm)
cross_compile = arm-linux-
endif
ifeq ($(arch),i386)
ifeq ($(hostarch),i386)
cross_compile =
else
cross_compile = i386-linux-
endif
endif
2.包含/config.mk,配置交叉編譯選項和結構依賴規則。
#load other configuration
include $(topdir)/config.mk
3.設定objs和libs變數
4.編譯生成目標
all = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)system.map $(u_boot_nand)
all: $(all)
$(obj)u-boot.hex: $(obj)u-boot
$(objcopy) $ -o ihex $< $@
$(obj)u-boot.srec: $(obj)u-boot
$(objcopy) $ -o srec $< $@
$(obj)u-boot.bin: $(obj)u-boot
$(objcopy) $ -o binary $< $@
$(objcopy) -d $< > $<.dis
$(obj)u-boot.image: $(obj)u-boot.bin
......
...$(obj)u-boot.dis: $(obj)u-boot
$(objdump) -d $< > $@
......
...
通過鏈結,我們可以得到我們的目標檔案。
/board/samsung/smdk6410/u-boot.lds
/board/samsung/smdk6410/config.mk
u boot 的配置與編譯
這裡我是u boot mini6410為例 跟著就是要解壓u boot mini6410 20111018.tar.gz,解壓後就會產生乙個u boot mini6410檔案 二 配置編譯支援nand啟動的u boot 注 這裡要看開發板是128m的還是256m的 我這裡以256m為例 1 進入u ...
uboot配置編譯的巨集觀分析
在之前的博文中我從uboot的實際的工作流程方向介紹了uboot,在下面我將以市面上主流的s5pv210這款晶元為例,結合samsung官方為其移植的uboot,從其配置編譯的角度來分析uboot,講述uboot究竟是如何一步步生成最後的可執行映象檔案的。uboot 的配置過程主要涉及四個檔案 1 ...
U Boot的配置 編譯 連線過程
u boot,全稱為universal boot loader,即通用bootloader。通用有兩層含義 可以引導多種作業系統 支援多種架構的cpu。根據u boot原始碼資料夾頂層的readme檔案說明,針對使用的開發板 board 執行 1 make config 2 make all 可以生...