作者 主題: [分享] 嵌入式檔案系統掛載架構 (一)  (閱讀 22128 次)

0 會員 與 1 訪客 正在閱讀本文。

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
有人花了數萬元的學費,結果沒學到什麼,這次幫他惡補一下,
讓他心理平衡一下。因為手邊沒有他所要的詳細資料,僅能靠
記憶,所以會多花些功夫介紹其他的東西。

照上次規矩,先由大家熟悉的地方談起,再切入正題。首先來
看普通 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 。

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
這是給x86的用法
« 回覆 #1 於: 2005-07-27 16:30 »
哇哈哈商業的嵌入式linux通常都只有boot  and image1~3個
沒有人會放tar.gz擋再上面巴! 假設您是有hd要放資料的由boot開機請不要理會/dev/hdX? 通常會開一個ramdisk來放部份file system 開完機下mount可以看到/dev/ram0 / ; /dev/ram1 /etc ; /dev/ram2 /hd ...目前看過這種覺得比較標準巴 rootfs / 也就是我說過整支程式靈魂要靠linuxrc ...or 改/usr/src/linux...... 裡的程式摟

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
Re: 這是給x86的用法
« 回覆 #2 於: 2005-07-27 16:44 »
引述: "V-ezlinux"
通常會開一個ramdisk來放部份file system 開完機下mount可以看到/dev/ram0 / ; /dev/ram1 /etc ; /dev/ram2 /hd ...目前看過這種覺得比較標準巴


這做法有一個很大的缺點,會多佔一個 RAM disk 的空間,
而且還是解壓縮後的大檔案系統,我現在都不這麼做了。

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
linuxrc
« 回覆 #3 於: 2005-07-27 16:54 »
哇那您有啥新方法教一下巴!

jou

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 4989
  • 性別: 男
    • 檢視個人資料
Re: linuxrc
« 回覆 #4 於: 2005-07-27 16:59 »
引述: "V-ezlinux"
教一下巴!

呵~~
烤焦魚下巴!也很好吃!   : )~~~

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
ramdisk
« 回覆 #5 於: 2005-07-27 17:01 »
大大您有啥更好的方法可以教一下嗎? or mail 給我一下您詳細的方法 ..可供我摻考我想了半年也只有用剛剛那種辦法...您的方法一定滿特別的希望可以得到您的傳授功力...哈感激...感謝幫助過我的人...

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
Re: ramdisk
« 回覆 #6 於: 2005-07-27 17:06 »
引述: "V-ezlinux"
大大您有啥更好的方法可以教一下嗎? or mail 給我一下您詳細的方法 ..可供我摻考我想了半年也只有用剛剛那種辦法...您的方法一定滿特別的希望可以得到您的傳授功力...哈感激...感謝幫助過我的人...


http://phorum.study-area.org/viewtopic.php?t=30272
http://phorum.study-area.org/viewtopic.php?t=30274
http://phorum.study-area.org/viewtopic.php?t=30276
http://phorum.study-area.org/viewtopic.php?t=30340

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
ramdisk
« 回覆 #7 於: 2005-07-27 17:25 »
您的說的只是用cramfs來壓巴!檔案大小限制這沒啥問題重點有些檔案需要可以寫入 ...這樣就只能讀了..我想...應該還有別的方法巴! 我想您大概不方便說巴!可是我覺得這說了也不影響os本身拉大大您就好心說一下巴!小弟會感激不盡...!除了這已外還有粉多都是要花時間了解的不是嗎?小弟就這一段解了半年就請您好心救救我巴!要不然記憶體吃光就reboot真的不是好方法

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
Re: ramdisk
« 回覆 #8 於: 2005-07-27 17:57 »
引述: "V-ezlinux"
您的說的只是用cramfs來壓巴!檔案大小限制這沒啥問題重點有些檔案需要可以寫入 ...這樣就只能讀了..我想...應該還有別的方法巴!


把可能要寫入的部份都放到 ramdisk 去,不就成了?
和 live CD 的方式類似。(突然想到,也可參考 live CD 的方式)

引用
要不然記憶體吃光就reboot真的不是好方法


