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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

uboot移植日记Word格式文档下载.docx

1、 b main - crt0.S - copydata - clearbss - b boot main.c - boot - /*Get internel rom service address*/ /* Init of ROM services structure */ pAT91 = AT91C_ROM_BOOT_ADDRESS; /* Xmodem Initialization */ pAT91-OpenSBufferOpenSvcXmodem /* System Timer initialization */ - AT91F_AIC_ConfigureIt /* Enable ST

2、interrupt */ AT91F_AIC_EnableIt AT91F_DBGU_Printk(XMODEM: Download U-BOOT ); Jump.S / Jump to Uboot BaseAddr exec Jump(unsigned int)AT91C_UBOOT_BASE_ADDRESS) boot.bin执行流程 该文件会在从片内启动时被下载到板子上,以后还会被烧写到片外Flash中,以便在片外启动时用它来引导并解压u-boot.bin.gz,并跳转到u-boot来执行。 boot/entry.S b main - crt0.S - boot/misc.s /* un

3、zip uboot.bin.gz */ - decompress_image(SRC,DST,LEN) - gunzip /jump to ubootBaseAddr exec 这里跳转到解压u-boot.bin.gz的地址处直接开始执行u-boot asm(mov pc,%0 : r (DST);u-boot.bin执行流程 u-boot/cpu/at91rm9200/start.S start -reset copyex - cpu_init_crit /* set up the stack */ - start_armboot u-boot/lib_arm/board.c init_fn

4、c_t *init_sequence = cpu_init, /* basic cpu dependent setup */ board_init, /* basic board dependent setup */ interrupt_init, /* set up exceptions */ env_init, /* initialize environment */ init_baudrate, /* initialze baudrate settings */ serial_init, /* serial communications setup */ console_init_f,

5、/* stage 1 init of console */ display_banner, /* say that we are here */ dram_init, /* configure available RAM banks */ display_dram_config, checkboard, NULL, ; start_armboot - call init_sequence flash_init - display_flash_config nand_init - AT91F_DataflashInit dataflash_print_info - env_relocate dr

6、v_vfd_init - devices_init - jumptable_init console_init_r - misc_init_r - enable_interrupts cs8900_get_enetaddr - board_post_init -u-boot/common/main.c for (;) /* shell parser */ main_loop () - u_boot_hush_start - readline abortboot printf(Hit any key to stop autoboot: %2d , bootdelay); 以上是at91rm920

7、0启动并进入u-boot的执行流分析。后面u-boot还会将uImage解压到特定的位置并开始启动内核代码。3 修改loader boot 3.1 修改Loader.bin的源码 1. 修改 include/main.h #define AT91C_UBOOT_BASE_ADDRESS 0x21f00000 此开发板SDRAM为32M 地址空间为 0x200000000x22000000 uboot被解压缩后要被拷贝到RAM的高端地址,防治 与其他地址冲突 2. 修改init.c中对SDRAM的初始化 AT91C_BASE_SDRC-SDRC_MR=0x02 根据具体的SDRAM芯片修改: M

8、R4=1 (表示16位) MR4=0 (表示32位) 3.2 修改Boot.bin的源码 1. 在main.c中添加两个外部函数的定义 Extern int deampress_image(void *src,void *dst,unsigned int len); 解压缩函数,用来解压缩UBOOT Extern void Jump() 跳转函数 2. 在main.c中修改宏定义 #define SRC 0x10010000 uboot在flash中的基地址 #define DST 0x21f00000 解压缩UBOOT后载入到SDRAM中的地址 #define LEN 0x20000 ubo

9、ot的大小(最大大小) 3 修改main.c中打印语句 AT91F_DBGU_Pringk() 修改成自己希望的开机文字图样 4 动手移植uboot 4.1 从网上下载官方的ubot1.1.1 4.2 在/board 下建立myboard文件夹,从/board/at91rm9200dk/.下拷贝文件。 At91rm9200dk.c flash.c config.mk makefile u-boot.lds 4.2.1 将at91rm9200dk.c改名为myboard.c,修改其部分代码。由于这个开发板支持nandflash所以需要修改myboard.c下 关于nandflash初始化的部分,

10、nand_init(). 具体修改如下: 将 *AT91C_PIOC_ASR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | AT91C_PC3_BFBAA_SMWE; 改为 *AT91C_PIOC_ASR = AT91C_PC1_BFRDY_SMOE | /AT91C_PC0_BFCK 将 *AT91C_PIOC_PDR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | AT91C_PC3_BFBAA_SMWE; 改为 *AT91C_PIOC_PDR = AT91C_PC1_BFRDY_SMOE | 增加两句 *AT91C

11、_PIOC_PER|= AT91C_PC0_BFCK; *AT91C_PIOC_OER = AT91C_PC0_BFCK; 注:AT91C_PC0_BFCK 是Brust Flash控制器的时钟信号线 。 AT91C_PC1_BFRDY_SMOE 是 Brust Flash 控制器的读信号。 AT91C_PC3_BFBAA_SMWE 是 Brust Flash 控制器的脉冲前沿地址。 AT91C_PIOC_ASR 是外设A寄存器。 AT91C_PIOC_PDR 是GPIO 禁用寄存器。 AT91C_PIOC_PER 是GPIO 使能寄存器。 AT91C_PIOC_OER 是 GPIO 使能输出

12、寄存器。 上述修改的目的是,使能BFCK信号线的GPIO输出。 在/*Configure PC2 as input (signal READY of the SmartMedia)*/后增加 *AT91C_PMC_PCER|=(unsigned int)(14); 此句 。目的:开启外设时钟。 4.2.2 修改flash.c 根据不同的flash芯片采用不同的flash程序接口,本开发板选用的是atmel的AT49BV322A。由于芯片不同所以需要根据datasheet对flash.c进行修改。 修改扇区大小和数目的定义 OrgDef OrgAT49BV16x4A = 8, 8*1024 ,

13、/* 8 * 8kBytes sectors */ 31, 64*1024 /* 31 * 64kBytes sectors */ 改为 OrgDef OrgAT49BV16x4A= 8, 8*1024 , /* 8 * 64kBytes sectors */ 63, 64*1024 /* 63 *8kBytes sectors */ 本芯片为71个扇区。 根据datasheet修改关于地址和读写命令的宏定义。 #define FLASH_BANK_SIZE 0x200000 /* 2 MB */ 改为 #define FLASH_BANK_SIZE 0x400000 /* 4 MB */ /

14、* AT49BV1614A Codes */ #define FLASH_CODE1 0xAA #define FLASH_CODE2 0x55 #define ID_IN_CODE 0x90 #define ID_OUT_CODE 0xF0 #define CMD_READ_ARRAY 0x00F0 #define CMD_UNLOCK1 0x00AA #define CMD_UNLOCK2 0x0055 #define CMD_ERASE_SETUP 0x0080 #define CMD_ERASE_CONFIRM 0x0030 #define CMD_PROGRAM 0x00A0 #de

15、fine CMD_UNLOCK_BYPASS 0x0020 #define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000055551) #define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00002AAA #define IDENT_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x0000555 #define IDENT_FLASH_ADDR2 (*(volatile u16 *)(CFG_FL

16、ASH_BASE + (0x0000AAA 修改为: /* MBM29LV320BE Codes */ #define FLASH_CODE1 0x00AA00aa #define FLASH_CODE2 0x00550055 #define ID_IN_CODE 0x00900090 #define ID_OUT_CODE 0x00F000f0 #define CMD_READ_ARRAY 0x00F000F0 #define CMD_ERASE_CONFIRM 0x0030 #define CMD_PROGRAM 0x00A0 #define CMD_UNLOCK_BYPASS 0x002

17、00020 #define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x0000555 #define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00002AA #define IDENT_FLASH_ADDR1 (*(volatile u32 *)(CFG_FLASH_BASE + (0x00005552) #define IDENT_FLASH_ADDR2 (*(volatile u32 *)(CFG_FLASH_BASE + (0x0000AAA 去掉芯片

18、自动识别,防治出以外错误。 注视掉if (flash_infoi.flash_id & FLASH_TYPEMASK)到else 144行152行。 4.2.3 修改 config.mk 将 TEXT_BASE = 0x21f80000 修改为 TEXT_BASE = 0x21f00000 这个地址是要根一级boot中定义保持一致。 Boot中的main.c #define DST 0x21f00000 /UBOOT被解压缩后载入到SDRAM中的位置。 4.2.4 修改makefile 将 OBJS := at91rm920dk.o flash.o 修改为 OBJS := myboard.o

19、flash.o 自己命名的开发板的名字 4.3 修改 include下面的头文件 在/include/configs/下建立myboard.h ,可以复制at91rm9200dk.h改名。 具体注意修改如下: #define CONFIG_MYBOARD 1 /目标板 #define CONFIG_NR_DRAM_BANKS 1 /SDRAM bank数 #define PHYS_SDRAM 0x20000000 /基地址 #define PHYS_SDRAM_SIZE 0x2000000 /大小 32M #define PHYS_FLASH_1 0x10000000 /基地址 #define

20、 PHYS_FLASH_SIZE 0x400000 /大小 4M #define CFG_FLASH_BASE PHYS_FLASH_1 /别名 #define CFG_MAX_FLASH_BANKS 1 /总bank数 #define CFG_MAX_FLASH_SECT 71 /扇区总数 根据ubot1.1.1的/include/configs/at91rm9200dk.h修改的比较少,大部分是修改容量和扇区总数及其基地址。 修改/include/cmd_confdefs.h 修改 #define CFG_CMD_NONSTD ( ) 这个宏定义是决定ubot支持的功能,如果需要支持就从括

21、号中删除此行。利于源码支持 CFG_CMD_LOADB CFG_CMD_MEMORY 等。我们这里的修改是删除 “CFG_CMD_NAND | ” 这行,是uboot支持nandflash。 4.4 修改根目录下的MAKEALL 和 Makefile 修改MAKEALL: 在 LIST_ARM9= at91rm9200dk integratorcp integratorap omap1510inn omap1610h2 omap1610inn smdk2400 smdk2410 trab VCMA9 versatile myboard 中加入对目标板的定义。 修改Makefile 修改当前交叉

22、编译器的绝对路径: ifeq ($(ARCH),arm) CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux- 添加目标板配置选项 # # AT91RM9200 Systems at91rm9200dk_config : unconfig ./mkconfig $(:_config=) arm at91rm9200 at91rm9200dk myboard_config :_config=) arm at91rm9200 myboard 5 编译,调试 至此,uboot的修改基本完成,让我们编译下看看吧。 在纯linux环境下编译(不要在VM

23、里linux和windows的共享目录里编译) 进入uboot的根目录,键入如下命令 make clean (清除过程文件) make myboard_config (生成目标板的配置文件) make all (开始编译) 我等,我等,我等等等! 啊!出问题了 从错误中看是提示未定义。 好吧,那就找错误。这时候就体现出Source Insight的优势了,全工程搜索,快捷的查找任意的函数或者宏的定义位置。 最后在/include/common.h中添加 #include 包含与硬件相关的寄存器的定义,这个跟uboot版本有关系,比如uboot1.0.0的include/common.h里就有这句话。 好了再编译一次吧 Make clean Make all VM虚拟机编译还真是不快,不过这次没出问题,成功了。 编译结束后在根目录下会生成u-boot.bin 大概104k 然后将其压缩为gz格式的 gzip c u-boot.bin u-boot.gz 因为一级boot中的解压缩函数是解压缩的gz格式然后拷贝到RAM的高端地址中去的。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2