當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]uClinux下Nor Flash的JFFS2文件系統(tǒng)構(gòu)建

摘要:目前的嵌入式系統(tǒng)多使用FLASH作為主存,因此,如何有效管理FLASH上的數(shù)據(jù)非常重要。文章以SST39VF160芯片為例,討論了在Nor Flash上建立uClinux的JFFS2文件系統(tǒng)的一般步驟,從而為FLASH上的數(shù)據(jù)管理提供了理想的選擇方式。

    關(guān)鍵詞:uClinux;Nor Flash;MTD;JFFS2;文件系統(tǒng)

嵌入式系統(tǒng)正隨著Internet的發(fā)展而在各個(gè)領(lǐng)域得到廣泛的應(yīng)用,作為嵌入式應(yīng)用的核心,嵌入式Linux以其自由軟件特性正日益被人們看好。Linux具有內(nèi)核小、效率高、源代碼開放等優(yōu)點(diǎn),還內(nèi)涵了完整的TCP/IP網(wǎng)絡(luò)協(xié)議,因此非常適于嵌入式系統(tǒng)的應(yīng)用。而作為專門運(yùn)行于沒有MMU的微處理器的嵌入式操作系統(tǒng),uClinux更是得到廣泛應(yīng)用。

當(dāng)前的嵌入式系統(tǒng)開發(fā),需要方便靈活的使用Flash。NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開發(fā)出NOR flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。NOR的特點(diǎn)是芯片內(nèi)執(zhí)行?XIP? eXe-cute In Place?,這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,因此在嵌入式系統(tǒng)得到廣泛的應(yīng)用。

1 JFFS2文件系統(tǒng)簡介

uClinux通常默認(rèn)ROMFS作為根文件系統(tǒng),它相對(duì)于一般的EXT2文件系統(tǒng)具有節(jié)約空間的優(yōu)點(diǎn)。但是ROMFS是一種只讀的文件系統(tǒng),不支持動(dòng)態(tài)擦寫保存。雖然對(duì)于需要?jiǎng)討B(tài)保存的數(shù)據(jù)可以采用虛擬ram盤的方法來保存,但當(dāng)系統(tǒng)掉電后,ram盤的內(nèi)容將全部丟失,而不能永久保存,因此需要實(shí)現(xiàn)一個(gè)可讀寫的文件系統(tǒng)。JFFS2文件系統(tǒng)便是一個(gè)很好的選擇。

JFFS文件系統(tǒng)是瑞典Axis通信公司開發(fā)的一種基于Flash的日志文件系統(tǒng),它在設(shè)計(jì)時(shí)充分考慮了Flash的讀寫特性和用電池供電的嵌入式系統(tǒng)的特點(diǎn),在這類系統(tǒng)中必需確保在讀取文件時(shí),如果系統(tǒng)突然掉電,其文件的可靠性不受到影響。對(duì)Red Hat的David Woodhouse進(jìn)行改進(jìn)后,形成了JFFS2。主要改善了存取策略以提高FLASH的抗疲勞性,同時(shí)也優(yōu)化了碎片整理性能,增加了數(shù)據(jù)壓縮功能。需要注意的是,當(dāng)文件系統(tǒng)已滿或接近滿時(shí),JFFS2會(huì)大大放慢運(yùn)行速度。這是因?yàn)槔占膯栴}。

JFFS2的底層驅(qū)動(dòng)主要完成文件系統(tǒng)對(duì)Flash芯片的訪問控制,如讀、寫、擦除操作。在Linux中這部分功能是通過調(diào)用MTD(memory technology device內(nèi)存技術(shù)設(shè)備)驅(qū)動(dòng)實(shí)現(xiàn)的。相對(duì)于常規(guī)塊設(shè)備驅(qū)動(dòng)程序,使用 MTD 驅(qū)動(dòng)程序的主要優(yōu)點(diǎn)在于 MTD 驅(qū)動(dòng)程序是專門為基于閃存的設(shè)備所設(shè)計(jì)的,所以它們通常有更好的支持、更好的管理和更好的基于扇區(qū)的擦除和讀寫操作的接口。MTD相當(dāng)于在硬件和上層之間提供了一個(gè)抽象的接口,可以把它理解為FLASH的設(shè)備驅(qū)動(dòng)程序,它主要向上提供兩個(gè)接口:MTD字符設(shè)備和MTD塊設(shè)備。通過這兩個(gè)接口,就可以象讀寫普通文件一樣對(duì)FLASH設(shè)備進(jìn)行讀寫操作。經(jīng)過簡單的配置后,MTD在系統(tǒng)啟動(dòng)以后可以自動(dòng)識(shí)別支持CFI或JEDEC接口的FLASH芯片,并自動(dòng)采用適當(dāng)?shù)拿顓?shù)對(duì)FLASH進(jìn)行讀寫或擦除。

