摘要:目前的嵌入式系統(tǒng)多使用FLASH作為主存,因此,如何有效管理FLASH上的數(shù)據(jù)非常重要。文章以MX29LV160BT芯片為例,討論了在VxWorks操作系統(tǒng)下Nor Flash上建立TFFS文件系統(tǒng)的一般步驟,從而為FLASH上的數(shù)據(jù)管理提供了理想的選擇方式,同時(shí)也為開發(fā)者和用戶升級(jí)程序提供了方便。
嵌入式系統(tǒng)正隨著Internet的發(fā)展而在各個(gè)領(lǐng)域得到廣泛的應(yīng)用,作為一個(gè)優(yōu)秀的操作系統(tǒng),VxWorks實(shí)現(xiàn)了比其他實(shí)時(shí)操作系統(tǒng)更好的有效性、商用性、可裁減性以及互操作性,廣泛應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。
如今越來越多的嵌入式操作系統(tǒng)中,通常都使用FLASH作為主存介質(zhì)。許多開發(fā)者和用戶為了方便以后升級(jí)用戶程序,通常在FLASH上建立TFFS文件系統(tǒng),建立文件系統(tǒng)后,我們就可以象在windows操作系統(tǒng)下對(duì)硬盤操作一樣,進(jìn)行數(shù)據(jù)的拷貝、刪除以及文件的建立等操作。
NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開發(fā)出NOR flash技術(shù),徹底改變了原先有EPROM和EEPROM一統(tǒng)天下的局面。NOR的特點(diǎn)是芯片內(nèi)執(zhí)行XIP execute In Place,這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,因此在嵌入式系統(tǒng)得到廣泛的應(yīng)用。
一、 TFFS文件系統(tǒng)結(jié)構(gòu)簡介
Tornado的TrueFFS是和VxWorks兼容的一種M-Systems Flite實(shí)現(xiàn)方式,版本為2.0。它為種類繁多的flash存儲(chǔ)設(shè)備提供了統(tǒng)一的塊設(shè)備接口,并且具有可重入、線程安全的特點(diǎn),支持大多數(shù)流行的CPU構(gòu)架。有了Tornado的TrueFFS,應(yīng)用程序?qū)lash存儲(chǔ)設(shè)備的讀寫就好象它們對(duì)擁有MS-DOS文件系統(tǒng)的磁碟設(shè)備的操作一樣。
如圖1所示,TrueFFS由核心層(core layer)和三個(gè)功能層,翻譯層(translation layer),MTD層(MTD layer),socket層(socket layer)組成。
核心層(Core layer):核心層主要起相互連接其他幾層的功能。同時(shí)它也可以進(jìn)行碎片回收、定時(shí)器和其他系統(tǒng)資源的維護(hù)。通常WindRiver公司將這部分內(nèi)容以二進(jìn)制文件提供。
翻譯層主要實(shí)現(xiàn)TrueFFS和dosFs之間的高級(jí)交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數(shù)據(jù)完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質(zhì)是采用NOR-based, 還是NAND-based, 或者SSFDC-based技術(shù)而定。
Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務(wù)。其名字來源于用戶可以插入flash卡的物理插槽。用來向系統(tǒng)注冊(cè)socket設(shè)備,檢測設(shè)備拔插,硬件寫保護(hù)等。后面將詳細(xì)講解它的功能。
MTD層(Memory Technology Drivers)功能主要是實(shí)現(xiàn)對(duì)具體的flash進(jìn)行讀、寫、擦、ID識(shí)別等驅(qū)動(dòng),并設(shè)置與flash密切相關(guān)的一些參數(shù)。TrueFFS已經(jīng)包含了支持Intel,AMD以及samsung部分flash芯片的MTD層驅(qū)動(dòng)。新的芯片需要新的MTD支持,你可以使用一個(gè)標(biāo)準(zhǔn)的接口來加入這些驅(qū)動(dòng)。
以上四部分,我們通常要的工作就是后兩層。
當(dāng)在VxWorks下配置TrueFFS時(shí),你必須為每一層至少包含一個(gè)軟件模塊。后面我們將詳細(xì)討論。
二、 MX29LV160BT芯片上建立TrueFFS文件系統(tǒng)
1、配置相關(guān)文件
在此,我以Nor Flash MX29LV160BT為例,開發(fā)工具為Tornado2.2 for PPC。要在VxWorks映像中包含TrueFFS文件系統(tǒng),首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調(diào)用tffsDrv()來創(chuàng)建管理TrueFFS所需的結(jié)構(gòu)和全局變量,并為所有掛接了的flash設(shè)備注冊(cè)socket組件驅(qū)動(dòng)。在鏈接的時(shí)候,通過解析與tffsDrv()相關(guān)聯(lián)的符號(hào)(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。
為了支持TrueFFS,每一個(gè)BSP目錄下都必須包含一個(gè)sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD層)鏈接到一起并和VxWorks綁定。因此,我必須編輯這個(gè)文件并決定哪一種MTD和翻譯層模塊應(yīng)該包含到TrueFFS中。即:
#define INCLUDE_MTD_MX29LV /* MX29LV160BT MTD driver */
#define INCLUDE_TL_FTL /* FTL translation layer */
#define FLASH_BASE_ADRS 0x2a10000 /* Flash memory base address */
#undef FLASH_SIZE
#define FLASH_SIZE 0x001f0000 /*Flash memory size,2M(parameter block) */
其他無關(guān)的MTD driver包含頭都#undef掉,同時(shí)定義Flash在系統(tǒng)中的基地址和大小。另外,還必須編輯sysLib.c中的sysPhysMemDesc[ ]數(shù)組,將Flash基地址和大小加入到MMU中,以供將來訪問Flash,否則訪問Flash會(huì)失敗。如果BSP目錄下沒有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個(gè)即可,然后做上述修改,其他的內(nèi)容基本可以不用修改。
接下來需要修改tffsConfig.c文件,為了方便管理,通常我們將src/drv/tffs/目錄下該文件拷貝到我們BSP目錄下,然后再做出修改。在MTDidentifyRoutine mtdTable[]表中加入如下語句:
#ifdef INCLUDE_MTD_MX29LV
mx29lvMTDIdentify,
#endif /* INCLUDE_MTD_MX29LV */
并在該文件開頭聲明。
#ifdef INCLUDE_MTD_MX29LV
FLStatus mx29lvMTDIdentify (FLFlash vol);
#endif /* INCLUDE_MTD_MX29LV */
最后就是將我們的flash相關(guān)MTD驅(qū)動(dòng)加入到makefile中。即:
MACH_EXTRA = mx29lvMtd.o
為了方便我們調(diào)試MTD驅(qū)動(dòng),應(yīng)該在重新編譯VxWorks映象前將諸如格式化flash、創(chuàng)建TrueFFS塊設(shè)備、綁定此塊設(shè)備到dosFs所必要的功能包含到VxWorks映像中。比如如下定義:
#define INCLUDE_TFFS
#ifdef INCLUDE_TFFS
#define INCLUDE_TFFS_DOSFS
#define INCLUDE_TFFS_SHOW
#define INCLUDE_DOSFS /* dosFs file system */
#define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/
#define INCLUDE_TL_FTL
#define INCLUDE_IO_SYSTEM
#define INCLUDE_DISK_UTIL
#endif /* INCLUDE_DOSFS */
2、MTD驅(qū)動(dòng)簡介
做了上述配置后,進(jìn)入VxWorks操作系統(tǒng)后,我們?cè)趕hell上利用tffsShow工具來顯示flash的信息。TffsShow函數(shù)最終會(huì)調(diào)用MTD驅(qū)動(dòng)中的mx29lvMtdIdentiy( )函數(shù),在mx29lvMtdIdentiy ( )函數(shù)主要是通過讀取MX29LV160BT芯片的設(shè)備和廠商ID來識(shí)別它,然后對(duì)FLFlash結(jié)構(gòu)成員進(jìn)行初始化,最主要的幾個(gè)參數(shù)是:
type
Flash內(nèi)存的JEDEC ID號(hào)。
erasableBlockSize
Flash內(nèi)存的擦除塊大?。ㄗ止?jié))。設(shè)置這個(gè)值時(shí)應(yīng)考慮到interleaving。因此,通常通過如下方法來設(shè)置它的大小。
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving;
對(duì)于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節(jié)。
chipSize
使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實(shí)際大?。ㄗ止?jié))。
noOfChips
使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實(shí)際片數(shù)。
interleaving
Flash內(nèi)存交叉因子(interleaving factor)。即擴(kuò)展數(shù)據(jù)總線的設(shè)備數(shù)。比如,一個(gè)32位數(shù)據(jù)總線上,我們可以使用4片8位或2片16位的設(shè)備。
map
指向flash內(nèi)存映射(map)函數(shù)。該函數(shù)將flash映射到內(nèi)存區(qū)。
read
指向flash內(nèi)存的讀函數(shù)。在MTD驅(qū)動(dòng)識(shí)別函數(shù)中,這個(gè)成員函數(shù)已經(jīng)被初始化為缺省的讀函數(shù)。通常情況下,我們不需要再初始化它,否則還需要修改很多相關(guān)的函數(shù)。
write
指向flash內(nèi)存的寫函數(shù)。這個(gè)成員必須初始化,這是我們要做的一個(gè)重要工作。
erase
指向flash內(nèi)存的擦除函數(shù)。這個(gè)成員必須初始化,這也是我們要做的一個(gè)重要工作。
針對(duì)FLFlash結(jié)構(gòu)成員,我們所關(guān)心的兩個(gè)函數(shù)就是寫和擦除函數(shù)。在mx29lvMtdIdentiy()函數(shù)中必須有如下定義:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite()函數(shù)中主要是實(shí)現(xiàn)將數(shù)據(jù)寫到flash中。首先需要對(duì)扇區(qū)進(jìn)行解鎖,然后寫入寫命令,之后才能進(jìn)行數(shù)據(jù)的寫入。最后需要判斷數(shù)據(jù)是否寫完。為了確保操作成功,我們應(yīng)該在寫完每個(gè)數(shù)據(jù)后進(jìn)行數(shù)據(jù)的比較,比較正確后方能進(jìn)行下一個(gè)數(shù)據(jù)的操作。
在mx29lvErase ()函數(shù)中主要是實(shí)現(xiàn)flash扇區(qū)的擦除。如今的flash一般都是按照扇區(qū)進(jìn)行擦除操作的。在擦除操作之前也應(yīng)該首先對(duì)扇區(qū)進(jìn)行解鎖,然后寫擦除建立和扇區(qū)擦除命令。擦除成功后,flash中的內(nèi)容應(yīng)該是0xffff。所以為了確保成功,我們還是應(yīng)該在擦除后進(jìn)行比較,比較正確后方能進(jìn)入下一個(gè)扇區(qū)的擦除操作,否則返回擦除錯(cuò)誤標(biāo)志。
所以,對(duì)于MTD驅(qū)動(dòng)的調(diào)試,基本上就是調(diào)試寫和擦除兩個(gè)函數(shù)。在調(diào)試過程中,我們可以在這兩個(gè)函數(shù)相應(yīng)位置加入打印語句來調(diào)試。為了能調(diào)試這兩個(gè)函數(shù),我們通過在shell上輸入命令tffsDevFormat來格式化flash,tffsDevFormat最終會(huì)調(diào)用mx29lvErase和mx29lvWrite函數(shù),如果成功就會(huì)返回0,否則返回-1。當(dāng)然也可以調(diào)用tffsDevCreate函數(shù)來驗(yàn)證我們的寫和擦除函數(shù)的正確性。圖2說明了tffsDevCreate調(diào)用過程。
在shell上利用tffsShow來驗(yàn)證mx29lvMtdIdentiy。
è tffsShow
0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
說明已正確識(shí)別到MX29LV160BT設(shè)備,設(shè)備號(hào)為0x2249。
三、 建立TFFS設(shè)備
1、掛接設(shè)備名
MTD驅(qū)動(dòng)調(diào)試成功后,我們就可以給flash設(shè)備掛接上dos設(shè)備名,如下操作:
格式化:
è tffsDevFormat
value = 1
è usrTffsConfig 0,0,”/tffs0”
value = 0
然后通過devs來查看掛接的設(shè)備名。
è devs
drv name
0 /null
1 /tyCo/0
1 /tyCo/1
5 host:
6 /pty/rlogin.S
7 /pty/rlogin.M
3 /tffs0/
8 /vio
value = 25 = 0x19
看到/tffs0/說明掛接設(shè)備已經(jīng)成功,接下來就可以利用dosFs文件系統(tǒng)相關(guān)命令來操作flash了。如,ls、copy等。
2、從Flash中啟動(dòng)并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy “VxWorks”,”/tffs0/VxWorks”,然后修改config.h文件中引導(dǎo)行,如下:
#define DEFAULT_BOOT_LINE \
"tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm"
修改完后,重新編譯生成bootrom_uncmp.bin,并把它燒寫到flash中(注意:該flash與上面建立TFFS文件系統(tǒng)的flash不一樣,它并沒有建立文件系統(tǒng))。然后重新啟動(dòng),即可看到如下啟動(dòng)畫面:
boot device : tffs=0,0
unit number : 0
processor number : 0
host name : host
file name : /tffs0/VxWorks
inet on ethernet (e) : 192.168.0.154
host inet (h) : 192.168.0.153
user (u) : target
ftp password (pw) : target
flags (f) : 0x0
other (o) : cpm
Attaching to TFFS... done.
Loading /tffs0/VxWorks...894304
Starting at 0x10000...
Development System
VxWorks version 5.5.1
KERNEL: WIND version 2.6
Copyright Wind River Systems, Inc., 1984-2003
CPU: Motorola ADS - PowerPC 860. Processor #0.
Memory Size: 0x1000000. BSP version 1.2/5.
WDB Comm Type: WDB_COMM_END
WDB: Ready.
到此,說明引導(dǎo)成功。flash整個(gè)TFFS文件系統(tǒng)就已經(jīng)建立成功。
四、 結(jié)論
VxWorks操作系統(tǒng)中支持TFFS文件系統(tǒng),我們將VxWorks映像作為文件放到flash上,這就有利于開發(fā)者和用戶更新應(yīng)用程序而不需要影響bootrom,直接更新VxWorks映像或者將應(yīng)用程序直接copy到flash中,然后裝載到RAM中運(yùn)行。
- 嵌入式操(6223)
相關(guān)推薦
VxWorks文件系統(tǒng)、Flash的TFFS設(shè)計(jì)與實(shí)現(xiàn)


