999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JFFS2文件系統在μClinux中的實現

2009-08-13 06:18:04行喜梁劉樹東戴學豐
現代電子技術 2009年10期

行喜梁 劉樹東 戴學豐

摘 要:FLASH作為新型非易失性半導體存儲器在嵌入式系統的開發中占有重要的地位。為了在嵌入式系統中實現數據的動態操作,介紹μClinux下的FLASH文件系統,特別是日志型文件系統的設計原理及特點;利用Linux提供的MTD接口,通過添加與FLASH對應的map driver和FLASH驅動,修改設備節點,配置內核等步驟,將JFFS2文件系統移植到s3c44b0使用的FLASH芯片上。通過掛載,用戶可以像使用普通硬盤分區一樣對此目錄下面的文件進行操作,從而實現對FLASH的動態操作和管理。結果表明,在JFFS2 文件系統下,保存的文件是可讀寫的,系統掉電后創建的文件也不會丟失。

關鍵詞:FLASH;JFFS2;內存技術設備;嵌入式系統

中圖分類號:TN302文獻標識碼:A

文章編號:1004-373X(2009)10-051-04

Realization of JFFS2 File System in μClinux

XING Xiliang,LIU Shudong,DAI Xuefeng

(School of Computer and Control Engineering,Qiqihaer University,Qiqihaer,161006,China)

Abstract:FLASH as a new type of non-volatile semiconductor memory plays an important role in embedded systems development.For achieving operating the data dynamically under embedded system,the FLASH file system under μClinux,in particular the design principles and charactertistecs of JFFS2(log-file system)is introduced.Using MTD interface provided by Linux,through adding map driver and FLASH driver,modifying the device nodes,such as configuring core etc,transplanting JFFS2 file system to the FLASH chips of s3c44b0.Through the mount,users can operate the files under this directory as an ordinary hard driver partition,achieving operating dynamicly and managing for FLASH.The results show that files can be read and write after the creation under the JFFS2 file system.The files can′t be lost even if the power is down.

Keywords:FLASH;JFFS2;MTD;embedded system

0 引 言

嵌入式系統開發中,一些重要的工藝參數在控制過程中需要動態地改變和保存,使用硬盤等存儲介質又顯得不太現實,而FLASH芯片以相對低廉的價格提供了高可靠性和高密度的存儲,已成為嵌入式系統重要的存儲設備。在很多嵌入式系統中,操作系統及應用程序直接固化在FLASH上,系統啟動時,代碼可以直接在FLASH上開始運行。但是僅將FLASH作為ROM使用是大材小用,需要充分發揮FLASH可擦寫的優勢,在系統運行過程中,動態擦寫FLASH來保存數據。

然而,μClinux的文件系統可以有多種選擇,ROMFS是使用得較多的文件系統。它是一種簡單、緊湊的文件系統,占用的空間小,但由于是只讀的,使用起來有局限性。若采用EXT2作為文件系統,雖然可以把信息保存在ramdisk盤中,但系統掉電后,ramdisk中的信息將丟失,這對于需要保存運行過程中參數的應用程序是不允許的。建立在FLASH設備上的JFFS文件系統就是為解決這個問題而誕生的。

1 JFFS/MTD/JFFS2介紹

日志閃存文件系統(The Journalling FLASH File System,JFFS)最初由瑞典的Axis Communications開發,Red Hat的David Woodhouse對它進行了改進。通過JFFS文件系統,Linux用戶就可以將FLASH作為系統的硬盤來使用,可以像操作硬盤上的文件一樣操作FLASH芯片上的文件和數據。系統運行的參數可以實時保存到FLASH芯片中,在系統斷電后數據仍然存儲在FLASH芯片中。但是在使用過程中,JFFS設計中的局限被不斷地暴露出來。2001年年初,Red Hat 決定實現一個新的JFFS2。

JFFS2在閃存上順序地存儲包含數據和原數據的meta-data的節點。JFFS2的日志結構存儲方式使得它能對閃存進行out-of-place更新,它提供的垃圾回收機制,只需要對擦寫越界的塊設置一個“臟”塊標志。當可用的塊數不足時,垃圾回收機制才開始回收這些節點。目前,市場上的FLASH芯片千差萬別,而JFFS2文件系統并不考慮這些差異,它只是要求下面有一個抽象平臺屏蔽底層硬件差異,提供統一訪問接口。這個抽象平臺就是MTD層。

