2011年1月12日 星期三

Embedded Linux software upgrade with initramfs (1)

1.源由限制
由於有限的memory及flash空間,Software upgrade一直是embedded system不太好處理的一塊.
一般的Linux base Wifi router通常只有16MBytes甚至8MBytes memory而flash大小通常是memory的一半.
系統在正常運作的狀況下kernel & applications往往已經用掉的4MBytes以上.如果是功能更多的裝置還有可能使用更多的memory.
在這樣的狀況下upgrade 是有疑慮的,無法保證系統有足夠的memory來進行.

更新正在運作中的系統是危險的行為.
試想更新正在執行的applicatins或libraries會發生什麼事?
甚至是想要複寫整個已經掛載(mount)的mtd block?

2.網路環境
Upgrade一般需要透過網路取得upgrade image因此必須啟動網路功能.
Upgrade也可以在bootloader中執行,但只限於單純的網路環境,例如Static IP \ DHCP.
若是VLAN 或 IEEE802.1X 的網路環境bootloader就無法正確設定網路.
下載upgrade image的動作最好還是在Linux下執行.

3.版本檢查的時機與方式
系統需要自行檢查伺服器上是否有更新的版本.
太頻繁的檢查會造成無謂的網路頻寬損耗,因此適當時間即可.
檢查更新版本若都必須下載整個upgrade image將造成巨大的頻寬損耗.
比較好的方式是下載一個簡短描述upgrade image的檔案用以檢查是否需要更新.

4.Upgrade與initramfs應用

關於initramfs技術細節請參考以下
http://blog.linux.org.tw/~jserv/archives/001954.html

initramfs 的特性

early user space :
在實際的user space applications啟動前作upgrade檢查及更新動作有幾個好處.
一,這時已經能掛載(mount) mtd block取得設定檔進行網路設定,之後可馬上卸載(umount).
二,系統未掛載任何mtd block因此能直接覆寫整塊mtd block.
三,系統還未執行user space applications因此可使用memory是比較多的而且size是可預期的.


沒有留言:

張貼留言