【摘要】本文以Marvell芯片芳兰为例,介绍了Marvell芯片方案SFU产品FXXX中,将保存个性化参数的flash分区以可读写方式挂载为jffs2文件系统,在其中使用一个文件来保存个性化参数,通过操作该文件来对个性化参数进行存取。
【关键词】个性化参数;存储
一、概述
XPON产品的个性化参数主要用来对产品做个性化配置,可以设置CPUMAC地址、PON注册用的sn,password等参数,这些参数在产品出厂时进行设置,以后直接使用,且一般不再修改,因此通常在flash中划分一个分区来保存。单板在出厂时通过setmac命令来设置个性化参数,个性化参数被写入上述文件中,由于linux文件系统具有缓存功能,写文件成功之后实际内容不一定会及时同步到flash中,因此需要手动同步操作。生产线上发现,设置完个性化参数,使用sync命令进行同步操作,返回成功后,硬件复位,系统起来后个性化参数全部丢失了,这就导致单板启动之后无法正常工作。本文介绍了一种个性化参数存储优化的方式,通过这种方法,可以保证当个性化参数设置完成返回成功时,个性化参数已经写入到flash中。
二、芯片优化参数
Marvell芯片方案SFU产品FXXX使用NANDflash,在对flash进行分区规划时,单独分配一个分区用来存放个性化参数。在版本启动之后,对个性化参数分区以可读写方式挂载为jffs2文件系统。第一次获取个性化参数时,会在个性化参数分区创建一个个性化参数文件。
个性化参数结构体如下:
typedefstructTAG_PARAM_
{
unsignedshortwParamId;/个性化参数id/
unsignedshortwParamLen;/个性化参数长度/
unsignedshortwBufSize;/个性化参数数据区的长度/
unsignedcharcParamData[0];/个性化参数数据区首地址/
}TAG_PARAM_T;
个性化参数内容紧跟在个性化参数结构体之后,以字符串形式存取,用结构体中的cParamData来引用。
目前需要设置的个性化参数不多,个性化参数空间定义为4K字节。对个性化参数的操作包括设置、删除、获取和格式化。对个性化参数文件的操作是通过系统调用open、read和write来实现。
在该产品产测过程中发现,部分单板设置完个性化参数并且使用sync命令同步成功后,立即对单板硬件复位,当单板重新启动之后,个性化参数全部丢失。通过走查代码,我们推断应该是个性化参数并没有真正写入flash导致的。个性化参数是存放在文件中,当调用write函数向文件中写入并返回成功时,并不表示内容已经写入flash了,因为linux文件系统具有缓存功能,write函数只是将内容放到缓存中,并不立即写入到flash,操作系统会在适当的时候(定时、缓存达到一定比例、“脏”数据达到一定比例等条件下)将缓存中的内容同步到flash中。如果在缓存内容同步到flash之前,对单板进行硬件复位,那么,个性化参数就可能丢失。
但是,产线在设置个性化参数之后,使用了sync命令进行手动同步,为什么还是出现这种情况呢?我们对sync命令的实现进行分析,发现sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。
三、参数优化
为了解决这个问题,必须保证设置的个性化参数及时写入flash。这里有方案如下。
代码中使用fsync系统调用实现同步功能,代替命令行执行sync命令。fsync系统调用强制内核把文件描述符fd所指定文件的所有脏缓冲区写到flash中。当对个性化参数文件进行write操作之后,调用fsync对当前文件进行同步,可以保证内容肯定会被写入flash。这样可以保证当调用setmac命令返回成功时,个性化参数内容已经写入到flash中。
四、结语
使用方案修改之后,当使用setmac设置完个性化参数,立即硬复位单板,启动之后检查设置的个性化参数,没有出现参数丢失的现象,该方案可以保证设置的个性化参数立即保存到flash中。
参考文献
[1]于文畅.无源光网络节能等关键技术的研究[D].北京:北京邮电大学,2011.
[2]江国舟.10Gbps以太无源光网络关键技术与应用研究[D].武汉:华中科技大学,2009
[3]余景文.10GEPON和10GGPON标准及最新进展[J].电信网技术,2010(08).
作者簡介:余华(1963—),男,本科,武汉通信指挥学院,研究方向:通信技术、通信服务与业务规划、网络规划等。