ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:23.42KB ,
资源ID:2125202      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2125202.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(UBoot移植.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

UBoot移植.docx

1、UBoot移植U-Boot移植(博创up2410)2012-03-21 22:17:50|分类: 嵌入式系统移植 |标签: |字号大中小订阅 一、获得U-Boot源码 将u-boot-1.3.2.tar.bz2拷贝了工作目录下,解压源码包:rootvm-dev cpshare# mkdir u-bootrootvm-dev u-boot# cp /mnt/shared/u-boot-1.3.2.tar.bz2 ./rootvm-dev u-boot# tar jxvf u-boot-1.3.2.tar.bz2rootvm-dev u-boot# cd u-boot.1.3.2二、建立板级支持包

2、 在board目录下,每一块开发板都有一个对应的目录,因此我们需要为我们的开发板建立一个目录,名字叫做up2410,并创建相应的文件:rootvm-dev u-boot-1.3.2# cd board/rootvm-dev board# mkdir up2410rootvm-dev board# cp smdk2410/* up2410rootvm-dev board# cd ./上面的步骤中,我们把smdk2410目录下的所有文件都拷贝到了我们的up2410目录下,因为我们的开发板和smdk2410开发板的配置差不多。每个开发板都有一个自己的配置文件,如smdk2410开发板的配置文件为in

3、clude/configs/smdk2410.h,我们也需要为我们的开发板建立自己的配置文件。可以直接从smdk2410开发板的配置文件中修改而来。因此我们先把smdk2410的配置文件复制到我们开发板的配置文件当中:rootvm-dev u-boot-1.3.2# cp include/configs/smdk2410.h include/configs/up2410.h然后,修改Makefile,使得可以配置我们的开发板:rootvm-dev u-boot-1.3.2# vi Makefile在Makefile中找到下面两行:smdk2400_config : unconfig$(MKCO

4、NFIG) $(:_config=) arm arm920t smdk2400 NULL s3c24x0紧接这这两行添加如下两行:up2410_config : unconfig$(MKCONFIG) $(:_config=) arm arm920t up2410 NULL s3c24x0注意第二行开始部分的空白是按TAB键获得的!红色的部分显示了不同处!这样,我们自己的板级支持包就建好了。三、添加代码,支持从Nand Flash启动 由于我们的开发板上没有Nor Flash,只能从Nand Flash启动。而U-Boot默认不支持从Nand Flash启动,所以需要我们自己添加代码来实现从N

5、and Flash启动。1、修改start.S文件位于cpu/arm920t/目录下的start.S文件是开发板上电后运行的第一段代码,需要在这个文件中添加内容,以支持从Nand Flash启动。 rootvm-dev u-boot-1.3.2# vi cpu/arm920t/start.S 首先,删掉start.S中的第181行和201行的下面内容:#ifdef CONFIG_AT91RM9200.#endif 如果有这两句,这两句之间的内容将不会被编译。而我们的开发板需要执行这些内容。然后,找到这一行:#ifndef CONFIG_SKIP_RELOCATE_UBOOT 在紧接这这行的下面

6、添加下面几行:#ifdef CONFIG_S3C2410_NAND_BOOT bl copy_myself #else 再找到 ble copy_loop 在它的下面添加一行: #endif 做这些工作就是要完成一个简单的功能:如果我们定义了CONFIG_S3C2410_NAND_BOOT这个宏,那么就执行copy_myself这个子程序,否则就执行#else下面的程序。copy_myself这个子程序的功能就是把U-Boot自身的代码从Nand Flash拷贝到SDRAM中,需要我们自己实现,U-Boot自身并没有为我们实现。 我们把copy_myself也添加在start.S文件中。找到下

