先进入顶层Makefile。有很多相对不同板子的配置,如:

gec2440_config:unconfig

  @$(MKCONFIG) $(@:_config=) arm arm920t gec2440 samsung s3c24x0

1.配置编译uboot第一步都是make *****_config。既然是make就得执行Makefile。makefile就包括很多上面的语句,make *****_config,首先执行的就是上面的配置信息。 @$(MKCONFIG)啥意思,其实在Makefile前面就有定义 @$(MKCONFIG) := $(SRCTREE)/mkconfig,也就是根目录的mkconfig文件。$(@:_config=)的意思就是吧make *****_config的_config给去到。所以gec2440_config执行./mkconfig  gec2440  arm arm920t gec2440 samsung s3c24x0。而unconfig的作用在于去除原先的配置信息,即make ***_config与make unconfig互逆关系。

2.OK,现在执行make gec2440_config,那么就会出现:

Configuring for gec2440 board...

现在看看有发生那些变化。由于上面的命令相当于执行./mkconfig  arm arm920t gec2440 samsung s3c24x0。所以先进去根目录的mkconfig文件看看。

首先,要明确一点:./mkconfig  gec2440  arm arm920t gec2440 samsung s3c24x0使得$0=./mkconfig,$1=arm,$2=arm920t,$3=gec2440, $4=samsung, $5=s3c24x0

下面是mkconfig的内容:

APPEND=no # 这里记得APPEND初值为no
BOARD_NAME=""
TARGETS=""

#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t

while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
*)  break ;;
esac
done

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec2440

