星期六, 5月 12, 2007

Linux 檔案系統實驗

V1.1

copyright@2006

email: mesmerli@hotmail.com

Linux 檔案系統

Linux 支援許多不同種類的檔案系統,檔案系統透過區塊類型驅動程式操作磁碟或快閃記憶體。本文介紹如何設定 JFFS2 檔案系統與 MTD 區塊驅動程式。

RAM disk

燒 RAMDISK image 至 NAND Flash

什麼是 MTD driver

MTD 是 Memory Technology Devices 的縮寫,是一種為 Flash File System 設計的區塊驅動程式。每組 MTD 驅動程式包含一個字元類型與區塊類型的驅動程式。

MTD RAMDISK 實驗步驟

Host 端

Linux 核心組態設定
  1. 使用 make xconfig 設定 MTD 驅動程式JFFS2
  2. 選取 Memory Technology Deiver (MTD) -> Self-contained MTD devier drivers -> Test driver using RAM
  3. Test driver using RAM 設定為 y。(編譯驅動程式進入核心)
  4. MTDRAM device size in KiB 設定為 4096
  5. MTDRAM erase block size in KiB 設定為 128
  6. SRAM Hexadecimal Absolute position or 0 設定為 0
  7. 選取 File Systems -> Journalling Flash File System v2 (JFFS2) support
  8. Journalling Flash File System v2 (JFFS2) support 設定為 y
  9. 選取 Network device support -> Ethernet (10 or 100Mbit) -> CS89x0 support 設定為 y

重新編譯 Linux 核心

  1. make dep
  2. make clean
  3. make zImage

root file system 組態設定。

建構新的 root file system (RAMDISK)

    1. dd if=/dev/zero of=ext2new bs=1k count=8192
    2. mke2fs -F -m0 -i 2000 ext2new
    3. mkdir /mnt/loop
    4. mkdir /mnt/looporg
    5. mount -w -o loop ext2new /mnt/loop
    6. mount -w -o loop ext2org /mnt/looporg
    7. cp -dpR /mnt/looporg/. /mnt/loop/.
    8. cd /mnt/loop/dev (在 /dev 檔案夾下,建立 MTD 裝置節點)
    9. mknod -m 777 mtd0 c 90 0
    10. mknod -m 777 mtdblock0 b 31 0
    11. cd /
    12. umount -l /mnt/loop
    13. gzip -9 ext2new

重新燒錄 Linux 核心與 root file system。

準備 JFFS2 檔案系統影像檔

  1. mkfs.jffs2 -r rootfs/ -o /usr/src/creator/nfs/rootfs-jffs2.img

Taget 端

  1. 使用 NFS 的方式,mount host 端的目錄,以存取剛剛建立的 JFFS2 檔案系統影像檔。
    1. mount 192.168.0.200:/usr/src/creator/nfs /mnt
  2. 寫入 JFFS2 檔案系統影像檔至 MTD 所管理的記憶體
    1. cat /mnt/rootfs-jffs2.img > /dev/mtd0
  3. mount JFFS2 檔案系統
    1. mount -t jffs2 /dev/mtdblock0 /mnt
  4. 讀寫 /mnt 目錄,此時 /mnt 目錄的內容即為透過 MTD 操作的 JFFS2 檔案系統。

修改 MTD driver

/usr/src/creator/s3c2410/linux/drivers/mtd/maps/cfi_flagadm.c

修改 JFFS2 的 MTDBLOCK 設備編號 (for non-root FS)

/usr/src/creator/s3c2410/linux/include/linux/mtd/mtd.h

0 意見: