嵌入式文件系统的知识分享

嵌入式文件系统的知识分享

嵌入式文件系统挂载构架 ()

有人花了数万元的学费,结果没学到什么,这次帮他恶补一下,让他心里平衡一下因為手邊沒有他所要的詳細資料,僅能靠 記憶,所以會多花些功夫介紹其他的東西。
照上次規矩,先由大家熟悉的地方談起,再切入正題。首先來 看普通 PC 案掛載

代碼:

$ mount
/dev/hda2 /boot ext2 rw 0 0
/dev/hda1 / ext2 rw 0 0


其中 hda1 表示第一顆硬碟第一個分割區,hda2 則是第二個分割 區,如果不是 hda 而是 sda ,那就是 SCSI 硬碟,當然也有是模擬成 SCSI 硬碟的,例如 USB Flash Disk。開機時,先由BIOS叫起 bootloader(lilo或是grub),再由 bootloader 載入 kernel root(/) 並交給它們執行。
清楚後,就方便講解其他的案掛載方式。再來我們要的是一片 軟碟開機的案掛載方式,由於一片軟碟容量太小了(用今日的眼光 來看),所以一般人都先把案壓縮後才放入軟碟,比較傳統做法是在軟碟最最前面直接放入 Linux Kernel,接著放入壓縮後的系統,由 Kernel 負責開機,開機後,先開一個 Ram Disk,然後 Kernel 會把軟碟後面的資料解壓縮,並放入 Ram Disk ,再交由 Ram Disk 上的程式去完成最後開機的動作,完成開機後,最後看到的 root(/) 就是掛在 /dev/ram 底下,而不是 /dev/hda1 之類的 了。那軟碟上的呢?當然就沒用了。
那網路開機呢?網路開機有好幾種方式,原理也類似,都是先由一個 程式,也許是 BIOS ,也許是 Floppy disk 上的小程式,跑起來後 ,再上網載入 Kernel 案系統,一般做法是把案系統放入 Ram Disk 上,也有做法是用 NFS 的方式,直接取之網路用之網路。
喝口水吧,下節課再談談 ARM 上常用的 DOC

嵌入式案系統掛載架構 ()