VxWorks中的TFFS文件系統(tǒng)怎么實(shí)現(xiàn)?
VxWorks操作系統(tǒng)具有哪些優(yōu)點(diǎn)
VxWorks操作系統(tǒng)基于ARM處理器的中斷怎么處理?
VxWorks操作系統(tǒng)調(diào)試方法
Vxworks實(shí)時(shí)操作系統(tǒng)分析
嵌入式VxWorks招聘
嵌入式操作系統(tǒng)VxWorks設(shè)備驅(qū)動(dòng)程序該怎么設(shè)計(jì)?
嵌入式操作系統(tǒng)Windows CE研究
嵌入式操作系統(tǒng)上的FreeRTOS操作系統(tǒng)分析
嵌入式操作系統(tǒng)怎么實(shí)現(xiàn)網(wǎng)絡(luò)加載?
嵌入式操作系統(tǒng)怎么選擇?
嵌入式操作系統(tǒng)有哪些
嵌入式操作系統(tǒng)相關(guān)資料分享
嵌入式文件系統(tǒng)構(gòu)建
嵌入式文件系統(tǒng)概述
嵌入式系統(tǒng)開發(fā)中操作系統(tǒng)的選型依據(jù)是什么
嵌入式系統(tǒng)軟件及操作系統(tǒng)的資料大合集,絕對(duì)實(shí)用
嵌入式Linux操作系統(tǒng)的使用
嵌入式Linux操作系統(tǒng)結(jié)構(gòu)——7個(gè)重要模塊
嵌入式Linux之Android操作系統(tǒng)
嵌入式Linux根文件系統(tǒng)怎么制作?
嵌入式XPE操作系統(tǒng)構(gòu)建時(shí)要注意什么?
嵌入式學(xué)習(xí)——ElfBoard ELF1板卡 之文件系統(tǒng)的介紹
嵌入式實(shí)時(shí)操作系統(tǒng)如何簡化應(yīng)用軟件的設(shè)計(jì)
操作系統(tǒng)除了嵌入式系統(tǒng)還有什么操作系統(tǒng)?
文件系統(tǒng)Yocto是什么
ARM嵌入式操作系統(tǒng)匯總
Android車載嵌入式操作系統(tǒng)怎么樣?
Linux操作系統(tǒng)和文件系統(tǒng)的相關(guān)資料分享
Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)是什么?如何建立嵌入式Linux?
STM32嵌入式操作系統(tǒng)介紹
STM32嵌入式操作系統(tǒng)介紹
主流的14種嵌入式操作系統(tǒng)的特點(diǎn)
主流的嵌入式操作系統(tǒng)有哪些?
五大適合STM32的嵌入式操作系統(tǒng)
什么是嵌入式操作系統(tǒng)內(nèi)存管理技術(shù)?
什么是嵌入式操作系統(tǒng)?嵌入式操作系統(tǒng)有何功能
什么是嵌入式操作系統(tǒng)?
介紹十四種嵌入式操作系統(tǒng)的特點(diǎn)
關(guān)于嵌入式操作系統(tǒng)和PC機(jī)的操作系統(tǒng)
幾種嵌入式實(shí)時(shí)操作系統(tǒng)分析與比較
在VxWorks操作系統(tǒng)的Nor Flash上怎么建立TFFS文件系統(tǒng)?
基于嵌入式視頻存儲(chǔ)的專用文件系統(tǒng)該怎么設(shè)計(jì)?
基于Linux的嵌入式操作系統(tǒng)
如何構(gòu)建嵌入式Linux NFS根文件系統(tǒng)?
如何構(gòu)建嵌入式Linux系統(tǒng)?
如何去選擇嵌入式操作系統(tǒng)?
如何實(shí)現(xiàn)嵌入式操作系統(tǒng)的網(wǎng)絡(luò)加載?
實(shí)時(shí)多任務(wù)操作系統(tǒng)的相關(guān)資料推薦
常見嵌入式操作系統(tǒng)介紹
常見的嵌入操作系統(tǒng)的利弊都有哪些?
快速入門嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks實(shí)驗(yàn)教程
怎么實(shí)現(xiàn)嵌入式手持移動(dòng)終端中文件系統(tǒng)?
概述常用的嵌入式操作系統(tǒng)
用于嵌入式系統(tǒng)的操作系統(tǒng)
請(qǐng)教VxWorks嵌入式操作系統(tǒng)上的應(yīng)用軟件中如何刪除文本中...
適合STM32的三大嵌入式操作系統(tǒng)
通用嵌入式操作系統(tǒng)有什么區(qū)別?
采用ARM和SD卡實(shí)現(xiàn)嵌入式文件系統(tǒng)
嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks中串口通信的實(shí)現(xiàn)

