uboot之—make smdk2410_config命令详细解析

uboot之—make smdk2410_config命令详细解析

大家好,又见面了,我是全栈君。

先进入顶层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>           

转载于:https://www.cnblogs.com/wlzy/p/6039434.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108799.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 后台管理系统 – 页面布局设计

    后台管理系统 – 页面布局设计前端的中后台管理系统相比于其他普通项目,从开发设计的角度来说有几点比较特殊:一个是权限设计,具体实现可参考:传送门。一个是页面布局的设计,也是本文要说的。一个好的页面布局设计,无论是对于页面布局的稳定性,还是系统功能拓展的方便性,亦或是用户体验上,都有着重要的提升作用。一、市面参考先来看看市面上的一些优秀的开源系统项目的页面布局。1、vue-element-adminvue-element-admin是vue框架的一个优秀的后台管理系统开源项目,目前star数75k,也是我入行前端的启

  • s一般怎么称呼自己的m_上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力?…

    s一般怎么称呼自己的m_上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力?…上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力,学平面设计能干什么?很多人以为学习平面设计专业的话,毕了业只是做海报、设计广告而已。后来才发现,平面设计专业,其实有很多有意义的行业。就在上海平面设计工资一般是多少,我该怎么提升自己的平面设计能力来分享下自己的经验。平面设计是任何企业和公司都不可缺少的岗位之一,位置至关重要。而且大街上随处可见平面设计的踪影,海报、产品包装、路标指示牌、l…

  • 虚拟机桥接模式连不上网

    虚拟机桥接模式连不上网虚拟机编辑->虚拟网络编辑器查看是否有**VMnet0:对应桥接模式VMnet1:对应NAT模式VMnet8:对应仅主机模式**若没有VMnet0,还原默认设置,之后设桥接模式就能连网了https://blog.csdn.net/Bob_666/article/details/81412242…

  • 解释afterPropertiesSet

    在spring的bean的生命周期中,实例化->生成对象->属性填充后会进行afterPropertiesSet方法,这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到,比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可:@Component(“a”)publicclassAimplementsInitializingBean{privateBb;publicA(Bb){

  • validates_email

    validates_email

  • django formview_django queryset合并

    django formview_django queryset合并APIView视图类在DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。当然如果你不想使用类视图,那么就用@api_view装饰器包裹一下就可以。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号