U-BOOT移植过程详解: 添加一块新板子的支持

申明

  本着学习交流的原则, 将个人移植u-boot的过程做一个记录. 文章参考了csdn blog里面的很多内容, 有的已经记不得出处了, 只好把当时的摘要直接贴出来. 如果冒犯, 还请见谅. 如有侵权, 请与我邮件联系. 谢谢!


添加一块新板子的支持

在编译uboot代码时, 我需要做的第一件事情就是配置uboot. 命令格式如下
make xxxx_config
如果你直接敲上面这个命令, 会得到下面的错误:
make: *** No rule to make target `xxxx_config'.  Stop.
Why: 因为目前的代码中没有对xxxx这块板子的支持. 下面就看看如何才能支持一块新板子.

boards.cfg

首先, 你得修改boards.cfg,添加你自己的板子. 
(下面的内容是分析2013.10的代码得到的, 如果你已经是master了, 并且发现你的代码跟下面的描述不符, 那么直接读读boards.cfg和mkconfig的源代码吧)

在boards.cfg中增加一行
Active  arm         armv7          s5pc1xx     samsung         tiny210             tiny210
接下来, 当你敲入如下命令时:
make tiny210_config
就会得到这样的结果:
Configuring for tiny210 board...
是的, 这样表示配置成功了!

Following is the define in boards.cfg
Status Arch CPU:SPLCPU SoC Vendor Board name Target Options Maintainers
$1 $2 $3 $4 $5 $6 $7 $8  
Note:
$7 : BOARD_NAME="${7%_config}" <$7=samsung, then BOARD_NAME=samsung; $7=samsung_config, then BOARD_NAME=samsung>
$1 : Active
$2 : arch="$2"
$3 : cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`
     spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`
$4 : [ "$4" != "-" ] && soc="$4"
$5 : [ "$5" != "-" ] && vendor="$5"
$6 : [ "$6" != "-" ], then board="$6"
     else, board=${BOARD_NAME}
$8 : [ "$8" != "-" ], then CONFIG_NAME="${8%:*}"
     else, CONFIG_NAME="${7%_config}"
 
BOARD_NAME: Just name of the board, no affect to the code
echo "Configuring for ${BOARD_NAME} board..."

CONFIG_NAME: Must create a file "include/configs/${CONFIG_NAME}.h", code will include this file
arch       : ln -s ../arch/${arch}/include/asm include/asm
             LNPREFIX=arch/${arch}/include/asm/
soc        : 
             if [ -z "${soc}" ] ; ln -s ${LNPREFIX}arch-${cpu} include/asm/arch
             else                 ln -s ${LNPREFIX}arch-${soc} include/asm/arch
cpu        :
vendor     : Must create a floder "BOARDDIR", board related files will be put under it
             if [ -z "${vendor}" ] ; BOARDDIR=${board}
else                    BOARDDIR=${vendor}/${board}

include/configs/${CONFIG_NAME}.h

配置成功之后, 还是无法编译的, 因为我们还得自己创建一些文件.
第一个要创建的就是板子的配置文件${CONFIG_NAME}.h
直接touch创建它吧, 后面再来编辑
include/configs/tiny210.h

BOARDDIR

有了配置文件之后, 我们还需要增加板子相关的汇编文件和C文件, 用来初始化板子等.
直接mkdir创建, 然后加入一些必要的文件.
  • board/samsung/tiny210/
    • Makefile: 用于编译该目录下的代码
    • lowlevel_init.S: 汇编, 初始化CPU的时钟, 串口等必要资源. 这个里面的代码一般是基于相对地址写的, 这样编译出来的镜像放在任何文件都能运行
    • mem_setup.S: 汇编, 初始化外部RAM等, 为后面的搬移动作做准备.
    • tiny210.c: C, 初始化板子相关外设. C里面的函数调用都是基于绝对地址的, 在编译阶段, 就已经固定了哪个函数放在哪个位置, 要调用这个函数就要跑到对应的地址去. 这个文件里面的代码是在u-boot被搬移之后运行的.

你可能感兴趣的:(u-boot)