【摘要】本文以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—),男,本科,武漢通信指揮學院,研究方向:通信技術、通信服務與業務規劃、網絡規劃等。