Несколько разделов в сборке root? - PullRequest
0 голосов
/ 11 февраля 2020

Давайте обсудим очень распространенный случай при создании образа системы, в котором нам нужны наши rootfs как SquashFs, чтобы действительно только для чтения, и еще один ext4 раздел (скажем, home) для общего чтения. -записать хранилище.

Структура образа системы (genimage.cfg) выглядит так в среде сборки root:

image sdcard.img {
  hdimage {}

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

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

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

image boot.vfat {
  vfat {
    files = {
      "bcm2711-rpi-4-b.dtb",
      "rpi-firmware/cmdline.txt",
      "rpi-firmware/config.txt",
      "rpi-firmware/fixup4.dat",
      "rpi-firmware/start4.elf",
      "rpi-firmware/overlays",
      "zImage"
    }
  }
  size = 16M
}

image home.ext4 {
  name = "home"
  mountpoint = "/home"
  ext4 {}
  size = 32M
}

Но на финальной стадии создания образа мы в конечном итоге с ошибкой:

>>   Executing post-image script ~/rpi4/post-image.sh
INFO: cmd: "mkdir -p "/home/iman/rpi4/genimage.tmp"" (stderr+stdout):
INFO: cmd: "rm -rf "/home/iman/rpi4/genimage.tmp"/*" (stderr+stdout):
DEBUG: hdimage(sdcard.img): adding implicit file rule for 'rootfs.squashfs'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'bcm2711-rpi-4-b.dtb'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/cmdline.txt'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/config.txt'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/fixup4.dat'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/start4.elf'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/overlays'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'zImage'
INFO: cmd: "mkdir -p "/home/iman/rpi4/genimage.tmp"" (stderr+stdout):
INFO: cmd: "cp -a "/tmp/tmp.dMfSigyUwW" "/home/iman/rpi4/genimage.tmp/root"" (stderr+stdout):
INFO: cmd: "mv "/home/iman/rpi4/genimage.tmp/root/home" "/home/iman/rpi4/genimage.tmp/home"" (stderr+stdout):
mv: cannot stat '/home/iman/rpi4/genimage.tmp/root/home': No such file or directory
Makefile:809: recipe for target 'target-post-image' failed
make[1]: *** [target-post-image] Error 1
Makefile:84: recipe for target '_all' failed
make: *** [_all] Error 2

О каких еще шагах нужно позаботиться?

Или, в более общем смысле, как создать + смонтировать новый раздел в сборке root?

1 Ответ

1 голос
/ 12 февраля 2020

Если вам нужен пустой каталог /home, вам следует не использовать ключевое слово mountpoint:

image home.ext4 {
  name = "home"
  ext4 {}
  size = 32M
}

Ключевое слово mountpoint делает не скажите, где будет смонтирован раздел. См. Genimage Docs для объяснения того, что он делает.

Если вы хотите смонтировать ваш раздел из ваших rootfs, то вы можете добавить его в /etc/fstab, возможно, в оверлее rootfs ( BR2_ROOTFS_OVERLAY ). genimage не имеет никакого контроля над тем, что будет фактически установлено.

...