基於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章