內存技術設備(Memory Technology Device,MTD)是用于訪問Memory設備(ROM,FLASH)的μClinux的子系統。它的主要目標是在系統硬件驅動程序的上層或用戶模塊之間提供通用接口。硬件驅動程序不需要知道像JFFS和FTL那樣的用戶模塊所使用的方法,它們真正需要提供的就是一組對底層閃存系統進行read,write和erase操作的簡單例程,以及對MTD原始設備層的統一接口。

MTD支持的FLASH芯片主要有兩種:HAND FLASH和NOR FLASH,它們的驅動程序有著很大的差異。NOR和HAND是現在市場上兩種主要的非易失閃存技術,其主要區別在于:

(1) NOR的特點是芯片內執行(eXecute In Place,XIP),這樣應用程序可以直接在FLASH閃存內運行,不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,在1~4 MB的小容量時具有很高的成本效益,但是較低的寫入和擦除速度大大影響了它的性能。而HAND結構能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。應用HAND的困難在于FLASH的管理和需要特殊的系統接口。

(2) 在對FLASH芯片中存儲器單元塊進行編程之前必須先執行擦除。HAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先將目標塊內所有的位都寫為0。

(3) NOR FLASH帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。HAND器件使用復雜的I/O口來串行地存取數據,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數據信息。

引入MTD和JFFS2概念后,FLASH設備驅動在Linux內核中的組織層次如圖1所示。

從圖1中可以看出,MTD設備分為四層(從設備節點直到底層硬件驅動),這四層從上到下依次是:設備節點、MTD設備層、MTD原始設備層和硬件驅動層。

設備節點:通過mknod在根文件系統/dev子目錄下建立MTD字符設備節點(主設備號為90)和MTD塊設備節點(主設備號為31)。這些節點為應用程序訪問FLASH設備提供了通道,通過訪問此設備節點即可訪問MTD字符設備和塊設備。

MTD設備層提供了兩種不同訪問MTD原始設備的方式,即字符設備、塊設備。

MTD原始設備:為MTD的塊設備(主設備號31)和字符設備(設備號90)提供一個統一的底層抽象。

FLASH硬件驅動層:負責具體FLASH芯片的讀寫,向內核注冊FLASH設備上的分區等任務。

由于目前μClinux內核支持的ramdisk只能運行ROMFS,EXT2FS兩種文件系統,所以JFFS2格式的FLASH分區必須通過mount命令掛載到根文件系統上才能使用。

2 在FLASH上建立JFFS2過程

JFFS2文件系統在μClinux下有兩種使用方式:一種是作為μClinux的根文件系統,另一種是作為一般文件系統,在系統啟動時或啟動以后掛載到系統上。針對JFFS2文件系統所保存的數據比較少,這里選擇后者。具體的實現步驟有以下幾個:添加與FLASH對應的map driver和FLASH驅動;修改設備節點;配置內核。

進行試驗的s3c44b0使用的FLASH是intel 28f320b,大小為4 MB,類型為NOR FLASH,工作在16 b雙字節模式。使用的μClinux包為μClinux-dist-20040408.tar.gz。

設計NOR FLASH驅動程序時,只要讓它能夠被其上層MTD原始設備層正確地識別和操作,就能保證其正常工作?,F實NOR FLASH驅動核心是定義map_info 結構體,它指定了NOR FLASH的基址、位寬、大小等信息及FLASH的讀寫函數,見圖2。

其中:name用來在內核中惟一標識這塊芯片的字符串;width用來訪問FLASH芯片的總線寬度;size是FLASH芯片的容量,在該芯片中用字進行讀取。其主要的函數原型為:

void(*read) (struct map_info *,unsignde long);

void(*write) (struct map_info *,const map_word,unsignde long);

void(*copy_from) (struct map_info *,void *,unsignde long,ssize_t);

void(*copy_to) (struct map_info *,unsignde long const void *,ssize_t);

2.1 添加FLASH上的map文件和FLASH的驅動

在μClinux-dist/linux-2.4.x/drivers/mtd/maps下添加自己的map文件。map文件可以根據具體的FLASH和掛載方式選擇合適的文件加以修改,本系統是選擇m5272c3.c修改的,并命名為s3c44b0.c。修改的關鍵點有:

(1) 定義FLASH的基地址、容量和寬度

#define WINDOW_ADDR 0x00000000

#define WINDOW_SIZE 0x00400000

