U-Boot在S3C2410上的移植分析00_第1页
U-Boot在S3C2410上的移植分析00_第2页
U-Boot在S3C2410上的移植分析00_第3页
U-Boot在S3C2410上的移植分析00_第4页
U-Boot在S3C2410上的移植分析00_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:介绍了一款优秀的嵌入式BootLoader—U-Boot,详细讲解了它的运行原理,着重讨论了其在S3C2410上的移植过程,并对移植结果进行了测试。

关键词:U-Boot;S3C2410;移植;BootLoader

引言

BootLoader是嵌入式系统软件开发的第一个环节,它紧密地将软硬件衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。BootLoader还涉及到许多硬件相关的知识,对于普通的嵌入式开发板,它又是不可跳过的步骤,所以做好它的移植工作是必须的,对于后续的开发工作也是有益的。U-Boot是当前比较流行、功能强大的BootLoader,它操作简便,可以支持多种体系结构的处理器,同时提供了完备的命令体系。S3C2410是三星公司一款基于ARM920T的嵌入式通用处理器。本文的移植平台就是以S3C2410为核心的HHARM9-EDU-R2开发板,这块开发板的硬件资源配置较为完善。主要硬件资源有:S3C2410处理器;1片IntelTE28f128FLASH(16M);2片HynixHY57V561620SDRAM(64M);10/100M自适应网络芯片DM9000;USBHost/Device;RS232×2/RS485×1串口;LQ035FLM08L256K色TFT真彩LCD显示屏;全功能JTAG调试口等。

U-Boot简介

U-Boot是DasU-Boot的简称,是由denx软件中心依照GPL发布的公共软件,作为系统启动的引导模块,U-Boot支持多种处理器架构,比如Power-PC、ARM、MIPS和x86等。目前,U-Boot源代码在sourceforge网站的社区服务器中,Internet上有一群自由开发人员对其进行维护和开发,它的项目主页是http:///projects/u-boot。当下载并解压U-Boot源码包后,会形成如下的目录结构:board,和一些已有开发板有关的文件;common,实现各种U-Boot命令的C文件;cpu,CPU相关文件,其中的子目录都是以U-Boot所支持的CPU命名的;disk,disk驱动的分区处理代码;doc,文档;drivers,通用设备驱动程序;fs,支持文件系统的文件;include,头文件,对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件;net:与网络有关的代码;lib-arm,与ARM体系结构相关的代码;tools,创建S-Record格式文件和U-BootImages的工具。

本文中U-Boot的移植就是根据HHARM9-EDU-R2开发板的硬件资源在以上的目录中修改或者添加相关源文件,并且重新编译的过程。移植工作开始之前,了解U-Boot的运行过程是十分必要的。

U-Boot运行过程分析

U-Boot编译后的代码定义一般不超过100kB,并且这100kB又分成两个阶段来执行。第一阶段的代码在start.s中定义,大小不超过10kB,它包括从系统上电后在0x00000000地址开始执行的部分。这部分代码运行在Flash中,它包括对S3C2410的一些寄存器的初始化和将U-Boot的第二阶段代码从Flash拷贝到SDRAM中。除去第一阶段的代码,剩下的部分都是第二阶段的代码。第二阶段的起始地址是在第一阶段代码中指定的,被复制到SDRAM后,就从第一阶段跳到这个入口地址开始执行剩余部分代码。第二阶段主要是进行一些BSS段设置,堆栈的初始化等工作,最后会跳转到main-loop函数中,接受命令并进行命令处理。图1给出了U-Boot的详细的运行过程包括对内核的设置、装载及调用过程。

图1U-Boot运行过程

了解了U-Boot的运行过程以后,我们还必须确定开发板的地址空间分布,才可以进行源码的修改和移植工作。地址空间的分布部分依赖于开发板的硬件配置及CPU的复位地址。本文中开发板的地址空间如图2所示。

图2开发板地址空间分布

U-Boot的移植与测试

为了使移植工作更加快捷,应当选择U-Boot当前发布的最新版本1.1.2(尽管通过CVS可以得到U-Boot1.1.3,但其正在开发,尚未发布,不宜使用)。因为最新的版本可以提供尽可能多的处理器核及开发板的支持。对于U-Boot-1.1.2而言,它不仅提供对ARM-920T内核的支持,而且直接提供了对于S3C2410的板级支持,这使移植工作量相对减少。

