APP下载

一种基于Flash的VxWorks操作系统快速引导方法设计

2016-11-25肖二宁张兴明

电子设计工程 2016年18期
关键词:字符串驱动程序嵌入式

肖二宁,张兴明,李 晗,魏 帅

(国家数字交换系统工程技术研究中心 河南 郑州 450000)

一种基于Flash的VxWorks操作系统快速引导方法设计

肖二宁,张兴明,李 晗,魏 帅

(国家数字交换系统工程技术研究中心 河南 郑州 450000)

针对在嵌入式系统中缺少NVRAM并对读写速度要求不是很高的情况下,以VxWorks操作系统Workbench3.1为平台,设计了一种基于Flash的VxWorks操作系统快速引导方法,该方法通过用NOR Flash存储器代替NVRAM保存引导信息,并运用了1+1容错机制,经验证,该方法实现了VxWorks操作系统的快速引导,并有效降低了Flash的擦除频率,延长了Flash寿命,提高了系统的稳定性。

Flash存储器;VxWorks;接口函数;快速引导

在嵌入式系统中,如交换机、路由器、各种PDA设备等,NVRAM一般用来保存操作系统配置信息,而Flash通常用来存储数据[1]。在引导操作系统时,需要配置引导参数,如主机名,主机IP,目标机名,用户名,口令等信息,可以通过把配置信息写入NVRAM来降低引导时间,同时,也不用每次系统重启就需要配置引导信息,大大方便了开发人员的调试,但并不是每个硬件系统都配备有NVRAM,而一般的嵌入式硬件都有Flash,由于Flash工作机制与NVRAM相似,都为掉电非易失,在实时性要求不是很高的情况下,可以考虑用Flash实现NVRAM的功能[2]。

VxWorks是美国WindRiver公司设计开发的一种嵌入式实时操作系统,该系统有良好的可靠性和卓越的实时性,在通信、军事、航空、电力等方面有广泛的应用[2-4],本系统采用Wind River Workbench3.1作为交叉编译工具。在Vxworks的低级集成开发环境版本Tornado中可以通过修改autoboot函数来进行配置,但在VxWroks高级版本WorkBench[5-6]中,此函数已被封装,但VxWorks6.7(以下简称VxWorks)提供了nvRamToFlash驱动代码接口,但有很大缺陷:1)该驱动所写Flash偏移量为固定值,即频繁的对一块Flash进行擦除操作,但每块Flash擦除次数有限[7],但在调试过程中需要多次配置启动信息,在同一块进行频繁擦除,缩短了Flash寿命[8]。2)一旦该块变为无效块,配置的启动信息将无法写入Flash,容错性差。

在VxWorks操作系统的基础上,本文设计了一种新的Flash代替NVRAM的驱动程序算法,该驱动程序算法不仅能实现快速引导操作系统,降低了Flash擦除频率,延长了Flash寿命,并且运用了1+1的冗余保护机制,提高了系统的稳定性。

1 系统硬件组成

本系统的硬件为交换机板卡,采用FreescaleCDS8548[9]作为CPU,核时钟频率为800 MHz,把1 G DDR2 SDRAM作为内存,其上带有两片NumonyxAxcell M29EW Nor Flash芯片[10],每片大小为128 MB,片上一块为128 KB,本系统将两片Flash拼接起来看作一片,大小为256 MB,片上一块为256 KB,地址划分为0xE00000000~0xEFFFFFFF,取最后两块作为保存启动信息块,记为块0、块1,其中每块第一个区域用作保存参数信息偏移量,块 0地址区域为 0xEFF80000~0xEFFAFFFF,块1地址区域为0xEFFB0000~0xEFFFFFFF,块0用作默认块,块1做为备用块,若块0无效,则启用块1,这种1+1冗余保护机制大大降低了系统宕机率。

2 VxWorks引导启动信息过程分析

