imx6 uboot的mtd分割槽總結(rootfs為ubi檔案系統)
轉載地址:https://blog.csdn.net/qq_29729577/article/details/51130209
此文章基於U-Boot 2014.04版本,燒寫工具為mfgtool,開發環境為yocto
前言:
JFFS2、YAFFS2等專用檔案系統存在著一些技術瓶頸,如:記憶體消耗大,對FLASH容量、檔案系統大小、內容、訪問模式等的線性依賴,損益均衡能力差或過渡損益 等。在此背景下核心加入了UBI檔案系統的支援
與JFFS2一樣,UBIFS 建構於MTD裝置之上,僅適用於裸flash裝置,並不適用於eMMC,SD等裝置
UBI是一種類似於LVM的邏輯卷管理層。主要實現損益均衡,邏輯擦除塊、卷管理,壞塊管理等。而UBIFS是一種基於UBI的FLASH日誌檔案系統
1.核心配置
在make menuconfig中選中:
Device Drivers ---> Memory Technology Device (MTD) support ---> Command line partition table parsing
Device Drivers → Memory Technology Device (MTD) support →Enable UBI - Unsorted block images
File systems → Miscellaneous filesystems→UBIFS file system support
我是通過uboot的核心命令列給MTD層傳遞MTD分割槽資訊,在核心中無需進行mtd分割槽配置,只需修改uboot原始碼及環境變數引數即可,但要確保原始碼中分割槽資訊和環境變數的分割槽資訊一致
2.uboot原始碼修改
在uboot原始碼目錄中,include/conifgs/mx6<custom>.h檔案(mx6<custom>.h為自定義板級檔案的標頭檔案)中找到:
#define CONFIG_MFG_NAND_PARTITION
修改為"mtdparts=gpmi-nand:8m(boot),2m(env),8m(kernel),1m(dtb),-(rootfs)
也可以通過在裝置樹檔案中指定
其中gpmi-nand為mtd-id,要與平臺flash的mtd-id一致才行,後面為我的分割槽,僅供參考
我的mx6<custom>.h檔案還包含了include/configs/mx6sabre_common.h檔案,在其中找到:
#define CONFIG_EXTRA_ENV_SETTINGS
將其修改為如下內容:
#define CONFIG_EXTRA_ENV_SETTINGS \
CONFIG_MFG_ENV_SETTINGS \
"fdt_addr=0x18000000\0" \
"fdt_high=0xffffffff\0" \
"bootargs=console=" CONFIG_CONSOLE_DEV ",115200 ubi.mtd=4 " \
"root=ubi0:rootfs rootfstype=ubifs " \
"mtdparts=gpmi-nand:8m(boot),2m(env),8m(kernel),1m(dtb),-(rootfs) "\
CONFIG_SYS_VIDEO "\0" \
"bootcmd=nand read ${loadaddr} 0xA00000 0x800000;"\
"nand read ${fdt_addr} 0x1200000 0x100000;"\
"bootz ${loadaddr} - ${fdt_addr}\0"
主要是對bootargs進行配置:
由於mtd0~4依次為boot,env,kernel,dtb和rootfs,因此ubi.mtd=4(這是rootfs的mtd分割槽號);
root=ubi0:rootfs中,rootfs為ubi0分割槽的分割槽名,後面ubi分割槽時會進行命名,兩者保持一致即可;
rootfstype檔案系統型別為ubifs;
mtdparts這個應該和CONFIG_MFG_NAND_PARTITION一致
3.mfgtool燒寫工具修改
mfgtool主要修改cfg.ini配置檔案和uxl2.xml檔案,具體語法可以參考官方文件
cfg.ini檔案如下:
[profiles]
chip = Linux
[platform]
board = SabreSD
[LIST]
name = Custom-NAND
[variable]
board = Custom
part_uboot = 0
part_kernel = 1
part_dtb = 2
part_rootfs = 3
其中Custom為自己定義的目標板名稱,part_*為各個mtd分割槽號
uxl2.xml檔案應該給出了Nand燒寫的demo,只需在它的基礎上進行修改即可:
將LIST name 改成Custom-NAND
BootStrap部分不贅述了;
uboot和kernel燒寫部分沿用demo,只需修改燒寫檔名及mtd分割槽名即可,也省略了。。
重點分析一下rootfs的ubi分割槽及燒寫:
<CMD state="Updater" type="push" body="$ flash_erase /dev/mtd%part_rootfs% 0 0">Erasing rootfs partition</CMD>
<CMD state="Updater" type="push" body="$ ubiformat /dev/mtd%part_rootfs%"/>
<CMD state="Updater" type="push" body="$ ubiattach /dev/ubi_ctrl -m %part_rootfs%">Attaching UBI partition</CMD>
<CMD state="Updater" type="push" body="$ ubimkvol /dev/ubi0 -Nrootfs -m"/>
<CMD state="Updater" type="push" body="$ mkdir -p /mnt/mtd%part_rootfs%"/>
<CMD state="Updater" type="push" body="$ mount -t ubifs ubi0:rootfs /mnt/mtd%part_rootfs%"/>
<CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mtd%part_rootfs%" file="files/Custom-imx6q.rootfs.tar.bz2">Sending and writting rootfs</CMD>
<CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
<CMD state="Updater" type="push" body="$ umount /mnt/mtd%part_rootfs%">Unmounting rootfs partition</CMD>
<CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
以上為rootfs的分割槽及燒寫,下面說明一下ubi工具的使用:
ubiformat /dev/mtdN是對mtd分割槽格式化
ubiattach是對指定mtd分割槽進行attach,-m 後加上分割槽號即可,這會生成/dev/ubi0的裝置檔案,若再進行attach,則按順序生成/dev/ubi1, /dev/ubi2等等。。。
ubimkvol是在指定的/dev/ubiN上進行ubi分割槽,即make volume,-N後為分割槽名,此處指定為rootfs,與上文中bootargs中指定的ubi0:rootfs要保持一致,-m 為指定大小為max(ubiN全部分割槽大小),也可以使用 -s 500MiB來指定你所需要的大小(單位是MiB或KiB),如果空間足夠,可以再ubiN上進行多個volume的分割槽,訪問時只需按照分割槽名掛載即可
mount -t ubifs ubi0:rootfs /mnt/... 就是按照ubi的分割槽名進行掛載ubi分割槽
ubi分割槽總結:
ubiN分割槽中,N對應某一個mtd分割槽,需要attach來動態的再/dev下生成,在這個mtd分割槽基礎上,還能使用ubimkvol按照分割槽名再次進行多個ubi的volume分割槽,訪問時按照ubiN:name的格式進行掛載即可
注意:
在mtd分割槽上進行ubi分割槽後,用ubinfo /dev/ubiN命令會發現實際的ubi分割槽大小會比mtd分割槽小一些,這是因為ubi的儲存管理是將其邏輯擦除塊(LEB)對映到物理擦除塊(PEB),在這個過程中需要使用一部分儲存空間來進行管理,所以實際我們使用的儲存空間會比mtd的大小要小一些。
此外,若mtd分割槽太小,將可能沒有足夠空間來進行ubi分割槽,本人經過嘗試,40M的mtd空間可以提供約17M的ubi分割槽,然而20M的mtd空間則無法進行ubi分割槽(ubinfo檢視會提示無可提供的邏輯擦除塊)
---------------------
作者:9527zyj
來源:CSDN
原文:https://blog.csdn.net/qq_29729577/article/details/51130209
版權宣告:本文為博主原創文章,轉載請附上博文連結!