支持ARM-920T内核的代码修改

由于U-Boot-1.1.2提供对ARM-920T内核的直接支持,所以本步骤不需要做任何工作,本文为了让读者了解BootLoder移植的通用模式,在此只是稍加提示。

配置自己的开发板

建立自己开发板的目录和相关文件。

1)在include/configs目录中以smdk2410.h为模板添加头文件S3C2410.h(cpsmdk2410.hS3C2410.h)。这个文件是开发板的配置文件,它包括开发板的CPU、系统时钟、RAM、Flash系统及其它相关的配置信息。

2)在board/目录下创建S3C2410目录。拷贝smdk2410目录下所有文件到S3C2410目录下,共有如下六个文件:flash.c、memsetup.c、S3C2410.c、Makefile、U-Boot.lds和config.mk,根据开发板实际情况对各个文件进行修改。

◆flash.c.U-Boot读、写和删除Flash设备的源代码文件。由于不同开发板中Flash存储器的种类各不相同,所以,修改flash.c时需参考相应的Flash芯片手册。它包括如下几个函数:

unsignedlongflash-init(void),Flash初始化;

intflash-erase(flash-info-t*info,ints-first,ints-last),Flash擦除;

volatilestaticintwrite-hword(flash-info-t*info,ulongdest,ulongdata),Flash写入;

intwrite-buff(flash-info-t*info,uchar*src,ulongaddr,ulongcnt),从内存复制数据。

由于本文开发板所用flash芯片为IntelTE28f128,在board/cmi目录中有此flash.c,只需对其稍加修改即可使用。

◆memsetup.c.初始化时钟、SMC控制器和SDRAM控制器。为了以后能用U-Boot的GO命令执行修改过的用loadb或tftp下载的U-Boot.在标记符“0:”上加入五句:

movr3,pc

ldrr4,=0x3FFF0000

andr3,r3,r4//以上三句得到实际起动的内存地址

aadr0,r0,r3//用GO命令调试uboot时,启动地址在RAM

addr2,r2,r3//把初始化内存信息的地址,加上实际起动地址

◆S3C2410.C.设置各种总线时钟,打开数据Cache和指令Cache,并设置相关内存参数。

◆Makefile.修改:OBJS:=S3C2410.oflash.omemsetup.o

◆U-Boot.lds.作如下修改:

.text

{

cpu/arm920t/start.o(.text)

*(.text)

}

◆config.mk.用于设置程序连接的起始地址,因为会在U-Boot中增加功能,所以留下6M的空间,修改33F80000为33A00000。

实现网卡的驱动程序

在drivers/目录中以dm9000x.c和dm9000x.h为模板添加网口设备控制程序dm9000.c和dm9000.h,其中dm9000.c主要包括以下函数:

inteth-init(bd-t*bd),初始化网络设备;

inteth-send(volatilevoid*,int),发送数据包;

inteth-rx(void),接收数据包。

voideth-halt(void),关闭网络设备;

为了方便网络设备的数据读写操作,还定义了如下函数:

staticintdm9000-probe(void),搜索DM9000芯片,分配空间并登记之;

staticu16phy-read(int),从Phyxcer寄存器读取一个字;

staticvoidphy-write(int,u16),写一个字到Phyxcer寄存器;

staticu16read-srom-word(int),从SROM读取一个字数据;

staticu8DM9000-ior(int),从I/O口读取一个字节;

staticvoidDM9000-iow(intreg,u8value),写一个字节到I/O口;

最后在drivers/Makefile中加入dm9000.o。

修改Makefile文件

在U-Boot-1.1.2/Makefile中ARM92xTSystems注释下面加入以下两行:

S3C2410-config:unconfig

@./mkconfig$(@:-config=)armarm920tS3C2410

其中“arm”是CPU的种类,arm920t是ARMCPU对应的代码目录,S3C2410是自己开发板对应的目录。

交叉编译器安装在:/path/armv4l-unknown-linux-目录下,所以把CROSS-COMPILE设置成相应的路径:CROSS-COMPILE=/path/arm4l-unknown-linux-

生成目标文件并进行测试

依次运行以下命令:

#makeclean

#makeS3C2410-config

#make

之后会生成三个文件:

U-Boot——ELF格式的文件,可以被大多数Debug程序识别;

