u-boot-1.1.6的配置编译过程分析
- 格式:doc
- 大小:30.00 KB
- 文档页数:4
uboot更目录下的Makefile分析一.配置过程(make smdk2410_config):smdk2410_config : unconfig //相当于执行这条语句@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0------------------------------------------------------------------解析------------------------------------------------------------------------- MKCONFIG := $(SRCTREE)/mkconfig 最终替换mkconfig$(@:_config=) @表示目标,最终替换smdk2410从而说明,执行make smdk2410_config命令,相当于执行以下命令:mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0 ====================================================================================== $0 $1 $2 $3 $4 $5 $6 命令cpu的架构cpu类型,对应于cpu\arm920t 开发板型号,board\smdk2410 厂家soc 注:在linux的脚本文件里面,可以用$n来表示第n个参数,$0才是第一个参数,即为命令!!!!====================================================================================== 对上一句命令进一步解析:打开uboot更目录下面的mkconfig脚本文件,观看分析:[ "${BOARD_NAME}" ] || BOARD_NAME="$1" //如果有BOARD_NAME,就用这个的BOARD_NAME,//如果为空,则让BOARD_NAME = $1(即smdk2410)cd ./includerm -f asmln -s asm-$2 asm //相当于ln -s asm-arm asm(建立一个连接文件asm,指向asm-arm)问:为什么要建立这样的连接文件呢?答:是为了在源码中写代码的方便,比如:#include <asm/type.h> //源码中的书写形式!!!!但是当执行完配置命令后,就相当于#include <asm-arm/type.h>。
这样方便支持多种建构rm -f asm-$2/arch //rm -f asm-arm/archln -s ${LNPREFIX}arch-$6 asm-$2/arch //ln -s arch-s3c24x0 asm-arm/arch//在asm-arm目录下建立一个连接文件arch,指向arch-s3c24x0rm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc //ln -s proc-armv asm-arm/proc//在asm-arm目录下建立一个连接文件proc,指向proc-armv************************************************************************************************* # Create include file for Make# 创建一个配置文件config.mkecho "ARCH = $2" > config.mk //>表示新建文件echo "CPU = $3" >> config.mk //>>表示在原有的文件中追加类容echo "BOARD = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk**************************执行以上5句命令后,相当于config.mk中有类容**************************** ARCH = armCPU = arm920tBOARD = $4smdk2410SOC = s3c24x0注意:config.mk用于更目录的Makefile完成相关的配置筛选!!!************************************************************************************************* # Create board specific header file#创建一个单板相关的头文件> config.h # Create new config filefiecho "/* Automatically generated - do not edit */" >>config.hecho "#include <configs/$1.h>" >>config.h*************************执行以上4句命令后,相当于config.h中有类容****************************** Automatically generated - do not edit#include <configs/$1.h>注意:config.h用于完成代码中相关配置的筛选!!!*************************************************************************************************二.编译过程(make)再看Makefile.............................# load ARCH, BOARD, and CPU configurationinclude $(OBJTREE)/include/config.mk //包含上面配置过程生成的config.mk文件ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux- //如果ARCH = arm,则编译工具为arm-linux-OBJS = cpu/$(CPU)/start.o //非常重要的命令!!!!!//$(CPU) 即调用CPU = arm920t 即:OBJS = cpu/arm920t/start.oLIBS = lib_generic/libgeneric.aLIBS += board/$(BOARDDIR)/lib$(BOARD).a //LIBS += board/smdk2410/libsmdk2410.aLIBS += cpu/$(CPU)/lib$(CPU).a //LIBS += cpu/arm920t/libarm920t.a...------------------------------------------------------------------------------------------------------------------------------------------------- 或者展开下列的定义:ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)$(obj)u-boot.bin: $(obj)u-boot$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@$(obj)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 $(PLA TFORM_LIBS) \-Map u-boot.map -o u-boot------------------------------------------------------------------------------------------------------------------------------------------------- 或者直接make,然后观察编译信息:cd /uboot_kernel/u-boot-1.1.6 &&arm-linux-ld -Bstatic -T /uboot_kernel/u-boot-1.1.6/board/smdk2410/u-boot.lds-Ttext 0x33F80000 $UNDEF_SYM cpu/arm920t/start.o\--start-group lib_generic/libgeneric.a board/smdk2410/libsmdk2410.a cpu/arm920t/libarm920t.a cpu/ arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a --end-group -L /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1 -lgcc \-Map u-boot.map -o u-boot------------------------------------------------------------------------------------------------------------------------------------------------- 注:从上面的连接过程得知。