JFFS2在uClinux中有兩種使用方式,一種是作為根文件系統(tǒng),另一種是作為普通文件系統(tǒng)在系統(tǒng)啟動(dòng)后被掛載??紤]到實(shí)際應(yīng)用中需要?jiǎng)討B(tài)保存的數(shù)據(jù)并不多,且在Linux系統(tǒng)目錄樹中,根目錄和/usr等目錄主要是讀操作,只有少量的寫操作,但是大量的讀寫操作又發(fā)生在/var和/tmp目錄(這是因?yàn)樵谙到y(tǒng)運(yùn)行過程中產(chǎn)生大量log文件和臨時(shí)文件都放在這兩個(gè)目錄中),因此,通常選用后一種方式。根文件指的是Romfs、var和/tmp,目錄采用Ramfs,當(dāng)系統(tǒng)斷電后,該目錄所有的數(shù)據(jù)都會(huì)丟失。

綜上所述,通常在uClinux下采用的文件系統(tǒng)構(gòu)成如圖1所示。對(duì)于本文來說,圖中Romfs和Ramfs兩個(gè)文件系統(tǒng)的實(shí)現(xiàn)是很方便的,主要需要實(shí)現(xiàn)的是Nor Flash的底層MTD驅(qū)動(dòng),下面就以SST39VF160芯片為例來介紹MTD的驅(qū)動(dòng)設(shè)計(jì)方法。

2?。剩疲疲樱驳讓樱停裕尿?qū)動(dòng)設(shè)計(jì)

本文采用的系統(tǒng)以三星公司的SND-100為母板,CPU為ARM7TDMI芯片S3C4510B,16M的SDRAM,Nor Flash為SST39VF160,容量為1M×16bit,速度為70ns,通過16位數(shù)據(jù)總線與CPU交換數(shù)據(jù),擦寫次數(shù)典型值為10萬次。

在\linux-2.4.x\drivers\mtd\maps目錄下,每一個(gè)文件都是一個(gè)具體的MTD原始設(shè)備的相關(guān)信息,包括該MTD原始設(shè)備的起始物理地址、大小、分區(qū)情況、讀寫函數(shù)、初始化和清除程序。設(shè)計(jì)時(shí),需要對(duì)SST39VF160編寫相關(guān)的程序,假設(shè)為S3C4510B.C。則需要進(jìn)行以下幾點(diǎn)操作:

(1) 定義SST39VF160在系統(tǒng)中的起始地址、大小、總線寬度

#define WINDO DDR 0x1000000|0x04000000 //注意FLASH分區(qū)地址必須是non-cacheble

#define WINDOW SIZE 0x200000

#define BUSWIDTH 2

(2) 定義SST39VF160分區(qū)

典型的內(nèi)存分區(qū)應(yīng)包括:內(nèi)核引導(dǎo)區(qū)、Linux內(nèi)核區(qū)、應(yīng)用區(qū)。其中內(nèi)核引導(dǎo)區(qū)用來保存內(nèi)核加載程序,Linux內(nèi)核區(qū)存放的是經(jīng)過壓縮的uClinux內(nèi)核,應(yīng)用區(qū)則用來保存用戶的數(shù)據(jù)和應(yīng)用程序,該區(qū)設(shè)為我們要采用的JFFS2文件系統(tǒng)。具體如下:

static struct mtd_partition s3c4510_partitions[]={

{

name: ″bootloader(128K)″,

size: 0x20000,

offset: 0x0000,

mask_flags:MTD_WRITEABLE //設(shè)置成只讀區(qū)域

},

{

name: ″uClinux_kernel(832K)″,

size: 0xd0000,

offset: 0x20000,

},?

{

name: ″jffs2 (1088K)?″,

size: 0x110000,

offset: 0xf0000

}

};?

(3) 定義SST39VF160字節(jié)、半字、字的讀寫操作函數(shù)。

(4) 初始化SST39VF160函數(shù)int_init init_s3c4510b()。

該操作主要包括兩個(gè)方面:第一是調(diào)用do map probe()檢測搜索MTD設(shè)備。通常檢測方式有兩種:cfi probe和jedec probe,這里采用后一種,該方法在jedec_probe.c文件中定義。另外,jedec probe.c中定義了各種jedec probe類型芯片的信息,有些linux版本沒有包含SST39VF160,需要手動(dòng)添加;而操作的第二方面則是調(diào)用add_mtd_partitions()以將your_partiton的各個(gè)分區(qū)加入mtd_table。

3 內(nèi)核相關(guān)配置的設(shè)定

3.1 內(nèi)核配置文件設(shè)置

為使內(nèi)核支持JFFS2,需在內(nèi)核配置選項(xiàng)菜單里選擇相關(guān)選項(xiàng)。首先把SST39VF160的MTD驅(qū)動(dòng)加入配置菜單。并在mtd/maps/Config.in文件中加入如下程序:

if[″$CONFIG ARM″= ″y″]; then

dep_tristate′CFI Flash device mapped on Samsung S3C4510B′CONFIG_MTD_S3C4510B $CONFIG_MTD_CFI

