【摘要】本文以Marvell芯片芳蘭為例,介紹了Marvell芯片方案SFU產(chǎn)品FXXX中,將保存?zhèn)€性化參數(shù)的flash分區(qū)以可讀寫方式掛載為jffs2文件系統(tǒng),在其中使用一個文件來保存?zhèn)€性化參數(shù),通過操作該文件來對個性化參數(shù)進行存取。
【關(guān)鍵詞】個性化參數(shù);存儲
一、概述
XPON產(chǎn)品的個性化參數(shù)主要用來對產(chǎn)品做個性化配置,可以設(shè)置CPUMAC地址、PON注冊用的sn,password等參數(shù),這些參數(shù)在產(chǎn)品出廠時進行設(shè)置,以后直接使用,且一般不再修改,因此通常在flash中劃分一個分區(qū)來保存。單板在出廠時通過setmac命令來設(shè)置個性化參數(shù),個性化參數(shù)被寫入上述文件中,由于linux文件系統(tǒng)具有緩存功能,寫文件成功之后實際內(nèi)容不一定會及時同步到flash中,因此需要手動同步操作。生產(chǎn)線上發(fā)現(xiàn),設(shè)置完個性化參數(shù),使用sync命令進行同步操作,返回成功后,硬件復(fù)位,系統(tǒng)起來后個性化參數(shù)全部丟失了,這就導(dǎo)致單板啟動之后無法正常工作。本文介紹了一種個性化參數(shù)存儲優(yōu)化的方式,通過這種方法,可以保證當個性化參數(shù)設(shè)置完成返回成功時,個性化參數(shù)已經(jīng)寫入到flash中。
二、芯片優(yōu)化參數(shù)
Marvell芯片方案SFU產(chǎn)品FXXX使用NANDflash,在對flash進行分區(qū)規(guī)劃時,單獨分配一個分區(qū)用來存放個性化參數(shù)。在版本啟動之后,對個性化參數(shù)分區(qū)以可讀寫方式掛載為jffs2文件系統(tǒng)。第一次獲取個性化參數(shù)時,會在個性化參數(shù)分區(qū)創(chuàng)建一個個性化參數(shù)文件。
個性化參數(shù)結(jié)構(gòu)體如下:
typedefstructTAG_PARAM_
{
unsignedshortwParamId;/個性化參數(shù)id/
unsignedshortwParamLen;/個性化參數(shù)長度/
unsignedshortwBufSize;/個性化參數(shù)數(shù)據(jù)區(qū)的長度/
unsignedcharcParamData[0];/個性化參數(shù)數(shù)據(jù)區(qū)首地址/
}TAG_PARAM_T;
個性化參數(shù)內(nèi)容緊跟在個性化參數(shù)結(jié)構(gòu)體之后,以字符串形式存取,用結(jié)構(gòu)體中的cParamData來引用。
目前需要設(shè)置的個性化參數(shù)不多,個性化參數(shù)空間定義為4K字節(jié)。對個性化參數(shù)的操作包括設(shè)置、刪除、獲取和格式化。對個性化參數(shù)文件的操作是通過系統(tǒng)調(diào)用open、read和write來實現(xiàn)。
在該產(chǎn)品產(chǎn)測過程中發(fā)現(xiàn),部分單板設(shè)置完個性化參數(shù)并且使用sync命令同步成功后,立即對單板硬件復(fù)位,當單板重新啟動之后,個性化參數(shù)全部丟失。通過走查代碼,我們推斷應(yīng)該是個性化參數(shù)并沒有真正寫入flash導(dǎo)致的。個性化參數(shù)是存放在文件中,當調(diào)用write函數(shù)向文件中寫入并返回成功時,并不表示內(nèi)容已經(jīng)寫入flash了,因為linux文件系統(tǒng)具有緩存功能,write函數(shù)只是將內(nèi)容放到緩存中,并不立即寫入到flash,操作系統(tǒng)會在適當?shù)臅r候(定時、緩存達到一定比例、“臟”數(shù)據(jù)達到一定比例等條件下)將緩存中的內(nèi)容同步到flash中。如果在緩存內(nèi)容同步到flash之前,對單板進行硬件復(fù)位,那么,個性化參數(shù)就可能丟失。
但是,產(chǎn)線在設(shè)置個性化參數(shù)之后,使用了sync命令進行手動同步,為什么還是出現(xiàn)這種情況呢?我們對sync命令的實現(xiàn)進行分析,發(fā)現(xiàn)sync函數(shù)只是將所有修改過的塊緩沖區(qū)排入寫隊列,然后就返回,它并不等待實際寫磁盤操作結(jié)束。
三、參數(shù)優(yōu)化
為了解決這個問題,必須保證設(shè)置的個性化參數(shù)及時寫入flash。這里有方案如下。
代碼中使用fsync系統(tǒng)調(diào)用實現(xiàn)同步功能,代替命令行執(zhí)行sync命令。fsync系統(tǒng)調(diào)用強制內(nèi)核把文件描述符fd所指定文件的所有臟緩沖區(qū)寫到flash中。當對個性化參數(shù)文件進行write操作之后,調(diào)用fsync對當前文件進行同步,可以保證內(nèi)容肯定會被寫入flash。這樣可以保證當調(diào)用setmac命令返回成功時,個性化參數(shù)內(nèi)容已經(jīng)寫入到flash中。
四、結(jié)語
使用方案修改之后,當使用setmac設(shè)置完個性化參數(shù),立即硬復(fù)位單板,啟動之后檢查設(shè)置的個性化參數(shù),沒有出現(xiàn)參數(shù)丟失的現(xiàn)象,該方案可以保證設(shè)置的個性化參數(shù)立即保存到flash中。
參考文獻
[1]于文暢.無源光網(wǎng)絡(luò)節(jié)能等關(guān)鍵技術(shù)的研究[D].北京:北京郵電大學(xué),2011.
[2]江國舟.10Gbps以太無源光網(wǎng)絡(luò)關(guān)鍵技術(shù)與應(yīng)用研究[D].武漢:華中科技大學(xué),2009
[3]余景文.10GEPON和10GGPON標準及最新進展[J].電信網(wǎng)技術(shù),2010(08).
作者簡介:余華(1963—),男,本科,武漢通信指揮學(xué)院,研究方向:通信技術(shù)、通信服務(wù)與業(yè)務(wù)規(guī)劃、網(wǎng)絡(luò)規(guī)劃等。