Windows下u-boot-2011.03在Mini2440移植詳解(1)

WinXPARM開發環境搭建

XP版本: 2002 Service Pack 3

所用到的工具:

Eclipse 作爲編譯/調試IDE;

Mingw作爲Linux編譯環境;

ARM-EABI作爲交叉編譯環境;

Jlink作爲調試器;

主要參考文章:

《Build andDebug U-Boot in Eclipse Helios On Window XP.pdf》

《在windows環境下用Sourcery CodeBench編譯基於am3359的u-boot.doc》

修改Mingw內package版本可參考網址http://sourceforge.net/projects/mingw/files/Installer/mingw-get/(沒有去實驗)

注:在環境搭建方面如果那裏有說的不清楚的,可以參考看看上面的兩篇文章是怎麼做的。

用到的軟件:

MinGW:mingw-get-setup.exe

ARM-EABI:arm-2011.03-42-arm-none-eabi-i686-mingw32.tar.bz2

JRE:jre-7u51-windows-i586.4008071178.exe

Eclipse:eclipse-cpp-kepler-SR1-win32.zip zylincdt4.18.1

Mini2440開發板資源

ARM:S3C2440A

Nor Flash:SST39VF1601 ---2MB

網絡芯片:DM9000EP

SDRAM: HY57V561620FTP-H 133MHZ 2 * 32MB SDRAM

NandFlash: K9F1208U0B:64MB

Uboot版本:2011.03

在uboot官網下http://ftp.denx.de/pub/u-boot/需要的版本。u-boot-2011.03.tar.bz2。

 

環境搭建步驟,本文提供了兩種方法,方法A從網上下載安裝,方法B是已經下載好的工具,只要直接使用就可以了,但也是一個複雜的步驟。如果哪裏有說的不到位的可以相互參考方法A和B,同樣上面的文章參考也是必不可少的。

方法A:

首先在Mingw命令行窗口編譯通過。

1.      安裝Mingw。

從官網http://sourceforge.net/projects/mingw/files/上下載mingw-get-setup.exe


mingw-get-setup.exe是一個安裝管理軟件。安裝路徑可以自己選擇,安裝後的管理軟件名稱爲” MinGW Installation Manager”,將Basic Setup裏面的所有Packages都選上(目前是僅僅安裝了BasicSetup,還沒有發現什麼問題),然後Apply Changes。MinGWInstallation Manager其實對應的路徑爲:MinGW\libexec\mingw-get\ guimain.exe

根據Build andDebug U-Boot in Eclipse Helios On Window XP.pdf的第5和第6頁造一個msys.bat。然後雙擊打開,進入Mingw命令行窗口。輸入gcc –v,如下圖。若不能查看gcc版本,可以參考方法B中的《安裝環境》一節。

 

2.      ARM-EABI

https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite下載ARM交叉編譯工具。


選擇.exe或者.bz2中的一個即可


目前用的版本是:2013.11-24-V4.8.1

 

3.      uboot

在uboot官網下http://ftp.denx.de/pub/u-boot/需要的版本。u-boot-2011.03.tar.bz2,然後通過Mingw命令窗口解壓bz2文件。

4.      在Mingw命令窗口上編譯

編譯前,並沒有用到參考文章上說的junction和另一邊文章說提到的strip,也編譯通過了。

參考方法B中的《設置MinGW環境》和《編譯mini2440》一節。

曾出現過錯誤如下。網址中修改了3處,這裏只找到兩處。

問題

T:\msys\1.0\etc\arm-2011.03\bin\arm-none-eabi-ld.exe: warning: t:/msys/1.0/etc/a              rm-2011.03/bin/../lib/gcc/arm-none-eabi/4.5.2\libgcc.a(_bswapsi2.o) uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail

arch/arm/cpu/arm1176/start.o: In function `_end_ofs':

T:\msys\1.0\home\lyc\u-boot-2011.03\arch\arm\cpu\arm1176/start.S:61: undefined reference to `_end'

解決方法             

http://blog.sina.com.cn/s/blog_539238aa0100pujz.html


上面的arm版本還是之前的4.5.2,後面都已經改成4.8.1了,不過這裏只是說明一個錯誤。

如果上面的Mingw命令行窗口編譯通過之後,那麼就可以在Eclipse環境下來進行編譯了。在安裝Eclipse之前必須先要安裝jre.。

5.      安裝jre。

在百度上輸入Java Runtime Environment,第一個就是,下載安裝。


6.      安裝Eclipse。

Eclipse官網http://www.eclipse.org/downloads/下載。


這裏下的是32位的,直接解壓即可,不需要安裝。

7.      安裝zylincdt。

下載zylincdt,也可以在線安裝。這裏是直接下載後安裝的。

一開始是在http://repo.or.cz/w/zylincdt.git下載的4.16.1,通過Eclipse->help->Install Newsoftware安裝時總是出錯。


後修改了Eclipse->window->Preferences->Install/Update中Automatically複選框勾上(應該跟這沒多大關係),


而且通過在http://opensource.zylin.com/zylincdt/下載zylincdt4.18.1。第一次安裝也出錯了,又安裝了一次,安裝沒有提示錯誤。

注:在http://repo.or.cz/w/zylincdt.git上下載4.18.1應該可以安裝成功。

8.      編譯設置

建立uboot工程,修改環境變量。之後編譯,就可以了。關於Junction和strip的內容並沒有修改,但是也編譯通過了,不知道有沒有問題。只能等到下一步調試驗證了。

關於怎麼打開uboot工程在Eclipse,參考,《window環境下用Sourcery CodeBench編譯基於am3359的u-boot.doc》,而且裏面還製作了make distclean 和config的快捷方式。如下圖所示:


關於下面這一步,一定要保證PATH內的Value值只有剛新加入的三個路徑。不然會報錯。

Name:

Value:

CROSS_COMPILE

arm-none-eabi-

PATH

T:\bin;T:\msys\1.0\bin;D:\Program\ARM_CROSS\arm-2013.11-24-V4-8-1\bin

其中T:\bin;T:\msys\1.0\bin;D:\Program\ARM_CROSS\arm-2013.11-24-V4-8-1\bin是MinGW的路徑和ARM EABI的路徑,要依據本地PC的安裝路徑。


Build command:

Make CROSS_COMPILE=${CROSS_COMPILE}




注意:

在使用arm-linux-gdb調試,arm-linux-gcc編譯的uboot時,發現程序執行順序混亂,不是順序執行,有些變量也print不出來,導致這個問題的原因是uboot編譯時默認使用了 -Os來優化編譯,所以需要將此優化給關閉。

清除優化選項:

在頂層目錄的 config.mk中,將OPTFLAGS= -Os#-fomit-frame-pointer修改成OPTFLAGS= -O0#-fomit-frame-pointer,重新 make clean -> make xxxx_config->make all 下OK了。等到不調試生成bin文件時,可以再改回來。

 

9.      調試設置

在RunàDebug Configuration改成如下圖所示



上面用到的初始化代碼如下:

# connect to the J-Link gdb server

target remote localhost:2331

# Set JTAG speed to 30 kHz

monitor endian little

monitor speed 30

# Reset the target

monitor reset

monitor sleep 10

#

# CPU core initialization (to be done byuser)

#

# Set the processor mode

monitor reg cpsr = 0xd3

#config MMU 配置MMU

#flush v3/v4 cache

monitor cp15 7, 7, 0, 0 = 0x0

#/* flush v4 TLB 協處理器*/

monitor cp15 8, 7, 0, 0 = 0x0

#disable MMU stuff and caches

monitor cp15 1, 0, 0, 0 =0x1002

#Peri port setup

monitor cp15 15, 2, 0, 4 = 0x70000013

#disable watchdog kangear 關閉看門狗

monitor MemU32 0x53000000 = 0x00000000

monitor sleep 10

#disable interrupt kangear 關閉中斷

monitor MemU32 0x4A000008 = 0xffffffff

monitor MemU32 0x4A00001C = 0x7fff

#set clock

#initialize system clocks --- locktimeregister

monitor MemU32 0x4C000000 = 0xFF000000

#initialize system clocks --- clock-divnregister

monitor MemU32 0x4C000014 = 0x5#CLKDVIN_400_148

#initialize system clocks --- mpll register

