技術討論區 > Embedded 討論版

[分享] 嵌入式檔案系統掛載架構 (二)

(1/2) > >>

thyme:
(再次說明,本系列都是憑印象的,有所錯誤之處,請多多指教)
這篇要說一般 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 差這麼多?也不過都是邏輯閘
而已?」
「當初我還在和 NAND、NOR 奮鬥時,DOC 還沒上市,所以這個問題
請自己去向 google 大神請示。」

再來說到 ARM7 ,這顆 CPU 是 ARM 系列 CPU 中的一顆,ARM 系列
還包含了 Strong ARM、ARM9 等等,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 晶片,也不用什麼 Bootloader,
Kernel 身兼數職,全包了,Kernel 最開頭的第一行組合語言程式
就是先啟動設定 CPU、RAM、螢幕、週邊介面等等,都完成了,才
開始其他 Kernel 的動作,而 DOC 的驅動方式及規劃方法,都寫
在 Kernel 裡面,也就是,flash 怎麼個劃 partition 的,都事
先寫好的,
「那有沒有辦法事後動態規劃?」
「可以呀,反正 Source Code 都在那,你愛怎麼改就怎麼改。」
所以最後結論是,在 ARM7 上,想知道 DOC 檔案系統規劃,
「直接去看 Kernel Source Code 就好了。」

thyme:
下課前,預告一下,下次要談什麼,簡介 ARM7 的電源管理好了,
PC 用慣的人,一定很難習慣沒事要省電來省電去的做法,在嵌入
式系統中,這可是一個重要的課題唷!不過,因為某種原因,不能
馬上談,要兩個星期後再來談。

突然想到,我現在弄的大概不算是嵌入式了,都快直追 PC 的功能了,
我想以後嵌入式和 PC 的分野可能愈來愈模糊,就跟現在 PC 和工
作站一樣。

這堂課到此為止,下課。

andrew:
請問...要能有能力上這樣的課...(我指聽得懂~有感覺~可以跟著老師的進度進步)

你會建議一個非資訊系的學生先去充實什麼議題?

類似..先去看xxx然後有概念之後再去看xxx

然後...你可以xxx之類的... :wink:

ps: 我只會寫C,不過覺得對硬體的知識不足...不知道你有什麼建議?

thyme:

--- 引述: "andrew" ---請問...要能有能力上這樣的課...(我指聽得懂~有感覺~可以跟著老師的進度進步)

你會建議一個非資訊系的學生先去充實什麼議題?

類似..先去看xxx然後有概念之後再去看xxx

然後...你可以xxx之類的... :wink:

ps: 我只會寫C,不過覺得對硬體的知識不足...不知道你有什麼建議?
--- 引用結尾 ---


你是指嵌入式系統嗎?我認為,就算是資訊相關科系也不太夠,
最好是電子、電機系的,有碰過硬體的基礎才夠,
嵌入式的一定會碰到韌體和驅動程式的部份,
沒有硬體的基礎會很辛苦的!

當然,這不是絕對的,電腦的好處在於,只要你肯花時間去陪它,
你就可以了解它。沒學過電腦的話,最好由計算機概論開始,
把它當做歷史小說來看,再來就是數位邏輯,學學1和0是怎麼加減乘除,
然後學電子學是比較好,可以知道為什麼都設計成1和0,
不過,這個對電子電機的人都算很痛苦的科目,所以就....算了,
程式語言方面,最好是學學組合語言,C 的指標不好弄清楚對不對?
但是,會組合語言的人,都會覺得這是一件很自然的事。

嵌入式的系統,最好學習環境是在業界,只有實實在在動手去弄,
才會明白,看看幾本書是不可能懂的!市面上的書也遠遠不夠。

如果你不是指嵌入式的,那硬體可以完全不去碰,只要你有興趣,
都不是問題,站上也一堆人都是半路出家的,例如 netman、鳥哥
等等,都不是本科系的。

andrew:
沒錯我是指嵌入式系統... :D

因為看到公司有"大仔"工程師在porting Linux  8)

不過我這個剛進公司的"小咖"一點概念都沒有 :o

所以現在只能先幫忙寫寫UI,想趁這個時間好好挑些書來看

非常謝謝你的意見...我會努力的!

導覽

[0] 文章列表

[#] 下頁

前往完整版本