馬 昕 ,張士洋
(1.中國海洋大學物理海洋教育部重點實驗室,山東 青島266003;2.中國海洋大學海洋發展研究院,山東 青島266003)
一種實現海洋監測儀器大容量信息存儲的方法
馬 昕1,張士洋2
(1.中國海洋大學物理海洋教育部重點實驗室,山東 青島266003;2.中國海洋大學海洋發展研究院,山東 青島266003)
現代化建設對海洋監測儀器信息存儲提出了更高的要求,尤其是要客觀真實地反映實驗現象,需要的測試點增多、記錄數據量加大,使得許多小存儲量海洋監測儀器不能滿足當前實驗的要求。通過采用嵌入式實時操作系統VxWorks,在擴充的海量flash上運行文件系統來管理數據和代碼,為了更有效地管理大容量的nandflash存儲芯片上的數據文件,在VxWorks系統上設計了文件系統,實現了TureFFS塊設備驅動,與本機dosFs文件系統掛接在海洋監測儀器內測記錄節點,從而解決了系統信息的大容量存儲。最后通過利用該方法設計的鉭絲測波儀進行實驗,實驗結果較好地還原了波浪的真實圖像。研究的方法具有廣泛的適用性,在其他海洋測試系統中也有廣泛的應用前景。
NAND Flash;VxWorks;板級支持包 BSP;TureFFS
自容式海洋監測儀器的發展,要求將系統測量的數據采樣并傳送給內測記錄節點,該節點用來記錄并保存數據,回收后將數據導出,用于數據分析。目前使用的一些自容式海洋監測儀器系統中使用的內測記錄節點,由于受到自身存儲容量的限制,一般需要每隔一定時間周期采樣一次數據并存儲。但是隨著任務的多樣化、測量數據的復雜性,信息數據源增多,對數據采集的密度和存儲系統的容量也不能滿足要求,導致實驗情況不能得到全面的反應。比如現在使用的某型波浪測量儀,由于存儲容量的限制,一般每0.1 s采樣一次數據并存儲,如果要更加全面地得到實驗情況,采樣密度至少要增大10倍,則數據總量必然成比例增長,可見此時內測記錄節點的存儲容量和數據的導出方式已經成為能否客觀還原實驗狀況的基本保證。所以海洋監測儀器的大容量信息存儲的實現,可以保證能夠更加全面地得到實驗數據,更加真實地還原實驗狀況。
本文提出的一種實現方法,采用嵌入式實時系統Vx-Works作為操作系統,設計和實現了基于VxWorks的文件系統,并通過文件系統來管理大容量數據。硬件方面采用低功耗32位微處理器ARM作為嵌入式系統的控制芯片,來減少海洋監測儀器的功耗和散熱量。
內測記錄節點大容量存儲的實現離不開文件系統對數據文件的管理和調度。PC機使用的文件系統功能強大,但是對于海洋監測儀器這類嵌入式系統來說,文件系統過于復雜;并且DOS操作系統的非實時特性也無法滿足監測儀器應用的要求,而嵌入式實時操作系統的引入將很好地解決這一問題。嵌入式操作系統VxWorks以其強實時性、高可靠性、穩定性及體積小等優勢在商用和軍用領域得到廣泛應用[1],用它來代替傳統的DOS操作系統管理內測節點的數據文件,使得系統尺寸大大精簡,并且使實現多任務的海洋監測成為可能,系統穩定性也得到了保證。
存儲芯片方面,存儲器NAND Flash因為其具有容量大、體積小等優勢,被看作信息存儲器擴展的理想選擇[2],最新資料顯示,其單片的最大存儲容量已經可以達到2 G,勢必成為海洋監測領域嵌入式數據存儲的主流發展方向。本文采用samsung公司的16 MB的NANDFlash芯片K9F2808UOB。
隨著文件量的增加,必然引入管理和調度問題,操作系統對文件系統的支持則成為系統擴展大容量存儲的前提條件。
VxWorks中,文件系統是塊設備和I/O子系統間的接口[3]。文件系統并不與特定類型的塊設備或驅動綁定,它和設備驅動間使用標準接口,這樣文件系統可以靈活地在設備驅動上移植。VxWorks包括幾種支持使用塊設備(如RAM,軟盤,硬盤,Flash 等)的本地文件系統,如 dosFs、rt11Fs、rawFs、tapeFs、cdRomFs等。其中dosFs提供給用戶極大的靈活性以滿足塊存取設備的實時操作,可以任意創建任意數目文件;使用連續文件模式,提高操作性能;廣泛兼容各種可存儲和可檢索媒體(如flash、軟盤和硬盤等);支持FAT12、FAT16和FAT32文件分配表格式;可以從dosFs文件系統中啟動VxWorks操作系統等,最后一點尤為重要。
VxWorks的文件系統與底層硬件存儲器之間有一層抽象的塊設備驅動層。TureFFS是目前常用的在VxWorks上實現文件系統的方法,TureFFS(Ture Flash File System)驅動是M-Systems公司為VxWorks定制的,為各種Flash存儲器提供通常的塊設備接口。它由Translation layer,MTDs,Socket Layer三部分組成,開發者面向Socket和MTD兩層。
實現TureFFS是在操作系統基礎上對NAND Flash塊設備進行讀寫或擦除等操作的必要前提。基于VxWorks操作系統的FLASH文件系統TureFFS的實現,使得系統文件的大容量存儲和有序管理成為可能,應用在海洋監測儀器內測記錄節點的信息存儲領域,會使測試數據的導出更加方便快捷[4]。
TureFFS是Tornado開發環境中集成的,相當于硬件塊設備的驅動接口,它不是直接與I/O系統接口,而是與I/O系統下的文件系統接口[5]。文件系統實現了大部分的功能,塊設備驅動程序只需提供讀塊、寫塊、復位設備、執行I/O控制和檢查設備狀態的例程,方便了使用一系列的嵌入式閃存設備來實現快速可靠的物理存儲。為了將Flash抽象為普通的塊設備,硬件塊設備的驅動接口將Flash映射為一系列連續的虛擬塊。
本文使用的塊設備是Flash。為了在Flash存儲器上使用文件系統,需要添加TFFS驅動,作為文件系統和存儲器的中間層。VxWorks為TureFFS提供很完善的支持,TureFFS的MTD已經包括了intel、AMD等廠商的Flash驅動,并可方便地將用戶自己的驅動加入進去。上層的dosFs很好地和TureFFS結合,用戶可以直接用C語言中常用的文件函數對文件系統操作(文件管理,創建,讀,寫,存等)。通過仿真Vx-Works dosFs文件系統下的驅動,開發者可以使用標準的文件系統界面來產生和操作一個文件系統,這樣,在閃存設備上進行讀寫操作就與dosFs文件系統設備是一樣了。TureFFS允許將Flash芯片或者其一部分作為硬盤一樣,通過NFS(網絡文件系統)或者dosFs文件系統進行訪問。
如前所述,TrueFFS由3層結構實現:翻譯層(TL),MTD層和Socket層,如圖1所示。