相應(yīng)\mtd\maps\Makefile文件加入

obj_$(CONFIG_MTD_S3C4510B)+=s3c4510b.o

其次選擇Menuconfig下的配置選項(xiàng)。

在linux Kernel v2.4.20-uc0 Configuration下

Memory Technology Devices?MTD?下

CONFIG_MTD=Y

CONFIG_MTD_DEBUG=Y

CONFIG_MTD_DEBUG_VERBOSE=3

CONFIG_MTD_PARTITIONS=Y

CONFIG_MTD_CHAR=Y

CONFIG_MTD_BLOCK=Y

RAM/ROM/Flash chip drivers下

CONFIG_MTD_CFI=Y

CONFIG_MTD_JEDECPROBE=Y

CONFIG_MTD_CFI_AMDSTD=Y

Mapping drivers for chip access下

CONFIG_S3C4510B=Y

File systems下

CONFIG_JFFS2_FS=Y

CONFIG_JFFS2_FS_DEBUG=2

在uClinux v1.3.4 Configuration下

Flash Tools下

CONFIG_USER_MTDUTILS=Y

CONFIG_USER_MTDUTILS_ERASE=Y

CONFIG_USER_MTDUTILS_ERASEALL=Y

CONFIG_USER MTDUTILS_MKFSJFFS2=Y

BusyBox下選中cat,cp,dd, mount,umount,mkdir工具。

3.2 MTD塊設(shè)備配置

下面是修改系統(tǒng)塊設(shè)備的主設(shè)備號(hào)。默認(rèn)情況下,MTDBLOCK主設(shè)備號(hào)為31,與BLKMEM的主設(shè)備號(hào)沖突,因此 修改\mtd\mtd.h中 MTD BLOCK MAJOR的值為30。

接著應(yīng)添加MTD設(shè)備節(jié)點(diǎn)到/vender/--你所使用的目標(biāo)機(jī)類型--/Makefile文件中。其中字符設(shè)備的主設(shè)備號(hào)為90,次設(shè)備號(hào)為0、2、4、6...(奇數(shù)次設(shè)備號(hào)為只讀設(shè)備),塊設(shè)備的主設(shè)備號(hào)為31,次設(shè)備號(hào)為0、1、2、3??砂匆韵路绞皆黾樱模牛郑桑茫牛幽繕?biāo):

mtd0,c,90,0 mtd1,c,90,1 mtd2,c,90,2

mtdblock0,b,30,0 mtdblock1,b,30,1 mtd-block2,b,30,2

做完以上步驟,可以運(yùn)行內(nèi)核編譯命令make dep, make 以對(duì)內(nèi)核進(jìn)行編譯。

當(dāng)系統(tǒng)啟動(dòng)時(shí),可以看到以下信息:

s3c4510b flash device: 200000 at 5000000

Found: SST SST39VF160

number of JEDEC chips: 1

Creating 3 MTD partitions on ″S3C4510B flash de-vice″:

0x00000000-0x00020000: ″bootloader(128K)″

mtd:Giving out device 0 to bootloader(128K)

0x00020000-0x00f0000:″uClinux_kernel(832K)″

mtd: Giving out device 1 to uClinux_kernel(832K)

0x00f0000-0x00200000:″jffs2_usr(1088K)″

mtd: Giving out device 2 to jffs2_usr(1088K)

init_mtdchar: allocated major number 90.

init_mtdblock: allocated major number 31.

……

3.3 創(chuàng)建文件系統(tǒng)鏡像文件

系統(tǒng)會(huì)編譯生成JFFS2的輔助工具:mkfs.jffs2、eraseall、erase。其中mkfs.jffs2會(huì)產(chǎn)生JFFS2文件系統(tǒng)鏡像的工具,eraseall和erase用來對(duì)FLASH芯片的擦除。mkfs.jffs的使用方法如下:mkfs.jffs -d根目錄?-b| l??-e 擦除塊大小??-o 輸出文件??-v ?0-9???-q?。

另外,為了使系統(tǒng)在啟動(dòng)時(shí)自動(dòng)掛載建好的JFFS2文件系統(tǒng),在啟動(dòng)腳本里應(yīng)加入:

mount -t jffs2 /dev/mtdblock2 /mnt4 結(jié)束語

本文討論了在uClinux下建立基于Nor Flash的JFFS2的文件系統(tǒng)的一般步驟。Nor Flash的特性決定了它在對(duì)數(shù)據(jù)存儲(chǔ)要求不高的嵌入式系統(tǒng)中有著廣泛的應(yīng)用,因此JFFS2文件系統(tǒng)對(duì)Flash上的數(shù)據(jù)管理非常方便。對(duì)于一些高端的掌上設(shè)備來說,Nand Flash更為適合,其單元存儲(chǔ)密度比較高,成本較低,這樣系統(tǒng)可以在不增加成本的情況下擴(kuò)大存儲(chǔ)容量。目前有一種新型的文件系統(tǒng)YAFFS更適于Nand Flash,本文不再予以討論。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