#define BUSWIDTH 2

(2) 根據系統要求建立FLASH設備中的分區

static struct mtd_partition s3c44b0_partitions[ ] = {

{

name: "bootloader (64K)",

size: 0x00010000,

offset: 0x00000000

},

{

name: "μClinux kernel (960K)",

size: 0x00100000,

offset: 0x00010000

},

{

name: "ramdisk (1024K)"

size: 0x00100000,

offset: 0x00200000

},

{

name: "jffs2 (1024K)"

size: 0x00100000,

offset: 0x00300000

}

};

(3) FLASH芯片的內存映射

s3c44b0x_map.map_priv_1=(unsigned long)

ioremap(WINDOW_ ADDR,WINDOW_SIZE);

// if( !s3c44b0x_m ap.m ap_priv_1){

// printk(”Failed to ioremap\n");

// return -EIO;

// }

這里的ioremap()主要是將I/O端口映射到虛擬內存區域。對于有MMU的CPU,它會將對應的地址映射到高端區域,不過使用的是s3c44bOX處理器,這是一款沒有MMU的處理器,其重映射就是會將端口地址按原地址返回;又由于這里的FLASH的起始地址是0x0,其映射后的起始地址也是0x0,所以ioremap()函數的返回值是0。在該系統中將接下來的4行注釋掉。

(4) 為了把map文件集成到μClinux配置中,需要修改

μClinux-dist/linux-2.4.x/drivers/mtd/maps/config.in file:

if [ "MYMCONFIG_S3C44B0" ];then

dep_tristate 'CFI FLASH device mapped on samsung S3C44B0' CONFIG_MTD_S3C44B0 MYMCONFIG_MTD_CFI

fi

Clinux-dist/linux-2.4.x/drivers/mtd/maps/Makefile file:

Obj-MYM(CONFIG_MTD_S3C44B0) +=s3c44b0c.o

2.2 配置內核

選中和JFFS2文件系統相關的內核選項,在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

CONFIG_MTD_CFI=Y

CONFIG_MTD_JEDECPROBE=Y

CONFIG_MTD_GEN_PROBE=Y

CONFIG_MTD_CFI_AMDSTD=Y

CONFIG_MTD_S3C44B0=Y

2.3 修改μClinux內核并添加MTD設備

由于ROM設備和MTDBLock設備的主設備號(major)都是31,所以必須修改其中之一,在這里修改ROM的major,在μClinux-dist/linux-2.4.x/include/linux/major.h和μClinux-dist/linux-2.4.x/drives/block/blkmem.c中,把#define BLKMEM_MAJOR 31改為#define BlkMEM_MAJOR 30,在μClinux-dist/vendors/samsun/44B0/Makefile中rom的主設備號改為30并添加下面的行:

DEVICES=

tty,c,5,0 console,c5,1 cua0,c,64 cual,c,5,6,

mtd0,c,90,1 mtd1,c,90,3 mtd2,c,90,5 mtd3,c,90,0

mtdblock0,b,31,1 mtdblock1,b,31,3

mtdblock2,b,31,5 mtdblock3,b,31,0

編譯內核后,可以看到MTD設備添加成功。

2.4 重新配置內核

選中JFFS2文件系統和相關的輔助工具,編譯內核。在File systems下選中:

CONFIG_JFFS2_FS=Y

CONFIG_JFFS2_DEBUG=2

在μClinux application Configuration下選中:

CONFIG_USER_MTDUTILS=Y,

在BusyBox下,選中cat,cp,dd,mount,umount,mkdir工具。配置內核后,重新編譯內核,編譯好的內核已經實現了JFFS2文件系統??梢允褂肕TD工具mkfs.jffs2創建JFFS2文件系統的鏡像。

如果編譯內核前,在rc文件中加上mount-t jffs2 /dev/mtd-block3/mnt 系統啟動后不用再執行掛載命令,則JFFS2 文件系統就被掛載到/mnt/ 目錄下。在此目錄下保存的文件可讀寫,系

統掉電后創建的文件也不會丟失。

3 結 語

JFFS2以其優異的性能在嵌入式系統中被越來越廣泛的使用。這里只介紹了JFFS2以普通文件掛載的方式及其在μClinux中的應用,解決了如何動態保存少量數據的問題。JFFS2仍存在一些不足之處,由于壓縮和解壓算法的運算,數據存取的速度慢。

參考文獻