圖1 TrueFFS與dosFs
TL層是處理TFFS與dosFs之間的高層接口,為上層軟件提供標準塊設備接口,主要完成flash到邏輯塊的映射、wear-leveling(使flash中的各unit的擦除次數比較平均,從而延長flash使用壽命的一種方法)、廢塊回收等功能。
MTD層是針對各類不同型號的flash開發的標準內存驅動程序,用于實現Flash存儲器相關的操作指令序列。
Socket層是處理TFFS與硬件之間的接口,實現電壓控制、基地址設置和寫保護控制等。
最上面的Core層不屬于TrueFFS,它將其他各層連接起來,將操作傳送到其他各層,并處理全局性問題,比如“后臺”、垃圾回收、時鐘和其他的系統資源。這一層以二進制原碼形式提供。
在VxWorks中,TL以庫的形式提供,包括TrueFFsDrv、TrueFFsLib以及ftl和fl開頭的目標模塊;MTD以源代碼形式提供,在“ argetsrcdrv ffs”目錄下,以Flash芯片型號命名。如果沒有特殊芯片的代碼,可以參考近似代碼,需要改寫的地方較多;Socket也以源代碼提供,在“targetsrcTrueFFssockets”目錄下,按照硬件的具體型號命名,如果找不到對應的代碼,同樣也需要參考改寫一個,改寫的部分較少。
由以上分析可知,VxWorks自帶的TrueFFS中,已經實現了很多功能。因此需要做的工作主要是:對TL層進行必要的配置,為目標板上的閃存編寫MTD層和socket層的驅動程序。在定制TrueFFS時,可以將xxxxmtd.c、tffsConfig.c和sysTffs.c直接添加到自己的BSP目錄中,方便代碼管理。
本文開發中的采用的是Bootrom加VxWorks的目標機程序映像組織方式,所要達到的設計目標為:
(1)在第一片FLASH中存放Bootrom程序映像,用硬件燒寫板加上燒寫軟件FFT將程序映像寫入Flash存儲器,在后半部分加載TrueFFS;
(2)在NANDFlash上建立TrueFFS+dosFs文件系統,用于存儲程序的映像文件,模塊目標文件和配置參數文件等;
(3)通過串口進行調試;
(4)啟動FTP服務器,通過它來操作TrueFFS文件系統。
進行BSP的定制時,主要工作是修改與硬件相關的部分,對系統部分不用關心。根據TrueFFS的三層結構分別實現,并完成與系統的掛接。具體實施時,在Socket層,先將“srcdrvTrueFFssockets”目錄下的mv177-sysTrueFFs.c復制到BSP目錄下,并更名為sysTrueFFs.c,sysTrueffs.c包含了TrueffsConfig.c,還需要復制TrueffsConfig.c到BSP目錄。MTD層文件nandMTD.c要自己編寫。
(1)在sysTrueFFs.c中修改不多,主要添加自己的MTD宏定義,設置Flash存儲器基址和大小,屏蔽無關的寫保護操作。主要工作如圖2所示。
(2)為了聯系socket和MTD層,需要對TrueFFsConfig.c文件進行修改,該文件主要向mtdTable[]表注冊自己的MTD:

