在嵌入式Linux開發(fā)中,文件系統(tǒng)的打包和鏡像制作是關(guān)鍵步驟。本文介紹了Linux核心板文件系統(tǒng)的打包與鏡像制作方法,適合嵌入式開發(fā)人員快速上手。
?前言
致遠電子Linux核心板提供的系統(tǒng)固件里,除了鏡像文件之外,通常還會提供文件系統(tǒng)壓縮包。鏡像文件可以直接用于燒寫到目標板,而文件系統(tǒng)壓縮包則可以進行部分修改,修改后重新制作鏡像文件燒寫。
這里只講直接用編譯好的二進制文件對文件系統(tǒng)打包的問題。一般來說,如果自己能從源碼開始編譯文件系統(tǒng),打包文件系統(tǒng)也不會存在什么問題。
?rootfs打包
解開壓縮包,可以看到通常包含如下目錄。
/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var
對根文件系統(tǒng)進行修改后,再次打包成鏡像文件,由于沒有了buildroot這樣的自動化文件系統(tǒng)制作工具,這就需要特別注意:
- 打包文件系統(tǒng)時的目錄位置、權(quán)限等,要用root權(quán)限打包,普通用戶打包會出現(xiàn)錯誤,文件系統(tǒng)不完整。
- 不能將Linux下的tar包解壓在Windows格式的硬盤并打包。
對于文件系統(tǒng)打包位置問題,舉個例子:
$cdmyrootfs$ls$/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var$sudo tar cvf ../myrootfs.tar * #將當前文件系統(tǒng)全部文件打包到上一級目錄
?制作UBI文件系統(tǒng)鏡像
使用UBI文件系統(tǒng)時,有ubifs.img和ubi.img兩種不同鏡像。其中ubifs.img用于U-Boot下燒寫,而ubi.img鏡像則用于進入Linux系統(tǒng)后的更新。
1. 制作ubi燒寫鏡像
制作ubi鏡像的工具為mkfs.ubifs,有下列參數(shù):
-r:制定文件內(nèi)容的位置;
-m:頁面大小;
-e:邏輯擦除塊大小;
-p:物理擦除塊大小;
-c:最大的邏輯擦除塊數(shù)量;
-s:最小的硬件輸入輸出頁面大小,如:k9f1208為256。
特別提示,頁面大小等參數(shù)要根據(jù)內(nèi)核加載Flash分區(qū)時ubifs輸出的信息一致,否則不能啟動系統(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)建的卷標一致vol_alignment=1vol_flags=autoresize
進入Linux后可通過ubiformat命令燒寫ubi.img,例如:
#ubiformat /dev/mtd4 -s 512 -f ubi.img
?制作 Ext4文件系統(tǒng)制作Ext4文件系統(tǒng),一般方法是先準備好根文件系統(tǒng)內(nèi)容,然后創(chuàng)建一個鏡像文件,格式化成Ext4格式,然后將鏡像文件掛載到一個目錄并復制根文件系統(tǒng)的內(nèi)容到里面,之后卸載,最后進行一些處理。
$sudomkdirfs$sudoddif=/dev/zero of=fs.img bs=1M count=4096#創(chuàng)建初始大小的鏡像文件$sudomkfs.ext4 fs.img #格式化鏡像文件為Ext4文件系統(tǒng)$sudomount fs.img fs/ #掛載鏡像文件到fs目錄$sudocp-rfp myrootfs/* fs/ #復制根文件系統(tǒng)文件$sudoumount fs/ #卸載$sudoe2fsck -p -f fs.img #檢查文件系統(tǒng)分區(qū)是否正常$sudoresize2fs -M fs.img #調(diào)整文件系統(tǒng)鏡像大小
也可以寫成腳本將幾步操作合成一步操作,例如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"ddif=/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}
-
zlg
+關(guān)注
關(guān)注
1文章
67瀏覽量
38408 -
核心板
+關(guān)注
關(guān)注
5文章
1069瀏覽量
30344 -
rootfs
+關(guān)注
關(guān)注
0文章
20瀏覽量
4730
發(fā)布評論請先 登錄
相關(guān)推薦
Linux內(nèi)核鏡像bzImage和rootfs的制作、安裝及調(diào)試過程

自己想做個顯示器,其實沒那么難
樹莓派系統(tǒng)鏡像制作
請問IMX8MP使用UUU燒錄rootfs.sdcard鏡像后,根目錄的空間還能再調(diào)整嗎?
如何縮小制作完成的系統(tǒng)鏡像大小?
如何在PC主機上制作Ubuntu Rootfs鏡像
用RK3588開發(fā)板燒寫rootfs結(jié)果分區(qū)大小和鏡像一樣怎么解決
如何制作光盤鏡像文件

人臉識別沒那么難,1行命令就能實現(xiàn)

linux系統(tǒng)鏡像制作

小衛(wèi)星制造沒有那么難,其實和IT攢機差不多

芯片本質(zhì)是什么 芯片制作為什么那么難

linux鏡像制作工具
Docker-鏡像的分層-busybox鏡像制作

評論