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中的《编译设置》和《调试设置》

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