一個版本燒錄過程當中記錄:fdisk、mkfs.ext四、make_ext4fs、img2simg、simg2img

 關鍵詞:dd、fdisk、mkfs.ext四、make_ext4fs、img2simg、simg2img等等。android

一個典型的嵌入式系統是由uboot+kernel+rootfs組成的,其中uboot和kernel都是二進制,rootfs存在文件系統。工具

二進制在燒錄的時候比較簡單,將二進制數據寫入存儲設備固定地址;rootfs存在文件系統,因此須要對存儲設備進行分區,而後在分區上創建文件系統。spa

對存儲介質分區能夠直接掛載,進行分區、掛載,而後將rootfs內容寫入,即完成了rootfs更新。code

或者建立一個普通image文件,而後將文件當成一個分區,在其上建立rootfs。建立的普通image文件,能夠使raw image也能夠是sparse image。orm

1. 二進制文件燒錄

二進制文件更新比較簡單,直接使用DD便可。blog

dd if=spl.bin of=/dev/sdc bs=1024 seek=33

2. fdisk建立分區

經過fdisk能夠在一個物理設備上建立分區表,也能夠在一個image文件上建立分區。ip

fdisk -l device將輸出指定設備的分區信息,不指定device則顯示系統全部設備的分區信息。文檔

AME
       fdisk - manipulate disk partition table

SYNOPSIS
       fdisk [options] device

       fdisk -l [device...]

fdisk device以後,輸入m顯示幫助信息。n新增一個分區表,p顯示分區信息,w保存分區信息,q退出。get

能夠將分區命令輸入到一個fdisk_input文件中,而後fdisk <fdisk_input讀取分區命令並執行生成分區表。input

cat > fdisk_input <<EOF
n
p
1
61440


p
w
EOF

fdisk -u ${ALL_IN_ONE} <fdisk_input

退出後便可看到建立的分區。

3. 建立ext4的raw image文件系統

首先建立一個空白image文件,若是在設備上建立則直接使用。

而後調用mkfs.ext4在文件或者設備上建立ext4文件系統,將建立好的文件系統mount到一個目錄。

將rootfs文件寫入mount目錄,並sync。

最後將文件系統進行umount。

dd if=/dev/zero of=${ROOTFS_EXT4} bs=1M count=${ROOTFS_SIZE}
mkfs.ext4 ${ROOTFS_EXT4} -F

mkdir -p /tmp/emmc
sudo mount -t ext4 ${ROOTFS_EXT4} /tmp/emmc -o data=journal,barrier=1
sudo rm -rf /tmp/emmc/*
cd /tmp/emmc
sudo cpio -idm < ${ROOTFS_CPIO}
sync
cd -
sudo umount /tmp/emmc

即完成了文件系統建立。

4.建立ext4的sparse image文件系統

工具make_ext4fs能夠建立稀疏ext4文件系統,製做出來的文件尺寸較小。

make_ext4fs -l 2018M -s rootfs.sparse ../target/

便可建立完成2018M大小的rootfs.spare image文件,文件來源於../target/目錄。

5. sparse image和raw image互轉

經過simg2img能夠將sparse image轉換成raw image,img2simg能夠將raw image轉換成sparse image。

Usage: simg2img <sparse_image_files> <raw_image_file>
Usage: img2simg <raw_image_file> <sparse_image_file> [<block_size>]

分別執行:

simg2img rootfs.sparse rootfs.sparse2raw
img2simg rootfs.ext4 rootfs.ext42sparse

 結果以下:

rootfs.ext4:       Linux rev 1.0 ext4 filesystem data, UUID=a8e84664-5362-4ab2-8bd3-bb20ea25e1ee (extents) (large files) (huge files)
rootfs.ext4s:      Android sparse image, version: 1.0, Total of 516608 4096-byte output blocks in 404 input chunks.
rootfs.sparse:     Android sparse image, version: 1.0, Total of 516608 4096-byte output blocks in 1187 input chunks.
rootfs.sparse2raw: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

參考文檔:

1.《http://2net.co.uk/tutorial/android-sparse-image-format

相關文章
相關標籤/搜索