来源:21IC中国电子网 作者:771所加固机工程部 蔡本华 高文炜
摘要:目前
![](/icons/50837de.gif)
嵌入式系统多使用FLASH作为主存
![](/icons/50837dou.gif)
因此
![](/icons/50837dou.gif)
如何有效管理FLASH上
![](/icons/50837de.gif)
数据非常重要
![](/icons/50837dou2.gif)
文章以MX29LV160BT芯片为例
![](/icons/50837dou.gif)
讨论了在VxWorks操作系统下Nor Flash上建立TFFS文件系统
![](/icons/50837de.gif)
![](/icons/50837yi.gif)
般步骤
![](/icons/50837dou.gif)
从而为FLASH上
![](/icons/50837de.gif)
数据管理提供了理想
![](/icons/50837de.gif)
选择方式
![](/icons/50837dou.gif)
同时也为开发者和用户升级
![](/icons/50837chengxu.gif)
提供了方便
关键词:VxWorks Flash MTD TFFS 文件系统
嵌入式系统正随着Internet
![](/icons/50837de.gif)
发展而在各个领域得到广泛
![](/icons/50837de.gif)
应用
![](/icons/50837dou.gif)
作为
![](/icons/50837yi.gif)
个优秀
![](/icons/50837de.gif)
操作系统
![](/icons/50837dou.gif)
VxWorks实现了比其他实时操作系统更好
![](/icons/50837de.gif)
有效性、商用性、可裁减性以及互操作性
![](/icons/50837dou.gif)
广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高
![](/icons/50837de.gif)
领域中
![](/icons/50837dou.gif)
如卫星通讯、军事演习、弹道制导、飞机导航等
如今越来越多
![](/icons/50837de.gif)
嵌入式操作系统中
![](/icons/50837dou.gif)
通常都使用FLASH作为主存介质
![](/icons/50837dou2.gif)
许多开发者和用户为了方便以后升级用户
![](/icons/50837chengxu.gif)
![](/icons/50837dou.gif)
通常在FLASH上建立TFFS文件系统
![](/icons/50837dou.gif)
建立文件系统后
![](/icons/50837dou.gif)
我们就可以象在windows操作系统下对硬盘操作
![](/icons/50837yi.gif)
样
![](/icons/50837dou.gif)
进行数据
![](/icons/50837de.gif)
拷贝、删除以及文件
![](/icons/50837de.gif)
建立等操作
NOR和NAND是现在市场上两种主要
![](/icons/50837de.gif)
非易失闪存技术
![](/icons/50837dou2.gif)
Intel于1988年首先开发出NOR flash技术
![](/icons/50837dou.gif)
彻底改变了原先有EPROM和EEPROM
![](/icons/50837yi.gif)
统天下
![](/icons/50837de.gif)
局面
![](/icons/50837dou2.gif)
NOR
![](/icons/50837de.gif)
特点是芯片内执行XIP execute In Place
![](/icons/50837dou.gif)
这样应用
![](/icons/50837chengxu.gif)
可以直接在flash闪存内运行
![](/icons/50837dou.gif)
不必再把代码读到系统RAM中
![](/icons/50837dou2.gif)
NOR
![](/icons/50837de.gif)
传输效率很高
![](/icons/50837dou.gif)
在1~4MB
![](/icons/50837de.gif)
小容量时具有很高
![](/icons/50837de.gif)
成本效益
![](/icons/50837dou.gif)
因此在嵌入式系统得到广泛
![](/icons/50837de.gif)
应用
![](/icons/50837yi.gif)
、 TFFS文件系统结构简介
Tornado
![](/icons/50837de.gif)
TrueFFS是和VxWorks兼容
![](/icons/50837de.gif)
![](/icons/50837yi.gif)
种M-
![](/icons/50837System.gif)
s Flite实现方式
![](/icons/50837dou.gif)
版本为2.0
![](/icons/50837dou2.gif)
它为种类繁多
![](/icons/50837de.gif)
flash存储设备提供了统
![](/icons/50837yi.gif)
![](/icons/50837de.gif)
块设备接口
![](/icons/50837dou.gif)
并且具有可重入、线程安全
![](/icons/50837de.gif)
特点
![](/icons/50837dou.gif)
支持大多数流行
![](/icons/50837de.gif)
CPU构架
![](/icons/50837dou2.gif)
有了Tornado
![](/icons/50837de.gif)
TrueFFS
![](/icons/50837dou.gif)
应用
![](/icons/50837chengxu.gif)
对flash存储设备
![](/icons/50837de.gif)
读写就好象它们对拥有MS-DOS文件系统
![](/icons/50837de.gif)
磁碟设备
![](/icons/50837de.gif)
操作
![](/icons/50837yi.gif)
样
如图1所示
![](/icons/50837dou.gif)
TrueFFS由核心层(core layer)和三个功能层
![](/icons/50837dou.gif)
翻译层(translation layer)
![](/icons/50837dou.gif)
MTD层(MTD layer)
![](/icons/50837dou.gif)
![](/icons/50837socket.gif)
层(
![](/icons/50837socket.gif)
layer)组成
[ 相关贴图 ]
核心层(Core layer):核心层主要起相互连接其他几层
![](/icons/50837de.gif)
功能
![](/icons/50837dou2.gif)
同时它也可以进行碎片回收、定时器和其他系统资源
![](/icons/50837de.gif)
维护
![](/icons/50837dou2.gif)
通常WindRiver公司将这部分内容以二进制文件提供
翻译层主要实现TrueFFS和dosFs之间
![](/icons/50837de.gif)
高级交互功能
![](/icons/50837dou2.gif)
它也包含了控制flash映射到块、wear-leveling、碎片回收和数据完整性所需
![](/icons/50837de.gif)
智能化处理功能
![](/icons/50837dou2.gif)
目前有三种不同
![](/icons/50837de.gif)
翻译层模块可供选择
![](/icons/50837dou2.gif)
选择哪
![](/icons/50837yi.gif)
种层要看你所用
![](/icons/50837de.gif)
flash介质是采用NOR-based, 还是NAND-based, 或者SSFDC-based技术而定
Socket层则是提供TrueFFS和板卡硬件(如flash卡)
![](/icons/50837de.gif)
接口服务
![](/icons/50837dou2.gif)
其名字来源于用户可以插入flash卡
![](/icons/50837de.gif)
物理插槽
![](/icons/50837dou2.gif)
用来向系统注册
![](/icons/50837socket.gif)
设备
![](/icons/50837dou.gif)
检测设备拔插
![](/icons/50837dou.gif)
硬件写保护等
![](/icons/50837dou2.gif)
后面将详细讲解它
![](/icons/50837de.gif)
功能
MTD层(Memory Technology Drivers)功能主要是实现对具体
![](/icons/50837de.gif)
flash进行读、写、擦、ID识别等驱动
![](/icons/50837dou.gif)
并设置与flash密切相关
![](/icons/50837de.gif)
![](/icons/50837yi.gif)
些参数
![](/icons/50837dou2.gif)
TrueFFS已经包含了支持Intel,AMD以及samsung部分flash芯片
![](/icons/50837de.gif)
MTD层驱动
![](/icons/50837dou2.gif)
新
![](/icons/50837de.gif)
芯片需要新
![](/icons/50837de.gif)
MTD支持
![](/icons/50837dou.gif)
你可以使用
![](/icons/50837yi.gif)
个标准
![](/icons/50837de.gif)
接口来加入这些驱动
以上四部分
![](/icons/50837dou.gif)
我们通常要
![](/icons/50837de.gif)
工作就是后两层
当在VxWorks下配置TrueFFS时
![](/icons/50837dou.gif)
你必须为每
![](/icons/50837yi.gif)
层至少包含
![](/icons/50837yi.gif)
个软件模块
![](/icons/50837dou2.gif)
后面我们将详细讨论
二、 MX29LV160BT芯片上建立TrueFFS文件系统
1、配置相关文件
在此
![](/icons/50837dou.gif)
我以Nor Flash MX29LV160BT为例
![](/icons/50837dou.gif)
开发工具为Tornado2.2 for PPC
![](/icons/50837dou2.gif)
要在VxWorks映像中包含TrueFFS文件系统
![](/icons/50837dou.gif)
首先必须在config.h文件中定义INCLUDE_TFFS
![](/icons/50837dou2.gif)
这使得VxWorks
![](/icons/50837de.gif)
![](/icons/50837chushi.gif)
化代码
![](/icons/50837diaoyong.gif)
tffsDrv
![](/icons/50837kh.gif)
来创建管理TrueFFS所需
![](/icons/50837de.gif)
结构和全局变量
![](/icons/50837dou.gif)
并为所有挂接了
![](/icons/50837de.gif)
flash设备注册
![](/icons/50837socket.gif)
组件驱动
![](/icons/50837dou2.gif)
在链接
![](/icons/50837de.gif)
时候
![](/icons/50837dou.gif)
通过解析与tffsDrv
![](/icons/50837kh.gif)
相关联
![](/icons/50837de.gif)
符号(symbols)可以将TrueFFS所必需
![](/icons/50837de.gif)
软件模块链接到VxWorks映象中
为了支持TrueFFS
![](/icons/50837dou.gif)
每
![](/icons/50837yi.gif)
个BSP目录下都必须包含
![](/icons/50837yi.gif)
个sysTffs.c文件
![](/icons/50837dou2.gif)
它将TrueFFS所有
![](/icons/50837de.gif)
层(翻译层
![](/icons/50837dou.gif)
![](/icons/50837socket.gif)
层和MTD层)链接到
![](/icons/50837yi.gif)
起并和VxWorks绑定
![](/icons/50837dou2.gif)
因此
![](/icons/50837dou.gif)
我必须编辑这个文件并决定哪
![](/icons/50837yi.gif)
种MTD和翻译层模块应该包含到TrueFFS中
![](/icons/50837dou2.gif)
即:
#
![](/icons/50837define.gif)
INCLUDE_MTD_MX29LV /* MX29LV160BT MTD driver */
#
![](/icons/50837define.gif)
INCLUDE_TL_FTL /* FTL translation layer */
#
![](/icons/50837define.gif)
FLASH_BASE_ADRS 0x2a10000 /* Flash memory base address */
#undef FLASH_SIZE
#
![](/icons/50837define.gif)
FLASH_SIZE 0x001f0000 /*Flash memory size,2M(parameter block) */
其他无关
![](/icons/50837de.gif)
MTD driver包含头都#undef掉
![](/icons/50837dou.gif)
同时定义Flash在系统中
![](/icons/50837de.gif)
基地址和大小
![](/icons/50837dou2.gif)
另外
![](/icons/50837dou.gif)
还必须编辑sysLib.c中
![](/icons/50837de.gif)
sysPhysMemDesc[ ]
![](/icons/50837shuzu.gif)
![](/icons/50837dou.gif)
将Flash基地址和大小加入到MMU中
![](/icons/50837dou.gif)
以供将来访问Flash
![](/icons/50837dou.gif)
否则访问Flash会失败
![](/icons/50837dou2.gif)
如果BSP目录下没有sysTffs.c文件
![](/icons/50837dou.gif)
那么我们可以从其他BSP目录下拷贝
![](/icons/50837yi.gif)
个即可
![](/icons/50837dou.gif)
然后做上述修改
![](/icons/50837dou.gif)
其他
![](/icons/50837de.gif)
内容基本可以不用修改
接下来需要修改tffsConfig.c文件
![](/icons/50837dou.gif)
为了方便管理
![](/icons/50837dou.gif)
通常我们将src/drv/tffs/目录下该文件拷贝到我们BSP目录下
![](/icons/50837dou.gif)
然后再做出修改
![](/icons/50837dou2.gif)
在MTDident
![](/icons/50837if.gif)
yRoutine mtdTable
![](/icons/50837zhk2.gif)
表中加入如下语句:
#
![](/icons/50837if.gif)
def INCLUDE_MTD_MX29LV
mx29lvMTDIdent
![](/icons/50837if.gif)
y,
#end
![](/icons/50837if.gif)
/* INCLUDE_MTD_MX29LV */
并在该文件开头声明
#
![](/icons/50837if.gif)
def INCLUDE_MTD_MX29LV
FLStatus mx29lvMTDIdent
![](/icons/50837if.gif)
y (FLFlash vol);
#end
![](/icons/50837if.gif)
/* INCLUDE_MTD_MX29LV */
最后就是将我们
![](/icons/50837de.gif)
flash相关MTD驱动加入到makefile中
![](/icons/50837dou2.gif)
即:
MACH_EXTRA = mx29lvMtd.o
为了方便我们调试MTD驱动
![](/icons/50837dou.gif)
应该在重新编译VxWorks映象前将诸如格式化flash、创建TrueFFS块设备、绑定此块设备到dosFs所必要
![](/icons/50837de.gif)
功能包含到VxWorks映像中
![](/icons/50837dou2.gif)
比如如下定义:
#
![](/icons/50837define.gif)
INCLUDE_TFFS
#
![](/icons/50837if.gif)
def INCLUDE_TFFS
#
![](/icons/50837define.gif)
INCLUDE_TFFS_DOSFS
#
![](/icons/50837define.gif)
INCLUDE_TFFS_SHOW
#
![](/icons/50837define.gif)
INCLUDE_DOSFS /* dosFs file system */
#
![](/icons/50837define.gif)
INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/
#
![](/icons/50837define.gif)
INCLUDE_TL_FTL
#
![](/icons/50837define.gif)
INCLUDE_IO_SYSTEM
#
![](/icons/50837define.gif)
INCLUDE_DISK_UTIL
#end
![](/icons/50837if.gif)
/* INCLUDE_DOSFS */
2、MTD驱动简介
做了上述配置后
![](/icons/50837dou.gif)
进入VxWorks操作系统后
![](/icons/50837dou.gif)
我们在shell上利用tffsShow工具来显示flash
![](/icons/50837de.gif)
信息
![](/icons/50837dou2.gif)
TffsShow
![](/icons/50837hanshu.gif)
最终会
![](/icons/50837diaoyong.gif)
MTD驱动中
![](/icons/50837de.gif)
mx29lvMtdIdentiy( )
![](/icons/50837hanshu.gif)
![](/icons/50837dou.gif)
在mx29lvMtdIdentiy ( )
![](/icons/50837hanshu.gif)
主要是通过读取MX29LV160BT芯片
![](/icons/50837de.gif)
设备和厂商ID来识别它
![](/icons/50837dou.gif)
然后对FLFlash结构成员进行
![](/icons/50837chushi.gif)
化
![](/icons/50837dou.gif)
最主要
![](/icons/50837de.gif)
几个参数是:
type
Flash内存
![](/icons/50837de.gif)
JEDEC ID号
erasableBlockSize
Flash内存
![](/icons/50837de.gif)
擦除块大小(字节)
![](/icons/50837dou2.gif)
设置这个值时应考虑到
![](/icons/50837int.gif)
erleaving
![](/icons/50837dou2.gif)
因此
![](/icons/50837dou.gif)
通常通过如下方法来设置它
![](/icons/50837de.gif)
大小
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.
![](/icons/50837int.gif)
erleaving;
对于MX29LV160BT
![](/icons/50837dou.gif)
MX29LV_MTD_SECTOR_SIZE为64K字节
chipSize
使用来构建TrueFFS文件系统
![](/icons/50837de.gif)
flash实际大小(字节)
noOfChips
使用来构建TrueFFS文件系统
![](/icons/50837de.gif)
flash实际片数
![](/icons/50837int.gif)
erleaving
Flash内存交叉因子(
![](/icons/50837int.gif)
erleaving factor)
![](/icons/50837dou2.gif)
即扩展数据总线
![](/icons/50837de.gif)
设备数
![](/icons/50837dou2.gif)
比如
![](/icons/50837dou.gif)
![](/icons/50837yi.gif)
个32位数据总线上
![](/icons/50837dou.gif)
我们可以使用4片8位或2片16位
![](/icons/50837de.gif)
设备
map
指向flash内存映射(map)
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
该
![](/icons/50837hanshu.gif)
将flash映射到内存区
read
指向flash内存
![](/icons/50837de.gif)
读
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
在MTD驱动识别
![](/icons/50837hanshu.gif)
中
![](/icons/50837dou.gif)
这个成员
![](/icons/50837hanshu.gif)
已经被
![](/icons/50837chushi.gif)
化为缺省
![](/icons/50837de.gif)
读
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
通常情况下
![](/icons/50837dou.gif)
我们不需要再
![](/icons/50837chushi.gif)
化它
![](/icons/50837dou.gif)
否则还需要修改很多相关
![](/icons/50837de.gif)
![](/icons/50837hanshu.gif)
write
指向flash内存
![](/icons/50837de.gif)
写
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
这个成员必须
![](/icons/50837chushi.gif)
化
![](/icons/50837dou.gif)
这是我们要做
![](/icons/50837de.gif)
![](/icons/50837yi.gif)
个重要工作
erase
指向flash内存
![](/icons/50837de.gif)
擦除
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
这个成员必须
![](/icons/50837chushi.gif)
化
![](/icons/50837dou.gif)
这也是我们要做
![](/icons/50837de.gif)
![](/icons/50837yi.gif)
个重要工作
针对FLFlash结构成员
![](/icons/50837dou.gif)
我们所关心
![](/icons/50837de.gif)
两个
![](/icons/50837hanshu.gif)
就是写和擦除
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
在mx29lvMtdIdentiy
![](/icons/50837kh.gif)
![](/icons/50837hanshu.gif)
中必须有如下定义:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite
![](/icons/50837kh.gif)
![](/icons/50837hanshu.gif)
中主要是实现将数据写到flash中
![](/icons/50837dou2.gif)
首先需要对扇区进行解锁
![](/icons/50837dou.gif)
然后写入写命令
![](/icons/50837dou.gif)
之后才能进行数据
![](/icons/50837de.gif)
写入
![](/icons/50837dou2.gif)
最后需要判断数据是否写完
![](/icons/50837dou2.gif)
为了确保操作成功
![](/icons/50837dou.gif)
我们应该在写完每个数据后进行数据
![](/icons/50837de.gif)
比较
![](/icons/50837dou.gif)
比较正确后方能进行下
![](/icons/50837yi.gif)
个数据
![](/icons/50837de.gif)
操作
在mx29lvErase
![](/icons/50837kh.gif)
![](/icons/50837hanshu.gif)
中主要是实现flash扇区
![](/icons/50837de.gif)
擦除
![](/icons/50837dou2.gif)
如今
![](/icons/50837de.gif)
flash
![](/icons/50837yi.gif)
般都是按照扇区进行擦除操作
![](/icons/50837de.gif)
![](/icons/50837dou2.gif)
在擦除操作之前也应该首先对扇区进行解锁
![](/icons/50837dou.gif)
然后写擦除建立和扇区擦除命令
![](/icons/50837dou2.gif)
擦除成功后
![](/icons/50837dou.gif)
flash中
![](/icons/50837de.gif)
内容应该是0xffff
![](/icons/50837dou2.gif)
所以为了确保成功
![](/icons/50837dou.gif)
我们还是应该在擦除后进行比较
![](/icons/50837dou.gif)
比较正确后方能进入下
![](/icons/50837yi.gif)
个扇区
![](/icons/50837de.gif)
擦除操作
![](/icons/50837dou.gif)
否则返回擦除
![](/icons/50837cuowu.gif)
标志
所以
![](/icons/50837dou.gif)
对于MTD驱动
![](/icons/50837de.gif)
调试
![](/icons/50837dou.gif)
基本上就是调试写和擦除两个
![](/icons/50837hanshu.gif)
![](/icons/50837dou2.gif)
在调试过程中
![](/icons/50837dou.gif)
我们可以在这两个
![](/icons/50837hanshu.gif)
相应位置加入打印语句来调试
![](/icons/50837dou2.gif)
为了能调试这两个
![](/icons/50837hanshu.gif)
![](/icons/50837dou.gif)
我们通过在shell上输入命令tffsDevFormat来格式化flash
![](/icons/50837dou.gif)
tffsDevFormat最终会
![](/icons/50837diaoyong.gif)
mx29lvErase和mx29lvWrite
![](/icons/50837hanshu.gif)
![](/icons/50837dou.gif)
如果成功就会返回0
![](/icons/50837dou.gif)
否则返回-1
![](/icons/50837dou2.gif)
当然也可以
![](/icons/50837diaoyong.gif)
tffsDevCreate
![](/icons/50837hanshu.gif)
来验证我们
![](/icons/50837de.gif)
写和擦除
![](/icons/50837hanshu.gif)
![](/icons/50837de.gif)
正确性
![](/icons/50837dou2.gif)
图2说明了tffsDevCreate
![](/icons/50837diaoyong.gif)
过程
[ 相关贴图 ]
在shell上利用tffsShow来验证mx29lvMtdIdentiy
è tffsShow
0:
![](/icons/50837socket.gif)
=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
说明已正确识别到MX29LV160BT设备
![](/icons/50837dou.gif)
设备号为0x2249
三、 建立TFFS设备
1、挂接设备名
MTD驱动调试成功后
![](/icons/50837dou.gif)
我们就可以给flash设备挂接上dos设备名
![](/icons/50837dou.gif)
如下操作:
格式化:
è tffsDevFormat
value = 1
è usrTffsConfig 0,0,”/tffs0”
value = 0
然后通过devs来查看挂接
![](/icons/50837de.gif)
设备名
è devs
drv name
0 /null
1 /tyCo/0
1 /tyCo/1
5 host:
6 /pty/rlogin.S
7 /pty/rlogin.M
3 /tffs0/
8 /vio
value = 25 = 0x19
看到/tffs0/说明挂接设备已经成功
![](/icons/50837dou.gif)
接下来就可以利用dosFs文件系统相关命令来操作flash了
![](/icons/50837dou2.gif)
如
![](/icons/50837dou.gif)
ls、copy等
2、从Flash中启动并下载VxWorks映像
要从flash中下载VxWorks映像
![](/icons/50837dou.gif)
首先需要把VxWorks映像拷贝到flash中
![](/icons/50837dou.gif)
在shell中
![](/icons/50837de.gif)
操作命令为copy “VxWorks”,”/tffs0/VxWorks”
![](/icons/50837dou.gif)
然后修改config.h文件中引导行
![](/icons/50837dou.gif)
如下:
#
![](/icons/50837define.gif)
DEFAULT_BOOT_LINE \
"tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm"
修改完后
![](/icons/50837dou.gif)
重新编译生成bootrom_uncmp.bin
![](/icons/50837dou.gif)
并把它烧写到flash中(注意:该flash与上面建立TFFS文件系统
![](/icons/50837de.gif)
flash不
![](/icons/50837yi.gif)
样
![](/icons/50837dou.gif)
它并没有建立文件系统)
![](/icons/50837dou2.gif)
然后重新启动
![](/icons/50837dou.gif)
即可看到如下启动画面:
boot device : tffs=0,0
unit number : 0
processor number : 0
host name : host
file name : /tffs0/VxWorks
inet on ethernet (e) : 192.168.0.154
host inet (h) : 192.168.0.153
user (u) : target
ftp password (pw) : target
flags (f) : 0x0
other (o) : cpm
Attaching to TFFS... done.
Loading /tffs0/VxWorks...894304
Starting at 0x10000...
Development
VxWorks version 5.5.1
KERNEL: WIND version 2.6
Copyright Wind River
![](/icons/50837System.gif)
s, Inc., 1984-2003
CPU: Motorola ADS - PowerPC 860. Processor #0.
Memory Size: 0x1000000. BSP version 1.2/5.
WDB Comm Type: WDB_COMM_END
WDB: Ready.
到此
![](/icons/50837dou.gif)
说明引导成功
![](/icons/50837dou2.gif)
flash整个TFFS文件系统就已经建立成功
四、 结论
VxWorks操作系统中支持TFFS文件系统
![](/icons/50837dou.gif)
我们将VxWorks映像作为文件放到flash上
![](/icons/50837dou.gif)
这就有利于开发者和用户更新应用
![](/icons/50837chengxu.gif)
而不需要影响bootrom
![](/icons/50837dou.gif)
直接更新VxWorks映像或者将应用
![](/icons/50837chengxu.gif)
直接copy到flash中
![](/icons/50837dou.gif)
然后装载到RAM中运行
参考文献
1 VxWorks 5.5 Programmer’s Guide.
延伸阅读
最新评论