目录

1.安装工具

2.生成新的img文件

3.分割虚拟磁盘

4.挂载虚拟磁盘并格式化

5.开始备份

6.卸载虚拟磁盘

7.烧录测试


最近学习linux,发现烧录镜像都有点麻烦,例如荔枝派,需要先用dd写uboot,再copy设备树,然后写文件系统

再如i.mx287,需要将几个文件,拷贝到烧录软件目录下,虽然也是一键的,但是还是感觉不方便

今天查了下,准备将SD卡里面的镜像打包成img,然后直接一键烧录。

 

1.安装工具
sudo apt-get install dosfstools
sudo apt-get install dump
sudo apt-get install parted
sudo apt-get install kpartx
2.生成新的img文件

先查看一下磁盘

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux

我做的镜像比较小,虽然有个qt在里面,也就100M左右,先直接做个100M的空镜像

sudo dd if=/dev/zero of=lichee_zero_qt5_20190822.img bs=1M count=420
sync

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_02

通过二进制软件打开,看到全是0

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_03

3.分割虚拟磁盘

这个img,待会会将SD卡里面对应的内容,填充进来

不过,SD卡目前是分成两个部分的,一个boot,一个rootfs

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_04

除此之外,在制作SD的时候,boot部分,前面还空了一段空间,要制作img,这些位置不能错了,查一下数据的实际位置

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_05

确定这些就可以了,按照实际的SD分配,将img划分一下

sudo parted lichee_zero_qt5_20190822.img --script -- mklabel msdos #制作一个msdos分区
sudo parted lichee_zero_qt5_20190822.img --script -- mkpart primary fat16 2048s 67583s
sudo parted lichee_zero_qt5_20190822.img --script -- mkpart primary ext4 67584s -1
sudo parted lichee_zero_qt5_20190822.img #查看分配情况

这里的size指的是MB 我分区的时候是要 32M 这里就是33.6MB。3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_06

4.挂载虚拟磁盘并格式化

这个过程就是将img虚拟成SD卡一样,挂载到电脑,然后格式化它

sudo losetup /dev/loop0 lichee_zero_qt5_20190822.img
sudo kpartx -av /dev/loop0

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_07

现在还没有磁盘,因为都是空的,需要格式化,写入文件系统的相关数据进去

sudo mkfs.msdos /dev/mapper/loop0p1
sudo mkfs.ext4 /dev/mapper/loop0p2

能查询到挂载的设备

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_荔枝派_08

电脑上多出两个盘符,内容是空的

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_荔枝派_09

5.开始备份

接下来就是SD卡里面有什么,就让img里面有什么就行了

烧录uboot

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8

拷贝设备树和内核,在磁盘内,右键打开命令行,输入PWD,获取路径,使用cp命令拷贝内容

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_10

拷贝文件系统,文件系统直接拷贝有点问题,使用dump

sudo mount -t ext4 /dev/mapper/loop0p2 /mnt/ #挂载虚拟磁盘
sudo dump -0au -f /home/jun/rootfs.dump /media/jun/70d54d85-952d-4d5f-bd49-fced883578d5/ #从插着的sd卡中dump数据
#-0uaf 优先级0  u成功后记录到文件中 a自动写到磁盘末尾  f备份写入文件
cd /mnt/
sudo restore rf /media/jun/abea9b9f-b2bd-46fb-92f7-9488b5a36940/roofts.dump  #恢复系统
cd
sudo umount /mnt

上面意思是,将磁盘内容dump出来,然后再恢复到另一个盘内。

详细说明一下,因为我在这折腾了一下子。

sudo mount -t ext4 /dev/mapper/loop0p2 /mnt/:意思是将虚拟的rootfs挂载起来,地址是/mnt

sudo dump -0au -f /home/jun/rootfs.dump /media/jun/70d54d85-952d-4d5f-bd49-fced883578d5/:意思是将SD里面的ROOTFS内容dump出来,dump文件存在/home/jun/rootfs.dump。

cd /mnt/:进到虚拟磁盘
sudo restore rf /media/jun/abea9b9f-b2bd-46fb-92f7-9488b5a36940/roofts.dump:恢复数据
cd:退出磁盘
sudo umount /mnt:卸载

操作之后,将会看到虚拟的磁盘里面有和SD一样的文件

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_11

6.卸载虚拟磁盘
sudo kpartx -d lichee_zero_qt5_20190822.img

或者直接从界面上卸载也行

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_荔枝派_12

再以文件形式查看img

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_13

发现已经有数据了。

7.烧录测试

格式化SD卡

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_14

烧录镜像

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_linux_15

放到设备上运行

3.荔枝派 zero(全志V3S)-制作linux烧录镜像_荔枝派_16

完成

 

总结
sudo dd if=/dev/zero of=lichee_zero_qt5_mplayer_alsa_20190827.img bs=1M count=420
sync

sudo parted lichee_zero_qt5_mplayer_alsa_20190827.img --script -- mklabel msdos #制作一个msdos分区
sudo parted lichee_zero_qt5_mplayer_alsa_20190827.img --script -- mkpart primary fat16 2048s 67583s
sudo parted lichee_zero_qt5_mplayer_alsa_20190827.img --script -- mkpart primary ext4 67584s -1
sudo parted lichee_zero_qt5_mplayer_alsa_20190827.img

sudo losetup /dev/loop0 lichee_zero_qt5_mplayer_alsa_20190827.img
sudo kpartx -av /dev/loop0
sudo mkfs.msdos /dev/mapper/loop0p1
sudo mkfs.ext4 /dev/mapper/loop0p2

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8

拷贝内核/设备树

sudo mount -t ext4 /dev/mapper/loop0p2 /mnt/
sudo dump -0au -f /home/jun/v3s/image/rootfs.dump /media/jun/rootfs/

cd /mnt/
sudo restore rf /home/jun/v3s/image/rootfs.dump
cd 
umount /mnt

卸载磁盘

sudo kpartx -d lichee_zero_qt5_mplayer_alsa_20190827.img