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