monitor MemU32 0x4C000004 = 0x7f021#default clock

#config sdram

monitor MemU32 0x53000000 0x00000000

monitor MemU32 0x4A000008 0xFFFFFFFF

monitor MemU32 0x4A00001C 0x000007FF

monitor MemU32 0x53000000 0x00000000

monitor MemU32 0x56000050 0x000055AA

monitor MemU32 0x4C000014 0x00000007

monitor MemU32 0x4C000000 0x00FFFFFF

monitor MemU32 0x4C000004 0x00061012

monitor MemU32 0x4C000008 0x00040042

monitor MemU32 0x48000000 0x22111120

monitor MemU32 0x48000004 0x00002F50

monitor MemU32 0x48000008 0x00000700

monitor MemU32 0x4800000C 0x00000700

monitor MemU32 0x48000010 0x00000700

monitor MemU32 0x48000014 0x00000700

monitor MemU32 0x48000018 0x0007FFFC

monitor MemU32 0x4800001C 0x00018005

monitor MemU32 0x48000020 0x00018005

monitor MemU32 0x48000024 0x008E0459

monitor MemU32 0x48000028 0x00000031

monitor MemU32 0x4800002C 0x00000030

monitor MemU32 0x48000030 0x00000030

# Setup GDB for faster downloads

#set remote memory-write-packet-size 1024

monitor speed auto

break _start

load


將Source裏面的內容清空。 一開始沒有清空就進行調試,結果進入調試時找到的start.S文件不對。

 

方法B:

參考的資料和方法B中用到的軟件可以360雲盤地址http://yunpan.360.cn/,在《ARM環境軟件》目錄下,請勿刪除。


1.      安裝環境

解壓MinGW,安裝arm-2013.11-24-arm-none-eabi.exe。

將F:\ARM-ENV\MinGW\bin;F:\ARM-ENV\MinGW\msys\1.0\bin加入到系統環境變量中,如下圖,F:\ARM-ENV\MinGW\bin;F:\ARM-ENV\MinGW\msys\1.0\bin這個要換成你自己的目錄。之後註銷一下機器。

 

雙擊MinGW目錄下的msys.bat,如若不能打開,根據下圖修改。


在命令行中輸入gcc –v,如下圖。


2.      設置MinGW環境

進入uboot源碼所在的目錄,輸入tar jxvf u-boot-2011.03.tar.bz2將uboot源碼解壓到當前目錄。進入解壓後的uboot源碼目錄。

然後在命令行中輸入:

PATH=/bin:$PATH

PATH=/F/ARM-ENV/Sourcery_CodeBench_Lite_for_ARM_EABI/bin:$PATH

然後輸入arm-none-eabi-gcc –v就能看到版本信息。其中/F/ARM-ENV/Sourcery_CodeBench_Lite_for_ARM_EABI/bin爲arm交叉工具的安裝路徑。

輸入:

exportPATH

CROSS_COMPILE=arm-none-eabi-

exportCROSS_COMPILE

然後輸入make distclean


測試smdk2410,輸入make smdk2410_config


也可以正確配置。之後就可以make了,但是make的時候會出現錯誤,不如直接make 2440了,因此要加上有關mini2440的配置。

3.      編譯mini2440

在uboot的根目錄下的boards.cfg文件里加入mini2440有關信息。

參考:http://www.linuxidc.com/Linux/2011-08/40553.htm

 

拷貝board\samsung下smdk2410文件夾成mini2440文件夾,並將mini2440文件夾下的smdk2410.c改成mini2440.c,並將此目錄下makefile裏的smdk2410.o改成mini2440.o。

拷貝include\configs下smdk2410.h成mini2440.h,並在mini2440.h中定義如下兩個宏:

#define CONFIG_SYS_SDRAM_BASEPHYS_SDRAM_1

#define CONFIG_SYS_INIT_SP_ADDR(CONFIG_SYS_SDRAM_BASE+0x1000-GENERATED_GBL_DATA_SIZE)

 

然後輸入make distclean,makemini2440_config,make

此時說明已經可以再MinGW的命令行了進行編譯了。

4.      安裝jre

5.      解壓Eclipse

6.      參考方法A中的《編譯設置》和《調試設置》

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