您的位置:首页 > 其它

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

2016-06-10 23:07 447 查看
http://blog.csdn.net/liuxinjohn/article/details/18419441

申明

  本着学习交流的原则, 将个人移植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

StatusArchCPU:SPLCPUSoCVendorBoard nameTargetOptionsMaintainers
$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被搬移之后运行的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: