導航:首頁 > 文件目錄 > yaffs2根文件系統

yaffs2根文件系統

發布時間:2025-04-29 00:37:14

『壹』 如何掛載一個文件系統

掛載一個文件系統中最重要的數據結構有以下3個:
1. file_system_type 要掛載的文件系統類型。
2. super_block其中有怎樣獲取該文件系統相關數據的方法。
3. vfsmount 這個數據結構起到被掛載文件系統和掛載點文件系統的樞紐所用
這幾個數據結構的關系,請著重看下圖的紅色橢圓形區域:

如果要掛載一個文件系統需要做的工作:
1.查找相應的文件系統類型,such as ext2 ext3 or ntfs or yaffs2 or rootfs etc.
2.查找相應的掛載點,方法:一路摸索,順藤摸瓜。找到其dentry和inode.
3.生成一個vfsmount,這個數據結構是掛載點目錄以及正在掛載的這個文件系統的根目錄(依據的數據結構是:mnt_mountpoing和mnt_root)的樞紐(非常重要),並將這個vfsmount放在到hashtable中。這個hashtable的hash值運算依據的是掛載點目錄以及掛載點inode.除了掛載到hashtable中外,還要鏈到父掛載點的子鏈表中。
放在hashtable的原因是,將來在lookup其內的目錄或者文件時,需要根據掛載點的目錄和掛載點的inode取hash值快速得到vfsmount。
4.主要的工作完成後,還需要把正在掛載的這個文件系統的根目錄的inode和dentry取出來放在內存中,其中dentry的值還要賦給vfsmount的mnt_root.
當然這個第4步驟和第3步驟可能會有混合,主要是為了給vfsmount->mnt_root賦值,所以,需要取該文件系統的根目錄。

『貳』 操作系統的內核與文件系統是什麼關系

一、什麼是文件系統
文件系統指文件存在的物理空間,linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。
Linux文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有文件系統的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。這種機制有利於用戶和操作系統的交互。
每個實際文件系統從操作系統和系統服務中分離出來,它們之間通過一個介面層:虛擬文件系統或VFS來通訊。VFS使得Linux可以支持多個不同的文件系統,每個表示一個VFS 的通用介面。由於軟體將Linux 文件系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程序將看到統一的文件系統。Linux 的虛擬文件系統允許用戶同時能透明地安裝許多不同的文件系統。
在Linux文件系統中,EXT2文件系統、虛擬文件系統、/proc文件系統是三個具有代表性的文件系統。

二、什麼是根文件系統
根文件系統首先是一種文件系統,該文件系統不僅具有普通文件系統的存儲數據文件的功能,但是相對於普通的文件系統,它的特殊之處在於,它是內核啟動時所掛載(mount)的第一個文件系統,內核代碼的映像文件保存在根文件系統中,系統引導啟動程序會在根文件系統掛載之後從中把一些初始化腳本(如rcS,inittab)和服務載入到內存中去運行。我們要明白文件系統和內核是完全獨立的兩個部分。在嵌入式中移植的內核下載到開發板上,是沒有辦法真正的啟動Linux操作系統的,會出現無法載入文件系統的錯誤。
那麼根文件系統在系統啟動中到底是什麼時候掛載的呢?先將/dev/ram0掛載,而後執行/linuxrc.等其執行完後。切換根目錄,再掛載具體的根文件系統.根文件系統執行完之後,也就是到了Start_kernel()函數的最後,執行init的進程,也就第一個用戶進程。對系統進行各種初始化的操作。
根文件系統之所以在前面加一個」根「,說明它是載入其它文件系統的」根「,既然是根的話,那麼如果沒有這個根,其它的文件系統也就沒有辦法進行載入的。它包含系統引導和使其他文件系統得以掛載(mount)所必要的文件。根文件系統包括Linux啟動時所必須的目錄和關鍵性的文件,例如Linux啟動時都需要有init目錄下的相關文件,在 Linux掛載分區時Linux一定會找/etc/fstab這個掛載文件等,根文件系統中還包括了許多的應用程序bin目錄等,任何包括這些Linux 系統啟動所必須的文件都可以成為根文件系統。Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。成功之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。在 Linux 中將一個文件系統與一個存儲設備關聯起來的過程稱為掛載(mount)。使用 mount 命令將一個文件系統附著到當前文件系統層次結構中(根)。在執行掛裝時,要提供文件系統類型、文件系統和一個掛裝點。根文件系統被掛載到根目錄下「/」上後,在根目錄下就有根文件系統的各個目錄,文件:/bin /sbin /mnt等,再將其他分區掛接到/mnt目錄上,/mnt目錄下就有這個分區的各個目錄,文件。

