tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(三)

         这节我们换种方法分析,从重点开始,也把我们前面分析的关联起来。还记得README 吧,在 README 中 Software Configuration 一节有详细说明,README 告诉我们:要针对某个单板进行配置,需要执行:make NAME_config,其中 NAME 在 boards.cfg 中列出。S5PV210 和 S5PC100 都是 Cortex-A8 架构,比较类似,我以 S5PC100 为例进行说明:


       通过执行  make smdkc100_config,其中 smdkc100 是 smdkc100 这个单板的一个目标名称,因为有的
单板有多个配置目标,比如 atmel 公司的 at91sam9263ek 单板就有 5 个目标,make 命令首先会从顶层
Makefile 中搜索匹配目标 smdkc100_config,但是找不到smdkc100_config,但是找_config可以找到:


    %_config 前面的%是通配符,会匹配所有以_config 为后缀的目标,::是 Makefile 的中的多目标规则,可以同时跟多个目标,举例:


     $(MKCONFIG) 是顶层目录下的一个可执行 shell 脚本文件,$(@:_config=) 会将所有目标中的后缀
_config 去掉,得到 smdkc100,然后 make 会执行命令:
                     u-boot-2014.04/mkconfig    –A    smdkc100


下面分析 mkconfig:
  首先定义了几个变量:
         TARGETS:Makefile 的目标
         arch:体系架构,比如 arm、x86、mips 等
         cpu:cpu 类型,比如 arm920t、arm11 等
         board:单板名称,比如 smdk2410、smdkc100 等
        vendor:厂商名称,比如 samsung、freescale 等
        soc:片上系统,比如 s3c2410、s3c2440、s5pv210 等


     继续往下:


      如果参数个数等于 2,而且第 1 个参数等于“-A”,则执行:
line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`
awk 是一个非常强大的文本处理工具, $srctree 被替换为 u-boot-2014.04,即 u-boot 源码树目录, awk会读取 u-boot-2014.04/boards.cfg 中的每一行,如果和前面的表达式($0 !~ /^#/ && $7 ~ /^'"$2"'$/)相匹配,则执行{ print $1, $2, $3, $4, $5, $6, $7, $8 }。
    boards.cfg 保存了各种单板的相关信息,其格式为:
# Status, Arch, CPU:SPLCPU, SoC, Vendor, Board name, Target, Options, Maintainers
################################################################################
Active      arm      armv7      s5pc1xx      samsung    smdkc100    smdc100    -    Minkyu Kang
<mk7.kang@samsung.com>
    awk 在执行过程中, $0 代表当前整行, 同时将第一个字段存入$1,将第 2 个字段存入$2, 依此类推,awk 缺省按空格分段,可以通过-F 指定分隔符。若果当前行不以#开头,而且第 7 个字段和 mkconfig 传进来的第 2 个参数(smdkc100)相等,则分别将字段 1~字段 8 输出到 line 中保存,最终得到:
line=Active    arm    armv7    s5pc1xx    samsung    smdkc100    smdkc100    –
$#=8
$1=Active    状态
$2=arm      架构
$3=armv7    CPU
$4=s5pc1xx    SOC
$5=samsung  厂商
$6=smdkc100  单板名称
$7=smdkc100  配置目标
$8=-      选项


    ${7%_config}表示去掉${7}的后缀_config,这里${7}=smdkc100,得到
             CONFIG_NAME=smdkc100
             BOARD_NAME=smdkc100


    arch=arm
    cpu=armv7
    spl_cpu=空
    board=smdkc100
    vendor=samsung 
    soc=s5pc1xx


      打印:Configuring for smdkc100 board...


     创建架构相关的头文件的链接
     如果 KBUILD_SRC 不为空,则进入到 arch/arm/include 目录,删除里面的 asm/arch 这个链接文件。
     如果${soc}为空,则执行 ln -s ${LNPREFIX}arch-${cpu} asm/arch,否则执行
     ln -s ${LNPREFIX}arch-${soc} asm/arch,这里 soc=s5pc1xx,LNPREFIX 为空,所以会执行
     ln –s arch-s5pc1xx asm/arch


紧接着,如果${arch} = “arm”,则删除 asm/proc,同时给 proc-armv 创建一个软链接,如下所示:


如果 KBUILD_SRC 为空,则进入到 u-boot-2014.04/include,这里 KBUILD_SRC 为空,所以会进入到
u-boot-2014.04/include 目录。


为 make 创建头文件
ARCH=arm
CPU=arm
BOARD=smdkc100
VENDOR=samsung
SOC=s5pc1xx
使用 echo 将这些信息一行一行的输出到 u-boot-2014.04/include/config.mk 中:


然后给变量 BOARDDIR 赋值为 samsung/smdkc100


创建单板相关的头文件
APPEND=no,所以会创建一个新的 u-boot-2014.04/include/config.h


      在这个头文件中定义了单板相关的宏,包含了单板的配置头文件 configs/smdkc100.h,我们需要针对
自己的单板配置这个头文件。


总结:执行 make smdkc100_config 主要做了 3 件事:
     1)  创建架构相关的头文件的链接

     2)  为 make 创建头文件 u-boot-2014.04/include/config.mk 

    3)  创建单板相关的头文件 u-boot-2014.04/include/config.h


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值