声明:本文由个人学习过程中整理而成,转载请注明出处
(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和系统移植---朱有鹏老师》
转载于:https://blog.51cto.com/1121516993/1915758