Uboot Makefile 分析

Uboot Makefile 分析

======

1. make smdk2410_config 执行过程

Makefile 目标内容:

smdk2410_config :   unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

替换后

 smdk2410_config    :   unconfig
    mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
1. 执行 unconfig 依赖 
unconfig:
    @rm -f include/config.h include/config.mk \
        board/*/config.tmp board/*/*/config.tmp
删除生成的文件,如: config.h, config.mk config.tmp

2. 执行脚本,生成头文件和链接配置
    Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
    mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
将 mkconfig 脚本精简后,如下:
```
#!/bin/sh -e
# Script to create header files and links to configure
# U-Boot for a specific board.
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]

BOARD_NAME="$1"
echo "Configuring for ${BOARD_NAME} board..."

#
# Create link to architecture specific headers
#
cd ./include
rm -f asm
ln -s asm-$2 asm

rm -f asm-$2/arch

ln -s arch-$6 asm-$2/arch

rm -f asm-$2/proc
ln -s proc-armv asm-$2/proc

#
# Create include file for Make
#
echo "ARCH   = $2" >  config.mk
echo "CPU    = $3" >> config.mk
echo "BOARD  = $4" >> config.mk
echo "SOC    = $6" >> config.mk

#
# Create board specific header file
#
> config.h      # Create new config file
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h
exit 0
``` 
mkconfig 脚本效果:

    1. 在include目录下成链接文件 

        asm -> asm-arm
        asm-arm/arch -> arch-s3c24x0
        asm-arm/proc -> proc-armv

    2. 在 include 目录下生成 config.mk 和 config.h 文件

        config.mk

        ```
        ARCH   = arm
        CPU    = arm920t
        BOARD  = smdk2410
        SOC    = s3c24x0
        ```

        config.h

        ```
        #include <configs/smdk2410.h>
        ```

2. make 编译过程

make 默认目标为 all 

```
all:    u-boot.srec u-boot.bin System.map   
```

all 目标依赖于 u-boot.srec, u-boot.bin, System.map
1. 目标:u-boot.srec 
    ```
        u-boot.srec:    u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@     
    ```
    依赖于 u-boot 
    1. 目标 u-boot
    ```
        u-boot:     depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
                UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__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
    ```
    依赖于 depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
        1. 目标 depend 
            在 tools examples post post/cpu 目录下生成文件 .depend ,包含了各个目标的依赖
        2. 目标 version 
            生成 include/version_autogenerated.h ,包含为 版本号 
        3. 目标 $(SUBDIRS) 
            SUBDIRS = tools examples post post/cpu
            进入各个目录执行make all
        4. 目标 $(OBJS) 
            OBJS  = cpu/$(CPU)/start.o
            uboot 启动代码 
        5. 目标 $(LIBS)
            LIBS  = lib_generic/libgeneric.a
            LIBS += board/$(BOARDDIR)/lib$(BOARD).a
            LIBS += cpu/$(CPU)/lib$(CPU).a
            LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
            LIBS += lib_$(ARCH)/lib$(ARCH).a
            LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \
                fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
            LIBS += net/libnet.a
            LIBS += disk/libdisk.a
            LIBS += rtc/librtc.a
            LIBS += dtt/libdtt.a
            LIBS += drivers/libdrivers.a
            LIBS += drivers/nand/libnand.a
            LIBS += drivers/nand_legacy/libnand_legacy.a
            LIBS += drivers/sk98lin/libsk98lin.a
            LIBS += post/libpost.a post/cpu/libcpu.a
            LIBS += common/libcommon.a

            编译依赖的库 
        6. 目标 $(LDSCRIPT) 

2. 目标: u-boot.bin
    u-boot.bin: $(obj)u-boot
        $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
3. 目标: System.map 
    System.map: $(obj)u-boot
        @$(NM) $< | \
        grep -v '\(compiled\)|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)|\(LASH[RL]DI\)' | \
        sort > $(obj)System.map
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值