三、什麼是內核
Linux內核就像人的心臟,靈魂,指揮中心。內核是一個操作系統的核心,它負責管理系統的進程,內存,設備驅動程序,文件和網路系統,決定著系統的性能和穩定性。內核以獨占的方式執行最底層任務,保證系統正常運行。協調多個並發進程,管理進程使用的內存,使它們相互之間不產生沖突,滿足進程訪問磁碟的請求等.
操作系統是一個用來和硬體打交道並為用戶程序提供一個有限服務集的低級支撐軟體。一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。完成這個控制工作的軟體就稱為操作系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。

四.內核與文件系統的關系
技術上說Linux是一個內核。「內核」指的是一個提供硬體抽象層、磁碟及文件系統控制、多任務等功能的系統軟體。一個內核不是一套完整的操作系統。一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。
文件系統是kernel的一部分。文件系統實現了系統上存儲介質和其他資源的交互。kernel tree中的fs目錄都是關於文件系統的,可以說它是kernel的一個大子系統。
嵌入式系統在flash中分配了存放內核、根文件系統的區域。bootloader載入了內核,內核啟動,載入文件系統,進入Linux系統。
整個嵌入式系統而言,可以分為三個部分1.uboot 2.kernel 3.文件系統。其中kernel中以VFS去支持各種文件系統,如yaffs,ext3,cramfs等等。yaffs/yaffs2是專為嵌入式系統使用NAND型快閃記憶體而設計的一種日誌型文件系統。在內核中以VFS來屏蔽各種文件系統的介面不同,以VFS向kernel提供一個統一的介面。如打開一個文件時統一使用open,寫時採用write,而不用去考慮是那種文件系統,也不用去考慮文件系統是如何將數據寫入物理介質的。其中 kernel中的配置,只是讓VFS支持這種介面。

『叄』 什麼是根文件系統

問題一:什麼是根文件系統 Linux、UNIX操作系統中,mount(掛接)在 / 目錄(也就是根目錄)上的磁碟分區,叫做根文件系統。(也有人叫:root分區、root文件系統)

問題二:什麼是根文件系統 根文件系統首先是內核啟動時所mount的第一個文件系統,內核代碼映像文件保存在根文件系統中,而系統引導啟動程序會在根文件系統掛載之後從中把一些基本的初始化腳本和服務等載入到內存中去運行。

問題三:什麼是根文件系統 根文件系統首先是內核啟動時所mount的第一個文件系統,內核代碼映像文件保存在根文件系統中,而系統引導啟動程序會在根文件系統掛載之後從中把一些基本的初始化腳本和服務等載入到內存中去運行。
Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。成功之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。
在Linux中,必須要有一個根文件系統的概念。根文件系統首先是一種文件系統,該文件系統不僅具有普通文件系統的存儲數據文件的功能,但是相對於普通的文件系統,它的特殊之處在於,它是內核啟動時所掛載(mount)的第一個文件系統,內核代碼的映像文件保存在根文件系統中,系統引導啟動程序會在根文件系統掛載之後從中把一些初始化腳本(如rcS,inittab)和服務載入到內存中去運行。
mount是Linux下的一個命令,它可以將分區掛接到Linux的一個文件夾下,從而將分區和該目錄聯系起來,因此我們只要訪問這個文件夾,就相當於訪問該分區了。 目前mount已經不僅僅局限於Linux了。在Windows系統下的應用也越來越廣了,多用在虛擬光碟機類軟體上,比如Clone CD,Daemon tool,WinMount等。
根文件系統在系統啟動中到底是什麼時候掛載的呢?先將/dev/ram0掛載,而後執行/linuxrc.等其執行完後。切換根目錄,再掛載具體的根文件系統.根文件系統執行完之後,也就是到了Start_kernel()函數的最後,執行init的進程,也就第一個用戶進程。對系統進行各種初始化的操作。
根文件系統之所以在前面加一個」根「,說明它是載入其它文件系統的」根「,既然是根的話,那麼如果沒有這個根,其它的文件系統也就沒有辦法進行載入的。它包含系統引導和使其他文件系統得以掛載(mount)所必要的文件。

