新闻中心

EEPW首页>嵌入式系统>设计应用> U-Boot在S3C2410上的移植分析

U-Boot在S3C2410上的移植分析

作者: 时间:2012-04-19 来源:网络 收藏

与测试

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

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

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

配置自己的开发板

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

1) 在include/ configs目录中以smdk2410.h为模板添加头文件. h(cp smdk2410.h.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 芯片手册。它包括如下几个函数:

unsigned long flash-init (void ),Flash初始化;
int flash-erase (flash-info-t *info,ints-first,ints -last),Flash擦除;
volatile static int write- hword (flash-info-t *info,ulongdest , ulong data) ,Flash 写入;
int write-buff (flash-info-t *info,uchar *src ,ulongaddr,ulong cnt),从内存复制数据。

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

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

mov r3,pc
ldr r4,= 0x3FFF0000
and r3,r3,r4 / /以上三句得到实际起动的内存地址
aad r0,r0,r3 / /用GO 命令调试uboot时,启动地址在RAM
add r2,r2,r3 / /把初始化内存信息的地址,加上实际起动地址

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

◆Makefile.修改:OBJS := S3C2410.o flash.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主要包括以下函数:

int eth-init (bd-t *bd),初始化网络设备;
int eth-send(volatile void *,int),发送数据包;
int eth-rx(void),接收数据包。
void eth-halt (void),关闭网络设备;

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

static int dm9000-probe (void),搜索DM9000芯片,分配空间并登记之;
static u16 phy-read(int),从Phyxcer寄存器读取一个字;
static void phy-write ( int,u16),写一个字到Phyxcer 寄存器;
static u16 read-srom-word (int),从SROM 读取一个字数据;
static u8 DM9000-ior (int),从I/ O 口读取一个字节;
static void DM9000-iow(int reg,u8 value),写一个字节到I/ O 口;
最后在drivers/Makefile中加入dm9000.o。

修改Makefile 文件
在U-Boot-1.1.2/Makefile中ARM92xT Systems注释下面加入以下两行:
S3C2410-config :unconfig
  @./ mkconfig $( @:-config = ) arm arm920tS3C2410



评论


相关推荐

技术专区

关闭