基于TFFS的成像聲吶文件系統(tǒng)設(shè)計(jì)
3 TrueFFS系統(tǒng)設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/273339.htm3.1 功能層的實(shí)現(xiàn)
為了使生成的VxWorks映像支持TrueFFS系統(tǒng),需要對(duì)如下文件進(jìn)行配置:
config.h用來(lái)定義系統(tǒng)包含的配置,這使得VxWorks的初始化代碼調(diào)用tffsDrv()來(lái)創(chuàng)建管理TrueFFS所需的結(jié)構(gòu)和全局變量,并在運(yùn)行MTD確認(rèn)程序之前為所有掛接了的Flash設(shè)備注冊(cè)socket組件驅(qū)動(dòng)。在鏈接時(shí),通過(guò)解析與tffsDrv()相關(guān)聯(lián)的符號(hào)可以將TrueFFS所必須的軟件模塊鏈接到VxWorks映像中。
xxxMtd.c是MTD驅(qū)動(dòng)文件,主要包含了針對(duì)所使用的具體Flash設(shè)備所編寫(xiě)的底層驅(qū)動(dòng)函數(shù),由于我們使用的Flash是SPANSION公司的S29GL512P10TFIR20芯片,Tornado或者Workbench并未提供相應(yīng)的MTD驅(qū)動(dòng),需要自己編寫(xiě),具體在3.2節(jié)中進(jìn)行了闡述。
sysTffs.c文件將TrueFFS三個(gè)功能層鏈接到一起,并與VxWorks關(guān)聯(lián)并決定應(yīng)該包含哪個(gè)翻譯層和MTD模塊,本文Flash芯片采用的是NOR-based技術(shù),包含INCLUDE_TL_FTL組件即可。
tffsConfig.c文件在mtdTable[]表中注冊(cè)自己的MTD。如果你新寫(xiě)了一個(gè)MTD并希望TrueFFS可以識(shí)別它,就需要在此表中添加它的注冊(cè)信息。
Makefile文件用來(lái)添加TrueFFS的目標(biāo)文件。
3.2 MTD驅(qū)動(dòng)的編寫(xiě)
MTD和具體的Flash存儲(chǔ)器相關(guān),實(shí)現(xiàn)讀、寫(xiě)、擦除、映射等操作,這里我們針對(duì)S29GL512P10TFIR20芯片編寫(xiě)了驅(qū)動(dòng)文件的入口函數(shù)、Flash映射函數(shù)、Flash擦除函數(shù)、Flash寫(xiě)函數(shù)。擦除和寫(xiě)函數(shù)是編寫(xiě)MTD驅(qū)動(dòng)時(shí)最關(guān)鍵的兩個(gè)函數(shù)。
MTD入口函數(shù)主要用來(lái)探測(cè)設(shè)備并識(shí)別設(shè)備ID。若返回的設(shè)備ID是其支持的設(shè)備ID,則對(duì)FLFlash結(jié)構(gòu)成員進(jìn)行初始化;否則返回失敗。
Flash地址映射函數(shù)將系統(tǒng)傳遞給map函數(shù)的Flash片內(nèi)地址轉(zhuǎn)換為系統(tǒng)地址。一般直接在片內(nèi)地址的基礎(chǔ)上加上Flash的基地址即可。
Flash擦除函數(shù)主要用于擦除TrueFFS管理的Flash區(qū)域。Flash的擦除操作是成塊進(jìn)行的,擦除前先要對(duì)扇區(qū)進(jìn)行解鎖,然后寫(xiě)入擦除建立和擦除扇區(qū)命令,擦除成功后,內(nèi)容應(yīng)該均為1,以此來(lái)判斷是否擦除成功。
Flash寫(xiě)函數(shù)主要實(shí)現(xiàn)寫(xiě)Flash操作。寫(xiě)入前首先要對(duì)扇區(qū)解鎖,然后判斷是否是改寫(xiě)操作,若是則需要進(jìn)行擦除操作,否則直接寫(xiě)命令、寫(xiě)數(shù)據(jù)。最后需要判斷數(shù)據(jù)是否寫(xiě)完。
MTD驅(qū)動(dòng)文件的編寫(xiě)需要注意幾個(gè)方面:(1)Flash芯片的數(shù)據(jù)手冊(cè)中給出指令地址是按字而言的,在本文中不能直接使用,需要左移一位。(2)擦除和寫(xiě)操作是需要屏蔽中斷的,可以用intLock()函數(shù)來(lái)屏蔽中斷,用intUnlock()函數(shù)來(lái)使能中斷。(3)可以在各個(gè)操作函數(shù)中添加打印信息以方便調(diào)試。
4 嵌入式文件系統(tǒng)的創(chuàng)建
一旦VxWorks包含了TrueFFS系統(tǒng),啟動(dòng)時(shí)usrRoot()會(huì)調(diào)用tffsDev()進(jìn)行設(shè)備初始化,通過(guò)xxxRegister()函數(shù)注冊(cè)socket驅(qū)動(dòng)。此過(guò)程如圖 5所示。
4.1 Flash設(shè)備的識(shí)別
在TrueFFS中包含了INCLUDE_TFFS_SHOW 和INCLUDE_SHOW_ROUTINES后,就可以在shell中使用tffsShow()和tffsShowAll()任意一個(gè)顯示程序來(lái)識(shí)別Flash設(shè)備。
4.2 格式化TrueFFS
在實(shí)際加載使用TrueFFS之前,需要格式化TrueFFS。格式化是否成功,在于你的MTD驅(qū)動(dòng)代碼是否正確。因此可以用格式化操作來(lái)調(diào)試MTD層。在shell中輸入tffsDevFormat命令來(lái)格式化TrueFFS,tffsDevFormat最終會(huì)調(diào)用s29gl512MTDErase()和s29gl512MTDWrite()函數(shù)。這兩個(gè)函數(shù)是MTD層的主要的兩個(gè)函數(shù)。格式化成功則返回0,否則返回-1。
4.3 掛載DOS設(shè)備名
格式化TrueFFS成功之后,就可以給Flash設(shè)備掛接DOS設(shè)備名了。在usrTffs.c文件中提供了一個(gè)標(biāo)準(zhǔn)的初始化函數(shù)usrTffsConfig(),可用來(lái)在TrueFFS塊設(shè)備上建立dosFs文件系統(tǒng)。加載完成后,就可以使用加載點(diǎn)來(lái)訪問(wèn)文件系統(tǒng)了。
5 文件系統(tǒng)測(cè)試
一般為了調(diào)試MTD驅(qū)動(dòng)的方便,在VxWorks映像中建立文件系統(tǒng)而非在BootRom中建立文件系統(tǒng)。先通過(guò)網(wǎng)絡(luò)加載VxWorks映像。在shell中調(diào)試MTD驅(qū)動(dòng),創(chuàng)建TrueFFS系統(tǒng)。然后使用dosFs文件系統(tǒng)的相關(guān)命令如copy等將VxWorks映像拷貝到TrueFFS文件系統(tǒng)中,改變config.h中的啟動(dòng)引導(dǎo)行,從文件系統(tǒng)加載。修改完后,重新編譯生成bootrom_uncmp.bin,并把它燒寫(xiě)到Flash中然后重新啟動(dòng),在超級(jí)終端中即可看到如圖 6和圖 7所示的啟動(dòng)畫(huà)面。
6 結(jié)束語(yǔ)
本文首先介紹了VxWorks系統(tǒng)的啟動(dòng)流程和加載方式,分析了網(wǎng)絡(luò)加載的缺點(diǎn)和建立Flash文件系統(tǒng)的必要性;接著介紹了VxWorks下支持的文件系統(tǒng),選擇了適用于硬件平臺(tái)和系統(tǒng)需求的TrueFFS文件系統(tǒng);然后分析了TrueFFS文件系統(tǒng)需要配置的文件以及驅(qū)動(dòng)層的編寫(xiě);最后在文件配置好的基礎(chǔ)上創(chuàng)建TrueFFS文件系統(tǒng)并對(duì)文件系統(tǒng)進(jìn)行了測(cè)試,成功基于文件系統(tǒng)加載了VxWorks映像,將系統(tǒng)的啟動(dòng)時(shí)間縮短到了20s,提高了產(chǎn)品的用戶體驗(yàn)。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
熱成像儀相關(guān)文章:熱成像儀原理
評(píng)論