新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于嵌入式設備上的Linux 系統開發

        關于嵌入式設備上的Linux 系統開發

        作者: 時間:2012-08-28 來源:網絡 收藏

        簡單閃存分區的節點

        User device node Major number Minor number

        Bootloader /dev/mtdblock0 31 0

        Kernel /dev/mtdblock1 31 1

        Filesystem /dev/mtdblock2 31 2

        在本例中,引導裝載程序必須將有關 root 節點(/dev/mtdblock2)和可以在閃存中找到文件的地址(本例中是 FLASH_BASE_ADDRESS + 0x04000000 )的正確參數傳遞到內核。一旦完成分區,閃存就準備裝入或掛裝文件

        中 MTD 子的主要目標是在系統的硬件驅動程序和上層,或用戶模塊之間提供通用接口。硬件驅動程序不需要知道象 JFFS2 和 FTL 那樣的用戶模塊使用的方法。所有它們真正需要提供的就是一組對底層閃存系統進行 read 、 write 和 erase 操作的簡單例程。

        設備的文件系統

        系統需要一種以結構化格式存儲和檢索信息的方法;這就需要文件系統的參與。Ramdisk(請參閱 參考資料)是通過將計算機的 RAM 用作設備來創建和掛裝文件系統的一種機制,它通常用于無盤系統(當然包括微型設備,它只包含作為永久存儲媒質的閃存芯片)。

        用戶可以根據可靠性、健壯性和/或增強的功能的需求來選擇文件系統的類型。下一節將討論幾個可用選項及其優缺點。

        第二版擴展文件系統(Ext2fs)

        Ext2fs 是 事實上的標準文件系統,它已經取代了它的前任 D 擴展文件系統(或 Extfs)。Extfs 支持的文件大小最大為 2 GB,支持的最大文件名稱大小為 255 個字符 D 而且它不支持索引節點(包括數據修改時間標記)。Ext2fs 做得更好;它的 優點是:

        Ext2fs 支持達 4 TB 的內存。

        Ext2fs 文件名稱最長可以到 1012 個字符。

        當創建文件系統時,管理員可以選擇邏輯塊的大小(通常大小可選擇 1024、2048 和 4096 字節)。

        Ext2fs 了實現快速符號鏈接:不需要為此目的而分配數據塊,并且將目標名稱直接存儲在索引節點(inode)表中。這使性能有所提高,特別是在速度上。

        因為 Ext2 文件系統的穩定性、可靠性和健壯性,所以幾乎在所有基于 的系統(包括臺式機、服務器和工作站 D 并且甚至一些設備)上都使用 Ext2 文件系統。然而,當在嵌入式設備中使用 Ext2fs 時,它有一些 缺點:

        Ext2fs 是為象 IDE 設備那樣的塊設備設計的,這些設備的邏輯塊大小是 512 字節,1 K 字節等這樣的倍數。這不太適合于扇區大小因設備不同而不同的閃存設備。

        Ext2 文件系統沒有提供對基于扇區的擦除/寫操作的良好管理。在 Ext2fs 中,為了在一個扇區中擦除單個字節,必須將整個扇區復制到 RAM,然后擦除,然后重寫入。考慮到閃存設備具有有限的擦除壽命(大約能進行 100,000 次擦除),在此之后就不能使用它們,所以這不是一個特別好的方法。

        在出現電源故障時,Ext2fs 不是防崩潰的。

        Ext2 文件系統不支持損耗平衡,因此縮短了扇區/閃存的壽命。(損耗平衡確保將地址范圍的不同區域輪流用于寫和/或擦除操作以延長閃存設備的壽命。)

        Ext2fs 沒有特別完美的扇區管理,這使設計塊驅動程序十分困難。

        由于這些原因,通常相對于 Ext2fs,在嵌入式環境中使用 MTD/JFFS2 組合是更好的選擇。

        用 Ramdisk 掛裝 Ext2fs

        通過使用 Ramdisk 的概念,可以在嵌入式設備中創建并掛裝 Ext2 文件系統(以及用于這一目的的任何文件系統)。

        清單 6. 創建一個簡單的基于 Ext2fs 的 Ramdisk

        mke2fs -vm0 /dev/ram 4096

        mount -t ext2 /dev/ram /mnt

        cd /mnt

        cp /bin, /sbin, /etc, /dev ... files in mnt

        cd ../

        umount /mnt

        dd if=/dev/ram bs=1k count=4096 of=ext2ramdisk

        mke2fs 是用于在任何設備上創建 ext2 文件系統的實用程序 — 它創建超級塊、索引節點以及索引節點表等等。

        在上面的用法中, /dev/ram 是上面構建有 4096 個塊的 ext2 文件系統的設備。然后,將這個設備( /dev/ram )掛裝在名為 /mnt 的臨時目錄上并且復制所有必需的文件。一旦復制完這些文件,就卸裝這個文件系統并且設備( /dev/ram )的內容被轉儲到一個文件(ext2ramdisk)中,它就是所需的 Ramdisk(Ext2 文件系統)。

        上面的順序創建了一個 4 MB 的 Ramdisk,并用必需的文件實用程序來填充它。

        一些要包含在 Ramdisk 中的重要目錄是:

        /bin D 保存大多數象 init 、 busybox 、 shell 、文件管理實用程序等二進制文件。

        /devD 包含用在設備中的所有設備節點

        /etcD 包含系統的所有配置文件

        /libD 包含所有必需的庫,如 libc、libdl 等

        日志閃存文件系統,版本 2(JFFS2)

        瑞典的 Axis Communications 了最初的 JFFS,Red Hat 的 David Woodhouse 對它進行了改進。 第二個版本,JFFS2,作為用于微型嵌入式設備的原始閃存芯片的實際文件系統而出現。JFFS2 文件系統是日志結構化的,這意味著它基本上是一長列節點。每個節點包含有關文件的部分信息 D 可能是文件的名稱、也許是一些數據。相對于 Ext2fs,JFFS2 因為有以下這些 優點而在無盤嵌入式設備中越來越受歡迎:

        JFFS2 在扇區級別上執行閃存擦除/寫/讀操作要比 Ext2 文件系統好。

        JFFS2 提供了比 Ext2fs 更好的崩潰/掉電安全保護。當需要更改少量數據時,Ext2 文件系統將整個扇區復制到內存(DRAM)中,在內存中合并新數據,并寫回整個扇區。這意味著為了更改單個字,必須對整個扇區(64 KB)執行讀/擦除/寫例程 D 這樣做的效率非常低。要是運氣差,當正在 DRAM 中合并數據時,發生了電源故障或其它事故,那么將丟失整個數據集合,因為在將數據讀入 DRAM 后就擦除了閃存扇區。JFFS2 附加文件而不是重寫整個扇區,并且具有崩潰/掉電安全保護這一功能。

        這可能是最重要的一點:JFFS2 是專門為象閃存芯片那樣的嵌入式設備創建的,所以它的整個設計提供了更好的閃存管理。

        因為本文主要是寫閃存設備的使用,所以在嵌入式環境中使用 JFFS2 的 缺點很少:

        當文件系統已滿或接近滿時,JFFS2 會大大放慢運行速度。這是因為垃圾收集的問題(更多信息,請參閱 參考資料)。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄大仙区| 濉溪县| 冕宁县| 五河县| 河曲县| 景泰县| 山阳县| 盖州市| 南雄市| 华阴市| 东乌| 板桥市| 齐齐哈尔市| 临夏市| 乐亭县| 延吉市| 邢台县| 陵川县| 高平市| 金昌市| 旺苍县| 山东省| 灵丘县| 焉耆| 崇阳县| 阿巴嘎旗| 聂荣县| 涟源市| 喀喇沁旗| 格尔木市| 华容县| 石景山区| 贵港市| 清水县| 交口县| 大连市| 修武县| 新兴县| 芦山县| 大方县| 宜章县|