圖2 sysTrueFFs.c的修改

注意還要修改sysTrueFFs.c到當前路徑。
(3)nandMTD.c文件可以參考bsp目錄下的文件修改,但是因為硬件的特殊性,改動的較多,可以自己編寫。這里給出要修改和添加的主要內容:首先是命令、地址和數據的地址定義,每個塊上的頁數定義為32頁,根據K9F2808UOB手冊,chip ID為0xec73,在isKnownMedia函數中會引用。然后進行Flash的讀寫以及擦除的命令、狀態和執行等驅動函數的編寫。注意,讀數據和寫數據操作是以頁為單位的,而擦除操作是以塊為單位的;nandMTDIdentify函數也要根據分支修改。這部分的編碼工作量比較大,根據模板的改動很大,基本需要重寫,由于篇幅關系不一一列舉。
(4)啟動時加載TrueFFS文件系統,在bootConfig.c文件的CmdLoop函數開始處添加代碼,完成TrueFFS的初始化。初始化時首先調用TrueFFsDrv,如果在config.h中定義INCLUDE_TRUEFFS,則在 usrRoot()中調用 TrueFFsDrv(),這個函數建立TrueFFS管理需要的互斥信號量、全局變量和數據結構,并完成Socket注冊和啟動Socket查詢任務;接著調用TrueFFsDevFormat函數格式化Flash;格式化成功后,便可以加載使用了。調用TrueFFsDevCreate創建塊設備;接著調用dosFsInit函數,初始化dos文件系統;最后調用usrTrueFFs-Config函數進行dosFs的安裝,這個函數被用來在引導過程中找到并加載VxWorks映像,注意到該函數中沒有TrueFFs-Drv調用,所以初始化的一開始,加上了調用TrueFFsDrv的代碼。
(5)config.h的配置:其中需配置Bootline;內存地址和大小;Bootrom的大小;包含相關的組件,如INCLUDE_FTP_SERVER,INCLUDE_DOSFS,INCLUDE_TRUEFFS 和自定義的INCLUDE_MTD_NAND宏,用來包含Flash驅動;要確定調試方式為串口WDB_COMM_SERIAL等等。
(6)Makefile文件的修改:加入 MACH_EXTRA=nandMTD.o
添加對nandMTD.c文件的引用,要注意的是sysTrueFFs.c由bootConfig.c包含調用,所以不在Makefile中添加。
(1)Bootrom啟動:執行后,ftp server和文件系統已經運行。
(2)加載VxWorks:需要先通過ftp將VxWorks映像傳送到TrueFFS文件系統,系統再次啟動時會自動從TrueFFS加載VxWorks映像,VxWorks大約852k。建議在調試時用網絡加載。
(3)VxWorks啟動:Bootrom運行加載 VxWorks后,Vx-Works開始運行,啟動了ftp服務器和文件系統,可以在主機上通過ftp客戶端連接目標板,更換VxWorks映像,重新啟動后,新映像就可以運行了。應用程序映像加載類似。
具體實現時需要注意如下幾點:
(1)需要在擦除和寫操作中屏蔽中斷,因為Flash在擦除、寫和讀ID狀態時,不能正常讀取數據。異常入口位于存儲器的開始處,異常發生時不能得到正常的入口指令,會導致系統跑飛。
(2)Flash芯片的手冊中描述的地址是按字而言,也就是芯片的A0接在CPU的A1上,所以手冊給出的指令地址不能直接使用,需要左移一位。
(3)建議在一些函數的入口添加調試信息,打印出入口參數等信息,方便錯誤定位。
(4)最好在VxWorks中調試TFFS,而不是在bootRom中。
在實際某些應用時,如果對該嵌入式系統上添加實現USB驅動,就可以將節點NANDFlash存儲器當做U盤使用,更方便系統測量信息數據與上位機進行交換,系統調試代碼的存儲及下載也更加方便。
筆者所在物理海洋實驗室利用本文的改進方法,將傳統的波浪測試儀器——鉭絲測波儀進行了內存的擴充。
傳統的鉭絲測波儀內存只有1 M,最大采樣速率只有20 Hz,采集數據的個數也只能達到1 000個左右,利用它測得的波高、周期均不能達到非常準確,在實際物理海洋實驗中應用所測量的數據僅能作為參考,對很多物理海洋實驗驗證方面是不小的缺憾。改進后的鉭絲測波儀內存擴充到32 M,最大采樣速率可達到50 Hz,采樣個數可以達到10 000個左右,完全滿足了波浪的測量精度。
為了比較兩種測波儀的測量精度,在實驗室水槽(如圖3)中產生一個波高15 cm、周期12 s的規則正弦波,如圖4所示,利用兩臺儀器測得的平均波高和波形圖像來觀測測波儀的測量精度。

