前言
- NanoPi NEO Air wiki中提供了各种系统固件基于friendlycore系统,在开发过程中我们往往需要往系统中安装各种需要的库、工具及执行文件,在这里希望能够打包成一个镜像方便烧写至其他NanoPi NEO Air的板子。
准备工作
- 按照wiki使用win32diskimager将nanopi-neo-air_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip烧写至SD卡
- 将SD卡插入板端重启,通过eflasher指令烧写至EMMC
- 断电拔卡重启可以看到系统到正常启动,现在可以在系统中一顿操作安装各种需要的功能…
克隆EMMC内系统
克隆系统到SD卡
- 将刚才制作好的SD卡格式化,插入电脑,用fdisk -l查看分区。例如/dev/sdc为SD卡分区(直接格式化主分区不用管sdc1\sdc2),记得先卸载
sudo mkfs.vfat -I /dev/sdc
-
SD卡插到板子上电,用fdisk -l -u查看分区和扇区使用情况,如下:
-
其中/dev/mmcblk0boot0、/dev/mmcblk0boot1、/dev/mmcblk0p1和/dev/mmcblk0p2为EMMC的扩展分区,BL1和BL2分别在/dev/mmcblk0boot0和/dev/mmcblk0boot1,内核存放在/dev/mmcblk0p1,rootfs存放在/dev/mmcblk0p2。Linux中提供了dd指令,那该如何使用dd克隆数据到SD卡呢,是否需要给SD建立同样的分区?答案是不需要,dd指令是按字节拷贝数据的,不需关注分区表,无所谓grub,还是ext4,btrfs,FAT32,对于dd来说只是数据。下面进行全盘拷贝
dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=512 count=[fdisk命令中最大的end数+1]
其中/dev/mmcblk0主分区,/dev/mmcblk1为SD卡主分区,扇区大小512,有图可以知道count = 15269887+1
dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=512 count=15269888
克隆系统到文件
- 考虑到内部EMMC存储空间有限,现将SD卡挂载到/media目录
- dd if=/dev/mmcblk0 of=/media/nanopi_neo_air.img bs=512 count=[fdisk命令中最大的end数+1]
- 接下来就可以用win32diskimager工具,或者dd烧写到其他的SD卡
ps: 当然你也可以制作单个分区的文件,如/dev/mmcblk0p2,打包根文件系统
dd if=/dev/mmcblk0p2 of=/media/rootfs.img bs=512 count=15138816
总结
- 此方法完全是系统全盘拷贝,需要拷贝的数据过大,最好是利用busybox制作根文件系统,打包前添加自己想要的部分
问题求助
- 全志原厂Linux-3.4 BSP编译生成的文件如何打包成刷机固件(ROM)
- 尝试网址方法里busybox构建自己的文件系统,然后打包刷机包,发现NanoPi NEO Air的板载wifi无法工作,不知各位有没有知道还需要加载哪些模块或者有没有制作NanoPi NEO Air根文件系统的相关介绍
- 如何从开发板中提取friendlycore的根文件系统及配合BSP生成的uboot、kernel打包自己刷机包img文件