u-boot 编译改动了那些文件(1)make xxx_config
来源:互联网 发布:华大基因数据库 编辑:程序博客网 时间:2024/06/05 19:45
下载u-boot-1.1.6 http://sourceforge.net/projects/U-Boot获得U-Boot最新版本。
以开发板smdk2410+SOC芯片S3C2410 + arm920tCPU核为例
编译过程:两条命令就够
方法1.不指定生成的文件存放的目标目录,那么编译生成的所有文件都保存在源代码目录中。# make smdk2410_config(建立目录、文件联系)# make (或make all 不指定默认执行第一个)开始编译方法2、为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都将编译生成的文件输出到 /tmp/build目录。//注意:这里必须是绝对路径tmp/build 或./tmp/build 都不行。但可以是/home/xiaoming/temp$ make O=/tmp/build smdk2410_config (注意是字母O,而不是数字0) $ make all 或者$ export BUILD_DIR=/tmp/build $ make smdk2410_config $ make all
1、顶层Makefile
smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0unconfig: @rm -f $(obj)include/config.h $(obj)include/config.mk / $(obj)board/*/config.tmp $(obj)board/*/*/config
执行# make smdk2410_config时,先执行unconfig目标,不指定输出目标时,obj,src变量均为空,unconfig下面的命令清理上一次执行make *_config时生成的头文件和makefile的包含文件。主要是include/config.h 和include/config.mk文件。然后才执行命令。
变量MKCONFIG:这个变量指向一个脚本,即顶层目录的mkconfig。执行# make smdk2410_config时会执行这个脚本文件,后面几个为它需要调用的参数,分别对应Target Architecture CPU Board [VENDOR] [SOC] 。其中$(@:_config=)为smdk2410 即smdk2410_config去掉_config。
2、/mkconfig做了什么
(1)确定开发板名称BOARD_NAME,等于第一个参数即smdk2410
BOARD_NAME="" [ "${BOARD_NAME}" ] || BOARD_NAME="$1"
(2)创建到目标板相关的目录的链接,都在include/asm-arm/下
//arm架构目录cd ./include rm -f asm ln -s asm-$2 asm include目录下建立了到asm-arm目录的符号链接asm。其中的ln -s asm-$2 asm即ln -s asm-arm asm 。这里asm-arm 是一个目录//arm架构目录下的SOC目录rm -f asm-$2/arch ln -s ${LNPREFIX}arch-$6 asm-$2/arch 建立符号链接include/asm-arm/arch指向 include/asm-arm/arch-s3c24x0目录。//arm架构下的处理器目录if [ "$2" = "arm" ] ; then rm -f asm-$2/proc ln -s ${LNPREFIX}proc-armv asm-$2/proc fi 若目标板是arm架构,则上面的代码将建立符号连接include/asm-arm/proc指向目录include/asm-arm/proc-armv。
建立以上的链接的好处:编译U-Boot时直接进入链接文件指向的目录进行编译,而不必根据不同开发板来选择不同目录。
(3)构建include/config.mk文件
echo "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 上面代码将会把如下内容写入文件inlcude/config.mk文件: ARCH = arm CPU = arm920t BOARD = smdk2410 SOC = s3c24x0
4)指定开发板源代码所在目录 BOARDDIR= smdk2410
if [ -z "$5" -o "$5" = "NULL" ] ; then BOARDDIR=$4 else BOARDDIR=$5/$4 fi 以上代码指定board目录下的一个目录为当前开发板专有代码的目录。$5(VENDOR)为空则BOARDDIR设置为$4(BOARD)即smdk2410
(5)构建include/config.h文件,往里面追加内容
> config.h # Create new config file echo "/* Automatically generated - do not edit */" >>config.h for i in ${TARGETS} ; do echo "#define CONFIG_MK_${i} 1" >>config.h ; done cat << EOF >> config.h #define CONFIG_BOARDDIR board/$BOARDDIR #include <config_defaults.h> #include <configs/$1.h> #include <asm/config.h> EOF exit 0
这里的“cat << EOF >> config.h”表示将输入的内容追加到config.h中,直到出现“EOF”这样的标识为止。
若APPEND为no,则创建新的include/config.h文件。若APPEND为yes,则将新的配置内容追加到include/config.h文件后面。由于APPEND的值保持“no”,因此config.h被创建了,并添加了如下的内容:
/* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/smdk2410#include <config_defaults.h> #include <configs/smdk2410.h> #include <asm/config.h>
下面总结命令make smdk2410_config执行的结果(仅针对编译目标输出到源代码目录的情况):
(1) 创建到目标板相关的文件的链接 ln -s asm-arm asm ln -s arch-s3c24x0 asm-arm/arch ln -s proc-armv asm-arm/proc (2) 创建include/config.mk文件,内容如下所示: ARCH = arm CPU = arm920t BOARD = smdk2410VENDOR = samsung SOC = s3c24x0 (3) 创建与目标板相关的文件include/config.h,如下所示: /* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/smdk2410#include <config_defaults.h> #include <configs/smdk2410.h> #include <asm/config.h>
- u-boot 编译改动了那些文件(1)make xxx_config
- u-boot 编译改动了那些文件(2)-make all
- u-boot Makefile -- make xxx_config
- u-boot Makefile -- make xxx_config
- [U-Boot] How make xxx_config works?
- [U-Boot] How make xxx_config works?
- u-boot Makefile -- make xxx_config分析
- u-boot-2016.09 make编译过程分析(一)
- u-boot-2016.09 make编译过程分析(二)
- u-boot-2016.09 make编译过程分析(一)
- u-boot-2016.09 make编译过程分析(二)
- 【u-boot】u-boot-2016.09 make编译过程分析(一)
- 【u-boot】u-boot-2016.09 make编译过程分析(二)
- MAKE U-BOOT
- 编译u-boot:make[1]: *** [lib/asm-offsets.s] Error 1
- U-boot 编译学习---直接 make all 命令失败
- make mrproper解决u-boot for tiny210编译问题
- U-boot 编译学习---直接 make all 命令失败
- js猜字小游戏
- NOIP 提高组 初赛 三、问题求解 习题集(二)NOIP2000-NOIP2005
- Codeforces Round #382 (Div. 2) 735A Ostap and Grasshopper
- 大小端
- 软件调试的一些心得
- u-boot 编译改动了那些文件(1)make xxx_config
- JAVA计算题
- 向前向后兼容
- Java统计字符串中子字符串个数的两种方法:
- hash算法冲突
- CJSON, license,卷积,加密,同步异步阻塞非阻塞
- Android Studio进行真机调试的相关设置
- 堆排序原理及实现
- 类加载器