基于Ti的SDK u-boot添加自己的板子支持(1)

问题

本人基于Ti公司的AM335x EVM开发板设计实现了三个项目的硬件板。因为在不同的项目中都采用了同一款处理器,而硬件板是存在有差异性的,所以需要为不同的板子调试不同的u-boot。
这里有两种选择:
(1)完全克隆两份一样的代码于不同的目录下,然后分别基于EVM的默认配置以及硬件的不同来调试出不同的u-boot;这种方法在逻辑上很简单, 不容易互相混淆, 只是多占用硬盘空间而已;
(2)在同一份u-boot源代码上支持不同的硬件设计,根据不同的配置文件和编译命令,获取不同板子的u-boot输出结果。这种方法占用硬盘空间少,代码维护简单。在此选择该方法。

SDK版本: ti-processor-sdk-linux-rt-am335x-evm-03.01.00.06
u-boot版本: 2016-05

步骤

u-boot本身就支持不同的CPU和boards,它通过不同的配置信息和配置文件来控制最终的输出image。
为了了解需要添加和修改哪些文件, 可以使用如下方法(注意:该方法能够查找到大部分文件,从而提供大致的思路,具体的修改方法需要查看后面的步骤):
在u-boot的根目录下, 直接搜索板子的相关宏定义关键字。例如基于TI的EVM的板子的, 那么搜索AM335X_EVM即可知道大概相关文件的位置:

cd u-boot-root; //本文使用u-boot-root来表示u-boot的根文件
grep -ir AM335X_EVM ./

根据结果, 基本能够定位到需要文件的位置,然后参考网上他人的修改方法,形成自己的修改步骤。

新建文件

1.cd u-boot-root/board
//creat a new folder for our own company boards."set" is my company's name.
2. mkdir set 
//creat two kinds of boards,"am335x-lcd" is for LCD display module; "am335x-cfe" is for another board named cfe;
3. cd set;mkdir am335x-lcd;mkdir am335x-cfe;
//copy files from Ti folder to our own directories;
4. cp ../ti/am335x/* ./am335-lcd/;cp ../ti/am335x/* ./am335-cfe/
5. cp  -a ../ti/common ./

修改文件

首先进行LCD板子的修改,然后按照同样的方法对cfe板子进行同样的移植。

6.修改文件arch/arm/Kconfig;
当运行menuconfig命令该文件的内容会被读取,以供用户进行选择配置.所以第一步需要在该文件里添加对新板子的定义:

...
config TARGET_SET_AM335_LCD  //定义一个宏,当在menuconfig选择该板子时,会在.config文件中添加TARGET_SET_AM335_LCD=y;
    bool "Support SET_AM335_LCD"
    select CPU_V7
    select SUPPORT_SPL
    select DM
    select DM_SERIAL
    select DM_GPIO
    select TI_I2C_BOARD_DETECT
...

...
source "board/set/am335-lcd/Kconfig" //source板子的Kconfig文件,使之配置有效。
...

7.修改u-boot-root/board/set/am335x-lcd/Kconfig文件。
该文件包含具体的板级信息。

if TARGET_SET_AM335_LCD
//TARGET_SET_AM335_LCD 是在上一步骤里定义的宏, 当该宏有效时,定义下面的信息。
config SYS_BOARD
    default "am335-lcd" //板子名称, 对应着文件目录:board/set/am335x-lcd

config SYS_VENDOR
    default "set" //公司名称, 对应着文件目录:board/set

config SYS_SOC
    default "am33xx"  //SOC名称

config SYS_CONFIG_NAME
    default "am335x_lcd" //指定 include/configs/am335x_lcd.h 为配置头文件

config CONS_INDEX
    int "UART used for console"
    range 1 6
    default 1`//制定默认终端为UART0

8.添加am335x_lcd.h 为配置头文件并修改它.

cd u-boot
cp include/configs/am335x_evm.h ./include/configs/am335x_lcd.h

修改文件中的CONFIG_SYS_LDSCRIPT的定义, 使之指向具体板子的连接文件u-boot.lds.

/* Custom script for NOR */
\#define CONFIG_SYS_LDSCRIPT        "board/set/am335-lcd/u-boot.lds"

9.修改连接文件u-boot.lds, 让board/set/am335-lcd/built-in.o的代码在flash中的位置在start之后.

SECTIONS
{
    . = 0x00000000;

    . = ALIGN(4);
    .text :
    {
        *(.__image_copy_start)
        *(.vectors)
        CPUDIR/start.o (.text*)
        board/set/am335-lcd/built-in.o (.text*)
        *(.text*)
    }

10.添加默认配置文件.

cp configs/am335x_evm_defconfig ./configs/am335x_set_lcd_defconfig

使文件里面的宏名字对应着自己的板子, 具体定义见步骤6.

#CONFIG_TARGET_AM335X_EVM=y
CONFIG_TARGET_SET_AM335_LCD=y

11 第一次编译, 需先让默认配置文件有效:

make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x_lcd am335x_set_lcd_defconfig all

12.第一次编译顺利通过之后(没有编译错误),进一步的修改是基于硬件设计相关部分. 每次修改代码后编译:

make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x_lcd am335x_lcd

13.同理,根据步骤5-12,为板子am335x-cfe添加相关部分。
即将上边步骤的lcd字符替换为cfe即可.

参考

http://www.cnblogs.com/chenfulin5/p/6393415.html

你可能感兴趣的:(BSP)