mkconfig文件讲解

原创 2018年04月15日 15:38:36

#!/bin/sh -e

 

# Script to create header files and linksto configure

# U-Boot for a specific board.

#

# Parameters:  Target Architecture  CPU  Board [VENDOR] [SOC]

#

# (C) 2002-2006 DENX Software Engineering,Wolfgang Denk <wd@denx.de>

#

 

APPEND=no   # Default: Create new config file

BOARD_NAME=""    # Name to print in make output

//shell中的case语句不需要break,在shell中可以用shift使传进去的argc,argv[]的值改变,所以这里while循环并不会是死循环

while [ $# -gt 0 ] ; do

   case "$1" in

   --) shift ; break ;;

   -a) shift ; APPEND=yes ;;

    -n) shift ;BOARD_NAME="${1%%_config}" ; shift ;;

   *)  break ;;

   esac

done

//////////////////////////////////////////////////////////////////////

[ "${BOARD_NAME}" ] ||BOARD_NAME="$1"        //简略的if语句,使用或,先执行["${BOARD_NAME}" ] 判断,是否再执行BOARD_NAME="$1"

//这行就是说判断BOARD_NAME变量是否有值,有就不变,没有就赋为$1,实际确实赋为$1,即BOARD_NAME=x210_sd,

[ $# -lt 4 ] && exit 1             // 判断传进的参数是否为4到6个,不是就退出,即exit 1

[ $# -gt 6 ] && exit 1

 

echo "Configuring for ${BOARD_NAME}board..."

 

#

# Create link to architecture specific headers

#//以下语句到118行之间都是创建符号链接(一下代码创建了4个),为什么要创建符号链接,这是因为这些符号链接的存在就是整个UBOOT的

//配置过程的核心,这些符号链接文件(文件夹)的主要作用是给头文件包含等过程提供指向性链接。根本目的就是让Uboot

//具有可移植性。

//Uboot可移植性的实现原理:在uboot中有很多批次平行的代码,各自属于各自不同架构/cpu/开发板,我们在具体到一个开发板的

//编译时用符号链接的方式提供一个具体的名字的文件夹共编译时使用,这样就可以在配置的过程中通过不同的配置使用

//不同的文件,就可以正确的包含正确的文件,ln指令就是创建符号链接

if [ "$SRCTREE" !="$OBJTREE" ] ; then           //判断是否当前路径编译,

   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      //创建符号链接,第一个:在include目录下创建asm文件,指向asm-arm(因为$2就是arm)

fi

 

rm -f asm-$2/arch

 

if [ -z "$6" -o "$6" ="NULL" ] ; then            //-o表示两个只要一个成立就行,-z判断变量($6)是否为空,

   ln -s ${LNPREFIX}arch-$3 asm-$2/arch          //在include/asm-arm下创建一个arch文件,

//指向include/asm-arm/arch-s5pv11x($3是s5pv11x)

else

   ln -s ${LNPREFIX}arch-$6 asm-$2/arch   // 第二个由于if语句不成立,执行这条。生成asm-arm/arch,指向asm-arm/arch下的arch-arch-s5pv110

fi

 

# create link for s3c24xx SoC

if [ "$3" = "s3c24xx" ]; then

   rm -f regs.h

   ln -s $6.h regs.h

   rm -f asm-$2/arch

   ln -s arch-$3 asm-$2/arch

fi

 

# create link for s3c64xx SoC

if [ "$3" = "s3c64xx" ]; then

   rm -f regs.h

   ln -s $6.h regs.h

   rm -f asm-$2/arch

   ln -s arch-$3 asm-$2/arch

fi

 

# create link for s5pc1xx SoC

if [ "$3" = "s5pc1xx" ]; then

       rm -f regs.h

       ln -s $6.h regs.h

       rm -f asm-$2/arch

       ln -s arch-$3 asm-$2/arch

fi

 

# create link for s5pc11x SoC      当前目录是include目录

if [ "$3" = "s5pc11x" ]; then

       rm -f regs.h            //删除include 目录下的regs.h

       ln -s $6.h regs.h       //第三个:在include 目录下创建regs.h指向include下的s5pv110.h(表示为regs.h->s5pv110.h)

       rm -f asm-$2/arch       //然后在这里将上面61行else语句生成的asm-arm目录下的arch删除(第二个).

       ln -s arch-$3 asm-$2/arch    //第四个:再在这里创建所需要的asm-arm目录下的arch文件,指向include/asm-arm/arch-s5pv11x

fi

 

# create link for s5p64xx SoC

if [ "$3" = "s5p64xx" ]; then

   rm -f regs.h

   ln -s $6.h regs.h

   rm -f asm-$2/arch

   ln -s arch-$3 asm-$2/arch

fi

 

# create link for s5p644x SoC

if [ "$3" = "s5p644x" ]; then

   rm -f regs.h

   ln -s $6.h regs.h

   rm -f asm-$2/arch

   ln -s arch-$3 asm-$2/arch

fi

 

if [ "$2" = "arm" ] ;then

   rm -f asm-$2/proc

   ln -s ${LNPREFIX}proc-armv asm-$2/proc      //第五个:在include/asm-arm下创建一个proc文件,指向include/asm-arm/proc-armv

fi

 

# create link for s3c64xx-mp SoC

if [ "$3" ="s3c64xx-mp" ] ; then

   rm -f regs.h

   ln -s $6.h regs.h

   rm -f asm-$2/arch

   ln -s arch-$3 asm-$2/arch

fi

 

#

# Create include file for Make

#

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

 

#

# Create board specific header file

#

if [ "$APPEND" = "yes"]    # Append to existing config file

then

   echo >> config.h          //如果if成立就追加config.h文件,

else

   > config.h        # Create newconfig file           //所知if并不成立,所以生成一个config.h,里面内容为以下两行

fi

echo "/* Automatically generated - donot edit */" >>config.h

echo "#include <configs/$1.h>">>config.h      //生成的 config.h里面有"#include<configs/$1.h>"

//config.h这个头文件是我们移植x210开发板时,对开发板的宏定义配置文件,这个文件是我们移植x210最主要的文件

//x210_sd.h 文件会被用来生成一个autoconfig.mk文件,这个文件会被主Makefile引入,指导整个编译过程,这里面的这些宏定义会

//影响我们对uboot中大部分.c文件中一些条件编译的选择,从而实现最终的可移植性。

exit 0

u-boot的Makefile分析之顶层mkconfig

/* $#: ./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令行参数的个数 * $0 $1 $2 $3 ...
  • u013686019
  • u013686019
  • 2014-12-31 15:41:03
  • 1469

uboot mkconfig文件分析

uboot mkconfig文件分析 一、在查看uboot的Makefile会看到mkconfig,现在来看看mkconfig到底做了什么? 二、源脚本   #!/bin/sh...
  • smallmuou
  • smallmuou
  • 2012-02-14 12:44:01
  • 2486

u-boot顶层makefile、mkconfig、config.mk文件分析

  • 2014年06月13日 14:13
  • 672KB
  • 下载

uboot之Mkconfig分析

uboot的官网可以通过谷歌搜索得到,显示结果第一个链接就是。 官网:: http://www.denx.de/wiki/U-Boot ftp下载: ftp://ftp.denx.de/pub...
  • yi412
  • yi412
  • 2015-09-02 19:14:19
  • 1281

u-boot配置文件mkconfig分析

配置u-boot命令:make BOARD_NAME_config下面以smdk2410开发板为例 在执行make smdk2410_config命令配置smdk2410开发板的u-boot时,就会...
  • yangsong512
  • yangsong512
  • 2015-06-27 20:20:49
  • 643

U-boot根目录下的mkconfig详尽分析

U-boot根目录下的mkconfig详尽分析 此文件位于uboot源码的根目录下,是源码自带的shell脚本文件,主要功能是创建符号链接以及一些头文件(拥有符号链接的功能)。  输入make x2...
  • H_D_C_H
  • H_D_C_H
  • 2016-11-26 23:10:25
  • 377

uboot配置过程(mkconfig脚本+其他)

uboot配置过程(mkconfig脚本+其他) 在编译uboot之前需要进行配置(带参数执行mkconfig脚本+其他) 1.创建符号链接;2.在include目录下创建**config.mk**文...
  • TongxinV
  • TongxinV
  • 2017-03-13 08:53:42
  • 447

uboot中mkconfig详细分析-- 转载

现在来分析$(SRCTREE)/mkconfig文件的内容。在分析内容之前,为了方便,我把传入到此脚本中的参数都列出来,方便后面备查:smdk2410 arm arm920t smdk2410 NUL...
  • mengzhuicanyang
  • mengzhuicanyang
  • 2012-05-30 09:19:50
  • 888

mkconfig解析(基于uboot.2012.10版本)

mkconfig
  • czg13548930186
  • czg13548930186
  • 2017-03-13 19:31:21
  • 221

Makefile中的$(@:_config=)什么意思?

已经编译出bin文件了,现在研究一下makefile,把遇到的问题记录下来:   1.  $(@:_config=)什么意思? 网上查到如下解释 这里使用了Makefile中的...
  • a8082649
  • a8082649
  • 2014-04-21 14:39:58
  • 5137
收藏助手
不良信息举报
您举报文章:mkconfig文件讲解
举报原因:
原因补充:

(最多只允许输入30个字)