diff --git a/fs/iso9660/Config.in b/fs/iso9660/Config.in index 6f001c0640..f8f577506d 100644 --- a/fs/iso9660/Config.in +++ b/fs/iso9660/Config.in @@ -2,8 +2,7 @@ config BR2_TARGET_ROOTFS_ISO9660 bool "iso image" depends on (BR2_i386 || BR2_x86_64) depends on BR2_LINUX_KERNEL - depends on BR2_TARGET_GRUB2_I386_PC || \ - BR2_TARGET_SYSLINUX_ISOLINUX + depends on BR2_TARGET_GRUB2 || BR2_TARGET_SYSLINUX_ISOLINUX select BR2_LINUX_KERNEL_INSTALL_TARGET \ if (!BR2_TARGET_ROOTFS_ISO9660_INITRD && !BR2_TARGET_ROOTFS_INITRAMFS) help @@ -27,12 +26,15 @@ choice config BR2_TARGET_ROOTFS_ISO9660_GRUB2 bool "grub2" - depends on BR2_TARGET_GRUB2_I386_PC + depends on BR2_TARGET_GRUB2 help Use Grub 2 as the bootloader for the ISO9660 image. Make sure to enable the 'iso9660' module in - BR2_TARGET_GRUB2_BUILTIN_MODULES and to use 'cd' as the boot - partition in BR2_TARGET_GRUB2_BOOT_PARTITION=. + BR2_TARGET_GRUB2_BUILTIN_MODULES_PC or + BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI. Use 'cd' as the boot + partition in BR2_TARGET_GRUB2_BOOT_PARTITION= for GRUB on BIOS + or 'set root=(cd0)' in the configuration file passed to + BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI for GRUB on EFI. config BR2_TARGET_ROOTFS_ISO9660_ISOLINUX bool "isolinux" @@ -40,6 +42,19 @@ config BR2_TARGET_ROOTFS_ISO9660_ISOLINUX endchoice +choice + prompt "Boot payload" + +config BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER + bool "legacy bios" + depends on BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_ROOTFS_ISO9660_ISOLINUX + +config BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER + bool "UEFI" + depends on BR2_TARGET_GRUB2_I386_EFI || BR2_TARGET_GRUB2_X86_64_EFI + +endchoice + config BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU string "Boot menu config file" default "fs/iso9660/grub.cfg" if BR2_TARGET_ROOTFS_ISO9660_GRUB2 @@ -83,7 +98,7 @@ config BR2_TARGET_ROOTFS_ISO9660_HYBRID endif -comment "iso image needs a Linux kernel and either grub2 i386-pc or isolinux to be built" +comment "iso image needs a Linux kernel and either grub2 or isolinux to be built" depends on BR2_i386 || BR2_x86_64 depends on !BR2_LINUX_KERNEL || \ - !(BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_SYSLINUX_ISOLINUX) + !(BR2_TARGET_GRUB2 || BR2_TARGET_SYSLINUX_ISOLINUX) diff --git a/fs/iso9660/iso9660.mk b/fs/iso9660/iso9660.mk index 23421a9a5c..27319b024b 100644 --- a/fs/iso9660/iso9660.mk +++ b/fs/iso9660/iso9660.mk @@ -57,7 +57,14 @@ else ROOTFS_ISO9660_TMP_TARGET_DIR = $(TARGET_DIR) endif -ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2),y) +ifeq ($(BR2_REPRODUCIBLE),y) +ROOTFS_ISO9660_VFAT_OPTS = --invariant +ROOTFS_ISO9660_FIX_TIME = touch -d @$(SOURCE_DATE_EPOCH) +else +ROOTFS_ISO9660_FIX_TIME = @: +endif + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),yy) ROOTFS_ISO9660_DEPENDENCIES += grub2 ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg @@ -66,6 +73,23 @@ define ROOTFS_ISO9660_INSTALL_BOOTLOADER $(INSTALL) -D -m 0644 $(BINARIES_DIR)/grub-eltorito.img \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub-eltorito.img endef +else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy) +ROOTFS_ISO9660_DEPENDENCIES += grub2 host-dosfstools host-mtools +ROOTFS_ISO9660_EFI_PARTITION = boot/fat.efi +ROOTFS_ISO9660_EFI_PARTITION_PATH = $(ROOTFS_ISO9660_TMP_TARGET_DIR)/$(ROOTFS_ISO9660_EFI_PARTITION) +ROOTFS_ISO9660_EFI_PARTITION_CONTENT = $(BINARIES_DIR)/efi-part +ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg +define ROOTFS_ISO9660_INSTALL_BOOTLOADER + rm -rf $(ROOTFS_ISO9660_EFI_PARTITION_PATH) + mkdir -p $(dir $(ROOTFS_ISO9660_EFI_PARTITION_PATH)) + dd if=/dev/zero of=$(ROOTFS_ISO9660_EFI_PARTITION_PATH) bs=1M count=1 + $(HOST_DIR)/sbin/mkfs.vfat $(ROOTFS_ISO9660_VFAT_OPTS) $(ROOTFS_ISO9660_EFI_PARTITION_PATH) + $(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/* + $(HOST_DIR)/bin/mcopy -p -m -i $(ROOTFS_ISO9660_EFI_PARTITION_PATH) -s \ + $(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/* ::/ + $(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_PATH) +endef else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ISOLINUX),y) ROOTFS_ISO9660_DEPENDENCIES += syslinux ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ @@ -128,9 +152,25 @@ ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD endif # ROOTFS_ISO9660_USE_INITRD +ROOTFS_ISO9660_OPTS += \ + -J \ + -R \ + -no-emul-boot + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),y) +ROOTFS_ISO9660_OPTS += \ + -boot-load-size 4 \ + -boot-info-table \ + -b $(ROOTFS_ISO9660_BOOT_IMAGE) +endif + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),y) +ROOTFS_ISO9660_OPTS += \ + --efi-boot $(ROOTFS_ISO9660_EFI_PARTITION) +endif + define ROOTFS_ISO9660_CMD - $(HOST_DIR)/bin/xorriso -as mkisofs -J -R -b $(ROOTFS_ISO9660_BOOT_IMAGE) \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ + $(HOST_DIR)/bin/xorriso -as mkisofs \ $(ROOTFS_ISO9660_OPTS) \ -o $@ $(ROOTFS_ISO9660_TMP_TARGET_DIR) endef