[1]華清遠見嵌入式培訓中心,宋寶華.Linux設備驅動開發詳解[M].北京:人民郵電出版社,2008.

[2]Kadionik:How to Use Mtd/Jees2 Under μClinux[EB/OL].http://uuu.enseirb.fr/~kadionik/embedded/μClinux/mtd/howto_mtd.html,2004.

[3]周斌,林喜榮,黃析偉.嵌入式Linux系統下NOR FLASH的配置和使用[J].單片機與嵌入式系統應用,2004(2):82-84.

[4]王學龍.嵌入式Linux系統設計與應用[M].北京:清華大學出版社,2001.

[5]黃布毅,鄭安平,陳曉雷,等.μClinux下JFFS2文件系統的實現[J].單片機與嵌入式系統應用,2004(5):69-70,76.

[6]胡晨峰.JFFS2文件系統在μClinux中的應用[J].電子產品世界,2003(7):48-51.

[7]鄭良辰.日志文件系統在嵌入式存儲設備上的設計和實現[Z].北京:中國科學院軟件研究所,2001.

[8]趙復生.JFFS2文件系統及其新特性介紹[EB/OL].http://www.128.ibm.com/developerworks/cn/linux/jffs2/,2005.

[9]張翔,劉鵬,戴國駿.嵌入式Linux閃存文件系統JFFS2的研究[J].杭州電子工業學院學報,2003,23(3):62-65.

[10]李桂良,劉發貴.JFFS2文件系統的關鍵技術及其在嵌入式系統中的應用[J].計算機應用,2003,23(7):135-137.

[11]陳智育.嵌入式系統中的FLASH文件系統.單片機與嵌入式系統應用,2002(2):5-8.

[12]代新冠,張超,田永鵬.基于S3C2440的嵌入式多媒體控制器設計.現代電子技術,2006,29(8):19-21.

主站蜘蛛池模板: 四虎成人在线视频| 欧美日韩一区二区在线免费观看| 中文字幕永久视频| 亚洲色图综合在线| 欧美色图久久| 亚洲欧洲日韩国产综合在线二区| 国产靠逼视频| 午夜a级毛片| 国产精品毛片一区视频播| 国产自无码视频在线观看| 日韩精品一区二区三区免费| 日韩成人在线视频| 久久a毛片| 妇女自拍偷自拍亚洲精品| 久久9966精品国产免费| 美臀人妻中出中文字幕在线| 国产99在线观看| 亚洲男人的天堂久久香蕉| 国产亚洲欧美在线中文bt天堂 | 91人人妻人人做人人爽男同| 亚洲av综合网| 丝袜无码一区二区三区| 尤物在线观看乱码| 国产在线观看成人91| 尤物视频一区| 亚洲狼网站狼狼鲁亚洲下载| 中文字幕永久在线观看| 她的性爱视频| 亚洲愉拍一区二区精品| 亚洲视频欧美不卡| 欧美在线视频a| 亚洲欧美自拍中文| 亚洲日韩第九十九页| 国产欧美高清| 日韩欧美91| 欧美日本在线观看| 少妇人妻无码首页| 国产成人免费视频精品一区二区| 日韩欧美国产精品| 国产免费羞羞视频| 毛片在线区| 久久永久精品免费视频| 日韩欧美国产另类| 国产免费精彩视频| 波多野结衣亚洲一区| 日韩免费中文字幕| 综合网天天| 九色视频一区| 亚洲美女一级毛片| 欧美专区在线观看| 蝴蝶伊人久久中文娱乐网| 国产成人无码AV在线播放动漫| 国产va在线观看| 无码 在线 在线| 中文字幕久久精品波多野结| 操国产美女| 国内精品一区二区在线观看| 成人韩免费网站| 欧亚日韩Av| 国产精品va| 国产又爽又黄无遮挡免费观看| 色婷婷在线播放| 亚洲精品手机在线| AV熟女乱| 亚洲成在线观看| 国产主播一区二区三区| 日本黄色a视频| 亚洲一区二区三区中文字幕5566| 亚洲第一色网站| 青青草久久伊人| 久草视频中文| 成年人国产视频| 91娇喘视频| 色香蕉影院| 青青青国产在线播放| 欧美成人午夜视频| 日韩国产精品无码一区二区三区| 久久夜夜视频| 67194亚洲无码| 久久精品人妻中文系列| 高清不卡毛片| 欧美一级片在线|