zoukankan      html  css  js  c++  java
  • 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_.*)/-u1/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中的值为准;

  • 相关阅读:
    jQuery源码分析-01总体架构
    JS框架的一些小总结
    jquery validate表单验证插件
    jQuery $.extend()用法总结
    详解;(function ($,window,document,undefined){...})(jQuery,window,document);
    (function(){... })();
    同源策略 JSONP(实践篇)
    **字符集--发展史
    Django X 和 druid
    Django xadmin的使用 (三)
  • 原文地址:https://www.cnblogs.com/biaohc/p/6367409.html
Copyright © 2011-2022 走看看