問題四:什麼是根文件系統 下面是從Undertanding the linux kernel 3rd摘錄的 12.4. Filesystem Handling Like every traditional Unix system, Linux makes use of a system 's root filesystem : it is the filesystem that is directly mounted by the kernel ring the booting phase and that holds the system initialization scripts and the most essential system programs. Other filesystems can be mountedeither by the initialization scripts or directly by the userson directories of already mounted filesystems. Being a tree of directories, every filesystem has its own root directory. The directory on which a filesystem is mounted is called the mount point. A mounted filesystem is a child of the mounted filesystem to which the mount point directory belongs. For instance, the /proc virtual filesystem is a child of the system 's root filesystem (and the system 's root filesystem is the parent of /proc). The root directory of a mounted filesystem hides the content of the mount point directory of the parent filesystem, as well as the whole subtree of the parent filesystem below the mount point.簡單的來說,我認為根文件系統就是一種目錄結構,那麼根文件系統和普通的文件系統有什麼區別呢?我認為根文件系統就是要包括Linux啟動時所 必須的目錄和關鍵性的文件,例如Linux啟動時都需要有init目錄下的相關文件,在Linux掛載分區時Linux一定會找/etc/fstab這個 掛載文件等,根文件系統中還包括了許多的應用程序bin目錄等,任何包括這些Linux系統啟動所必須的文件都可以成為根文件系統。 Linux支持多種文件系統類型,在嵌入式上常用的有:ROMFS,JFFS2,NFS,CRAMFS,YAFFS等等。在Linux系統中是通過mount命令來掛載不同的文件系統。在ARM Linux中常用的文件系統的配置:RAM Disk Driver + EXT2;MTD Driver + JFFS2/YAFFS;NFS;uclinux中常見的文件系統配置為:Blkmem Driver + ROMFS(支持 Nor ......>>

問題五:什麼是根文件系統 是文件系統根目錄么?就是你分區之後的盤符的首層路徑。如:C:/這類的。

問題六:根文件系統的文件系統 (1)jffs2JFFS嵌入式系統文件系統最早是由瑞典 Axis munications公司基於Linux2.0的內核為嵌入式系統開發的文件系統。JFFS2是RedHat公司基於JFFS開發的快閃記憶體文件系統,最初是針對RedHat公司的嵌入式產品eCos開發的嵌入式文件系統,所以JFFS2也可以用在Linux, uCLinux中。Jffs2: 日誌快閃記憶體嵌入式系統文件系統版本2 (Journalling Flash FileSystem v2)主要用於NOR型快閃記憶體,基於MTD驅動層,特點是:可讀寫的、支持數據壓縮的、基於哈希表的日誌型文件系統,並提供了崩潰/掉電安全保護,提供「寫平衡」支持等。缺點主要是當文件系統已滿或接近滿時,因為垃圾收集的關系而使jffs2的運行速度大大放慢。目前jffs3正在開發中。關於jffs系列文件系統的使用詳細文檔,可參考MTD補丁包中mtd-jffs-HOWTO.txt。jffsx不適合用於NAND快閃記憶體主要是因為NAND快閃記憶體的容量一般較大,這樣導致jffs為維護日誌節點所佔用的內存空間迅速增大,另外,jffsx文件系統在掛載時需要掃描整個FLASH的內容,以找出所有的日誌節點,建立文件結構,對於大容量的NAND快閃記憶體會耗費大量時間。(2)yaffs:Yet Another Flash File Systemyaffs/yaffs2是專為嵌入式系統使用 NAND型快閃記憶體而設計的一種日誌型文件系統。與jffs2相比,它減少了一些功能(例如不支持數據壓縮),所以速度更快,掛載時間很短,對內存的佔用較小。另外,它還是跨平台的文件系統,除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自帶NAND晶元的驅動,並且為嵌入式系統提供了直接訪問文件系統的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統操作。當然,yaffs也可與MTD驅動程序配合使用。yaffs與 yaffs2的主要區別在於,前者僅支持小頁(512 Bytes) NAND快閃記憶體,後者則可支持大頁(2KB) NAND快閃記憶體。同時,yaffs2在內存空間佔用、垃圾回收速度、讀/寫速度等方面均有大幅提升。(3) Cramfs:pressed ROM File SystemCramfs是Linux的創始人 Linus Torvalds參與開發的一種只讀的壓縮文件系統。它也基於MTD驅動程序。在cramfs文件系統中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統節省大量的Flash存儲空間,使系統可通過更低容量的FLASH存儲相同的文件,從而降低系統成本。Cramfs文件系統以壓縮方式存儲,在運行時解壓縮,所以不支持應用程序以XIP方式運行,所有的應用程序要求被拷到RAM里去運行,但這並不代表比 Ramfs需求的RAM空間要大一點,因為Cramfs是採用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的內存空間,只針對目前實際讀取的部分分配內存,尚沒有讀取的部分不分配內存空間,當我們讀取的檔案不在內存時,Cramfs文件系統自動計算壓縮後的資料所存的位置,再即時解壓縮到 RAM中。另外,它的速度快,效率高,其只讀的特點有利於保護文件系統免受破壞,提高了系統的可靠性。由於以上特性,Cramfs在嵌入式系統中應用廣泛。但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內容對進擴充。Cramfs映像通常是放在Flash中......>>

問題七:Linux 根文件系統 為什麼 重要 沒有根,也就沒法向上長成樹;當然,Linux里的文件系統一般是一棵倒著的樹。
既然根對一棵真樹那麼重要,在Linux里也可以類推了。
根文件系統是其他文件的最終掛載點,沒有根文件系統,就像一棵被砍成七零八落的樹,亂七八糟了。。。

問題八:什麼是linux根文件系統移植 linux文件系統格式挺復雜多樣的,如ext、ext2、ext3、ext4、jsf、 、xfs、ReiserFS等。 一般情況下,linux根分區文件系統多數用ext3、ext4,安裝時你可以選擇。

問題九:Linux內核中有文件系統模塊, 那它和根文件系統什麼關系哦? linux內核是linux的真實的操作系統,所有的操作系統的相關功能都是由用戶介面程序傳遞到內核由內核來完成的。
linux文件系統是指linux操作系統對整個系統中的所有的數據、文件的管理的一種實現方式。
簡單點說:像windows它的文件系統是NTFS文件系統或者FAT文件系統,通過這種方式將windows的各種文件保存在磁碟上,用於存儲和訪問了。
而linux系統則使用ext這種文件系統來實現。

問題十:Linux 根文件系統 為什麼 重要 沒有根,也就沒法向上長成樹;當然,Linux里的文件系統一般是一棵倒著的樹。 既然根對一棵真樹那麼重要,在Linux里也可以類推了。 根文件系統是其他文件的最終掛載點,沒有根文件系統,就像一棵被砍成七零八落的樹,亂七八糟了。。。如果你還有什麼不懂的就去看看《Linux就該這么學》這本書。

『肆』 U-Boot中使用tftp下載文件出現錯誤TFTPerror:'Accessviol

在進行U-Boot中使用tftp下載文件的操作時,用戶遇到了一個問題:在載入根文件系統rootfs-combo.yaffs2到內存時,出現錯誤提示TFTPerror:'Access violation' (2)。該用戶通過製作工具mkyaffs2image生成了rootfs-combo.yaffs2文件,將其拷貝到主機伺服器的tftp目錄。然而,在U-Boot載入過程中,該錯誤頻繁出現,阻止了正常載入過程。

為了解決問題,用戶採取了一系列步驟。首先,確認了使用的mkyaffs2image工具版本與之前相同,並進行了逐位元組比較以排除工具版本差異的可能性。接著,從錯誤代碼TFTP error: 'Access violation' (2)中推斷可能與文件許可權相關。在查看/tftpboot目錄下rootfs-combo.yaffs2文件的屬性後,發現其許可權為600,而用戶並不理解為何mkyaffs2image會生成這樣的文件許可權。

進一步分析後,用戶將rootfs-combo.yaffs2文件的許可權更改為666,並在U-Boot中重新嘗試載入根文件系統,成功解決了問題,使根文件系統能夠正常載入到內存。至此,用戶的問題得到解決。

『伍』 請問Linux與嵌入式Linux區別是什麼謝謝

Linux

Linux是一種自由和開放源碼的類Unix操作系統,存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

Linux以它的高效性和靈活性著稱,Linux模塊化的設計結構,使得它既能在價格昂貴的工作站上運行,也能夠在廉價的PC機上實現全部的Unix特性,具有多任務、多用戶的能力。Linux是在GNU公共許可許可權下免費獲得的,是一個符合POSIX標準的操作系統。

嵌入式Linux

嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。隨著微處理器的產生,價格低廉、結構小巧的CPU和外設連接提供了穩定可靠的硬體架構,那麼限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。盡管從八十年代末開始,陸續出現了一些嵌入式操作系統,比如著名的有:Vxwork、pSOS、Neculeus和WindowsCE。

Linux做嵌入式的優勢:首先,Linux是開放源代碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發者的強大技術支持;其次,Linux的內核小、效率高,內核的更新速度很快;最後,Linux是免費的OS,在價格上極具競爭力。

Linux和嵌入式Linux有什麼區別?

硬體平台:嵌入式Linux一般是Mips,ARM平台;桌面Linux一般是X86平台。

根文件系統:嵌入式Linux一般用UBIFS,yaffs2,jffs2;桌面Linux一般用ext3。

shell不同:嵌入式Linux一般用busybox,桌面Linux一般用bash。

『陸』 怎麼將在linux下壓制的yaffs2格式的.img還原

為了在虛擬機Ubuntu中掛載nfs成功,期間遇到了很多的問題。今天掛載成功後,才覺得那些問題中有很多都是可以避免的。但也許從另一個角度來講,也是在鍛煉自己的能力。先說一說主要的步驟,然後我就說說要掛載成功的幾個關鍵地方吧,你掛載不成功,很有可能就是這幾個關鍵地方沒有做好。
首先第一步就是要為開發板燒寫uboot和kernel。
1.先將SD卡格式化為FAT32格式。將啟動代碼固化到SD卡中。
能出現的問題:1 volume erro之類的。
解決方法:重新插拔SD卡,某些情況下可能要換一張SD卡試一試。
2.下載Uboot到nandflash中並設置Uboot工作參數。注意的就是串口和波特率要設置對。
可能出現的問題:
1.ARNING: OEMMultiBINNotify: Invalid BIN region descriptor(s).
Don't support raw image
解決方法:這種情況請注意選這從USB Port-->UBOOT-->UBOOT」,注意是選Uboot,而不是選transmit。
2.無法將uboot寫進nandflash
解決方法:請一直按著ENTER鍵,直到OK出現。(這一般是nand erase沒有干凈,一定要等到OK出現。如果不出現,說明沒有擦除干凈)
3.燒寫Kernel。
可能出現的問題一般同上面的2,注意我說的幾點即可。
4.安裝根文件系統,也是非常重要的一步。如果你要安裝yaffs2文件,這其中又會涉及要掛在NFS。
假設我們要安裝的是yaffs2文件。
首先第一步:安裝NFS

『柒』 如何製作CRAMFS + YAFFS2文件系統的相關推薦

如何製作CRAMFS + YAFFS2文件系統
1.文件系統簡述
隨著32位CPU價格不斷下跌,片上存儲設備的容量相比越來越大,越來越多的嵌入式系統開始應用各種嵌入式操作系統。一般在嵌入式領域,只要應用到操作系統的必然會需要一個,甚至是多個文件系統。所謂文件系統,實際上就是在一個具體的存儲設備上任何文件的組織和目錄。這個設備可能是各種RAM、NAND FLASH、NOR FLASH等DOC設備,還有以NAND FLASH 為基礎的各種存儲卡等[1]。目前,針對不同的設備和應用有很多文件系統可供選擇,例如EXT2、TEMPFS、RAMDISK、CRAMFS、JFFS1/2、YAFFS1/2、XFS等。除此之外,還有很多供應商提供的商用文件系統。
選擇文件系統,要根據具體應用的需求。一般,首先要考慮的就是可靠性,健壯性和增強的需求。如果是像工控這樣的不需經常更新控製程序的應用來說,我們選擇CARAMFS這樣的只讀文件系統已經足夠了,而且它還可以帶來的另外一個好處就是CRAMFS的壓縮率高達50%,可以大大節省我們的存儲空間。但是如果是像涉及到數據採集這類需要保存數據的應用來說,只讀的文件系統就很難滿足應用系統的需求,我們可以選擇JFFS或者YAFFS這樣的可讀寫的文件系統。不過在實際應用中,需要考慮的因素還應該更多。

2.文件系統的實現
2.1文件系統的選擇
在本文涉及的應用中,根文件系統並不需要頻繁的更改,但是卻涉及到一些數據的存取。考慮到的存儲設備是NAND FLASH,所以在根文件系統格式的選擇上可以用壓縮率比較高的CRAMFS,而在根文件系統下掛載一個可讀寫的YAFFS2文件系統。
YAFFS2(Yet Another nandFlash FileSytem2)是專門針對NAND設備的一種文件系統。YAFFS2類似於JFFS/JFFS2文件系統,與YAFFS2不同的是JFFSS1/2文件系統最初是針對NOR FLASH的應用場合設計的。而YAFFS2針對NAND FLASH的特點採用增強的碎片回收和均衡磨損技術,大大提高了讀寫速度,延長了存儲設備的使用壽命[2],可以更好的支持大容量的NAND FLASH晶元。而且在斷電可靠性上,YAFFS2的優勢更加明顯[3]。

2.2建立根文件系統
Linux內核啟動以後,根據參數linux_cmd_line的指示跳轉到根文件系統的地址,完成文件系統的初始化和掛載任務。根文件系統的建立可以藉助各種開發套件來完成,也可以完全由自己搭建一個。這里介紹如何通過開發套件的幫助來完成基本的根文件系統。Busybox是由Bruce Perens發起的一項計劃,該計劃最初的目的是協助Debian發行套件建立安裝磁碟。由於Busybox小巧但功能不失強大,所以在嵌入式系統中有很廣的應用。下載Busybox穩定版(www.busybox.net),解壓後直接make menuconfig 進入Busybox配置菜單,這個界面根內核差不多。在Applets下面選擇你需要命令,然後退出保存, 執行make , make install。在Busybox的目錄下就會生成_install目錄,這個目錄就包含了將要配置的命令的工具包。把這個目錄拷貝到工作目錄,更名為rootfs, 這個目錄就是要建立的根文件系統的雛形——但是它還不能工作,需要進一步的完善。
在rootfs/下,首先在/rootfs/dev下建立必須的設備文件。關於設備的建立,可以參考Filesystem Hierarchy Standard來確定需要的哪些設備文件(http://www.pathname.com/fhs/)。下一步就是完成/rootfs/etc這個目錄下的3個比較重要的文件inittab,fstab,init.d/rcS(或者是rc.d/rc.sysinit,這個由inittab決定)。下面給出可供參考的樣例:
Inittab文件
#System initialization .
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::restart:/sbin/init
::shutdown:/bin/umount –a –r
::shutdown:/sbin/swapoff –a

Fstab文件
none /proc proc defaults 0 0
tmpfs /temp tmfs defaults 0 0
fstab指定了設備的掛載點。要了解關於fstab文件的格式以及詳細信息,可以參考
http://www.tuxfiles.org/linuxhelp/fstab.html

Init.d/rcS文件
#!/bin/sh
Mount –o remount, rw /
/bin/mount –a
>/etc/mtab
Echo 「messages」
Hostname 「hostname」
在這個腳本中,還可以定義內核的其他一些動作,這在後面掛載YAFFS2文件系統中顯得非常有用。
最後,加入需要的鏈接庫文件就可以了。通常這部分會比較麻煩,因為你並不知道你的應用具體需要哪些庫文件,可以通過兩種途徑解決這個問題:一是利用工具readelf來找出應用程序依存哪些鏈接庫;二是參考linux相關計劃網站上的提供的文件系統,來確定需要的鏈接庫文件[4]。

2.3製作YAFFS2文件系統
根文件系統做好後,可以通過NFS(http://nfs.sourceforge.net/nfs-howto/)來測試文件系統是否可行,但是最後我們還是要把這個文件系統燒進目標板。
可以有兩種方式來應用YAFFS2文件系統,一是CRAMFS+YAFFS2的組合,一種是純YAFFS2文件系統格式。由於在筆者的應用中,內核和根文件系統並不需要頻繁更新,所以從節省存儲空間和保護根文件系統的角度來考慮,我們選用CRAMFS這樣的高壓縮率、只讀文件系統,而應用程序,用戶空間使用YAFFS2文件系統格式。
對於CRAMFS,可以直接用mkcramfs /rootfs ~/root.img來製作cramfs鏡像,/rootfs是前面建立的根文件系統目錄,~/root.img指定做好鏡像的保存目錄。由於YAFFS2文件系統當初設計就是針對nand設備的,在筆者的應用中,文件系統是在NANDFLASH中啟動,因此要使用YAFFS2文件系統,就必須先在內核添加NAND設備驅動[5],並修改arch\arm\mach-s3c2410\devs.c文件,增加nand flash分區。一般情況下bootloader, kernel, root 三個分區是必須的,也有的加了param分區來保存內核參數,user分區來作為用戶空間的,但是也可以不要。
在www.aleph.co.uk下載YAFFS2(GPL)源碼,解壓後在YAFFS2目錄下執行
patch-ker.sh ~/Linux2.6.14.2
~/Linux2.6.14.2是內核的路徑,筆者的內核是2.6.14.2。patch後在內核的fs目錄下就會生成yaffs2目錄,這樣內核就已經得到YAFFS2的支持了。
接下來make menuconfig ,配置內核時在
Device Drivers->
Memory Technology Device (MTD)->
下選中MTD Partitioning Surpport,這樣我們的分區信息才有效。在
File System->
Miscellaneous filesystems->下配置YAFFS2如下:

<>EFS file system support(read only) (EXPERIMENTAL)
<*>YAFFS2 file system support
— 512 byte / page devices
[*]Lets Yaffs do its own ECC
[*]Use the same ecc byte order as Steven Hill』s nand_ecc.c
— 2048 byte (or larger) / page devices
[*]Autoselect yaffs2 format
[*]Disable lazy loading
[*]Turn off wide tnodes
[*]Turn off debug chunk erase check
[*]Cache short names in RAM
<>Jounalling Flash File System (JFFS) support

保存配置,退出,執行make。Make結束後就得到了一個具備掛載yaffs2文件系統能力的內核鏡像。
在bootloader源文件中,將nand flash分成幾個分區,前面提到的devs.c文件里的分區也必須與bootloader的分區一致,因為bootloader指定了內核和文件系統的地址,最後啟動時也會到相應的地址尋找指令。在我們的應用中,將flash分成bootloader, param, kernel, root, user。其中root用來掛載CRAMFS根文件系統,user分區掛載YAFFS2文件系統。
在YAFFS2源文件的utils目錄下,執行make就可以生成 mkyaffs2image工具,執行
./mkyaffs2image (要製作yaffs2的目錄) (目標鏡像)
生成yaffs2文件系統,不過因為前面根文件系統是CRAMFS格式,YAFFS2可以作為模塊來載入,這樣更加方便,更加靈活。載入模塊也可以在後面給出的腳本中定義。
最後一步就是要讓內核在啟動後掛載文件系統,掛載文件系統有兩種方式:手動和自動掛載。在實際應用中當然是要系統在無需人工干預的情況下自動掛載文件系統。在Debian系統中,初始化腳本是/etc/init.d/rcS,在Rad Hat中是/etc/rc.d/rc.sysinit。這裡麵包含了裝入文件系統,設置時間,打開交換分區,得到主機名等等內容。回顧前面給出的Inittab和init.d/rcS文件就知道,系統的Init進程是如何動作的。對照前面的rcS文件這里給出一個更加詳細的並給出注釋。
#! /bin/sh //busybox提供的SHELL

PATH=/sbin:/bin:/usr/sbin:/usr/bin //設置系統路徑
runlevel=S //運行級別
prevlevel=N
umask 022 //預設訪問許可權為022
export PATH runlevel prevlevel

/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /
//cramfs作為根文件系統掛到第四個分區下,即root分區。
/sbin/insmod -f /lib/yaffs2.ko //載入yaffs2模塊
/sbin/mount -t yaffs2 /dev/mtdblock/4 /usr //yaffs2掛到第五個分區,作為/usr

/sbin/mount -t proc none /proc //mount命令由busybox提供
/sbin/mount -t tmpfs none /root //掛載tmpfs到指定目錄,下同

/sbin/mount -t tmpfs none /tmp
/sbin/mount -t tmpfs none /var

/sbin/mkdir -p /var/lib //創建目錄
/sbin/mkdir -p /var/run
/sbin/mkdir -p /var/log

/etc/rc.d/init.d/leds start //初試用戶程序leds

/sbin/ifconfig lo 127.0.0.1 //指定lo設備的IP地址為127.0.0.1
#/sbin/ifconfig eth0 192.168.0.2

/sbin/hostname -F /etc/sysconfig/HOSTNAME //指定主機名文件路徑.

將文件系統燒進目標板對應分區,boot,即可運行。至此,目標板可以通過/usr進行讀寫文件,目標板完成對yaffs2的支持。

3.結束語
YAFFS2可靠的掉電保護和高效率的讀寫以及對nand存儲設備的保護等優勢使得它在越來越多的嵌入式系統中取得應用。在本文的應用中,YAFFS2在Linux下表現了良好的性能。

閱讀全文

與yaffs2根文件系統相關的資料

熱點內容
淘寶網路電話叫什麼 瀏覽:231
編程要讀哪些書 瀏覽:134
如何在手機上新建文件夾里添文件 瀏覽:292
先鋒w10刷安卓系統 瀏覽:787
java設置過期日期 瀏覽:114
新版本抖音怎麼看我的數據比例 瀏覽:946
什麼是3G網路3G的發展史 瀏覽:269
如何使用ps把圖片的文件大小弄小 瀏覽:880
安卓系統根目錄文件夾 瀏覽:900
手錶怎麼設置蜂窩網路 瀏覽:51
舊愛勾搭app還有嗎 瀏覽:141
日外語言編程軟體哪個好 瀏覽:950
小論文發表了但是數據錯誤怎麼辦 瀏覽:952
注冊表禁止啟動程序運行 瀏覽:705
網路優化總體流程圖 瀏覽:735
前端程序員簡歷模板 瀏覽:706
蜂巢積木編程機器人怎麼樣 瀏覽:561
微信小程序tips 瀏覽:117
油印文件有哪些 瀏覽:854
java線程買票案例 瀏覽:672

友情鏈接