圖3 物理海洋實驗室二維造波水槽
為了直觀的比較,將兩個鉭絲測波儀在相同的位置同時進行測量。對改進前的鉭絲測波儀采樣速率設置為最大20 Hz,采樣個數設置為最大的1 000個,其觀測的圖像如圖5所示,測得波形圖像是不連續的,并且失真非常嚴重,利用測得數據進行平均波高的推算,只有12.47 cm左右,與實際設定的15 cm誤差大約在2.5 cm左右,遠遠超出了物理海洋實驗要求的0.5 cm的最大誤差精度范圍。這主要是因為測波儀本身內存容量有限,只能設定比較長的采樣間隔周期,中間丟失了很多有用的數據。

圖4 二維規則波

圖5 改進前鉭絲測波儀波形圖
利用改進型的鉭絲測波儀,設置采樣速率為20 Hz,采樣個數設置為10 000個,其觀測的圖像如圖6所示,可以明顯看出波形圖像非常接近連續,幾乎沒有圖像的失真,利用觀測數據進行平均波高的推算,測得波高為14.71 cm左右,與實際設定的15 cm誤差大約在0.3 cm左右,符合物理海洋實驗要求的0.5 cm的最大誤差精度范圍。
改進后的測波儀由于內存容量的增大,使得測量的時間間隔和測量個數都有極大的提高,使得更多的實驗數據被觀測到,測量的結果也就更加真實可信。可見論文研究的成果對于自容式海洋監測儀器的數據監測有很大的促進和提高。

圖6 改進后鉭絲測波儀波形圖
[1]李忠民.ARM嵌入式VxWorks實踐教程[M].北京:北京航空航天大學出版社,2006.
[2]陳智育.VxWorks程序開發實踐[M].北京:人民郵電出版社,2004.
[3]何永琦,符欲梅.基于現場監測的嵌入式Flash文件系統的設計和實現[J].微計算機應用,2004,25(3):335-338.
[4]王慧,吳旭光.VxWorks在AT91FR40162上的BSP定制[J].單片機與嵌入式系統設計,2003(9):77-81.
[5]唐德波,楊斌,石禹.TrueFFS原理及其在Flash存儲器上的應用[J].電測與儀表,2006,43(484):61-64.
Large Capacity Information Storage Method for Ocean Monitoring Equipments
MA Xin1,ZHANG Shi-yang2
(1.Key Laboratory of Physical Oceanography,Ocean University of China,Ministry of Education,Qingdao Shandong 266003,China;2.Department of Oceanography,Ocean University of China,Qingdao Shandong 266003,China)
Ocean exploration and military applications have put forward higher demands for ocean monitoring equipment.Especially imaging experiment phenomena with extension,manifold testing point and log data result in ocean monitoring equipments with small memory not suitable for applications.A method of data storage and transmission with the embedded operating system VxWorks and Ture Flash File System (TureFFS)drivers based on the NAND flash device is presented.To effectively manage the data files on the NAND flash storage chip of large capacity,a file system on the VxWorks system is designed to realize TureFFS communication with VxWorks dosFs on the ocean monitoring equipments.Thus,large capacity information storage of ocean monitoring equipment can be implemented.Finally,experiments using Tantalum thread wave measure equipment are conducted to verify the effectiveness.The scheme may be applied for other ocean monitoring equipment systems.
NAND Flash;VxWorks;BSP(board support package);TureFFS
P715;TP274
B
1003-2029(2011)04-0011-05
2011-04-17
馬昕(1976-),男,工程師,主要研究方向為海洋監測儀器設計開發和物理海洋實驗設計。