学习U-Boot之--mkconfig

简介:

,要求在U-Boot里加点功能,使之启动的时候能对这几个芯片进行初始化,并提供U-Boot命令,方便动态调试。

有经验的同事给我操作一下,进入U-Boot源码目录,然后执行:
  $ make at91sam9263ek_config
我有一点不解,执行这个命令是在干嘛?于是我用vi打开Makefile文件,查找到“at91sam9263”这个关键字。


at91sam9263ek_config    :    unconfig
    @./mkconfig $(@:_config=) arm arm9263ejs at91sam9263ek NULL at91sam9263x

当执行 "make at91sam9263ek_config"时,make就会去找到Makefile文件里的at91sam9263ke_config这个目标,然后执行下面的语句。

我们可以看到,make调用了mkconfig并带了6个参数。这6个参数分别是干什么用的呢?
  $(@:_config=) ——其传换后的值就是at91sam9263ek,就是将目标名去掉了后面的"_config"得来。
  arm ——指定平台,除了arm,还i386,mps,PowerPC等等,平台之后的区别在于CPU的指令不一样,CPU架构也不一样。
  arm9263ejs ——具体的芯片型号,因为每个CPU芯片所带的功能模块有差异。
  at91sam9263ek ——主板型号,因为很多主板有特殊的芯片组,实现特殊的功能。
  NULL ——不知道干什么用的
  at91sam9263x ——也不知道干什么用的。

这个mkconfig后面所带的参数决定了我们编译的时候编译哪些文件、怎么编译。那么我们来看一下这个mkconfig脚本文件是怎么实现的。


(1)检查参数里有没有"-a"或"-n"的,设置APPEND与BOARD_NAME


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

如果有"-a"那么APPEND=yes,这个参数后面会用到。"-n",那么BOARD_NAME=??
这里没有"-a"与"-n"参数


(2)如果没有设置BOARD_NAME,那么就默认为第一个参数


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

$1==>$(@:_config=)==>at91sam9263ek

这后BOARD_NAME没有启多大的作用,可以不用关心它。

(3)检查参数的个数是否符合要求


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

如果不满足 4<=$#<=6,那么就退出。


(4)创建src/include/asm符号链接文件


if [ "$SRCTREE" != "$OBJTREE" ] ; then
    ...
else
    cd ./include
    rm -f asm
    ln -s asm-$2 asm
fi

跟据$2的值,这里是"arm",创建asm-arm的符号文件asm。这样只要访问这个src/include/asm就是访src/include/asm_arm。


(5)创建src/include/asm/arch符号链接文件


rm -f asm-$2/arch
 
if [ -z "$6" -o "$6" = "NULL" ] ; then
    ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
    ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi

由于第4步已经将src/include/asm指定为src/include/asm-arm了。
那么这里根据$3或$6来决定那么arch-??文件链接为src/include/asm/arch。

(6)写src/include/config.mk文件


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

将平台、CPU型号、主板型号写入config.mk文件,执行完后config.mk文件中就会有:


ARCH    = arm
CPU     = <span style="font-family: Courier New;">arm9263ejs</span> BOARD   = <span style="font-family: Courier New;">at91sam9263ek</span>

(7)在src/include/config.h文件中插入文件包含语句 


if [ "$APPEND" = "yes" ]        # Append to existing config file
then
    echo >> config.h
else
    > config.h              # Create new config file
fi
echo "#include <configs/$1.h>" >>config.h

将"#include <configs/$1.h>"追加到config.h文件中。如果APPEND!=yes,那么将会覆盖原来config.h文件中有的内容。
在src/include/configs目录下有很多头文件,这里会根据$1的值从中抽取一个。


这样,通过mkconfig命令的执行就准备到了4个文件:

  • src/include/asm
  • src/include/asm/arch
  • src/include/config.mk
  • src/include/config.h

在编译U-Boot目标时,就会根据这几个文件进行编译。
对应的文件目录会被编译:

  • src/cpu/$CPU
  • src/board/$BOARD
目录
相关文章
|
6月前
|
安全 Java Spring
【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解
本篇带大家一起从源码了解 Spring Boot 内置的Http编码功能
131 8
【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解
|
6月前
|
Java Spring
【Spring Boot 源码学习】OnWebApplicationCondition 详解
【1月更文挑战第5天】本篇同大家一起从源码角度了解 OnWebApplicationCondition
108 2
【Spring Boot 源码学习】OnWebApplicationCondition 详解
|
6月前
|
存储 缓存 安全
Spring Boot从入门到实战
本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存,安全控制及相关企业级应用,全程案例贯穿,案例每一步的都会讲解实现思路,全程手敲代码实现。让你不仅能够掌SpringBoot的应用,还能了解背后的原理,学习完本课程后,能够让你动手独立完成一个中小型的SpringBoot Web应用开发。
53 1
Spring Boot从入门到实战
|
6月前
|
NoSQL Java Redis
【Spring Boot 源码学习】JedisConnectionConfiguration 详解
本篇 Huazie 带大家从源码分析 JedisConnectionConfiguration 配置类
460 6
【Spring Boot 源码学习】JedisConnectionConfiguration 详解
|
6月前
|
NoSQL Java Redis
【Spring Boot 源码学习】RedisAutoConfiguration 详解
本篇 Huazie 带大家一起从源码深入了解 RedisAutoConfiguration 配置类
183 2
【Spring Boot 源码学习】RedisAutoConfiguration 详解
|
6月前
|
存储 Java 数据库
【Spring Boot 源码学习】OnBeanCondition 详解
本篇带大家从源码角度详解 OnBeanCondition
68 2
【Spring Boot 源码学习】OnBeanCondition 详解
|
6月前
|
Java 索引 Spring
【Spring Boot 源码学习】OnClassCondition 详解
本篇带大家从源码角度详解 OnClassCondition
54 1
【Spring Boot 源码学习】OnClassCondition 详解
|
11月前
|
Java Spring
【Spring Boot 源码学习】深入 FilteringSpringBootCondition
本篇深入了解Spring Boot 中自动配置过滤匹配父类 FilteringSpringBootCondition
67 2
【Spring Boot 源码学习】深入 FilteringSpringBootCondition
|
XML Java Maven
Spring Boot 学习研究笔记(一) - Spring Boot环境配置
Spring Boot 学习研究笔记(一) - Spring Boot环境配置
|
前端开发 JavaScript druid
超详细的Spring Boot入门笔记(总结)
超详细的Spring Boot入门笔记(总结)
超详细的Spring Boot入门笔记(总结)