【f1c200s/f1c100s】使用genimage工具制作img系统镜像

工具获取和安装

从genimage仓库克隆最新版的genimage源码,然后编译,生成可执行的genimage二进制文件。

sudo apt-get install libconfuse-dev #安装genimage依赖库
sudo apt-get install genext2fs #制作镜像时genimage将会用到
git clone https://github.com/pengutronix/genimage.git
cd genimage
./configure #配置生成makefile
make

文件准备

制作系统镜像至少需要准备好:

  1. bootloader
  2. 内核zImage
  3. 设备树dtb
  4. 根文件系统rootfs
  5. 根据一定规则生成镜像的配置文件

准备系统文件

将genimage拷贝到方便的地方,并在同级目录新建文件夹。
建立input文件夹,在input文件夹中放入bootloader、内核镜像、设备树,如图所示
在这里插入图片描述
建立root文件夹,将根文件系统全部拷贝过来,如图所示
在这里插入图片描述

准备配置文件

在genimage同级目录新建genimage.cfg文件。文件内容和参数含义如下所示。
具体的定义方法可以参考原github。

image bootfs.vfat {
    
     //定义第一个分区镜像
	vfat {
    
     //分区格式为fat
		files = {
    
     //在里面放入zImage和设备树文件
			"zImage",
			"suniv-f1c100s-mangopi.dtb"
		}
	}
	size = 32M //大小要大于所有文件大小之和
}
image rootfs.ext4 {
    
     //定义第二个分区镜像
	ext4 {
    
    } //分区格式为ext4
	size = 900M //大小要大于根文件系统的大小
	mountpoint = "/" //代表根文件系统所在的root目录
}

image sysimage-sdcard.img {
    
     //生成的img镜像名字
	hdimage {
    
     //类型为hdimage,一般从tf卡启动都为这个格式
	}
	partition u-boot {
    
     //第一个分区,由于in-partition-table = false参数存在其实不会产生分区表
		in-partition-table = false //不要生成分区表,如果注释掉这个将会产生一个uboot分区
		image = "u-boot-sunxi-with-spl.bin" //镜像为input目录的u-boot-sunxi-with-spl.bin文件
		offset = 0x2000 //文件偏移
		size = 1016K //大于uboot的大小
	}

	partition boot {
    
     //第二个分区(实际生成的第一个分区)
		partition-type = 0xC //分区格式,0xC代表fat32格式
		bootable = "true" //定义为启动分区
		image = "bootfs.vfat" //引用前面定义的bootfs.vfat镜像
	}

	partition rootfs {
    
     //第三个分区(实际生成的第二个分区)
		partition-type = 0x83 //分区格式,0xC代表Linux格式
		image = "rootfs.ext4" //引用前面定义rootfs.ext4镜像
	}
}

生成镜像

有了上面的配置文件,执行sudo genimage将会在images文件夹中生成我们所需的系统镜像。
在这里插入图片描述

使用镜像

生成的img文件可以直接通过balenaEtcher工具一键写入TF卡。

其他

配置文件中的partition-type参数的含义可以参考ubuntu下的fdisk工具
依次输入以下内容:

sudo fdisk /dev/sda
l #查看参数含义
q #退出

参考资料:

  1. https://github.com/pengutronix/genimage
  2. fdisk

猜你喜欢

转载自blog.csdn.net/qq_27350133/article/details/124181468