基于VxWorks的TrueFFS文件系統(tǒng)的構(gòu)建與設(shè)計(jì)

在嵌入式Linux上實(shí)現(xiàn)JFFS文件系統(tǒng)

嵌入式Linux文件系統(tǒng)的研究與應(yīng)用

通過TFFS加載和升級(jí)VxWorks 映像

嵌入式實(shí)時(shí)操作系統(tǒng)COS一Ⅱ與VxWORKs

嵌入式XPE操作系統(tǒng)的構(gòu)建及應(yīng)用


嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)中串口通信的實(shí)現(xiàn)

嵌入式操作系統(tǒng)uCLinux詳解

嵌入式文件系統(tǒng)及特點(diǎn)

基于嵌入式視頻存儲(chǔ)的專用文件系統(tǒng)設(shè)計(jì)

Linux嵌入式文件系統(tǒng)如何構(gòu)建

什么是嵌入式操作系統(tǒng) 常見的嵌入式系統(tǒng)有哪些

嵌入式Linux系統(tǒng)移植開發(fā)-(1)基于Yocto構(gòu)建嵌入式u-boot,內(nèi)核,文件系統(tǒng)

嵌入式Linux系統(tǒng)移植-(Linux文件系統(tǒng))

使用BusyBox構(gòu)建根文件系統(tǒng)


一種嵌入式操作系統(tǒng)—VxWorks

評(píng)論