• 正文
    • 前言
    • ?rootfs打包
    • 制作UBI文件系統(tǒng)鏡像
    • 制作 Ext4文件系統(tǒng)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

ZLG嵌入式筆記(連載33) | rootfs鏡像制作其實(shí)沒(méi)那么難

20小時(shí)前
315
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

嵌入式Linux開(kāi)發(fā)中,文件系統(tǒng)的打包和鏡像制作是關(guān)鍵步驟。本文介紹了Linux核心板文件系統(tǒng)的打包與鏡像制作方法,適合嵌入式開(kāi)發(fā)人員快速上手。

前言

致遠(yuǎn)電子Linux核心板提供的系統(tǒng)固件里,除了鏡像文件之外,通常還會(huì)提供文件系統(tǒng)壓縮包。鏡像文件可以直接用于燒寫(xiě)到目標(biāo)板,而文件系統(tǒng)壓縮包則可以進(jìn)行部分修改,修改后重新制作鏡像文件燒寫(xiě)。

這里只講直接用編譯好的二進(jìn)制文件對(duì)文件系統(tǒng)打包的問(wèn)題。一般來(lái)說(shuō),如果自己能從源碼開(kāi)始編譯文件系統(tǒng),打包文件系統(tǒng)也不會(huì)存在什么問(wèn)題。

?rootfs打包

解開(kāi)壓縮包,可以看到通常包含如下目錄。

/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var

對(duì)根文件系統(tǒng)進(jìn)行修改后,再次打包成鏡像文件,由于沒(méi)有了buildroot這樣的自動(dòng)化文件系統(tǒng)制作工具,這就需要特別注意:

    打包文件系統(tǒng)時(shí)的目錄位置、權(quán)限等,要用root權(quán)限打包,普通用戶(hù)打包會(huì)出現(xiàn)錯(cuò)誤,文件系統(tǒng)不完整。不能將Linux下的tar包解壓在Windows格式的硬盤(pán)并打包。

對(duì)于文件系統(tǒng)打包位置問(wèn)題,舉個(gè)例子:

$?cd?myrootfs$?ls$?/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var$?sudo tar cvf ../myrootfs.tar * ? ?#將當(dāng)前文件系統(tǒng)全部文件打包到上一級(jí)目錄

制作UBI文件系統(tǒng)鏡像

使用UBI文件系統(tǒng)時(shí),有ubifs.img和ubi.img兩種不同鏡像。其中ubifs.img用于U-Boot下燒寫(xiě),而ubi.img鏡像則用于進(jìn)入Linux系統(tǒng)后的更新。

1. 制作ubi燒寫(xiě)鏡像

制作ubi鏡像的工具為mkfs.ubifs,有下列參數(shù):

-r:制定文件內(nèi)容的位置;

-m:頁(yè)面大小;

-e:邏輯擦除塊大??;

-p:物理擦除塊大??;

-c:最大的邏輯擦除塊數(shù)量;

-s:最小的硬件輸入輸出頁(yè)面大小,如:k9f1208為256。

特別提示,頁(yè)面大小等參數(shù)要根據(jù)內(nèi)核加載Flash分區(qū)時(shí)ubifs輸出的信息一致,否則不能啟動(dòng)系統(tǒng)。

示例:

$?sudo mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 1948 -o ubifs.img

2. 制作ubifs鏡像

制作ubifs鏡像用到的工具為ubinize。例:

$?sudo ubinize -o ubi.img -m 2048 -s 512 -p 131072 ubifs.conf

ubifs.conf的內(nèi)容如下:

[ubifs]mode=ubiimage=ubifs.imgvol_id=0vol_size=200MiBvol_type=dynamicvol_name=rootfs ? ? ? ? ? ? ? ?#建議與uboot創(chuàng)建的卷標(biāo)一致vol_alignment=1vol_flags=autoresize

進(jìn)入Linux后可通過(guò)ubiformat命令燒寫(xiě)ubi.img,例如:

#?ubiformat /dev/mtd4 -s 512 -f ubi.img

制作 Ext4文件系統(tǒng)

制作Ext4文件系統(tǒng),一般方法是先準(zhǔn)備好根文件系統(tǒng)內(nèi)容,然后創(chuàng)建一個(gè)鏡像文件,格式化成Ext4格式,然后將鏡像文件掛載到一個(gè)目錄并復(fù)制根文件系統(tǒng)的內(nèi)容到里面,之后卸載,最后進(jìn)行一些處理。

$sudo?mkdir?fs?$sudo?dd?if=/dev/zero of=fs.img bs=1M count=4096?#創(chuàng)建初始大小的鏡像文件$sudo?mkfs.ext4 fs.img ? ? ? ? ? ? ? ? ? ? ? ? ??#格式化鏡像文件為Ext4文件系統(tǒng)$sudo?mount fs.img fs/ ? ? ? ? ? ? ? ? ? ? ? ? ??#掛載鏡像文件到fs目錄$sudo?cp?-rfp myrootfs/* fs/ ? ? ? ? ? ? ? ? ? ??#復(fù)制根文件系統(tǒng)文件$sudo?umount fs/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??#卸載$sudo?e2fsck -p -f fs.img ? ? ? ? ? ? ? ? ? ? ? ?#檢查文件系統(tǒng)分區(qū)是否正常$sudo?resize2fs -M fs.img <blk-size> ? ? ? ? ? ??#調(diào)整文件系統(tǒng)鏡像大小

也可以寫(xiě)成腳本將幾步操作合成一步操作,例如MX2000文件系統(tǒng)制作腳本內(nèi)容如下:

#!/bin/bashOUTPUT_FILE=data.ext4TARGET_DIR=./usrdata/ROOTFS_EXT4_REV=1ROOTFS_EXT4_LABEL="data"ROOTFS_EXT4_SIZE=3069ROOTFS_EXT4_SIZE_MB=${ROOTFS_EXT4_SIZE}MROOTFS_EXT4_INODES=0ROOTFS_EXT4_RESBLKS=5ROOTFS_EXT4_MKFS_OPTIONS="-O ^64bit -O ^has_journal"dd?if=/dev/zero of=${OUTPUT_FILE}?bs=1M count=${ROOTFS_EXT4_SIZE}mke2fs -d?${TARGET_DIR}?? ? -r?${ROOTFS_EXT4_REV}?? ? -N?${ROOTFS_EXT4_INODES}?? ? -m?${ROOTFS_EXT4_RESBLKS}?? ? -L?"${EXT4_LABEL}"?? ??${EXT4_MKFS_OPTS}?  ??${OUTPUT_FILE}
致遠(yuǎn)電子

致遠(yuǎn)電子

廣州致遠(yuǎn)電子股份有限公司成立于2001年,注冊(cè)資金5000萬(wàn)元,國(guó)家級(jí)高新技術(shù)認(rèn)證企業(yè),廣州市高端工控測(cè)量?jī)x器工程技術(shù)研究開(kāi)發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。

廣州致遠(yuǎn)電子股份有限公司成立于2001年,注冊(cè)資金5000萬(wàn)元,國(guó)家級(jí)高新技術(shù)認(rèn)證企業(yè),廣州市高端工控測(cè)量?jī)x器工程技術(shù)研究開(kāi)發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶(hù)資源
  • 寫(xiě)文章/發(fā)需求
立即登錄