U-Boot.bin——二进制文件,纯粹的U-Boot

二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;U-Boot.srec——MotorolaS-Record格式,可以通过串行口下载到开发板中。

测试与应用

1)测试

利用编制好的Flash烧写程序,通过JTAG口将生成的二进制文件U-Boot。bin烧入Flash的零地址。烧录成功后,拔掉JTAG调试线并复位开发板,从Minicom终端输出如下信息:

U-Boot1.1.2(Jul202005-09:34:21)

U-Bootcode:33F00000->33F1952CBSS:->33F1D870

RAMConfiguration:

Bank#0:3000000064MB

FlashMemoryStart0x0000000

DeviceIDoftheFlashis18

Flash:16MB

Write18toWatchdoganditis18now

In:serial

Out:serial

Err:serial

SMDK2410#

串口输出的以上信息表明,CPU和串口已正常工作。通过U-Boot提供的命令flinfo和mtest可以测试Flash和RAM。经过测试,可以正确地读出Flash信息及读写RAM,表明Flash和DRAM已正确初始化。用tftp命令传输宿主机tftpboot目录下任一小文件到RAM成功,说明网卡芯片也成功驱动。

2)简单应用

U-Boot的主要作用是用来引导内核。因此,通过U-Boot引导一个特定的内核,可以进一步测试其移植的稳定性。而使用U-Boot引导内核有两种不同的方法。第一种方法是直接将内核映象文件和根文件系统烧写入Flash,使用此方法,U-Boot在启动时将Flash中的内核映象及根文件系统读入RAM指定位置并从同一位置启动内核。第二种方法是将内核映象文件和根文件系统下载至RAM中直接启动(而不是从Flash中读入RAM),此种方法不需要烧写Flash。笔者为了减少烧写Flash的次数,在本文中采用第二种方法,其步骤如下:

SMDK2410#tftp30008000zImage

SMDK2410#tftp30800000ramdisk.Image.gz

SMDK2410#go30008000

上述指令执行的过程中,未出现异常,内核成功启动,并最终进入Shell提示符“#”。在Shell提示符下输入内核编译时定制的各个命令,均可以正常运行。另外编写简单C程序,并用交叉编译器编译之,最终生成的可执行文件能够在开发板上正常运行。上述事实说明内核经过U-Boot引导已稳定运行在开发板上。此次应用,进一步验证了U-Boot移植的稳定性。至此,移植工作告一段落。

结语

目前,笔者移植的U-Boot已经能稳定地运行在开发板上,这使得Linux内核的调试脱离了BDM调试器,节约了大量的开发时间,大大提高了效率,是对后续嵌入式开发的有力支持。当然,U-Boot只是一款好用的BootLoader,嵌入式Linux的开发存在很多技术细节,只有根据实际情况不断修改、调试、总结,才能获得更大的成功。4移植前的准备(1)、首先读读uboot自带的readme文件,了解了一个大概。(2)、看看common.h,这个文件定义了一些基本的东西,并包含了一些必要的头文件。再看看flash.h,这个文件里面定义了flash_info_t为一个struct。包含了flash的一些属性定义。并且定义了所有的flash的属性,其中,AMD的有:AMD_ID_LV320B,定义为“#defineAMD_ID_LV320B0x22F922F9”。(3)、对于“./borad/at91rm9200dk/flash.c”的修改,有以下的方面:

“voidflash_identification(flash_info_t*info)”这个函数的目的是确认flash的型号。注意的是,这个函数里面有一些宏定义,直接读写了flash。并获得ID号。(4)、修改:”./board/at91rm9200dk/config.mk”为

TEXT_BASE=0x21f80000为TEXT_BASE=0x21f00000(当然,你应该根据自己的板子来修改,和一级boot的定义的一致即可)。(5)、再修改”./include/configs/at91rm9200dk.h”为

修改flash和SDRAM的大小。(6)、另外一个要修改的文件是:

./borad/at91rm9200dk/flash.c。这个文件修改的部分比较的多。

a.首先是OrgDef的定义,加上目前的flash。

b.接下来,修改”#defineFLASH_BANK_SIZE0x200000”为自己flash的容量

c.在修改函数flash_identification(flash_info_t*info)里面的打印信息,这部分将在u-boot启动的时候显示。

d.然后修改函数flash_init(void)里面对一些变量的赋值。

