config.mk分析

聲明:本文由個人學習過程中整理而成,轉載請註明出處


(1)設置src和obj


(2)設置編譯選項


(3)定義交叉編譯工具

AS= $(CROSS_COMPILE)as

LD= $(CROSS_COMPILE)ld

CC= $(CROSS_COMPILE)gcc

CPP= $(CC) -E

AR= $(CROSS_COMPILE)ar

NM= $(CROSS_COMPILE)nm

LDR= $(CROSS_COMPILE)ldr

STRIP= $(CROSS_COMPILE)strip

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(CROSS_COMPILE)objdump

RANLIB= $(CROSS_COMPILE)RANLIB


(4)uboot/include/autoconf.mk,開發板相關的配置文件

autoconf.mk文件是在make x210_sd_config配置過程中生成,x210_sd.h文件會被用來生成autoconf.mk文件。

autoconf.mk文件裏的內容類似於宏或者變量被uboot中的條件編譯所使用,在uboot代碼中有很多地方使用條件編譯進行編寫,這些條件編譯是用來實現可移植性的。

# Load generated board configuration

sinclude $(OBJTREE)/include/autoconf.mk


ifdefARCH

sinclude $(TOPDIR)/$(ARCH)_config.mk# include architecture dependend rules

endif

ifdefCPU

sinclude $(TOPDIR)/cpu/$(CPU)/config.mk# include  CPUspecific rules

endif

ifdefSOC

sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk# include  SoCspecific rules

endif

ifdefVENDOR

BOARDDIR = $(VENDOR)/$(BOARD)

else

BOARDDIR = $(BOARD)

endif

ifdefBOARD

sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk# include board specific rules

endif


(5)設置鏈接腳本的目錄

ifndef LDSCRIPT

#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug

ifeq ($(CONFIG_NAND_U_BOOT),y)

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds

else

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds

endif

endif


(6)指定鏈接地址

/board/samsung/x210/config.mk文件是在make x210_sd_config配置過程中生成,其中的內容就是:TEXT_BASE = 0xc3e00000相當於定義了一個變量。

TEXT_BASE是整個uboot鏈接時指定的鏈接地址。因爲uboot使用了虛擬地址映射,所以虛擬地址C3E00000就對應物理地址0x23E00000(也可能是物理地址33E00000具體地址要看uboot中的虛擬地址映射關係)。

ifneq ($(TEXT_BASE),)

LDFLAGS += -Ttext $(TEXT_BASE)

endif


(7)指定編譯規則

Makefile的自動推導規則


ifndef REMOTE_BUILD


%.s:%.S

$(CPP) $(AFLAGS) -o $@ $<

%.o:%.S

$(CC) $(AFLAGS) -c -o $@ $<

%.o:%.c

$(CC) $(CFLAGS) -c -o $@ $<


else


$(obj)%.s:%.S

$(CPP) $(AFLAGS) -o $@ $<

$(obj)%.o:%.S

$(CC) $(AFLAGS) -c -o $@ $<

$(obj)%.o:%.c

$(CC) $(CFLAGS) -c -o $@ $<

endif


參考資料:《uboot和系統移植---朱有鵬老師》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章