目录
最近学习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文件
先查看一下磁盘
我做的镜像比较小,虽然有个qt在里面,也就100M左右,先直接做个100M的空镜像
sudo dd if=/dev/zero of=lichee_zero_qt5_20190822.img bs=1M count=420
sync
通过二进制软件打开,看到全是0
3.分割虚拟磁盘这个img,待会会将SD卡里面对应的内容,填充进来
不过,SD卡目前是分成两个部分的,一个boot,一个rootfs
除此之外,在制作SD的时候,boot部分,前面还空了一段空间,要制作img,这些位置不能错了,查一下数据的实际位置
确定这些就可以了,按照实际的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。
4.挂载虚拟磁盘并格式化这个过程就是将img虚拟成SD卡一样,挂载到电脑,然后格式化它
sudo losetup /dev/loop0 lichee_zero_qt5_20190822.img
sudo kpartx -av /dev/loop0
现在还没有磁盘,因为都是空的,需要格式化,写入文件系统的相关数据进去
sudo mkfs.msdos /dev/mapper/loop0p1
sudo mkfs.ext4 /dev/mapper/loop0p2
能查询到挂载的设备
电脑上多出两个盘符,内容是空的
5.开始备份接下来就是SD卡里面有什么,就让img里面有什么就行了
烧录uboot
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8
拷贝设备树和内核,在磁盘内,右键打开命令行,输入PWD,获取路径,使用cp命令拷贝内容
拷贝文件系统,文件系统直接拷贝有点问题,使用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一样的文件
6.卸载虚拟磁盘sudo kpartx -d lichee_zero_qt5_20190822.img
或者直接从界面上卸载也行
再以文件形式查看img
发现已经有数据了。
7.烧录测试格式化SD卡
烧录镜像
放到设备上运行
完成
总结
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