e.最后修改的是函数flash_print_info(flash_info_t*info)里面实际打印的函数信息。

f.还有一个函数需要修改,就是:“flash_erase”,这个函数要检测先前知道的flash类型是否匹配,否则,直接就返回了。把这里给注释掉。

(7)、接下来看看SDRAM的修改。

这个里面对于“SIZE”的定义都是基于字节计算的。

只要修改”./include/configs/at91rm9200dk.h”里面的

“#definePHYS_SDRAM_SIZE0X200000”就可以了。注意,SIZE是以字节为单位的。(8)、还有一个地方要注意

就是按照目前的设定,一级boot把u_boot加载到了SDRAM的空间为:21F00000->21F16B10,这恰好是SDRAM的高端部分。另外,BSS为21F1AE34。

(9)、编译后,可以写入flash了。

a.压缩这个u-boot.bin

“gzip–cu-boot.bin>u-boot.gz”

压缩后的文件大小为:

43Kbytes

b.接着把boot.bin和u-boot.gz烧到flash里面去。

Boot.bin大约11kBytes,在flash的0x10000000~0x10003fff

在at91rm9200上移植u-boot

u-boot移植心得

几经艰辛,终于基本完成了u-boot在s3c44b0的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一些心得),作为日后参考之用,也希望能够帮到其它有需要的人^_^。

1.来由:

在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属个人意见),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的饼,这是后话。

2.准备:

说是容易,做起来却挺难。因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^:

1)在网上下载一个u-boot源代码,我用的是1.1.2版本的,最新的应该是1.1.4的吧,其实差不多,那就像我那样下载一个1.1.2版本的吧。把源文件解压,这个应该不用说了吧,学过linux的人应该会,不会的话我想你继续做下去也困难,那就先装个linux用下吧(我用的是RedHat的,哦对了,编译程序是需要gcc编译器的,所以安装方式一定要选择工作站哦^_^)。好了,解压后你发现在u-boot.1.1.2目录下有Makefile这个文件吧?让我们看看它里面的内容,最简单的方法就是viMakefile了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项:

ifeq($(ARCH),arm)

CROSS_COMPILE=arm-linux-

看到吧,也就是说这里所用的交叉编译器是arm-linux-gcc了,(u-boot默认是用这个的,也有用arm-elf-gcc的,网上有个工具包arm-elf-tools-20030314.sh,我试过用它来编译,没有问题,顺便提一下,arm-elf-gcc是用来编译uClinux内核的工具来的)那你就下载一个arm-linux-的交叉编译器吧,我是在网上下载cross-2.95.3.tar.bz2这个文件,然后解压得到2.95.3版本的交叉编译工具的,具体设置如下(参考网上资料):2)在宿主机上建立arm-linux-gcc交叉编译环境

在RedHatLinux系统下以root用户登录,

将cross-2.95.3.tar.bz2文件复制到/目录下,

安装:

#tarjxvfcross-2.95.3.tar.bz2

这个命令会在你的/usr/local/arm/2.95.3目录下安装arm-linux-gcc交叉编译程序,

然后在PATH变量中添加一项:/usr/local/arm/2.95.3/bin.

[root@localhostroot]#exportATH=/usr/local/arm/2.95.3/bin:$PATH

把PATH=/usr/local/arm/2.95.3/bin:$PATH添加到/ETC/bash_profile文件中

或者

在/etc/bashrc文件中添加一项:

exportPATH=/usr/local/arm/2.95.3/bin:$PATH

测试:

把终端关闭,重新打开后执行如下命令:

#arm-linux-gcc–v

好了,建立好交叉编译环境后可以试着编译u-boot了这里提几个注意点:

1.不可用winRAR解压u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz这种文件(就个可能新手会犯,一般熟悉linux命令的人应该都不会这样做吧,在此还是要提一下)

2.可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在u-boot.1.1.2目录下运行命令:makedistclean(其实这个命令在Makefile文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这样^_^);

3,有些人为了方便想在cygwin下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也多,而且好像我用过那个vi没有linux环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开windows的话可以像我这样装个虚拟机,在虚拟机下再装linux的系统,具体参考这个网站):/doc/vmware/

3)好了,现在开始测试你的交叉编译器搞好没有。在u-boot.1.1.2目录下执行如下命令:

1)Makedistclean(再次强调)

