歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> U-Boot在JX2410上的移植

U-Boot在JX2410上的移植

日期:2017/3/1 11:18:11   编辑:Linux編程

平台:Ubuntu、武漢創維特ARM9實驗箱JXARM9-2410-1、u-boot-1.1.6、arm-linux-gcc-3.3.2

在開始移植之前,得先了解u-boot的啟動過程,明白各個主要文件目錄。可閱讀README文檔。以下以S3C2410為例子簡要說明啟動過程中所用到的文件名:

cpu/arm920t/start.s 完成硬件初始化,設置cpu工作模式、關看門狗、設置時鐘等

→board/smdk2410/lowlevel_init.s 為第二階段准備RAM空間

→lib_arm/board.c跳轉到第二階段代碼的c入口點,初始化隊列中各項,分別到其他文件中調用。

→common/main.c循環調用main_loop

了解u-boot編譯過程:

make [board]_config 配置目標板,其中[board]為目標板名稱,需在board目錄下有相應文件夾,在include/configs/目錄下有相應頭文件。

→make all 編譯鏈接

1. 獲取U-Boot源碼包:http://www.linuxidc.com/Linux/2011-07/38897.htm

本次移植采用的是1.1.6版本。

2. 安裝交叉編譯器arm-linux-gcc-3.3.2。解壓到/usr/local/arm目錄下;出現3.3.2文件夾;修改環境變量/etc/profile;在最後添加export PATH=/usr/local/arm/3.3.2/bin:$PATH;執行source /etc/profile;使用arm-linux-gcc –v命令查看版本信息。

3. 解壓u-boot:tar –jxvf u-boot-1.1.6.tar.bz2

4. 修改頂層Makefile,為目標板建立編譯項。

smdk2410_config:unconfig

@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULL s3c24x0

修改為:

zfxjx2410_config:unconfig

@$(MKCONFIG)$(@:_config=) arm arm920t jx2410 NULL s3c24x0

其中:

arm,就表示現在用的是CPU的架構是arm體系結構。

arm920t,指明這是cpu的內核類型,它對應於cpu/arm920t目錄。

Smdk2400,這是開發板的型號,它的目錄在board/smdk2400目錄下。

NULL,表示開發者或者經銷商是誰(vender)。

S3c24x0,表示開發板上的cpu是啥。

5. 修改/board/smdk2410文件夾名稱:

mv /board/smdk2410 /board/jx2410

修改/board/smdk2410/smdk2410.c文件名稱:

mv /board/smdk2410/smdk2410.c /board/jx2410/jx2410.c

6. 修改/include/configs/smdk2410.h文件名稱

mv /include/configs/smdk2410.h /include/configs/zfxjx2410.h

7. 根據實際需要修改start.s。本次移植不需要修改。

根據需要修改/board/jx2410/jx2410.c。可配置時鐘MPLL、UPLL、I/O初始化。本次移植不修改。

若是2440,修改cpu/arm920t/s3c24x0/speed.c。因為2410與2440在計算MPLL公式不同。

8. 到前為止,可以編譯u-boot下載到目標板中看看效果。

從串口中可以看到u-boot啟動信息:

U-Boot 1.1.6(Sep 19 2011 -12:24:07)

DRAM: 64MB

Flash:512kB

……

但是從以上信息中可以看到Flash的信息和目標板真實信息不符。原因是在/include/configs/zfxjx2410.h中未根據硬件修改。不過目前能看到串口信息,我們之後的調試就變得簡單多了。如未能看到串口信息,可能波特率設置不對或串口驅動部分有問題。

9. 配置文件中一些顯示信息的修改。/include/configs/zfxjx2410.h

#define CONFIG_BOOTDELAY 1 //啟動延時

#define CFG_PROMPT "ZFX_JX2410 # " //命令行前的顯示信息

10. SDRAM的驅動。本次移植未修改。

11. 增加網口的驅動。

由於u-boot源碼是針對CS8900芯片的,而實驗箱用的是RTL8019。而我們在/driver目錄下找到了RTL8019的驅動程序,因此,只需在/include/configs/zfxjx2410.h中修改。 將

#define CONFIG_DRIVER_CS8900 1

#define CS8900_Base 0x19000300

#define CS8900_Bus16 1

修改為:

#define CONFIG_DRIVER_RTL8019 1

#define RTL8019_Base 0x18000300 //基地址,和硬件有關

#define RTL8019_Bus16 1

修改為:

#CFG_ETHADDR 01:36:75:18:14:37

#CFG_NETMASK 255.255.255.0

#CFG_IPADDR 172.30.0.116

#CFG_SERVERIP 172.30.0.117

編譯成功,下載,但是在tftp下載時,發生packet too big!錯誤,然後重啟。

在網上搜索,發現因為/drivers/rtl8019中,缺少volatile。加上,下載運行成功。

Static unsigned char get_reg(unsigned int regno)

{

return (*(volatile unsigned cahr *)regno);

}

Copyright © Linux教程網 All Rights Reserved