zoukankan      html  css  js  c++  java
  • u-boot mkconfig文件分析

    #!/bin/sh -e
    #遇到非0返回 就退出脚本
    
    # Script to create header files and links to 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
    
    while [ $# -gt 0 ] ; do
        case "$1" in
        --) shift ; break ;;
        -a) shift ; APPEND=yes ;;
        -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
        *)  break ;;
        esac
    done
    #  由于mkconfig没有这些参数,所以上面语句不执行 
    ########################################################################
    #      $#表示输入进来的参数个 数,-gt(great than)表示左边大于右边则返回真
    #      SHELL常用内部参数:  
    #      $# ----传递给程序的总的参数数目
    #     $? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
    #     $* ----传递给程序的所有参数组成的字符串。
    #      $n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ... 
    #      $0 ----当前程序的名称
    #      $@ ----以"参数1" "参数2" ... 形式保存所有参数
    #      $$ ----本程序的(进程ID号)PID
    #      $! ----上一个命令的PID 
    ########################################################################
    
    [ "${BOARD_NAME}" ] || BOARD_NAME="$1"
    #      此处很重要,他给 BOARD_NAME 赋值为$1,即 smdk2410 
    
    [ $# -lt 4 ] && exit 1
    [ $# -gt 6 ] && exit 1
    #    -lt是小于的意思,-le是小于等于的意思,此处用于判断参数的个数是否符合要求 
    
    echo "Configuring for ${BOARD_NAME} board..."
    
    #
    # Create link to architecture specific headers
    #
    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
    #    再次建立链接文件,并让它指向 asm-$2, 即 asm --> asm-arm 
        LNPREFIX="../../include2/asm/"
        cd ../include
        rm -rf asm-$2
        rm -f asm
        mkdir asm-$2
        ln -s asm-$2 asm
    else
        cd ./include
        rm -f asm
        ln -s asm-$2 asm
    fi
    #    再次建立链接文件,并让它指向 asm-$2, 即 asm --> asm-arm 
    
    rm -f asm-$2/arch
    #    删除a sm-$2/arch,即asm-arm/arch 
    
    if [ -z "$6" -o "$6" = "NULL" ] ; then
    #    判断$6是否为空,或等于NULL, 此处为假,所以执行else
        ln -s ${LNPREFIX}arch-$3 asm-$2/arch
    else
        ln -s ${LNPREFIX}arch-$6 asm-$2/arch
    fi
    #    由前 面定义可知,如果在源文件中编译,则 LNPREFIX="" ,
    #    所以此处实质为ln -s arch-s3c24x0 asm-arm/arch 
    
    if [ "$2" = "arm" ] ; then
        rm -f asm-$2/proc
        ln -s ${LNPREFIX}proc-armv asm-$2/proc
    fi
    #    重建sam-arm/proc文件,并让它连接到proc-armv
    
    #
    # 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
    #    创建顶层包含的include/config.mk文件。 其内容很简单。此处>是重定向,>>也是重定向,只是追加在文件尾部。
    #    往config.mk 里面写入:ARCH = arm ,CPU = arm920t ,BOARD = smdk2410,SOC = s3c24x0 
    #    可以在顶层目录输入make smdk2410_config, 在include 目录里面多了 一个 config.mk 文 件,里面内容就是刚刚写入的内容 
    
    #
    # Create board specific header file
    #
    if [ "$APPEND" = "yes" ]    # Append to existing config file
    then
        echo >> config.h
    else
        > config.h        # Create new config file
    fi
    #    这是创建空文档的一种方法 
    
    echo "/* Automatically generated - do not edit */" >>config.h
    echo "#include <configs/$1.h>" >>config.h
    
    exit 0
    
    总结mkconfig做的工作
      a. 25 [ "${BOARD_NAME}" ] || BOARD_NAME = "$1",结果    BOARD_NAME=smdk2410.
      b. 在include目录下,建立链接:asm --> asm-arm,include/asm-arm目录下,arch --> arch-s3c24x0,
         proc --> proc-armv
      c.在include目录下,建立config.mk文件,往里面写入:
         ARCH  = arm
         CPU   = arm920t
         BOARD = smdk2410
         SOC   = s3c24x0
      d.在include目录下,建立头文件config.h.往里面写入:
        #include <configs/$1.h>

     

  • 相关阅读:
    CentOS虚拟机和物理机共享文件夹实现
    集训第六周 数学概念与方法 概率 数论 最大公约数 G题
    集训第六周 数学概念与方法 概率 F题
    集训第六周 E题
    集训第六周 古典概型 期望 D题 Discovering Gold 期望
    集训第六周 古典概型 期望 C题
    集训第六周 数学概念与方法 UVA 11181 条件概率
    集训第六周 数学概念与方法 UVA 11722 几何概型
    DAG模型(矩形嵌套)
    集训第五周 动态规划 K题 背包
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3303233.html
Copyright © 2011-2022 走看看