genimage:新分区没有可用空间错误

genimage:新分区没有可用空间错误

我正在尝试使用 genimage 设置我的 buildroot 映像。这是默认配置文件:

image boot.vfat {
  vfat {
    files = {
      "bcm2710-rpi-3-b.dtb",
      "rpi-firmware/bootcode.bin",
      "rpi-firmware/cmdline.txt",
      "rpi-firmware/config.txt",
      "rpi-firmware/fixup.dat",
      "rpi-firmware/start.elf",
      "kernel-marked/zImage"
    }
  }
  size = 32M
}

image sdcard.img {
  hdimage {
  }

  partition boot {
    partition-type = 0xC
    bootable = "true"
    image = "boot.vfat"
  }

  partition rootfs {
    partition-type = 0x83
    image = "rootfs.ext4"
  }
}

nconfig > filesystem images 字段设置为默认值。我不需要在 rootfs 上留出更多可用空间。

相反,我想创建另一个 ext4 分区,比如说 100M。因此,这是我创建的新 genimage 文件:

image boot.vfat {
  vfat {
    files = {
      "bcm2710-rpi-3-b.dtb",
      "rpi-firmware/bootcode.bin",
      "rpi-firmware/cmdline.txt",
      "rpi-firmware/config.txt",
      "rpi-firmware/fixup.dat",
      "rpi-firmware/start.elf",
      "kernel-marked/zImage"
    }
  }
  size = 32M
}

image opt.ext4 {
  ext4 { }
  size = 100M
}

image sdcard.img {
  hdimage {
  }

  partition boot {
    partition-type = 0xC
    bootable = "true"
    image = "boot.vfat"
  }

  partition rootfs {
    partition-type = 0x83
    image = "rootfs.ext4"
  }

  partition opt {
    partition-type = 0x83
    image = "opt.ext4"
  }
}

但它返回此错误:

genext2fs: couldn't allocate a block (no free space)
ext4(opt.ext4): failed to generate opt.ext4

我的错误在哪里?我认为我不需要在 buildroot 设置中保留更多空间,因为我正在创建一个新分区,而不是调整 rootfs 的大小!

答案1

我遇到了类似的问题,请确保您在主机工具中启用了 GENEXT2FS。

R2_PACKAGE_HOST_GENEXT2FS=y

看起来 buildroot 会将所有 rootfs 文件放入您定义的每个分区中。如果您增加最大文件大小并挂载分区,则可以看到整个文件系统。

我发现你不应该使用 genimage 来创建分区,而是参考已经创建的文件系统。(并删除顶部的图像 application.ext4 定义)

genimage.cfg:

partition application {
   partition-type = 0x83
   image = "application.ext4"
 }

您可以在 buildroot/output/images 文件夹中创建 application.ext4 文件,如下所示:

dd if=/dev/zero of=application.ext4 bs=1M count=20
mke2fs application.ext4

完成后,您可以挂载分区并看到您有一个可用的空分区!(在您的物理设备或 QEMU 中)

mkdir /mnt/test
mount -t ext4 /dev/vda3 /mnt/test

我知道这个问题已经很老了,但是我在这个问题上浪费了很多时间,而且谷歌似乎没有足够的资源来解决这个问题。

相关内容