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

加入VIP,省得不是一点点
 

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

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

下载须知

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

版权提示 | 免责声明

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

详解u-boot.doc

1、一、u-boot-1.1.4在yl2410上的移植过程:1. 例行准备3.2.1 修改Makefileubootlocalhost uboot#vi Makefile#为crane2410建立编译项yl2410_config : unconfig./mkconfig $(:_config=) arm arm920t yl2410 NULL s3c24x0各项的意思如下:arm: CPU的架构(ARCH)arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。yl2410: 开发板的型号(BOARD),对应于board/yl2410目录。NULL: 开发者/或经销商(ve

2、nder)。s3c24x0: 片上系统(SOC)。3.2.2 在board 子目录中建立yl2410#cp rf board/smdk2410 board/yl2410#cd board/yl2410#mv smdk2410.c yl2410.c3.2.3 在include/configs/中建立配置头文件#cd ./.#cp include/configs/smdk2410.h include/configs/yl2410.h3.2.4 指定交叉编译工具的路径#vi /.bashrcexport PATH=/usr/local/arm/2.95.3/bin:$PATH3.2.5 测试编译能否

3、成功#make yl2410_config /*产生 include/config.mk*/#make1. 在make的过程中,出现:cc1: invalid option abi=apcs-gnu解决方法:出错的文件是/cpu/s3c44b0/下的config.mk:将PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)改成:PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)2. 修改了第一个错误后,继续mak

4、e,出现了如下的报错:make1: * No rule to make target hello_world.srec, needed by all. Stop.make1: Leaving directory /home/mort/src/targa/u-boot/u-boot-TOT/examplesmake: * examples Error 2解决方法:修改examples/Makefile 把126行和129行改为:%.srec: %.o%.bin: %.o继续make 3. 出现 crane2410.a needed by smdk2410.o解决方法:修改board/crane2

5、410/Makefile 将28行的 OBJS := smdk2410.o flash.o改为OBJS := crane2410.o flash.o继续make获得u-boot4. 初步调试,主要是在 sdram 上调试要打开 CONFIG_SKIP_LOWLEVEL_INIT即可看到打印信息5. 读写 NorFlash(SST39VF1601 )在 include/configs/yl2410.h 添加#ifdef CONFIG_SST_39VF1601#define PHYS_FLASH_SIZE 0x00200000 /* 2MB */#define CFG_MAX_FLASH_SECT

6、 (35) /* max number of sectors on one chip */#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x1F0000) /* addr of environment */#endif修改 board/yl2410/flash.c 参考 board/dave/common/flash.c#elif defined(CONFIG_SST_39VF1601)(SST_MANUFACT 在 int flash_erase (flash_info_t * info, int s_first, int s_last)#if defined

7、(CONFIG_SST_39VF1601) /* Ali + */*addr = CMD_ERASE_BLOCK;#else*addr = CMD_ERASE_CONFIRM;#endif在 volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)#if defined(CONFIG_SST_39VF1601) /* Ali + */MEM_FLASH_ADDR1 = CMD_PROGRAM;#elseMEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;*addr = CMD

8、_PROGRAM;#endif即可正确操作 flash,其中 monitor_flash_len(_bss_start - _armboot_start)和环境参数保存区是受保护的,标示为(RO)6. 从 norflash 启动打开选项 CONFIG_S3C2410_NOR_BOOT编译生成 u-boot.binLoadb 0x32000000 115200 (set baud rate to 115200,download u-boot to 0x32000000 by Kermit protocol)Cp.b 0x32000000 0 0x20000 (u-boot write to no

9、rflash)重启,OK7. 如要看到调试信息在 include/configs/yl2410.h 添加#define DEBUG8. 打 ping 命令时,输出 “* ERROR: ethaddr not set”,板上网卡 CS8900 本身没有固化MAC 地址,自己在 include/configs/yl2410.h 设定一个,或者运行时设定环境参数,接下来使用 ping 和 tftp 都正常9. 支持 nandflash 读写在 include/configs/yl2410.h 添加 CFG_CMD_NAND编译,在 cmd_nand.c 产生很多错误,原因是 yl2410 根本就没有

