UBoot移植.docx

上传人:b****3 文档编号:2125202 上传时间:2022-10-27 格式:DOCX 页数:17 大小:23.42KB
下载 相关 举报
UBoot移植.docx_第1页
第1页 / 共17页
UBoot移植.docx_第2页
第2页 / 共17页
UBoot移植.docx_第3页
第3页 / 共17页
UBoot移植.docx_第4页
第4页 / 共17页
UBoot移植.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

UBoot移植.docx

《UBoot移植.docx》由会员分享,可在线阅读,更多相关《UBoot移植.docx(17页珍藏版)》请在冰豆网上搜索。

UBoot移植.docx

UBoot移植

U-Boot移植(博创up2410)  

2012-03-2122:

17:

50|  分类:

嵌入式系统移植|  标签:

|字号大中小 订阅

一、获得U-Boot源码

将u-boot-1.3.2.tar.bz2拷贝了工作目录下,解压源码包:

[root@vm-devcpshare]#mkdiru-boot

[root@vm-devu-boot]#cp/mnt/shared/u-boot-1.3.2.tar.bz2./

[root@vm-devu-boot]#tarjxvfu-boot-1.3.2.tar.bz2

[root@vm-devu-boot]#cdu-boot.1.3.2

二、建立板级支持包

在board目录下,每一块开发板都有一个对应的目录,因此我们需要为我们的开发板建立一个目录,名字叫做up2410,并创建相应的文件:

[root@vm-devu-boot-1.3.2]#cdboard/

[root@vm-devboard]#mkdirup2410

[root@vm-devboard]#cpsmdk2410/*up2410

[root@vm-devboard]#cd../

上面的步骤中,我们把smdk2410目录下的所有文件都拷贝到了我们的up2410目录下,因为我们的开发板和smdk2410开发板的配置差不多。

每个开发板都有一个自己的配置文件,如smdk2410开发板的配置文件为include/configs/smdk2410.h,我们也需要为我们的开发板建立自己的配置文件。

可以直接从smdk2410开发板的配置文件中修改而来。

因此我们先把smdk2410的配置文件复制到我们开发板的配置文件当中:

[root@vm-devu-boot-1.3.2]#cpinclude/configs/smdk2410.hinclude/configs/up2410.h

然后,修改Makefile,使得可以配置我们的开发板:

[root@vm-devu-boot-1.3.2]#viMakefile

在Makefile中找到下面两行:

smdk2400_config:

unconfig

@$(MKCONFIG)$(@:

_config=)armarm920tsmdk2400NULLs3c24x0

紧接这这两行添加如下两行:

up2410_config:

unconfig

@$(MKCONFIG)$(@:

_config=)armarm920tup2410NULLs3c24x0

注意第二行开始部分的空白是按TAB键获得的!

红色的部分显示了不同处!

这样,我们自己的板级支持包就建好了。

三、添加代码,支持从NandFlash启动

由于我们的开发板上没有NorFlash,只能从NandFlash启动。

而U-Boot默认不支持从NandFlash启动,所以需要我们自己添加代码来实现从NandFlash启动。

1、修改start.S文件

位于cpu/arm920t/目录下的start.S文件是开发板上电后运行的第一段代码,需要在这个文件中添加内容,以支持从NandFlash启动。

 

[root@vm-devu-boot-1.3.2]#vicpu/arm920t/start.S

首先,删掉start.S中的第181行和201行的下面内容:

#ifdefCONFIG_AT91RM9200

...............................................................

#endif

如果有这两句,这两句之间的内容将不会被编译。

而我们的开发板需要执行这些内容。

然后,找到这一行:

#ifndefCONFIG_SKIP_RELOCATE_UBOOT

在紧接这这行的下面添加下面几行:

#ifdefCONFIG_S3C2410_NAND_BOOT

blcopy_myself

#else

再找到

blecopy_loop

在它的下面添加一行:

#endif

做这些工作就是要完成一个简单的功能:

如果我们定义了CONFIG_S3C2410_NAND_BOOT这个宏,那么就执行copy_myself这个子程序,否则就执行#else下面的程序。

copy_myself这个子程序的功能就是把U-Boot自身的代码从NandFlash拷贝到SDRAM中,需要我们自己实现,U-Boot自身并没有为我们实现。

我们把copy_myself也添加在start.S文件中。

找到下面的一行:

_start_armboot:

