問題
本人基於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即可.