Mekefile中所做的事情

Posted biaohc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mekefile中所做的事情相关的知识,希望对你有一定的参考价值。

1:经过之前的分析我们知道Makefile主要做的事情有:

(1):首先配置makefile

make x210_sd_config

配置时实际上执行的是:./mkconfig xd_210 arm s5pc11x x210 samsung s5pc110

./mkconfig 为一个shell脚本;

xd_210 arm s5pc11x x210 samsung s5pc110为6个参数传入mkconfig脚本中;

在把"TEXT_BASE = 0xc3e00000" 写入board/samsung/x210/config.mk文件中;

(2):mkcofig脚本做的事情:

生成4个连接文件,分别为:

asm文件连接到asm-arm

reg.h文件连接到s5pc110.h

asm-arm/arch文件连接到arch-s5pc11x

arm-arm/proc文件连接到proc-armv

输出5个变量到config.mk文件中

ARCH   = arm

CPU    = s5pc11x

BOARD  = x210

VENDOR = samsung

SOC    = s5pc110

最后创建config.h文件夹;

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

把/* Automatically generated - do not edit */

#include <configs/x210.h>

写入config.h文件中。

(3)配置以后就可以进入主makefile文件中了

主makefile中做的事情:

a:设置了HOSTARCH HOSTOS两个环境变量 比如说用的armcpu,;linux系统则

HOSTARCH = arm

HOSTOS = linux

b:可以设置静默编译:make -s即可

c:设置生成uboot.bin的目录 make clean、 x210_sd_config 以及make 是都要加上 O=/XX/XX

d:设置了一个环境变量 REMOTE_BUILD

e:输出ARCH CPU BOARD VENDOR SOC 5个环境变量

f:设置交叉编译工具链:CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

g:执行/topdir/config.mk文件:配置交叉工具链

HOSTCC = gcc

HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
HOSTSTRIP = strip

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

export CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \\
AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \\
MAKE
export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS

等等。。。。。。

BOARDDIR = $(VENDOR)/$(BOARD)

h:设置目标、依赖、规则

OBJS  = cpu/$(CPU)/start.o

LIBS:个目录下的子makefile 库文件

LIBBOARD:board/samsung/x210/ 目录下的makefile

SUBDIRS = tools \\
examples \\
api_examples

api 工具 实例

$(obj)u-boot: depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)

 

 

最后生成 autocofig.mk、 autocofig.mk.dep两个文件;

--------------------------在结束的位置说一下uboot中的连接脚本-------------------------------

$(obj)u-boot:        depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \\
        sed  -n -e \'s/.*\\($(SYM_PREFIX)__u_boot_cmd_.*\\)/-u\\1/p\'|sort|uniq`;\\
        cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \\
            --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \\
            -Map u-boot.map -o u-boot
$(LD) $(LDFLAGS)
$(LDFLAGS)变量在/topdir/config.mk中

LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)
endif

$(LDSCRIPT) 这个变量为连接脚本变量

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

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 连接脚本在/board/samsung/x210/u-boot.lds

 TEXT_BASE = 0xc3e00000

TEXT_BASE与连接脚本同时存在的话,以TEXT_BASE中的值为准;

以上是关于Mekefile中所做的事情的主要内容,如果未能解决你的问题,请参考以下文章

与另一个片段通信的片段接口

如何像我在代码中所做的那样,在通过javascript上传后,如何上传多个图像文件并相应地查看它们?

在 psql shell 中所做的更改不会显示在 Datagrip 会话中

如何还原某些用户在 GIT 存储库中所做的更改

如何在正确位置使用 SelectInput 时保存在 DT 中所做的编辑

Yii2 验收测试。在每次测试后回滚在验收测试中所做的所有更改