Flash中的引导启动参数是以字符串的形式写入的,存放在BOOT_LINE中,字符串长度一般默认为255[11],也可以在config.h中进行修改,因本系统设定的每个区域为256字节,把最后一字节统一设定为常数0,代表该块已存信息,在查找空白块时,只需读取每区域中的最后一字节是否为0即可,若为0则不为空,若为1则为空,Flash地址与大小也在config.h中定义,本系统把宏NV_RAM_ADRS定义为Flash起始基地址,在VxWorks引导操作系统启动过程中,引导程序执行到usrNet.c中的usrbootlineInit()函数时,该函数首先读取Flash中是否有配置信息,若有,则把配置信息读取到BOOT_LINE中,如没有,则把config.h中定义的DEFAULT_BOOT_LINE赋给BOOT_LINE,在引导操作系统启动[12]过程中,调试人员有7 s时间输入命令,当输入命令c后,可以配置BOOT_LINE信息,配置完成后,写入Flash。由此过程可以看出,实现快速引导的关键在于设计Flash代替NVRAM的接口函数[13-14]。引导过程流程图如图1所示。

图1 VxWorks操作系统引导过程流程图

3FLASH配置成NVRAM的接口函数设计

VxWorks引导程序启动过程中通过两个接口函数读写FLASH代替NVRAM,下面介绍下接口函数的设计:

函 数 1:extern STATUS sysNvRamSet(char*string,intstrLen,int offset)

该函数实现向Flash中写入字符串,3个输入参数分别为写入NVRAM字符串,字符串长度,写入地址偏移量,若写入成功返回OK,不成功则返回ERROR。

函数1的C语言实现算法如下:

算法说明:

首先选择要写入的块,默认情况下选择0块,把NVRAM地址NV_RAM_ADRS配置成0xEFF80100,如块0无效,则选择块1,把NVRAM地址配置成0xEFFB0100,然后判断字符串长度是否合法,如不合法,返回ERROR,然后从NV_RAM_ADRS往上查找,若检查到某区域最后一个字节为0,则该区域为空白,则在Flash中更新为该区域offset,若没有找到空白区域,证明该块已满,调用Flash擦除函数擦除Flash块,并把offset置为0,然后根据offset往Flash中写入BOOT_LINE。

函 数 2:extern STATUS sysNvRamGet(char*string,intstrLen,int offset)

该函数3个输入参数分别为读入配置信息存放字符串,读取配置信息长度,读取地址偏移量,若读取成功则返回OK,不成功则返回ERROR。

函数2的C语言实现算法为:

算法说明:

首先根据NV_RAM_ADRS基地址读取引导参数偏移量信息offset,然后根据offset读去Flash中的引导参数,然后判断该引导参数字符串是否合法,如不合法,则返回ERROR,合法,则返回OK。

接口函数1,2流程如图2所示。

图2 读写引导参数流程图

4 系统测试与分析

在系统测试时,首先,Flash中没有存储Boot信息,需要通过手动输入 BOOT_LINE信息,接着进行重启,此时,BOOT_LINE信息已经存入Flash中,可以直接进行启动,正常启动图如图3所示,但在配置的过程中需要注意在config.h头文件中不要使能宏定义INCLUDE_NV_RAM,因为系统本身并没有使用NVRAM,使能NVRAM有可能引起系统意想不到的错误,只需要配置NVRAM地址和大小就可以实现功能[15]。必须注释系统中定义的sysNvRamGet()与sysNvRamSet()函数,因为如若不注释,则会引起重复定义警告,导致自己编写的函数无效。由于VxWorks把启动前输入引导配置信息这一部分封装起来,故必须严格按照VxWorks引导启动流程进行配置,而不能使用自己定义的函数名,只能修改VxWorks提供的函数。无论引导参数信息有多少字节,每个存放引导参数信息的区域必须严格按照256字节进行分块,因为查找空白块,读取引导参数信息等操作都是对齐操作。

图3 VxWorks系统通过Flash正常启动图

5结 论

