【OK210试用体验】u-boot篇 -- u-boot配置过程分析 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】u-boot篇 -- u-boot配置过程分析

【OK210试用体验】u-boot篇 -- u-boot配置过程分析


u-boot为我们做的工作先是建好配置文件,然后再根据配置文件来编译,移植u-boot,了解其配置过程还是有重大意义的。

分析u-boot的配置过程就是分析它的Makefile,这之中需要用到GNU make的知识,可以参考《GNU make中文手册》,shell编程语法知识等等。也可以参看《嵌入式Linux应用开发完全手册》。


Makefile

在u-boot顶层的Makefile中,有 ,这里可以知道当我们输入命令
  1. make smdkc100_config
复制代码
所执行的过程。

%_confi前面的 %是通配符,会匹所有_config 为后缀 的目标,:: Makefile的中多目标规则,可以同时配置多种板子。可以通过搜索知道MKCONFIG即是mkconfig,也就是顶层目录下的mkconfig。

执行这条命令等于 **/mkconfig -A smdkc100。

进入mkconfig。



mkconfig


在mkconfig的开始,传入 -A smdkc100.
  1. if [ ( $# -eq 2 ) -a ( "$1" = "-A" ) ] ; then
  2. # Automatic mode
  3. line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`
  4. if [ -z "$line" ] ; then
  5. echo "make: *** No rule to make target `$2_config'. Stop." >&2
  6. exit 1
  7. fi

  8. set ${line}
  9. # add default board name if needed
  10. [ $# = 3 ] && set ${line} ${1}
  11. fi
复制代码
这里需要明白awk这个工具的使用。装载一篇awk常用命令文章
http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html。

这里第一个if的判断为真,参数为2,$1为’-A‘。 $srctree/boards.cfg中的srctree通过搜索知道为当前目录,即**/board.cfg,在board.cfg中有 Status, Arch, CPU:SPLCPU, SoC, Vendor, Board name, Target, Options, Maintainers信息。
  1. Active arm armv7 s5pc1xx samsung smdkc100 smdkc100 -
复制代码
这条即为我们所要的信息。

执行的结果:

状态 架构 CPU SOC 厂商 单板目标 配置目标 选项

line=Active arm armv7 s5pc1xx samsung smdkc100 smdkc100 -

$#=8 $1 $2 $3 .... $8



  1. while [ $# -gt 0 ] ; do
    case "$1" in
    --) shift ; break ;;
    -a) shift ; APPEND=yes ;;
    -n) shift ; BOARD_NAME="${7%_config}" ; shift ;;
    -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
    *) break ;;
    esac
    done
复制代码
while中判断为真,但是 -- 、-a、-n、-t都没有符合的,所以这里没有起作用。

  1. [ "${BOARD_NAME}" ] || BOARD_NAME="${7%_config}"

  2. arch="$2"
  3. cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`
  4. spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`
  5. if [ "$6" = " " ] ; then
  6. board=
  7. elif [ "$6" = "-" ] ; then
  8. board=${BOARD_NAME}
  9. else
  10. board="$6"
  11. fi
  12. [ "$5" != "-" ] && vendor="$5"
  13. [ "$4" != "-" ] && soc="$4"
  14. [ $# -gt 7 ] && [ "$8" != "-" ] && {
  15. # check if we have a board config name in the options field
  16. # the options field mave have a board config name and a list
  17. # of options, both separated by a colon (':'); the options are
  18. # separated by commas (',').
  19. #
  20. # Check for board name
  21. tmp="${8%:*}"
  22. if [ "$tmp" ] ; then
  23. CONFIG_NAME="$tmp"
  24. fi
  25. # Check if we only have a colon...
  26. if [ "${tmp}" != "$8" ] ; then
  27. options=${8#*:}
  28. TARGETS="`echo ${options} | sed 's:,: :g'` ${TARGETS}"
  29. fi
  30. }
复制代码
这里执行的结果为:
CONFIG_NAME=smdkc100
BOARD_NAME=smdkc100
arch=arm
cpu=armv7
spl_cpu=空
board=smdkc100
vendor=samsung
soc=s5pc1xx

  1. if [ "$options" ] ; then
  2. echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}"
  3. else
  4. echo "Configuring for ${BOARD_NAME} board..."
  5. fi
复制代码
这里执行后就是打印出的信息:configuring for smdkc100 board...
  1. #
  2. # Create link to architecture specific headers
  3. #
  4. if [ -n "$KBUILD_SRC" ] ; then
  5. mkdir -p ${objtree}/include
  6. LNPREFIX=${srctree}/arch/${arch}/include/asm/
  7. cd ${objtree}/include
  8. mkdir -p asm
  9. else
  10. cd arch/${arch}/include
  11. fi

  12. rm -f asm/arch

  13. if [ -z "${soc}" ] ; then
  14. ln -s ${LNPREFIX}arch-${cpu} asm/arch
  15. else
  16. ln -s ${LNPREFIX}arch-${soc} asm/arch
  17. fi

  18. if [ "${arch}" = "arm" ] ; then
  19. rm -f asm/proc
  20. ln -s ${LNPREFIX}proc-armv asm/proc
  21. fi

  22. if [ -z "$KBUILD_SRC" ] ; then
  23. cd ${srctree}/include
  24. fi
复制代码
创建架构相关头文件的链接。

  1. #
  2. # Create include file for Make
  3. #
复制代码
同理创建include文件和单板头文件。
在arch/cpu/include/asm下输入命令来查看是否建立好链接
  1. ll arch
  2. ll proc
复制代码
创建好make文件后可以在跟文件夹下的include文件下查看到config.mk,里面内容为:

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

make smdkc100_config做了什么?

1. 传递配置相关参数,如CPU、架构、厂商,单板目标、配置目标等
2. 创建架构相关的头文件链接
3. 为make创建头文件 (**/include/config.mk)
4. 创建单板相关的头文件(**/include/config.h)

0个回复

您需要登录后才可以回帖 登录| 注册

本版积分规则


关闭

站长推荐上一条/6下一条

小黑屋|手机版|Archiver|德赢Vwin官网(湘ICP备2023018690号)

GMT+8, 2024-8-29 00:55, Processed in 0.519924 second(s), Total 54, Slave 38 queries .

Powered by德赢Vwin官网 网

© 2015bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表