




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章嵌入式文件系統制作5.1文件系統選擇5.2基于Flash的文件系統5.3基于RAM的文件系統5.4文件系統的制作5.1文件系統選擇5.1.1Flash硬件方案比較5.1.2嵌入式文件系統的分層結構5.1.1Flash硬件方案比較Flash(閃存)是嵌入式系統的主要存儲介質,其特點為寫入操作只能把對應位置的1修改為0,而不能把0修改為1。因此,對于Flash的擦除操作是把對應存儲塊的內容恢復為1。硬件方案的總體原則是:用于數據存儲采用NANDFlash,用于代碼存儲采用NORFlash。用NORFlash存放引導程序和根文件系統,用NANDFlash存放用戶文件系統。5.1.2嵌入式文件系統的分層結構在嵌入式Linux應用中,主要的存儲設備為RAM(DRAM,SDRAM)和ROM(常采用Flash存儲器),常見的基于存儲設備的文件系統類型包括Ramdisk、JFFS2、YAFFS、Cramfs、Romfs和Ramfs/Tmpfs等。5.2基于Flash的文件系統5.2.1JFFS文件系統(JournallingFlashFileSystem)5.2.2YAFFS文件系統(YetAnotherFlashFileSystem)5.2.3Cramfs文件系統(CompressedROMFileSystem)5.2.4Romfs文件系統(ROMFileSystem)5.2.1JFFS文件系統(JournallingFlashFileSystem)JFFS系列日志文件系統包括JFFS1、JFFS2和JFFS3,JFFS3正在開發中,JFFS2比JFFS1有很多改進的地方,所以目前通常使用JFFS2。1.JFFS2的工作原理2.JFFS2的主要特點3.JFFS2的掛載過程4.JFFS2的優點和缺點1.JFFS2的工作原理當文件系統加載時掃描整個Flash的內容,將信息讀入日志結點jffs2_raw_inode,然后根據該信息建立文件系統。修改操作是先分配新結點jffs2_raw_inode,將內容寫入新結點,然后將原來的結點標記為臟數據。當系統接近滿或者已滿時就要進行垃圾收集,需要掃描整個Flash中的結點,將標記為臟的結點進行回收。2.JFFS2的主要特點JFFS2,日志閃存文件系統版本2(JournallingFlashFileSystemv2)。主要用于NORFlash,基于MTD驅動層。JFFS2的主要特點如下:可讀寫;使用基于哈希表的日志結點結構,大大提高了對結點的操作速度;支持數據壓縮;提供了“寫平衡”支持;支持多種結點類型(數據I結點、目錄I結點等),JFFS只支持一種結點;提高了對閃存的利用率,降低了內存的消耗。3.JFFS2的掛載過程JFFS2的掛載過程主要分為4個過程:(1)JFFS2掃描閃存介質,檢查每個結點jffs2_raw_inode的CRC校驗碼是否合法,同時分配structjffs2_inode_cache和structjffs2_raw_node_ref。(2)掃描每個結點的物理結點鏈表,標識出過時的物理結點;將每個合法的dentry結點相應的jffs2_inode_cache中的字段nlink加1。(3)找到nlink為0的jffs2_inode_cache,釋放對應的結點。(4)釋放掃描過程中的臨時信息。4.JFFS2的優點和缺點JFFS2的優點有:刪除操作的時間短。遇到壞扇區時進行標記而使用可用扇區,延長了設備的寫生命周期。JFFS系列文件系統存在下面的缺點:文件系統已滿或者接近滿時,系統無法分配新的結點就必須進行垃圾收集;垃圾收集就是從頭開始掃描日志結點(jffs2_raw_inode)標記臟數據結點,這樣使文件系統變得非常緩慢。5.2.2YAFFS文件系統(YetAnotherFlashFileSystem)YAFFS文件系統包括YAFFS和YAFFS2。YAFFS/YAFFS2是專門為嵌入式系統使用NANDFlash而設計的一種日志型文件系統,適用于大容量的存儲設備。與JFFS相比,它減少了一些功能(例如不支持數據壓縮),所以速度更快,掛載時間較短,對內存的占用較小。1.YAFFS文件系統的特點YAFFS/YAFFS2自帶NAND芯片驅動,提供了嵌入式系統直接訪問文件系統的API,這樣用戶可以不使用Linux中的MTD與VFS,直接對文件系統操作。當然,用戶也可以通過MTD驅動程序來訪問文件系統。2.YAFFS與YAFFS2的區別YAFFS與YAFFS2的主要區別在于,YAFFS僅支持小頁(512Bytes)NANDFlash,而YAFFS2能夠支持大頁(2KB)NANDFlash。另外,YAFFS2在內存空間占用、垃圾回收速度、讀/寫速度等方面都有較大改進。3.YAFFS/YAFFS2的工作原理將文件組織成固定大小(512Bytes/2KB)的數據段對文件系統上的所有內容都統一當作文件來處理。NANDFlash上的每一頁數據都留有額外的空間用于存儲附加信息,YAFFS文件系統正是利用了這部分空間中剩余的部分來存儲文件系統相關的內容。4.YAFFS與JFFS的比較YAFFS和JFFS都提供了寫均衡,垃圾收集等操作。同時在穩定性、垃圾收集速度、儲存容量等特性方面具有以下區別:JFFS是一種日志文件系統。YAFFS僅僅借鑒了日志系統的思想,不提供日志機制。JFFS中使用多級鏈表管理需要回收的臟塊。YAFFS是從頭到尾對塊進行掃描,所以在垃圾收集上JFFS的速度較慢,但是能延長NAND器件的壽命。JFFS支持文件壓縮;YAFFS不支持壓縮。5.2.3
Cramfs文件系統(CompressedROMFileSystem)Cramfs是一個壓縮式的文件系統。Cramfs中的解壓縮及解壓縮之后的內存中數據存放位置,都是由Cramfs文件系統本身進行維護的。1.Cramfs文件系統的特點2.Cramfs文件系統的優點和缺點1.Cramfs文件系統的特點系統訪問數據時采用實時解壓縮方式,其解壓縮算法復雜,因此解壓縮過程有延遲。Cramfs的數據都是經過處理、打包的,對數據進行寫操作比較困難。在Cramfs中文件最大不能超過16MB。支持組標識(gid)。支持硬鏈接,但是Cramfs不能處理多條鏈接。Cramfs的目錄中,沒有“.”和“..”這兩項。Cramfs中不保存文件的時間戳(timestamps)信息。當前版本的Cramfs只支持PAGE_CACHE_SIZE為4096的內核2.Cramfs文件系統的優點和缺點Cramfs文件系統的優點有:壓縮比較高,占用內存空間少;其缺點就是只能進行讀操作,不支持寫操作。5.2.4
Romfs文件系統(ROMFileSystem)Romfs是一種簡單的、緊湊的、只讀的文件系統,不支持動態擦寫保存功能,采用順序存儲方式,所有的數據包括目錄、鏈接等都按照目錄樹的順序進行存放。Romfs有兩個結構,代碼比較簡單,在romfs_fs.h中定義如下:structromfs_super_block{__be32word0;__be32word1;__be32size;__be32checksum;charname[0];
/*
volumename*/};5.3基于RAM的文件系統基于RAM文件系統的優點就是讀寫速度非常快,而缺點就是當系統復位后會丟失所有數據。1.Ramdisk2.Ramfs/Tmpfs1.RamdiskRamdisk是劃分一塊固定大小的內存作分區來使用,它不是一個實際的文件系統,而是將實際的文件系統裝入內存的一種策略,并且可以作為根文件系統。在Linux的啟動階段,initrd提供了一套機制,將內核映像和根文件系統一起加載到內存中。2.Ramfs/TmpfsRamfs/Tmpfs文件系統把所有的文件都放在RAM中,所以讀/寫操作發生在RAM中,可以用Ramfs/Tmpfs來存儲一些臨時性或經常要修改的數據。Ramfs/Tmpfs相對于傳統的Ramdisk的不同之處主要在于其不能被格式化,文件系統大小可隨所含文件內容大小變化。5.4文件系統的制作5.4.1制作Ramdisk文件系統5.4.2制作YAFFS2文件系統5.4.3制作JFFS2文件系統5.4.4其他文件系統制作5.4.1制作Ramdisk文件系統制作根文件系統需要有如下目錄:/dev、/bin、/usr、/sbin、/lib、/etc、/proc和/sys。下面分別簡單介紹各個目錄中存放的文件。(1)/dev目錄下存放的是設備文件,用于訪問系統資源或設備。(2)/bin、/usr/bin、/usr/sbin、/sbin存放的是二進制可執行文件。(3)/lib用于存放動態鏈接庫。(4)/etc是用來存放初始化腳本和其他配置文件的。(5)/proc是用來掛載存放系統信息虛擬文件的系統。(6)/sys該目錄下安裝了2.6內核中新出現的sysfs文件系統。1.建立根文件目錄前面提到過根文件目錄主要包括/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys、/var和/tmp。下面給出建立根文件目錄的命令:#cd/usr/local#mkdirrootfs#cdrootfs#mkdirbindevetclibprocsbintmpusrvarsys#chmod777tmp#mkdirusr/binusr/libusr/sbin#mkdirvar/libvar/lockvar/logvar/runvar/tmp#chmod777var/tmp2.編譯Busybox編譯Busybox前先必須對需要的工具進行配置,通過圖形界面選擇工具,選擇的原則是盡量選擇必要的工具。下面是解壓和進入配置界面命令:#tarjxvfbusybox-1.21.1.tar.bz2#cdbusybox-1.21.1#makemenuconfig3.將交叉編譯器庫復制到rootfs/lib下(1)將交叉編譯器目錄下庫文件復制到rootfs/lib中時。(2)執行庫文件的復制過程。4.建立所需設備文件需要的設備文件結點包括控制臺console、內存mem等。建立各個設備結點的參數包括設備類型、主設備號和次設備號。5.建立文件系統映像文件準備目標系統啟動所需要的文件rcS、inittab和fstab。這3個文件是制作文件系統最重要的文件。下面給出各個文件的內容。(1)/etc/init.d/rcS:掛載/etc/fstab指定的文件系統。(2)/etc/inittab:init進程的配置文件。(3)/etc/fstab:指定需要掛載的文件系統。6.建立文件系統映像文件建立根文件系統掛載點#mkdir/mnt/ramdisk建立大小為8192的根文件系統#mke2fs-vm0/dev/ram
8192掛載根文件系統#mount-text2/dev/ram/mnt/ramdisk對文件系統進行操作,將制作的文件系統拷貝到掛載點#cp-af
/usr/local/rootfs/*
/mnt/ramdisk退出/mnt/ramdisk目錄才能進行卸載#cd/卸載文件#umount/mnt/ramdisk文件系統生成#ddif=/dev/ramof=ramdiskbs=1kcount=8192制作文件系統映像#gzip-v9ramdisk生成的映像文件為ramdisk,壓縮后為ramdisk.gz。7.內核中支持RAM文件系統的初始化在編譯內核時,在Generalsetup窗口中選擇[*]InitialRAMfilesystemandRAMdisk(initramfs/initrd)support,同時在Initramfssource中傳遞初始化參數:initrd=0x21100000,8000000root=/dev/ramrwinit=linuxrcconsole=ttyS0,115200,mem=32M5.4.2制作YAFFS2文件系統如果開發板只有NandFlash,那么選擇最合適的文件系統為YAFFS文件系統。mini2440只有NandFlash沒有NorFlash,因此選擇的文件系統為YAFFS2文件系統。1.制作文件系統時準備的源代碼內核源代碼和交叉編譯器讀者可以根據自己的實際情況選擇具體的對應版本,yaffs2.tar.gz源碼是必須的。linux-2.6.32.tar.bz2:內核源代碼;yaffs2.tar.gz:YAFFS2文件系統源代碼;arm-linux-gcc-4.4.3.tar.gz:交叉編譯工具;mkyaffs2image.tar:制作YAFFS2文件系統工具。2.解壓源碼解壓內核源碼和交叉編譯器的源碼,并將yaffs2.tar.gz復制到內核源碼的fs目錄下進行解壓。3.修改內核頂層Makefile在Makefile中設置目標平臺為arm,交叉編譯器為arm-linux。#vi
MakefileARCH?=$(SUBARCH)CROSS_COMPILE?=修改為ARCH?=armCROSS_COMPILE?=arm-linux-4.修改機器碼在vivi啟動時如果機器碼與設置的不一致會出現提示,在文件arch/arm/
tools/mach-types中進行下面的修改。#vi
arch/arm/tools/mach-typess3c2440ARCH_S3C2440S3C2440362修改為s3c2440ARCH_S3C2440S3C24407825.修改時鐘頻率修改arch/arm/mach-s3c2440/mach-smdk2440.c中的時鐘為12MHz,具體修改如下。staticvoid__initsmdk2440_map_io(void){s3c24xx_init_io(smdk2440_iodesc,ARRAY_SIZE(smdk2440_iodesc));//s3c24xx_init_clocks(16934400);s3c24xx_init_clocks(12000000);//將頻率設置為12MHzs3c24xx_init_uarts(smdk2440_uartcfgs,ARRAY_SIZE(smdk2440_uartcfgs));}6.使內核支持YAFFS2解壓yaffs2.tar.gz后進入YAFFS2目錄,在YAFFS2目錄下有可執行文件patch-ker.sh,執行如下命令:#./patch-ker.shc/usr/local/arm/linux-2.6.29.6執行該命令后,就會在fs的Kconfig和Makefile中增加對YAFFS2的編譯選項的支持。在fs/Kconfig會自動添加:#PatchedbyYAFFSsource"fs/yaffs2/Kconfig"在fs/Makefile中會自動添加:#PatchedbyYAFFSobj-$(CONFIG_YAFFS_FS)+=yaffs2/7.使內核支持Mini2440在內核的SystemType-->ARMsystemtype選項下,選擇SamsungS3C24xx系列。8.編譯內核映像文件執行makezImage生成內核的映像文件,如果遇到下面的錯誤可以執行makedistclean進行清理,然后重新生成映像文件。ERROR:thesymlinkinclude/asmpointstoasm-x86butasm-armwasexpected
setARCHorsave.configandrun'makemrproper'tofixit#makedistclean#makezImage9.編譯Busybox編譯Busybox的配置細節可以參考5.2.1節。這里可以將Busybox交叉編譯安裝在_install文件中。10.為YAFFS文件系統準備lib庫將交叉編譯器目錄下的庫文件全部復制到lib庫目錄下,-d表示復制的時候包括鏈接文件一起復制過來。#cp-d/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/*so*
./lib11.制作etc目錄下必要的文件etc目錄是文件系統中最重要的目錄,系統配置的啟動信息都在該目錄下,下面分別給出必要的幾個文件。(1)/etc/inittab文件。(2)etc/init.d/rcS文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《時尚尖端展示畫卷》課件
- 愛崗敬業奉獻教師演講稿(16篇)
- 離婚財產分割不公平上訴狀(3篇)
- 銷售人員辭職報告(27篇)
- 公司職責培訓心得體會(20篇)
- 酒店營銷重點工作計劃(15篇)
- 2025小學師德師風心得體會(17篇)
- 深交所培訓課件下載
- 《助力學生成長:課件制作與教學應用》
- 幼兒教師的辭職報告范文300字(18篇)
- 廣西某農貿市場建設項目可行性研究報告
- 第二屆全國設備管理與智能運維職業技能競賽(電氣設備點檢員)考試題庫(含答案)
- 江蘇省常州市2024年中考物理試題【附參考答案】
- 2023-2024學年江蘇省南京市六校聯合體高一下學期5月期中考試化學試題
- TSHNX 001-2024 乳制品企業有害生物防制技術規范
- 第十三章-印花稅
- DL∕T 5362-2018 水工瀝青混凝土試驗規程
- 典型任務-人力制動機制動工作課件講解
- 藥品生產企業質量管理評審要求
- 行政復議法-形考作業1-國開(ZJ)-參考資料
- 山西省朔州市懷仁縣2024屆小升初語文檢測卷含答案
評論
0/150
提交評論