摘要:
本文主要介绍VxWorks系统在MPC860系列处理器的开发中怎么实现去掉BOOT Flash,直接从Flash引导VxWorks的BootRom。
关键词:BOOT Flash,Flash,BootRom
引言
美国WindRiver公司的实时嵌入式系统VxWorks和美国Motorola公司MPC860系列处理器已经广泛的应用在通信行业的通信产品中,在用VxWorks系统进行开发时,会生成两个文件,一个是BootRom文件,此文件类似Windows中的BIOS,是引导文件,完成内存初始化,内核初始化,基本硬件的初始化并最终引导VxWorks系统启动,另外一个是VxWorks文件,此文件中包括VxWorks系统内核及上层应用程序,而这两个文件在MPC860的开发中一般都存储在两片不同的Flash上,及BootRom存储在BOOT Flash,而VxWorks存储在Flash上。
产品需要
实际开发中,生成的没有压缩的BootRom大小一般为512K左右,在VxWorks 5.4中是460K左右,而在VxWorks 5.5中是540K左右,一般存储BootRom的Flash只需要512K大小,因为即使540K的 BootRom也可以截成512K。
在硬件开发Flash选型时,BOOT Flash芯片一般采用SST公司的28VF040、29VF040等,Flash芯片一般会采用Intel、AMD公司的,根据需要可能会采用容量为4M、8M、16M、32M大小不等。从节省成本的角度考虑,是不是可以将BootRom直接装载到Flash中并引导呢,这样不是可以省掉一片BOOT Flash吗?
VxWorks系统中,加上上层应用程序的生成的VxWorks文件一般为3M左右,所以不管你采用4M、8M或者更大容量的Flash,同时装载BootRom、VxWorks文件也是绰绰有余的。
实际情况
我和一个做硬件的朋友曾经做过这样的测试,直接从Flash引导BootRom,并引导VxWorks系统,实际上是可行的。
要解决此问题,实际上只要将Flash的地址稍做处理就可以的。
我们将Flash地址映射成两个地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段为0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段为0x04080000~0x04800000(假设此Flash大小为8M大小),在0xFFF00000~0xFFF80000地址段写入BootRom,在0x04080000~0x04800000地址段写入VxWorks,加电后,PC指针会跳到0xFFF00100地址执行第一条指令,引导BootRom起来并最终VxWorks系统引导成功。
实现过程
1、 片选
在romInit.s文件中要做如下的片选操作,片选0为BOOT Flash的地址片选,片选1为Flash的地址片选,其中ROM_BASE_ADRS为0xFFF00000
/* ------------------------------------------------------------------------ */
/* Initialize Chip Select 0 for Bootrom */
/* ------------------------------------------------------------------------ */
lis r5, HIADJ( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
addi r5, r5, LO( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
stw r5, BR0(0)(r4)
lis r5, HIADJ( 0xFFF80000 | 0x00000100 | 0x00000080)
addi r5, r5, LO( 0xFFF80000 | 0x00000100 | 0x00000080)
stw r5, OR0(0)(r4)
/* ------------------------------------------------------------------------ */
/* Initialize Chip Select 1 for FLASH */
/* ------------------------------------------------------------------------ */
lis r5, HIADJ( 0x04000000 | BR_PS_16 | 0x00000001)
addi r5, r5, LO( 0x04000000 | BR_PS_16 | 0x00000001)
stw r5, BR1(0)(r4)
lis r5, HIADJ(0xff800000 | 0x00000100 | 0x00000080)
addi r5, r5, LO(0xff800000 | 0x00000100 | 0x00000080)
stw r5, OR1(0)(r4)
2、 地址映射
在sysLib.c文件中有一sysPhysMemDesc的地址映射数组的声明,对BOOT Flash和Flash的地址按照如下的地址映射后,VxWorks系统才会让你对此地址进行相应的读写操作。
{
(void *) 0x04000000,
(void *) 0x04000000,
0x00800000, /* 8 m - Flash window 1 */
VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE,
VM_STATE_VALID | VM_STATE_WRITABLE
},
{
(void *) ROM_BASE_ADRS,
(void *) ROM_BASE_ADRS,
ROM_SIZE, /* Flash memory */
VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |
VM_STATE_MASK_CACHEABLE ,
VM_STATE_VALID | VM_STATE_WRITABLE |
VM_STATE_CACHEABLE_NOT
}
3、 文件烧录
还存在一个问题,因为BOOT Flash是可以在烧录器上烧录的,而Flash芯片是直接焊接在MPC860的主板上,只能通过相应的Flash驱动才能进行读写的,是不可能通过烧录器烧录,要解决此问题那只能按照如下办法解决。
在主板上要保留有BootRom Flash座,要有一片从BOOT Flash引导的BOOT Flash芯片,此芯片中要有已经烧录好的可以正常运行的BootRom程序,先将此芯片加到BootRom Flash座上,加电将系统引导起来,然后用事先写好的将BootRom及VxWorks写入Flash的函数将BootRom及VxWorks文件写入Flash相应的地址段,注意写入地址要正确,即BootRom的第一条指令必须写在0xFFF00100地址,关电后将BOOT Flash从座中取出来,加电后系统就从Flash中引导起来了。
- Boot(37582)
- VxWo(9041)
VxWorks文件系统、Flash的TFFS设计与实现
2907
6678 EMIF16 Nor Flash多核boot
BOOT MODE是不是烧到了FLASH里面了?
VxWorks for x86系统中实时时钟的应用是什么
VxWorks中的TFFS文件系统怎么实现?
VxWorks常用的Bootrom类型有哪些
VxWorks开发中的Flash BOOT怎么去掉?
VxWorks映象的分类
boot的问题
Bootloader的程序(BOOT)放到Flash开始地址设计实现
U-Boot NAND FLASH移植
u-boot详解
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
《VxWorks应用开发班》专业培训班07月20日上课,火热报名中!
为什么AM335X u-boot.img从SPI FLASH启动不成功?原因是什么?
为什么Config0/1 中的 Boot Select 设置在 Keil ICE 调试模式下无效呢?
为什么ML507在XMD重置之前不会启动VxWorks内核?
关于6747 SPI0 flash boot的问题
在2片Flash上怎么建立VxWorks下的文件系统?
在VxWorks操作系统的Nor Flash上怎么建立TFFS文件系统?
在u-boot烧写u-boot.ais到nand flash,无法从nand flash启动的原因?
基于powerPC及vxworks的SATA2和1394 BSP
如何实现利用uCOS系统从flash中动态加载task?
实时操作系统VxWorks下电子盘驱动程序的开发
对于C5000,大于48K的程序如何BOOT?
教你用JLINK烧NOR/NAND FLASH
求助:Vxworks无法加载boot文件
浅析U-Boot NAND FLASH驱动
详解CPU boot的过程
请问6455 ROM中boot经过load出来改变了是为什么?
请问EMIF挂载NOR Flash进行BOOT的代码执行速度是否很慢?
请问为什么《Sitara Uniflash Flash Programming with Linux》中的链接打不开?怎么解决?
采用普通裸机boot跳转到VxWorks_rom镜像启动可行吗
关于Vxworks应用的资料.
0从Protel 99 SE导入的实用
0VxWorks在测控系统中的应用
18通过TFFS加载和升级VxWorks 映像
14基于CPLD的Flash读取控制的设计与实现
35WorldWind软件在VxWorks下的移植
18FLASH存储管理子系统的设计与实现
9基于VxWorks网络数据报存储转发的应用研究
12基于VxWorks的FLASH存储器实时存取管理方案
29VxWorks在惯性导航系统中的应用
36电器组常见缺陷描述
0适于OMAP的多级启动Boot Loader
0基于VxWorks的文件系统的研究与实现
35嵌入式操作系统VxWorks中TFFS文件系统的构建
834
什么是boot loader?
2849TMS320VC5410的BOOT设计与实现?
1223
VxWorks下的异步通用定时器设计
880
VxWorks下的多重定时器设计
2554
TrueFFS上VxWorks应用程序的启动及动态更新
1392
什么是手机Flash功能
1239MacBook Boot Camp无法安装Windows X
1161什么是Flash Memory
1839从Flash和SRAM中触发中断的过程示例
3879VxWorks开发中怎么去掉Flash BOOT
1586VxWorks及BSP启动流程与顺序
105基于ARM9的U-Boot自动识别启动实现
91u-boot简介
3909一种基于Flash的VxWorks操作系统快速引导方法设计
6Uboot下关于Nor Flash的驱动问题
9400
详细分析嵌入式系统中的boot
7411AVR单片机的BOOT区简介和相关问题的总结
1Spring Boot从零入门1 详述
1073Adobe 强烈建议立即删除 Flash Player,如何从 Mac 中完全删除 Adobe Flash ?
3712从TMS320F281xDSP片上FLASH中运行应用程序_从FLASH转移到RAM运行_BIOS
3STM32的三种Boot模式及验证
89在Linux/U-Boot里为QSPI Flash使用UBIFS
2394如何配置Petalinux工程来从Flash启动Linux Kernel
3509Encrypted Boot image泄漏讨论
1465RL78 Family C Compiler Package(CC-RL) 如何划分Boot区和Flash区
4RX Family C/C++ Compiler Package(CC-RX) 如何划分Boot区和Flash区Rev.1.00
0RL78 Family C Compiler Package(CC-RL) 如何划分Boot区和Flash区
0RX Family C/C++ Compiler Package(CC-RX) 如何划分Boot区和Flash区Rev.1.00
0STM32F0系列MCU硬件电路boot设计
5201
Spring Boot Actuator快速入门
1203stm32中boot0和boot1怎么接
23134STM32引脚中的BOOT1在哪里
7107stm32读取boot引脚状态
3836单片机boot0和boot1怎么设置
7316OMAP-L138_Flash And Boot Utils使用及编译指导
0深入理解 RK3506 U-Boot 重定位:从代码到原理
290
电子发烧友App




评论