注意uboot的体系结构目录树:其中能够找到支持的开发板和cpu等信息。
uboot1.1.6/board/samsung/smdk6410
uboot1.1.6/cpu
步骤:
1、tar xzf uboot1.1.6-2012-09-25.tar.gz
2、make clean
3、make forlinx_nand_ram256_config //make编译的目标位forlinx_nand_ram256_config,表示选择的board是forlinx_nand_ram256,forlinx_nand_ram256_config这个目标可以在uboot1.1.6顶层目录下的Makefile中找到;
4、make
5、uboot编译大概需要几分钟,编译完后产生的uboot.bin映像文件位于当前目录下;
说明:Makefile中
forlinx_nand_ram256_config : unconfig
@$(MKCONFIG) smdk6410 arm s3c64xx smdk6410 samsung s3c6410 NAND ram256
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp
ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))
# load ARCH, BOARD, and CPU configuration
include $(OBJTREE)/include/config.mk
export ARCH CPU BOARD VENDOR SOC
ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),ppc)
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = powerpc-linux-
endif
ifeq ($(ARCH),arm) //根据ARCH变量,指定编译器前缀
CROSS_COMPILE = arm-linux-
endif
ifeq ($(ARCH),i386)
ifeq ($(HOSTARCH),i386)
CROSS_COMPILE =
else
CROSS_COMPILE = i386-linux-
endif
endif
ifeq ($(ARCH),mips)
先执行unconfig清除上一次执行make forlinx_nand_ram256_config时产生的头文件include/config.h和Makefile包含文件 include/config.mk;
后执行@$(MKCONFIG) smdk6410 arm s3c64xx smdk6410 samsung s3c6410 NAND ram256,MKCONFIG是顶层目录下的mkconfig脚本文件,后面6个是传入的参数;
mkconfig:
ram256)
echo "#define FORLINX_BOOT_RAM256" >> config.h
> ../board/samsung/smdk6410/config.mk # clear file context
echo "ifndef TEXT_BASE" >> ../board/samsung/smdk6410/config.mk
if [ ${SETMMU} = "yes" ]
then
echo "TEXT_BASE = 0xCFE00000" >> ../board/samsung/smdk6410/config.mk
else
echo "TEXT_BASE = 0x5FE00000" >> ../board/samsung/smdk6410/config.mk
fi
echo "endif" >> ../board/samsung/smdk6410/config.mk
;;
include/config.h:
/*Automatically generated - do not edit */
#define FORLINX_BOOT_NAND
#define FORLINX_BOOT_RAM256
#include <configs/smdk6410.h>
include/config.mk:
ARCH = arm
CPU = s3c64xx
BOARD = smdk6410
VENDOR = samsung
SOC = s3c6410
总结:
编译流程就是通过执行一个make forlinx_nand_ram256_config命令传入ARCH、CPU、BOARD、SOC参数、mkconfig根据参数将include文件夹中相应的头文件夹连接好,生成config.h;
然后执行make命令分别调用各子目录的makefile命令生成所有的obj文件和obj库文件*.a;
最后连接所有的目标文件,生成镜像。
http://hi.baidu.com/xxbing8/item/71021e1220800c7c7b5f25e9