7、面的一行:_start_armboot: .word start_armboot 在这一行的下面添加如下的内容:/* * copy u-boot to ram*/ #ifdef CONFIG_S3C2410_NAND_BOOTcopy_myself:mov r10, lr save return address to r10ldr sp, DW_STACK_START 安装栈的起始地址mov fp, #0 初始化帧指针寄存器bl NF_Init 跳到复位C函数去执行read UBOOT from Nand Flash to RAMldr r0, =UBOOT_RAM_BASE 设置第1个参数:

8、 UBOOT在RAM中的起始地址 mov r1, #0x0 设置第2个参数:Nand Flash的起始地址mov r2, #0x30000 设置第3个参数: UBOOT的长度(192KB) bl nand_read_whole 调用nand_read_whole(), 该函数在board/up2410/nand.c中 tst r0, #0x0 如果函数的返回值为0,表示执行成功. beq ok_nand_read 执行内存比较1: b 1bok_nand_read: mov r0, #0x00000000 内部RAM的起始地址 ldr r1, =UBOOT_RAM_BASE UBOOT在RAM

9、中的起始地址 mov r2, #0x400 比较1024次, 每次4字节, 4 bytes * 1024 = 4Kbytesgo_next: ldr r3, r0, #4 ldr r4, r1, #4 teq r3, r4 bne notmatch subs r2, r2, #4 beq done_nand_read bne go_nextnotmatch:1: b 1bdone_nand_read: mov pc, r10#endifDW_STACK_START: .word STACK_BASE+STACK_SIZE-4上面是copy_myself的实现代码,添加完成以后,U-Boot启动

10、时就会执行我们的这段代码,将U-Boot的内容从Flash中拷贝到SDRAM中。 这样,start.S这个文件就修改完成了,保存刚才的修改。2、添加nand.c文件在copy_mysel这段程序中,我们调用了nand_read_whole子程序。这个程序是用C程序实现的,我们新建一个文件,board/up2410/nand.c,在这个文件中实现它:#include #include #include #define TACLS 0#define TWRPH0 3#define TWRPH1 0#define U32 unsigned intextern unsigned long nand_p

11、robe(unsigned long physadr);static void NF_Reset(void)int i;NF_nFCE_L();/* 使能Nand Flash */NF_CMD(0xFF);for(i=0;i10;i+);NF_WAITRB();NF_nFCE_H();void NF_Init(void)rNFCONF=(115)|(114)|(113)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH10);NF_Reset();int nand_read_whole(unsigned char *buf, unsigned long start_a

12、ddr, int size)int i, j;if (start_addr & NAND_BLOCK_MASK) | (size & NAND_BLOCK_MASK)return 1;NF_nFCE_L();for(i=0; i10; i+);i = start_addr;while(i 9) & 0xff;rNFADDR = (i 17) & 0xff;rNFADDR = (i 25) & 0xff;NF_WAITRB(); for(j=0; j NAND_SECTOR_SIZE; j+, i+) /* 读取每个扇区的所有指令*/*buf = (rNFDATA & 0xff);buf+;NF

13、_nFCE_H();/* 关闭NANDFLASH使能 */return 0; 上面就是nand.c文件的全部内容。为了使编译的时候能把这个文件编译进去,需要修改相应的Makefile:rootvm-dev u-boot-1.3.2# vi board/up2410/Makefile 找到这一行:COBJS := smdk2410.o flash.o 把这行的内容改为下面这行:COBJS := smdk2410.o flash.o nand.o 即在行尾加上了nand.o,这样,编译的时候就会把nand.c编译进去,并进行链接。3、修改up2410.h 前面提到,up2410.h是开发板的配置文件。关于nand.c中用到的一些宏或者其他需要定义的,我们都放在up2410.h中。注意,这里只介绍和从Nand启动相关的配置,因为up2410.h中还有很多其他配置,将在后面介绍! rootvm-dev u-boot-1.3.2# vi include/configs/up2410.h 光标移动到文件的末尾,在文件的最后一个#endif的前面添加如下内容:#define CONFIG_S3C2410_NAND_BOOT 1 #define STACK_BASE 0x33f00000#defin

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

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