嵌入式系統的分區方案非常重要,它在一定程度上決定了系統的穩定性、安全性和靈活性。這篇我們講講嵌入式系統的主流分區方案。
一個最簡單、最直接的分區方案通常由u-boot、env環境變量、kernel、rootfs依次組成,layout如下:
這種方案的缺點非常明顯,不便于系統在線升級的實施,針對系統在線升級的需求,我們應該預留出升級分區。
這種分區方案,將Kernel和Rootfs分別做了A、B兩個分區規劃,可以分別對Kernel和Rootfs進行在線升級操作,相比第一種方案更加彈性和靈活。
當然,在這個基礎上,我們還可以對Rootfs進行更加細致的再分區,比如單獨規劃出系統應用和數據分區,處于安全性和穩定性的考慮,可以將系統應用分區格式化為只讀文件系統類型,將數據分區格式化為可讀可寫文件系統類型。對于emmc類型的存儲設備,其文件系統類型和我們PC用的硬盤是一致的,沒有什么區別,然而flash存儲設備就要復雜的多了。在閃存與文件系統的介紹中,我們知道,flash存儲設備的文件系統是構建于MTD之上的,所以flash底層的分區,就是一個個MTD分區。我們也知道,現在主流的針對flash存儲設備(尤其是大于128MB的)文件系統為UBIFS,UBIFS和UBI總是成對出現的,因為UBIFS是構建于UBI之上的,而UBI又是構建于MTD之上的。
UBI的主要功能是wear leveling,所以UBIFS文件系統一個不同于JFFS2文件系統的地方就是它將wear leveling和文件系統分層實現。注意,UBI是針對整個存儲空間而不是單個分區進行wear leveling,這大大增加了flash的使用壽命,下圖很好的闡釋了UBI的wear leveling的功能,我們可以看到Volume 1 和 Volume 2 的wear leveling范圍是整個MTD。
另外,UBI還能實現類似LVM的卷管理功能--Volume Management,可以在MTD分區之上創建多個邏輯分區,針對單個卷,可以動態調整卷大小,也可以選擇設置為靜態卷(read only)。這里要注意的是,U-Boot和env不能放在UBI Volume邏輯分區,需要直接放在MTD分區,通常Kernel也是直接放在MTD分區。
當然,我們也可以和之前一樣預留升級分區,另外也可以在一片flash的不同MTD 分區上構建不同的文件系統,例如UBIFS和CRAMFS、JFFS2等可以共存在一片flash上,以充分利用不同文件系統類型的組合優勢。
小結
嵌入式系統的分區方案通常會考慮預留升級分區,emmc的文件系統類型與PC的硬盤一致,操作也類似,而針對flash存儲設備,主流為UBIFS和UBI的分區方案。
-
閃存
+關注
關注
16文章
1797瀏覽量
115043 -
硬盤
+關注
關注
3文章
1315瀏覽量
57413 -
UBI
+關注
關注
0文章
9瀏覽量
4128 -
rootfs
+關注
關注
0文章
19瀏覽量
4671
發布評論請先 登錄
相關推薦
評論