|
08 27 |
SQUASHFS-Linux壓縮型檔案系統的王者作者: Joey 日期: 2008-08-27 16:44 |
squashfs是眾多Live CD使用的檔案系統,Why?因為它那嚇死人的壓縮率,舉個例子,以筆者製做的root file system為例,壓縮過後的initial ram disk大小為1.3MB,但squashfs製做出來的file system image只有500多k,squashfs image居然只有compressed initial ram disk image一半的容量,這種節省儲存空間和記憶體空間的檔案系統,最適合在台灣用了,因為代工廠最需要的cost down,這種軟體技術做到了在小容量記憶體系統中放大檔案的可能性
可惜目前Linux-2.6.26還沒有支援squashfs,所以必需去patch kernel才能使用,首先至官方網站下載squashfs source and tool,目前最新的版本是3.4,解壓縮後,參照以下指令執行patch
然後編譯製作squafs file system image的工具
會得到兩支執行檔mksquashfs和unsquashfs,mksquashfs是製做映像檔的工具,unsquashfs可解壓縮印像檔並查看內容,詳細的使用方法請參考squashfs-HOWTO
製做squashfs檔案系統的指令很簡單,用法大致如下
kernel command line請修改為” mem=64M console=ttySAC0 initrd=0x32000000,2000000 root=/dev/ram0 rootfstype=squashfs”,這裡的範例是根據QT2410設定的,假設我們把squashfs image下載到板子上的0x32000000且其大小為2MB,rootfstype為squashfs,kernel開機完會mount /dev/ram0的squasfs image,可參考如下圖片

| 請問,如果要把squashfs寫到mtd,該如何做? |
| Hi...你的問題我已經寫好網誌回答你了,請參考這一篇 |
| Hi Joey 小弟照著squash README中的方法, 成功的將一個RootFileSys壓縮為squashFS格式, 並寫入arm板子的nand中, 唯獨ramdisk不成功, kernel有開啟support ramdisk及squashFS, 錯誤訊息為"No filesystem could mount root, tried: squashfs Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)" 但此FS是可以work的(放HDD中開啟) 想請教Joey大大, 小的是不是還漏了什麼?? 如: /etc/init.d/rcS 中要寫載入ramdisk的shell scrip?? 謝謝 <(_ _)> |
| Hi bolulu: linux開機的步驟如下 1.bootloader 2.linux kernel 3.file system 4.initial script 您的問題很明顯是卡在mounting filesystem,kernel根本不認得您擺在NAND的squashfs image,所以您修改/etc/init.d/rcS於事無補,建議您再確定一次nand的block driver,和kernel command line 我這邊的範例是直接把filesystem load到memory,所以你看我的kernel command line的file system位址是0x32000000 以上 |
| Hi Joey 小弟問題解決了, 原來是Kernel有問題 menuconfig時, 這些要選到(沒勾到第三個) 1. support squashFS 2. RAM disk support 3. Initial RAMdisk file system and RAMdisk support 謝謝您不吝賜教 ^_^ |
| Hi Joey, 請教您一個問題, Squash root FS既然是read-only, 是不是意指我不能mount 一個device到Squash FS底下的任一個目錄呢? 舉例來說, 我有一個案子, 現在kernel可以成功的掛載Squash root FS, 假使在這之後, 有一USB外接式硬碟被plug-in到該系統, 我可以看到新增一個device node(/dev/sda1), 請問這樣有跟Read-only的說法衝突嗎? (不是read-only嗎? 為何可以增加一個device node ? 還是因為執行時是在RAM ?)其次是當我想將/dev/sda1 mount到在Squash FS底下其它的目錄,假設是/mnt目錄,這樣可嗎? 我們遇到了一些mount的問題. (關於Read-only) |
| No No No.... /dev不可以在readonly的filesystem,在開機的start up script裡,必需把它remount到jffs2 or tmpfs,一般常用的作法,把/dev re-mount到jffs(總不能每次開機都在重做device node) 請參考如下作法 mount -o move /dev /mnt/jffs2/dev |
訂閱
上一篇
返回
下一篇
標籤:


fw_printenv-control u-boot enviroment variables under linux (2009-05-12 16:35)
rpcapd與netcat-測試嵌入式系統的好工具 (2009-04-09 17:06)
udev-強大的device node管理系統 (2009-02-02 20:35)
Framebuffer兩三事-Test On QT2410 (2009-01-12 16:29)
UIO-Linux user space I/O driver (2008-12-15 14:50)
GDB-刺入bug心臟的寶劍 (2008-10-15 16:11)
Telnet daemon-RS232以外的選擇 (2008-10-03 18:57)
在嵌入式系統切換file system-以squashfs和jffs2為例 (2008-10-01 19:44)
Linux kernel module-進入系統核心的鑰匙 (2008-09-12 14:03)