uboot根目录下的config.mk的分析

注:本文是学习朱老师课程整理的笔记,基于uboot-1.3.4和smdk2410分析。

在uboot主Makefile中有一段是调用根目录下的config.mk的,本文就对config.mk进行简要的分析。
在主Makefile中是这样调用config.mk的:

# load other configuration
include $(TOPDIR)/config.mk

在这个config.mk里面有很多关于编译选项的设置,不用详细分析。
然后是关于编译工具的定义:

#CROSS_COMPILE 就是上面导出的环境变量
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

接着是一段包含一些编译时需要的文件:

# Load generated board configuration
sinclude $(OBJTREE)/include/autoconf.mk

ifdef   ARCH
sinclude $(TOPDIR)/$(ARCH)_config.mk  # include architecture dependend rules
endif
ifdef   CPU
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk   # include  CPU  specific rules
endif
ifdef   SOC
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk   # include  SoC  specific rules
endif
ifdef   VENDOR
BOARDDIR = $(VENDOR)/$(BOARD)
else
BOARDDIR = $(BOARD)
endif
ifdef   BOARD
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk  # include board specific rules
endif

autoconfig.mk文件不是源码提供的,是配置过程自动生成的。这个文件很多内容是“CONFIG_”开头的宏,它的作用就是用来指导整个uboot的编译过程。在uboot代码中有很多地方使用条件编译进行编写,这个条件编译是用来实现可移植性的。
这个文件不是凭空产生的,配置过程也是需要原材料来产生这个文件的。原材料在源码目录的inlcude/configs/xxx.h头文件。(S3C2440开发板中为include/configs/smdk2410.h)。这个h头文件里面全都是宏定义。每一个开发板的移植都对应这个目录下的一个头文件,这个头文件里每一个宏定义都是移植uboot的关键所在。

  • 链接脚本
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif

如果定义了CONFIG_NAND_U_BOOT宏,则链接脚本叫u-boot-nand.lds,如果未定义这个宏则链接脚本叫u-boot.lds。
CONFIG_NAND_U_BOOT是否有定义就是在上面包含的autoconfig.mk中查找。从字面意思分析,是在Nand版本情况下才使用的。
在board\samsung\smdk2410目录下有u-boot.lds,这个就是链接脚本。我们在分析uboot的编译链接过程时就要考虑这个链接脚本。

  • TEXT_BASE
LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)
endif
#由上面分析得:LDFLAGS += -Bstatic -T /board/smdk2410/u-boot.lds -Ttext 0x33f80000

在board/samsung/smdk2410目录下有一个文件config.mk,其中的内容就是:TEXT_BASE = 0x33f80000。之后的推出的SoC像smdk6410,它们的config.mk是在Makefile中在配置开发板时,在board/samsung/smdk6410目录下生成的,Makefile中的内容如下:

smdk6410_config :   unconfig
    @$(MKCONFIG) $(@:_config=) arm s3c64xx smdk6410 samsung s3c6410 
    @echo "TEXT_BASE = 0xc7e00000" > $(obj)board/samsung/smdk6410/config.mk
    #开头的“@”表示静默执行

TEXT_BASE是将来我们整个uboot链接时指定的链接地址。

总结:根目录下的config.mk主要进行编译选项的设置、编译工具的定义、编译时包含的文件、编译的链接地址。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值