2007/03/22

The stability of embedded system: 嵌入式系統可靠性發想

在做嵌入式系統時,總會遇到幾個問題,先列舉如下:
一、正常操作下系統是否穩定不當機?
二、正常操作下系統是否反應夠快速?
三、不當操作會不會導致系統不穩或不能執行,甚至造成不能開機?
四、是否允許不正常操作,例如快速連續按按鍵或者在隨時(尤其錄影時)切斷電源?
五、能不能 cost down?

其實問題大大小小很多,這邊要講的是系統更新問題。系統更新有時是必要的,尤其在研發當中,但是研發當中通常不會一起考慮穩定性,也就是更新失敗。像 PC/NB 主機板有做雙 BIOS, 我覺得嵌入式系統也應該做此考量,其中有一個永遠唯讀的部份,它起動後能做的不多,可以是做系統更新或/且做 debug/test就可以。這樣的部份可以不必載入所有硬體的驅動程式,也不必全功能。甚至可以不必有 console, 只需搭配像 reset 即可達到。但是它必須判斷當系統更新失敗時的處置。

至於主系統部份,也建議類似 unionfs 那樣,把主系統做成唯讀的,可以是像 cramfs 採壓縮的方式,而把需要寫入的部份寫入到另一塊區域。採用 unionfs 的好處是,它可以做到沒寫入前,只有唯讀部份,當要存檔才改為寫入可讀寫區。如此一來,當要系統還原的時候就很容易,而系統更新也可以只更新唯讀區。

綜合以上所述,大約如下分割系統:
- default boot area, 約需 1M
- read only area, 做主系統,大小視需要而定
- read-writable, 做設定存檔用,大小通常不大於 1M.

採用這塊 default boot area 會增加儲存空間的需求,但是能讓系統更穩定。而採用後面的架構,則讓系統預設值可以儲存,而且不必另行放在可讀寫區,也不必事先占用該區,算是可以縮小系統儲存空間。甚至降低系統更新的頻率與區域,繼而增加系統的可靠與穩定性。

0 意見: