UBoot移植.docx
- 文档编号:2125202
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:17
- 大小:23.42KB
UBoot移植.docx
《UBoot移植.docx》由会员分享,可在线阅读,更多相关《UBoot移植.docx(17页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UBoot 移植