在VxWorks环境下,采用本文设计的Flash代替NVRAM保存引导参数信息虽然在读取、擦除Flash,查询空白区域时额外需要一定时间(2~5 s),但该方法操作方便,稳定性好,而且有效减少了Flash擦除次数,经验证在验证板卡上运行稳定,读写BOOT_LINE正常,给调试人员带来了很大方便。

[1]蔡卫平.VxWorks系统下的NVRAM To Flash驱动程序编写[J].电子工程师,2007(1):52-54.

[2]潘燕梅.基于Nucleus的闪存文件系统研究和改进[J].计算机测量与控制,2011(1):80-81.

[3]胡明民.基于实时操作系统VxWorks的驱动程序开发[D].西安:西安电子科技大学,2012.

[4]周勇军.关于VxWorks系统及其研究现状的评述[J].测控技术,2015(3):89-90.

[5]陈怀民.VxWorks下设备驱动程序开发技术研究[J].现代电子技术,2015(10):79-80.

[6]宗起振.基于Vxworks的智能变压器在线监测系统设计与应用[J].计算技术与自动化,2014(4):12-15.

[7]肖磊.VxWorks下基于socket的网络通信设计[J].计算机与网络,2012(9):13-15.

[8]石炜.基于VxWorks的星载控制计算机动态可重构研究[J].电子设计工程,2013(6):12-14.

[9]风河为赛灵思Zync-7000可拓展处理平台提供软件支持[J].电信技术,2012(8):18-20.

[10]吕赟.嵌入式文件系统在NOR和NAND型flash上的实现和改进[D].武汉:武汉工程大学,2008.

[11]楼杨.基于MPC8548的嵌入式设备光通信接口设计与实现[J].计算机测量与控制,2011(4):45-50.

[12]康凤举.基于VxWorks的无人机飞控计算机快速启动导引技术研究[J].计算机测量与控制,2013(3):98-100.

[13]Sooyong Kang.Performance trade-offs in using NVRAM write buffer for flash memory-based storage devices[J].IEEE Transactions on Computers,2012(8):76-80.

[14]Siqiang FAN.Enhanced offset averaging technique for flash ADC design[J].清华大学学报(英文版),2011(3):78-80.

[15]邵富杰.用NOR Flash建立VxWorks TrueFFS文件系统[J].单片机与嵌入式系统应用,2012(4):56-60.

[16]熊金.基于CH376实现TMS320LF240x片内Flash在线编程[J].工业仪表与自动化装置,2014(6):37-39.

[17]周彬,刘保录,王永喜.基于VxWorks的油井多参量采集系统设计[J].工业仪表与自动化装置,2014(1):66-68.

Design of a fast boot method of VxWorks embedded system based on NOR Flash

XIAO Er-ning,ZHANG Xing-ming,LI Han,WEI Shuai
(National Digital Switching System Engineering Technology Research Center,Zhengzhou 450000,China)

Pointing to the condition that the embedded system is lack of NVRAM and the write&read speed request is not strict,a fast boot method of operation system based on Flash is designed on the platform of Vxworks operating system,the method uses NOR Flash storage for taking place of NVRAM to store boot information,and a 1+1 fault-tolerant mechanism is used.The test results show that it realizes the fast boot of operation system,and can effectively reduce the erase frequency,

Flash storage;VxWorks;interface function;fast boot

TN02

A

1674-6236(2016)18-0082-03

2016-01-23 稿件编号:201601219

国家自然科学基金创新群体项目(61521003)

肖二宁(1990—),男,河南开封人,硕士。研究方向:嵌入式技术。

extend the service life of Flash,improves the system stability.

猜你喜欢

字符串驱动程序嵌入式
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于文本挖掘的语词典研究
阻止Windows Update更新驱动程序
TS系列红外传感器在嵌入式控制系统中的应用
计算机硬件设备驱动程序分析
搭建基于Qt的嵌入式开发平台
最简单的排序算法(续)
一种新的基于对称性的字符串相似性处理算法
倍福 CX8091嵌入式控制器
高效的top-k相似字符串查询算法