################################################################################ # # Build the iso96600 root filesystem image # ################################################################################ # # We need to handle three cases: # # 1. The ISO9660 filesystem will really be the real root filesystem # itself. This is when BR2_TARGET_ROOTFS_ISO9660_INITRD is # disabled. # # 2. The ISO9660 filesystem will be a filesystem with just a kernel # image, initrd and grub. This is when # BR2_TARGET_ROOTFS_ISO9660_INITRD is enabled, but # BR2_TARGET_ROOTFS_INITRAMFS is disabled. # # 3. The ISO9660 filesystem will be a filesystem with just a kernel # image and grub. This is like (2), except that the initrd is # built into the kernel image. This is when # BR2_TARGET_ROOTFS_INITRAMFS is enabled (regardless of the value # of BR2_TARGET_ROOTFS_ISO9660_INITRD). ROOTFS_ISO9660_BOOT_MENU = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU)) ROOTFS_ISO9660_DEPENDENCIES = host-xorriso linux ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y) ROOTFS_ISO9660_USE_INITRD = YES endif ifeq ($(BR2_TARGET_ROOTFS_ISO9660_INITRD),y) ROOTFS_ISO9660_USE_INITRD = YES endif ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES) ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp define ROOTFS_ISO9660_CREATE_TEMPDIR $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR) mkdir -p $(ROOTFS_ISO9660_TMP_TARGET_DIR) endef ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_CREATE_TEMPDIR else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y) ROOTFS_ISO9660_DEPENDENCIES += host-zisofs-tools ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp # This must be early, before we copy the bootloader files. define ROOTFS_ISO9660_MKZFTREE $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR) $(HOST_DIR)/bin/mkzftree -X -z 9 -p $(PARALLEL_JOBS) \ $(TARGET_DIR) \ $(ROOTFS_ISO9660_TMP_TARGET_DIR) endef ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_MKZFTREE ROOTFS_ISO9660_OPTS += -z else ROOTFS_ISO9660_TMP_TARGET_DIR = $(TARGET_DIR) endif 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 ROOTFS_ISO9660_BOOT_IMAGE = boot/grub/grub-eltorito.img define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS $(INSTALL) -D -m 0644 $(BINARIES_DIR)/grub-eltorito.img \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub-eltorito.img endef endif 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_EFI 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 endif ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ISOLINUX),y) ROOTFS_ISO9660_DEPENDENCIES += syslinux ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/isolinux.cfg ROOTFS_ISO9660_BOOT_IMAGE = isolinux/isolinux.bin define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS $(INSTALL) -D -m 0644 $(BINARIES_DIR)/syslinux/* \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ $(INSTALL) -D -m 0644 $(HOST_DIR)/share/syslinux/ldlinux.c32 \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ldlinux.c32 endef endif define ROOTFS_ISO9660_PREPARATION $(INSTALL) -D -m 0644 $(ROOTFS_ISO9660_BOOT_MENU) \ $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) $(SED) "s%__KERNEL_PATH__%/boot/$(LINUX_IMAGE_NAME)%" \ $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) $(ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS) $(ROOTFS_ISO9660_INSTALL_BOOTLOADER_EFI) endef ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_PREPARATION define ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD $(SED) '/__INITRD_PATH__/d' $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) endef # Copy the kernel to temporary filesystem define ROOTFS_ISO9660_COPY_KERNEL $(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/$(LINUX_IMAGE_NAME) endef ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES) ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL # If initramfs is used, disable loading the initrd as the rootfs is # already inside the kernel image. Otherwise, make sure a cpio is # generated and use it as the initrd. ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y) ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD else ROOTFS_ISO9660_DEPENDENCIES += rootfs-cpio define ROOTFS_ISO9660_COPY_INITRD $(INSTALL) -D -m 0644 $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \ $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/initrd $(SED) "s%__INITRD_PATH__%/boot/initrd%" \ $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) endef ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_INITRD endif else # ROOTFS_ISO9660_USE_INITRD ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y) # We must use the uncompressed kernel image ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL endif ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD endif # ROOTFS_ISO9660_USE_INITRD ROOTFS_ISO9660_OPTS += -J -R ROOTFS_ISO9660_OPTS_BIOS = \ -b $(ROOTFS_ISO9660_BOOT_IMAGE) \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table ROOTFS_ISO9660_OPTS_EFI = \ --efi-boot $(ROOTFS_ISO9660_EFI_PARTITION) \ -no-emul-boot ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy) ROOTFS_ISO9660_OPTS += \ $(ROOTFS_ISO9660_OPTS_BIOS) \ -eltorito-alt-boot \ $(ROOTFS_ISO9660_OPTS_EFI) else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),y) ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_BIOS) else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),y) ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_EFI) endif define ROOTFS_ISO9660_CMD $(HOST_DIR)/bin/xorriso -as mkisofs \ $(ROOTFS_ISO9660_OPTS) \ -o $@ $(ROOTFS_ISO9660_TMP_TARGET_DIR) endef ifeq ($(BR2_TARGET_ROOTFS_ISO9660_HYBRID),y) define ROOTFS_ISO9660_GEN_HYBRID $(HOST_DIR)/bin/isohybrid -t 0x96 $@ endef ROOTFS_ISO9660_POST_GEN_HOOKS += ROOTFS_ISO9660_GEN_HYBRID endif $(eval $(rootfs))