.wordstart_armboot

在这一行的下面添加如下的内容:

/*

*************************************************************************

*

*copyu-boottoram

*

*************************************************************************

*/

#ifdefCONFIG_S3C2410_NAND_BOOT

copy_myself:

movr10,lr@savereturnaddresstor10

ldrsp,DW_STACK_START@安装栈的起始地址

movfp,#0@初始化帧指针寄存器

blNF_Init@跳到复位C函数去执行

@readUBOOTfromNandFlashtoRAM

ldrr0,=UBOOT_RAM_BASE@设置第1个参数:

UBOOT在RAM中的起始地址

movr1,#0x0@设置第2个参数:

NandFlash的起始地址

movr2,#0x30000@设置第3个参数:

UBOOT的长度(192KB)

blnand_read_whole@调用nand_read_whole(),该函数在board/up2410/nand.c中

tstr0,#0x0@如果函数的返回值为0,表示执行成功.

beqok_nand_read@执行内存比较

1:

b1b

ok_nand_read:

movr0,#0x00000000@内部RAM的起始地址

ldrr1,=UBOOT_RAM_BASE@UBOOT在RAM中的起始地址

movr2,#0x400@比较1024次,每次4字节,4bytes*1024=4Kbytes

go_next:

ldrr3,[r0],#4

ldrr4,[r1],#4

teqr3,r4

bnenotmatch

subsr2,r2,#4

beqdone_nand_read

bnego_next

notmatch:

1:

b1b

done_nand_read:

movpc,r10

#endif

DW_STACK_START:

.wordSTACK_BASE+STACK_SIZE-4

上面是copy_myself的实现代码,添加完成以后,U-Boot启动时就会执行我们的这段代码,将U-Boot的内容从Flash中拷贝到SDRAM中。

这样,start.S这个文件就修改完成了,保存刚才的修改。

2、添加nand.c文件

在copy_mysel这段程序中,我们调用了nand_read_whole子程序。

这个程序是用C程序实现的,我们新建一个文件,board/up2410/nand.c,在这个文件中实现它:

#include

#include

#include

 

#defineTACLS0

#defineTWRPH03

#defineTWRPH10

#defineU32unsignedint

externunsignedlongnand_probe(unsignedlongphysadr);

 

staticvoidNF_Reset(void)

{

inti;

NF_nFCE_L();/*使能NandFlash*/

NF_CMD(0xFF);

for(i=0;i<10;i++);

NF_WAITRB();

NF_nFCE_H();

}

voidNF_Init(void)

{

rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);

NF_Reset();

}

 

intnand_read_whole(unsignedchar*buf,unsignedlongstart_addr,intsize)

{

inti,j;

if((start_addr&NAND_BLOCK_MASK)||(size&NAND_BLOCK_MASK))

return1;

NF_nFCE_L();

for(i=0;i<10;i++);

i=start_addr;

while(i

rNFCMD=0;/*建立每次读写的地址,NANDFLASH按照扇区来进行读写*/

rNFADDR=i&0xff;

rNFADDR=(i>>9)&0xff;

rNFADDR=(i>>17)&0xff;

rNFADDR=(i>>25)&0xff;

NF_WAITRB();

for(j=0;j

*buf=(rNFDATA&0xff);

buf++;

}

}

NF_nFCE_H();/*关闭NANDFLASH使能*/

return0;

}

上面就是nand.c文件的全部内容。

为了使编译的时候能把这个文件编译进去,需要修改相应的Makefile:

[root@vm-devu-boot-1.3.2]#viboard/up2410/Makefile

找到这一行:

COBJS:

=smdk2410.oflash.o

把这行的内容改为下面这行:

COBJS:

=smdk2410.oflash.onand.o

即在行尾加上了nand.o,这样,编译的时候就会把nand.c编译进去,并进行链接。

3、修改up2410.h

前面提到,up2410.h是开发板的配置文件。

关于nand.c中用到的一些宏或者其他需要定义的,我们都放在up2410.h中。

注意,这里只介绍和从Nand启动相关的配置,因为up2410.h中还有很多其他配置,将在后面介绍!

[root@vm-devu-boot-1.3.2]#viinclude/configs/up2410.h

光标移动到文件的末尾,在文件的最后一个#endif的前面添加如下内容:

#defineCONFIG_S3C2410_NAND_BOOT1

#defineSTACK_BASE0x33f00000

#defin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1