[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then
echo "Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
exit 1
fi

//在终端打印Config  for gec2440  board....
echo "Configuring for ${BOARD_NAME} board..."

#
# 产生链接文件
#
if [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -f asm
mkdir asm-$2
ln -s asm-$2 asm

else
cd ./include    //进入include
rm -f asm
ln -s asm-$2 asm    //ln -s  include/asm-arm   asm
fi

rm -f asm-$2/arch            //删除include/asm-arm/arch

if [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
ln -s ${LNPREFIX}arch-$3 asm-$2/arch   
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
fi

if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc  //删除include/asm-arm/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro
fi

#
# Create include file for Make
#
echo "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk
echo "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
echo "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
//VERDOR=samaung,放入include/config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
//SOC=s3c24x0,放入include/config.mk
#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
then
echo >> config.h
else
> config.h  #产生config.h文件,位于include目录下
echo "/* Automatically generated - do not edit */" >>config.h

for i in ${TARGETS} ; do
echo "#define CONFIG_MK_${i} 1" >>config.h ;
//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件
done

echo "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>
echo "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>

exit 0

3.上面红色部分就是改变部分。到现实中的源代码看看,

大家执行完make gec2440_config之后,到源代码看看。

第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,

并加入include/config.mk文件中,

我的config.mk文件内容如下:

ARCH   = arm
  CPU    = arm920t
  BOARD  = gec2440
  VENDOR = samsung
  SOC    = s3c24x0

第二就是看一下链接文件,我的情况如下:

进入include目录下:

#ll

lrwxrwxrwx  1 root root      7 04-01 21:36 asm -> asm-arm

进入include/asm-arm目录下:

lrwxrwxrwx 1 root root     12 04-01 21:36 arch -> arch-s3c24x0

............

lrwxrwxrwx 1 root root      9 04-01 21:36 proc -> proc-armv

第三就是在include目录下产生新文件:config.h.里面包含几个头文件,我的是:
  /* Automatically generated - do not edit */
  #include <configs/gec2440.h>
  #include <asm/config.h>

uboot之---make smdk2410_config命令详细解析的更多相关文章

  1. MS-DOS命令dir命令详细解析

    DOS命令窗口打开方式为Win+R键,打开运行命令,输入 cmd 即可:特殊情况我们要用管理员身份运行DOS,此时就可以在开始菜单-附件-DOS命令,鼠标右键单击命令提示符以管理员身份运行.如果是wi ...

  2. (转)linux应用之test命令详细解析

    linux应用之test命令详细解析 原文:https://www.cnblogs.com/tankblog/p/6160808.html test命令用法. 功能:检查文件和比较值 1)判断表达式 ...

  3. Windows命令行command的Shell命令详细解析和语法

    CMD命令大全及详细解释和语法 Microsoft Windows XP [版本 5.1.2600] 有关某个命令的详细信息,请键入 HELP 命令名 ASSOC    显示或修改文件扩展名关联. A ...

  4. Linux操作系统PS命令详细解析

    要对系统中进程进行监测控制,用 ps 命令满足你. /bin/ps ps 是显示瞬间行程的状态,并不动态连续:如果想对进程运行时间监控,应该用 top 工具. kill 用于杀死进程. ======= ...

  5. linux应用之test命令详细解析

    test命令用法. 功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表 ...

  6. grep命令详细解析 --非原创 原作者ggjucheng

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  7. MySQL中EXPLAIN命令详细解析

    很多情况下我们需要知道某条SQL语句的性能,都会通过EXPLAIN命令来查看查询优化器是如何执行的. 如何使用 使用EXPLAIN很简单,只需要在执行的SQL前面加上EXPLAIN即可 explain ...

  8. 详细解析Linux scp命令的应用

    详细解析Linux scp命令的应用 Linux命令有人统计说是有4000多个,Linux scp命令是用于Linux之间复制文件和目录,这里详细介绍scp命令使用和参数. AD: Linux scp ...

  9. 第1阶段——uboot分析之查找命令run_command函数和命令定义过程(6)

    本节主要学习,run_command函数命令查找过程,命令生成过程 1.run_command函数命令查找过程分析:在u-boot界面中(main_loop();位于u-boot-1.1.6/comm ...

随机推荐

  1. laravel 字段映射问题,表单中提交字段与数据表中字段不一致

    在遇到提交表单时,表单中的name属性与数据表中的字段不一致,报错, 解决方法: 参考1:提交表单的时候,表单的name属性和数据表字段名称是一样的,这样有什么不妥么? 你数据库的信息给前端透露得越多 ...

  2. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  3. idea导出包含main函数的jar

    1.首先打开File->project stucture->Artifacts 2.按照下图方式: 3.选择面main函数的所在的类,选择MAINFEST.MF问的生成路径 这里一定选择 ...

  4. bzoj4754[JSOI2016]独特的树叶

    这个题....别人写得怎么都....那么短啊? 我怎么....WA了好几次啊....怎么去loj扒了数据才调出来啊? 这个算法...怎么我还是不知道对不对啊 怎么回事啊怎么回事啊怎么回事啊? 请无视上 ...

  5. LeetCode 696. Count Binary Substrings

    Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...

  6. element-ui中单独引入Message组件的问题

    import Message from './src/main.js'; export default Message; 由于Message组件并没有install 方法供Vue来操作的,是直接返回的 ...

  7. 【刷题】洛谷 P2675 《瞿葩的数字游戏》T3-三角圣地

    题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1 ~ N.1 ~ N可以交换位置. ...

  8. 那个执事,争先:我如何于 2015 年在 Java Web 项目中推动 HTTP/2

    2015 年 5 月,HTTP/2 发布. 2015 年第 3 季度,我所在企业的一个战略级客户(而且是第二大客户)说,他们需要在当年年底之前支持 HTTP/2(原因忘了,且与本文无关,从略). 而在 ...

  9. 浅谈Android发展趋势分析

    去年11月16.17日,我有幸参加了北京2017安卓技术大会,做了关于车载Android系统的演讲,并主持了诸多大咖参与的圆桌讨论,对Android未来几年的发展趋势进行了一番讨论.来自小米.百度.高 ...

  10. 测试开发面试的Linux面试题总结之一:vim使用方法

    现在做测试没有说不用到linux,大部分公司都会涉及到,作为测试经常使用linux最常见手段就是查看日志,帮助开发定位问题,这是目前最常见的测试当中使用linux方法,今天就讲一讲vim文本编辑器的使 ...