這是另一個問題,和上面的無關,
這應該是出現在 no MMU 的 板子的問題,
這要 patch libc ,大概做法是自己管理記憶體,
在libc中自己切、自己回收。

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
哈哈
« 回覆 #9 於: 2005-07-27 22:43 »
live cd的做法不行阿我摻考過不少live cd您有建議哪一家的好嗎?我好想都看過沒有我想要的概念阿寫入的部份在ram上沒錯只是可以讓系統可以工作,真正要寫入到hd上巴要不然用live cd的做法reboot就又是default了哈 不可行且ln -s 做了一堆or mount 了一堆比我現在將一部份不會動到的os做成img mount 到ram差多了那種做法只是給想入門的人了解的巴!是差不多拉..您有做出過啥產品嗎?難道都不會遇到這樣的困難還請大大幫忙祥解一下或說明哪一個live cd 做的好可摻考...還請大大將連結給大家我們摻考看看摟.....thank you

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[分享] 嵌入式檔案系統掛載架構 (一)
« 回覆 #10 於: 2005-07-28 09:47 »
引述: "V-ezlinux"
live cd的做法不行阿我摻考過不少live cd您有建議哪一家的好嗎?我好想都看過沒有我想要的概念阿寫入的部份在ram上沒錯只是可以讓系統可以工作,真正要寫入到hd上巴要不然用live cd的做法reboot就又是default了哈 不可行且ln -s 做了一堆or mount 了一堆比我現在將一部份不會動到的os做成img mount 到ram差多了那種做法只是給想入門的人了解的巴!是差不多拉..您有做出過啥產品嗎?難道都不會遇到這樣的困難還請大大幫忙祥解一下或說明哪一個live cd 做的好可摻考...還請大大將連結給大家我們摻考看看摟.....thank you


做法很多種呀!
反正整個系統都是您打造的,你可以將磁區分成唯讀區和可讀寫區,
需要寫入的部份就放在可讀寫區,不好分開的,就用 link 或是
mount --bind 方式。

也可以在系統關機時,再去做同步寫入到可讀寫區,開機再讀
回來,缺點是突然斷電就慘了。

live cd 的情況也是類似,光碟整片都是唯讀的,為了加大容量,
live cd 也是先建好一個壓縮的檔案系統(不是 cramfs ,但功用類似),
開機後再 mount 進來,/etc、/var、/tmp、/home 等都是放在
ramdisk 內。為了改進 live cd 一關機就光溜溜的問題,又發展了
了可直接將 usb flash mount 在 usr home 內,然後一些在 /etc
內的設定檔要自己動手存入 usb flash。事實上,live cd 的情況比
較複雜些,但說明文件多,比較好參考。
(以上 live cd 運作是我之前對 Knoppix 的印象,有好一陣子沒有玩了)

如果 / 不是掛在 ramdisk 上,也可以不改架構,直接把 /bin, /lib 之類
不會動的轉成 cramfs 後,用 loop 方式直接掛載,也不用再解壓縮到
ramdisk 上了。

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
« 回覆 #11 於: 2005-07-28 10:46 »
感謝大大...這麼一說我了解了改一份在測看看...感動 :D

leosedward

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
[分享] 嵌入式檔案系統掛載架構 (一)
« 回覆 #12 於: 2005-07-28 16:04 »
不知道THYME大大可否提供比較好的文件 針對LINUXRC相關的說明文件 供白吃的我參考

叨擾之處 請原諒  謝謝  耽誤你的時間

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[分享] 嵌入式檔案系統掛載架構 (一)
« 回覆 #13 於: 2005-07-28 17:13 »
引述: "leosedward"
不知道THYME大大可否提供比較好的文件 針對LINUXRC相關的說明文件 供白吃的我參考

叨擾之處 請原諒  謝謝  耽誤你的時間


你是說在 initrd.img 內的 linuxrc 嗎?
我只有參考過別人寫的範例,沒有看過什麼說明文件。

V-ezlinux

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
感謝幫過我的人
« 回覆 #14 於: 2005-08-01 15:58 »
小弟 將os改成/dev/ram0 / 也就是說跟目錄是ram0
 大功告成;編核心時要注意
RAM DISK support(CONFIG_BLK_DEV_RAM)
Initial RAM disk (initrd) support
(CONFIG_BLK_DEV_INITRD)
也就是說bootloader 會將initrd載制ram上kernel就可在/dev/ram0找到initrd
嵌入式系統裡也就是說會在initrd裡將整個root filesystem放在裡面小弟證實;這樣也就可以客制化嵌入式os了喔...正整理一份講義..哈..有心人士可來信討論喔