天天看点

NanoPi NEO Air内EMMC系统克隆至全新的SD卡

NanoPi NEO Air内EMMC系统克隆至全新的SD卡

    • 前言
    • 准备工作
    • 克隆EMMC内系统
      • 克隆系统到SD卡
      • 克隆系统到文件
    • 总结
    • 问题求助

前言

  • 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查看分区和扇区使用情况,如下:
    NanoPi NEO Air内EMMC系统克隆至全新的SD卡
  • 其中/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文件

继续阅读