(再次明,本系列都是憑印象的,有所錯誤之處,請多多指教) 這篇要一般 ARM7 上的案系統架構,ARM7 的板子一般都沒有裝 IDE 介面,都直接放一個 DOC ,然後就 disk 了,這可苦了工程師!其實在 ARM7 上的案系統架構也沒什麼,兩三句就可以講 完了,在這之前,要先談一下 DOC ARM 是何方神聖。
DOC 就是Disk On Chip,看起來很高科技的樣子,其實不然,就是 一顆以 flash 為儲存媒體的晶片而已,可以重覆寫入,電源關閉也 可以保有資料,如此而已,flash 有分 NAND flash NOR flash 你看到的幾乎都是 NAND flash,什麼 CF 卡、USB flash disk 等,都是,因為 NAND flash NOR flash 便宜很多很多,NOR flash好處在於,你可以直接當做一般的 RAM 來讀寫,讀寫是以 Byte 單位的,而 NAND flash 則是以 block 為單位,也許是 512 Byte,寫入也很麻煩,你要先把一個 block 清除,再寫入一個 block 所以,你要寫一個 Byte 和寫一個 block 都是相同的動作,很辛苦 的!而 NOR flash 還有另外一個特點,可以做成 XIP 案系統,什麼是 XIP 呢?就是程式執行時,不用把 binary 部份再拷貝一份 RAM 去,直接去執行即可,很省記憶體吧!不過,這樣做的成本 可能比買 NAND flash 和多加的 RAM 還貴,所以目前為止,還沒看 到有人這麼弄。 「為什麼 NAND flash NOR flash 差這麼多?也不過都是邏輯閘 而已?」 「當初我還在和 NANDNOR 奮鬥時,DOC 還沒上市,所以這個問題 請自己去向 google 大神請示。」
再來 ARM7 ,這顆 CPU ARM 系列 CPU 中的一顆,ARM 系列 還包含了 Strong ARMARM9 等等,HP 某款高 PDA 就是用 Strong ARM 做的,我們還曾經直接到市面上買 HP PDA ,然後灌成 Linux 版的,Strong ARM Linux 支援很完整,porting 起來真 的很舒服,缺點則是耗電及太貴了!Samsung 出的 ARM7 除了省電 還有便宜的優點,當時為了打敗 MIPS (也是一種 CPU),狠心降價
一大半,結果 ARM7 的聲勢瞬間暴漲,對寫程式的人來ARM7 一個很大的缺點,沒有 MMU(記憶體管理單元),沒有這個 MMU 的壞處就是記憶體的管理很辛苦,你必需避免很多小塊的記憶體散落在
各個角落,例如,如果目前有三塊 1MB free 的記憶體,不連續,此時你要求 2MB 的記憶體時,系統會回你,「記憶體不足」,腦筋吧!
那又為什麼要用 ARM ,不用 x86 的呢?x86 貴及耗電是較大的缺 點,那我把 x86 的開機軟來開機,成嗎?很抱歉,不行的,因為 系統完全不同,ARM RISC 的,而 x86 CISC 的,這又要扯到
RISC
CISC 的恩恩怨怨了! 「什麼,又要離題了?」「那當然,我什麼,你就聽什麼,不然你上台來講好了。」RISC 就是簡單指令集的 CPU ,而 CISC 則是複雜指令集的 CPU 最大不同點在於 RISC 只有一些很簡單的指令,如ADD, OR, NOT 類,乘、除一定沒有的,CISC 則是什麼加減乘除通通來,CPU 好人 做到底,通通幫你做,好用吧!RISC 是先出現的,CISC 後來才 出現,剛開始,人們拚命發展 CISC ,指令愈加愈複雜,最後,反 而發覺 RISC 比較好用,因為 RISC 指令簡單, CPU 動作的
Clock
都一樣,有利最佳化,速度反而會更快,所以 RISC 的又開 始紅起來了。
DOC 擺在板子上,怎麼變成 disk 的呢?這就是 Kernel 要辛 苦的地方了!咦,不是 BIOS 抓好給 Kernel 用呀?當然不是, ARM7 上面沒有類似 PC 上的 BIOS 晶片,也不用什麼 BootloaderKernel 身兼數職,全包了,Kernel 最開頭的第一行組合語言程式 就是先動設定 CPURAM、螢幕、週邊介面等等,都完成了,才 開始其他 Kernel 的動作,而 DOC 的驅動方式及規劃方法,都寫 Kernel 裡面,也就是,flash 怎麼個劃 partition 的,都事先寫好的,
「那有沒有辦法事後動態規劃?」
「可以呀,反正 Source Code 都在那,你愛怎麼改就怎麼改。」
所以最後結論是,在 ARM7 上,想知道 DOC 案系統規劃,
「直接去看 Kernel Source Code 就好了。」

 

壓縮系統 ()

cramfs
這篇是重點,也是最後一篇,這系列只能談到這兒了。
有沒有想過,為什麼一定要解開之後才能讀呢?不解直接讀,可行否?
是的,可以的,但案系統不同,有個案系統很符合--cramfs

代碼:

# mkdir /tmp/tmp_root
# copy
你所要的案到 /tmp/tmp_root
# mkcramfs /tmp/tmp_root.img /tmp/tmp_root
# mount -t cramfs -o loop /tmp/tmp_root.img /mnt/tmp


你會發覺,/mnt/tmp /tmp/tmp_root 容是相同的,用 du ,大小也差不多,但是,/tmp/tmp_root.img 的大小卻小很多,而且 也不用另外解開才能讀,不會另外再佔一個非壓縮的空間! 明一下,mkcramfs 主要目的就是做一個壓縮的案系統,它做法是 直接把一個目轉成一個案系統,你可以直接做用 mount 的方式來 掛載,就如同前面的 iso9660 ext2 的使用方式。放入嵌入式系統 時,也不用另外再把有限的記憶體割一塊來放案系統了。另外, 你或許要重編 kernel 才可支援 cramfs
這有什麼限制?當然有,最大限制就是,它是一個唯讀的,你對它寫 入是無效的,由於要即時解壓縮,效能上也會差一點點,但不會影響 很大。
那有沒有像 Windows 一樣的,可以對某些案、目壓縮,也可以 即時寫入的?有的,要 patch C library Kernel那怎麼用?很抱 歉,你問錯人了,我不會。

OK,結束,下課!

 

转自 [ 酷!學園討論區 ] ,原文请点击标题连接

你可能感兴趣的:(嵌入式文件系统的知识分享)