2)MakeB2_config(随便再个现成的试试^_^)

3)Make(没错的话应该会生成u-boot.bin文件,发生错误的话也不怕,只要细心看一下哪里错就行了,gcc碰到错误后会退出编译,所以可以一个个错误来改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是arm-linux-而你装的是arm-elf-,如果你装了的话看看你的环境变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如start.S但是如果你的是start.s小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的))

如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的u-boot源代码了,可以开始以下阶段。

3.移植:

说时迟那时快,现在开始移植工作(以下是我一步步重新做一遍,力求说得详细点,感谢我吧^_^)

我以B2板子的程序做为模板来做.

#cdu-boot-1.1.2

#cdboard

#cp-Rdavemyboard(这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦^_^)

#cdmyboard

#mvB2myboards3c44b0(自己取个板子名)

#cdmyboards3c44b0

#mvB2.cmyboards3c44b0.c

修改myboards3c44b0里面的Makefile,把B2改成myboards3c44b0,编译时如果报的其它类似找不到B2的错误也是把相应的B2改成myboards3c44b0来处理。1)其中的myboards3c44b0.c文件是板的初始化代码,看一下就知道,根据你的板上自带的44binit.s来修改吧。memsetup.S文件主要是存储器的初始化设置,其实也是44binit.s里面的一部分。

2)其实board这里要修改的不多,先跳过flash部分吧,我们来看一下cpu设置部分吧。

u-boot-1.1.2里面已经加入了对s3c44b0的支持,让我们来看一下cpu/s3c44b0里面的部分吧。

看到start.S这个文件了吗?要修改的其实并不多,按照你的板设置一下中断跳转矢量就行了,或者上网查一下吧,应该很容易看明的。其中cpu.c这个文件简直不用修改,再来看一下serial.c这个文件吧,改一下波特率的设置就行,就是你用多少M的CPU频率的话对应的波特率参数设置问题,其实B2已经做得不错的了,很多子程序都不用自己写的了^_^,在我的板上是这样设置的,参考一下吧:

#ifCONFIG_S3C44B0_CLOCK_SPEED==66,把所有的这些66改成60,原因,我的实验板上用的频率是60(44B0最高频率为64M)。然后其它分频系数,寄存器初始化设置,可以参考一下44blib.c,在这里我给出我的设置出来吧,可以参考一下。case115200:

#ifCONFIG_S3C44B0_CLOCK_SPEED==60

divisor=32;UFCON0=0x0;

ULCON0=0x03;

UCON0=0x245;

UBRDIV0=divisor;我在这方面算术不好,所以都是参考人家的。3)好,再加上个头文件:

cdu-boot-1.1.2/include/configs

cpB2.hmyboards3c44b0.h

这个头文件其实要改的地方还挺多的,我等下再说怎样修改。先回到u-boot.1.1.2目录,4)在Makefile里面加上这部分,不会的话就模仿B2来写吧^_^

在B2的这部分文件

B2_config:unconfig

@./mkconfig$(@:_config=)arms3c44b0B2dave

后面加上这部分:

myboards3c44b0_config:unconfig

@./mkconfig$(@:_config=)arms3c44b0myboard3c44b0myboard切记在@./mkconfig$(@:_config=)arms3c44b0myboard3c44b0myboard前面的是Tab来的,万万不能用空格代替,因为它是靠这个来识别命令的!

5)好,现在可以在u-boot-1.1.2目录下执行如下命令:

Makedistclean(还是用这个吧,比较彻底)

Makemyboards3c44b0_config

Make

看看有没有错,有错的话按着提示来改,如果没错的话应该就能生成u-boot.bin这个文件,现在还不能用哦,因为这几是B2的一个仿制品而已(注:在我的机上到这一步可没有报错哦,你一步步按着来做的话应该也不会有什么错误吧^_^)。

6)好,现在继续修改u-boot-1.1.2/include/configs/myboards3c44b0.h这个文件。

#defineCONFIG_INIT_CRITICAL1这个在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中调试而是固化到flash中运行的话,这个必不可少。

找到#defineCONFIG_B21把B2改成myboards3c44b0吧(不然就不会编译你的板了)

找到#defineCONFIG_S3C44B0_CLOCK_SPEED75你的44b0x应该没有75M吧我的是改成60的

找到Sizeofmalloc()pool这部分设置,改成这样吧,反正我是照着人家来做的,你自己研究下吧^_^。#defineCFG_MONITOR_LEN(256*1024)/*Reserve256kBforMonitor*/

#defineCFG_ENV_SIZE(64*1024)/*1024bytesmaybeusedforenvvars*/

#defineCFG_MALLOC_LEN(CFG_ENV_SIZE+128*1024)

#defineCFG_GBL_DATA_SIZE128/*sizeinbytesreservedforinitialdata*/

#defineCFG_ENV_IS_IN_FLASH1这个必不可少,如果你想把你的参数保存到flash的话(有些板是保存到EEPRAM中去的,但是s3c44b0的话还是保存到flash吧)

#defineCFG_ENV_ADDR(PHYS_FLASH_1+0x40000)这个就是你的参数保存在flash里的起始地址了

#defineCFG_ENV_OFFSET0x40000这个我后来看它源程序发现如果你上一步没有设置它的起始地址的话就会用它来作默认地址的了

#defineCONFIG_AUTO_COMPLETE其它地方没有深究哦,有些好像不要也行,你就试试吧。找到Hardwaredrivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):

#defineCONFIG_DRIVER_RTL8019这个就要看你的板上用的是什么网卡了(这个是台湾出的,有10M)

#defineRTL8019_BASE0x06000000这个是网卡相就寄存器的起始地址

以下部分我试过不要也行,你试下吧

#defineRTL8019_BUS320

#defineCONFIG_SMC_USE_16_BIT

#undefCONFIG_SHOW_ACTIVITY

#defineCONFIG_NET_RETRY_COUNT10应该是重试的次数吧#defineCONFIG_BAUDRATE115200设置波特率#defineCONFIG_COMMANDS(CONFIG_CMD_DFL|\

CFG_CMD_DATE|\

CFG_CMD_ELF|\

CFG_CMD_NET|\

CFG_CMD_EEPROM|\

CFG_CMD_I2C|\

CFG_CMD_FAT|\

CFG_CMD_JFFS2)

把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令setenvsaveenv来修改的。

#defineCONFIG_BOOTDELAY3这个就是运行bootcmd之前的等待时间

#defineCONFIG_BOOTARGS"devfs=mountroot=ramfsconsole=ttyS0,115200"引导uClinux的时候传递的参数,不会就先不用管它也行。

#defineCONFIG_ETHADDR00:50:c2:1e:af:fb网卡的物理地址MAC

#defineCONFIG_NETMASK掩码地址,设置过ip的人都应该知道吧

#defineCONFIG_IPADDR0这是你板上网卡8019的ip地址

#defineCONFIG_SERVERIP0这是你宿主机的ip地址,以后用tftp下载的时候用到,一定要跟你的宿主机一致才行。

#defineCONFIG_BOOTFILE"u-boot.bin"这个就是你要下载文件的默认名字

#defineCONFIG_BOOTCOMMAND"bootm0x50000"这是bootdelay后运行的命令Miscellaneousconfigurableoptions部分,参考一下吧:

#defineCFG_LONGHELP/*undeftosavememory*/

#defineCFG_PROMPT"s3c44b0=>"这是进入命令模式下的提示符,改个帅一点的吧

#defineCFG_CBSIZE256/*ConsoleI/OBufferSize*/

#defineCFG_PBSIZE(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)/*PrintBufferSize*/

#defineCFG_MAXARGS100/*maxnumberofcommandargs*/

#defineCFG_BARGSIZECFG_CBSIZE/*BootArgumentBufferSize*/#defineCFG_MEMTEST_START0x0C400000/*memtestworkson*/

#defineCFG_MEMTEST_END0x0C800000/*4...8MBinDRAM*/

#undefCFG_CLKS_IN_HZ/*everything,inclboardinfo,inHz*/

#defineCFG_LOAD_ADDR0x0c008000默认的下载地址

#defineCFG_HZ1000/*1kHz*/

#defineCFG_BAUDRATE_TABLE{9600,19200,38400,57600,115200}可供选择的波特率

PhysicalMemoryMap部分,比较重要,修改你的sdram和flash的地址和容量。

#defineCONFIG_NR_DRAM_BANKS1我们只占用了一个Bank用来映射sdram

#definePHYS_SDRAM_10x0c000000sdram的起始地址

#defineP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论