關鍵詞: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
二進制文件更新比較簡單,直接使用DD便可。blog
dd if=spl.bin of=/dev/sdc bs=1024 seek=33
經過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
退出後便可看到建立的分區。
首先建立一個空白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
即完成了文件系統建立。
工具make_ext4fs能夠建立稀疏ext4文件系統,製做出來的文件尺寸較小。
make_ext4fs -l 2018M -s rootfs.sparse ../target/
便可建立完成2018M大小的rootfs.spare image文件,文件來源於../target/目錄。
經過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)