10、 nandflash 的驱动支持,如:NAND_DISABLE_CE()NAND_ENABLE_CE()NAND_WAIT_READY()WRITE_NAND_COMMAND()WRITE_NAND_COMMANDW()WRITE_NAND_ADDRESS()WRITE_NAND()这些函数的实现都很简单,参考 at91rm9200dk.h,对 nand 的驱动支持全部添加在include/configs/yl2410.h加载运行,nand write 0x32000000 0x20000 0x200 (向 nand flash 写 512 字节),报错,nand_write_page : F

11、ailed write verify, 应该是 sector(page)没擦除,nand erase 0x20000 0x200,出错,提示边界没对齐,查得资料获知,erase 单位是一个 block(16k),program 单位是一个 sector(512B),按要求先擦除后写入,正确10. 支持 nandflash 启动在 cpu/arm920t/start.S 添加对 nandflash 重定位的支持,在 board/yl2410/nand_boot.c 添加对nandflash 的初始化和读取操作,在 nandflash 启动时被 start.s 调用,注意 nand_boot.c

12、的所有代码以及被调用的代码不能超出 4k,因为按 nandflash 启动模式,开始只有 4k 的运行空间。编译获得 u-boot.binTftp 0x32000000 u-boot.bin (load u-boot.bin to 0x32000000)Nand erase 0 0x20000 (erase nandflash first 128k)Nand write 0x32000000 0 0x20000 (write u-boot.bin to nandflash)设置跳线到 nandflash 启动模式,重启即可二、流程图三、答疑1. 关于入口地址在board/yl2410/u-bo

13、ot.lds:OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS. = 0x00000000;. = ALIGN(4);.text :cpu/arm920t/start.o (.text)*(.text)_start的入口地址为 0x00000000,为何编译出来的代码。链接地址是从 0x33f80000(TEXT_BASE)开始的?答:lds文件中的起始地址为0x00000000是不起作用的,由链接参数替代的。见 u-boot-1.1.4/config.mk, L145:LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_

14、BASE) $(PLATFORM_LDFLAGS)2. 关于ADR的编译原理adr r0, _start /* r0 - current position of code */_start在flash运行是0,在sdram运行是0x33f80000答:伪指令:ADR;ADRL;ALIGN;DCx;EQUx;OPTADR:小范围的地址读取伪指令.ADR 指令将基于PC 相对偏移的地址值读取到寄存器中.在汇编编译源程序时,ADR 伪指令被编译器替换成一条合适的指令.通常,编译器用一条ADD 指令或SUB 指令来实现该ADR 伪指令的功能,若不能用一条指令实现 ,则产生错误,编译失败.所以adr r

15、0, _start,实际产生的汇编是sub r0,pc,#0x9c ; #0x33f800003. 关于nandflash启动如何保证nandflash启动模式下,启动代码定位在前4k一个是直接在start.s用汇编写nandflash的初始化和重定位代码,或者用C写nandflash 启动代码nand_boot.c,进而修改编辑board/yl2410/u-boot.lds在 *(.text) 之前添加board/yl2410/nand_boot.o (.text)(当然,运气好的话,不用也可以 )为了避免代码运行超出4k,nand_boot.c不能调用其它库函数,不能引用数据段(.data

16、)的数据,因为*(.data) 在*(.text)之后,超出了4k。注意:在修改cpu/arm920t/start.S, nandflash启动模式不能引用_TEXT_BASE,因为_TEXT_BASE:.word TEXT_BASE放于数据段,超出了 4k 的限制,可以用立即数或者宏定义替代。4. nandflash 启动模式下保存环境变量u-boot 启动后,出现“Warning - bad CRC, using default environment”,没有正确的环境变量。查看S3C2410的数据手册,在图表“S3C2410A Memory Map after Reset”中显示,如果“Using NAND flash for boot ROM”,bank 0(128M)仅映射到片内的4k sram,所以同时位于bank 0的norflash无效,这时候的环境变量只能保存于nandflash,修改include/configs/yl2410.h相关的宏定义,重新烧入到nandflash,启动后,输入“saveenv ”即可。5. 关于mmuu-boot不需要中断重定位,可以关闭mmu

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。