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

自己想做個顯示器,其實沒那么難
樹莓派系統鏡像制作
請問IMX8MP使用UUU燒錄rootfs.sdcard鏡像后,根目錄的空間還能再調整嗎?
如何縮小制作完成的系統鏡像大小?
如何在PC主機上制作Ubuntu Rootfs鏡像
用RK3588開發板燒寫rootfs結果分區大小和鏡像一樣怎么解決
人臉識別沒那么難,1行命令就能實現

linux系統鏡像制作

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

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

評論