iso9660.mk 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. ################################################################################
  2. #
  3. # Build the iso96600 root filesystem image
  4. #
  5. ################################################################################
  6. #
  7. # We need to handle three cases:
  8. #
  9. # 1. The ISO9660 filesystem will really be the real root filesystem
  10. # itself. This is when BR2_TARGET_ROOTFS_ISO9660_INITRD is
  11. # disabled.
  12. #
  13. # 2. The ISO9660 filesystem will be a filesystem with just a kernel
  14. # image, initrd and grub. This is when
  15. # BR2_TARGET_ROOTFS_ISO9660_INITRD is enabled, but
  16. # BR2_TARGET_ROOTFS_INITRAMFS is disabled.
  17. #
  18. # 3. The ISO9660 filesystem will be a filesystem with just a kernel
  19. # image and grub. This is like (2), except that the initrd is
  20. # built into the kernel image. This is when
  21. # BR2_TARGET_ROOTFS_INITRAMFS is enabled (regardless of the value
  22. # of BR2_TARGET_ROOTFS_ISO9660_INITRD).
  23. ROOTFS_ISO9660_BOOT_MENU = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU))
  24. ROOTFS_ISO9660_DEPENDENCIES = host-xorriso linux
  25. ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
  26. ROOTFS_ISO9660_USE_INITRD = YES
  27. endif
  28. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_INITRD),y)
  29. ROOTFS_ISO9660_USE_INITRD = YES
  30. endif
  31. ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES)
  32. ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp
  33. define ROOTFS_ISO9660_CREATE_TEMPDIR
  34. $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR)
  35. mkdir -p $(ROOTFS_ISO9660_TMP_TARGET_DIR)
  36. endef
  37. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_CREATE_TEMPDIR
  38. else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y)
  39. ROOTFS_ISO9660_DEPENDENCIES += host-zisofs-tools
  40. ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp
  41. # This must be early, before we copy the bootloader files.
  42. define ROOTFS_ISO9660_MKZFTREE
  43. $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR)
  44. $(HOST_DIR)/bin/mkzftree -X -z 9 -p $(PARALLEL_JOBS) \
  45. $(TARGET_DIR) \
  46. $(ROOTFS_ISO9660_TMP_TARGET_DIR)
  47. endef
  48. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_MKZFTREE
  49. ROOTFS_ISO9660_OPTS += -z
  50. else
  51. ROOTFS_ISO9660_TMP_TARGET_DIR = $(TARGET_DIR)
  52. endif
  53. ifeq ($(BR2_REPRODUCIBLE),y)
  54. ROOTFS_ISO9660_VFAT_OPTS = --invariant
  55. ROOTFS_ISO9660_FIX_TIME = touch -d @$(SOURCE_DATE_EPOCH)
  56. else
  57. ROOTFS_ISO9660_FIX_TIME = :
  58. endif
  59. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),yy)
  60. ROOTFS_ISO9660_DEPENDENCIES += grub2
  61. ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
  62. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg
  63. ROOTFS_ISO9660_BOOT_IMAGE = boot/grub/grub-eltorito.img
  64. define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS
  65. $(INSTALL) -D -m 0644 $(BINARIES_DIR)/grub-eltorito.img \
  66. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub-eltorito.img
  67. endef
  68. endif
  69. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy)
  70. ROOTFS_ISO9660_DEPENDENCIES += grub2 host-dosfstools host-mtools
  71. ROOTFS_ISO9660_EFI_PARTITION = boot/fat.efi
  72. ROOTFS_ISO9660_EFI_PARTITION_PATH = $(ROOTFS_ISO9660_TMP_TARGET_DIR)/$(ROOTFS_ISO9660_EFI_PARTITION)
  73. ROOTFS_ISO9660_EFI_PARTITION_CONTENT = $(BINARIES_DIR)/efi-part
  74. ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
  75. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg
  76. define ROOTFS_ISO9660_INSTALL_BOOTLOADER_EFI
  77. rm -rf $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
  78. mkdir -p $(dir $(ROOTFS_ISO9660_EFI_PARTITION_PATH))
  79. dd if=/dev/zero of=$(ROOTFS_ISO9660_EFI_PARTITION_PATH) bs=1M count=1
  80. $(HOST_DIR)/sbin/mkfs.vfat $(ROOTFS_ISO9660_VFAT_OPTS) $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
  81. $(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/*
  82. $(HOST_DIR)/bin/mcopy -p -m -i $(ROOTFS_ISO9660_EFI_PARTITION_PATH) -s \
  83. $(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/* ::/
  84. $(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
  85. endef
  86. endif
  87. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ISOLINUX),y)
  88. ROOTFS_ISO9660_DEPENDENCIES += syslinux
  89. ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
  90. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/isolinux.cfg
  91. ROOTFS_ISO9660_BOOT_IMAGE = isolinux/isolinux.bin
  92. define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS
  93. $(INSTALL) -D -m 0644 $(BINARIES_DIR)/syslinux/* \
  94. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/
  95. $(INSTALL) -D -m 0644 $(HOST_DIR)/share/syslinux/ldlinux.c32 \
  96. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ldlinux.c32
  97. endef
  98. endif
  99. define ROOTFS_ISO9660_PREPARATION
  100. $(INSTALL) -D -m 0644 $(ROOTFS_ISO9660_BOOT_MENU) \
  101. $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
  102. $(SED) "s%__KERNEL_PATH__%/boot/$(LINUX_IMAGE_NAME)%" \
  103. $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
  104. $(ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS)
  105. $(ROOTFS_ISO9660_INSTALL_BOOTLOADER_EFI)
  106. endef
  107. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_PREPARATION
  108. define ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
  109. $(SED) '/__INITRD_PATH__/d' $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
  110. endef
  111. # Copy the kernel to temporary filesystem
  112. define ROOTFS_ISO9660_COPY_KERNEL
  113. $(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) \
  114. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
  115. endef
  116. ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES)
  117. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL
  118. # If initramfs is used, disable loading the initrd as the rootfs is
  119. # already inside the kernel image. Otherwise, make sure a cpio is
  120. # generated and use it as the initrd.
  121. ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
  122. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
  123. else
  124. ROOTFS_ISO9660_DEPENDENCIES += rootfs-cpio
  125. define ROOTFS_ISO9660_COPY_INITRD
  126. $(INSTALL) -D -m 0644 $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \
  127. $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/initrd
  128. $(SED) "s%__INITRD_PATH__%/boot/initrd%" \
  129. $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
  130. endef
  131. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_INITRD
  132. endif
  133. else # ROOTFS_ISO9660_USE_INITRD
  134. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y)
  135. # We must use the uncompressed kernel image
  136. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL
  137. endif
  138. ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
  139. endif # ROOTFS_ISO9660_USE_INITRD
  140. ROOTFS_ISO9660_OPTS += -J -R
  141. ROOTFS_ISO9660_OPTS_BIOS = \
  142. -b $(ROOTFS_ISO9660_BOOT_IMAGE) \
  143. -no-emul-boot \
  144. -boot-load-size 4 \
  145. -boot-info-table
  146. ROOTFS_ISO9660_OPTS_EFI = \
  147. --efi-boot $(ROOTFS_ISO9660_EFI_PARTITION) \
  148. -no-emul-boot
  149. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy)
  150. ROOTFS_ISO9660_OPTS += \
  151. $(ROOTFS_ISO9660_OPTS_BIOS) \
  152. -eltorito-alt-boot \
  153. $(ROOTFS_ISO9660_OPTS_EFI)
  154. else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),y)
  155. ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_BIOS)
  156. else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),y)
  157. ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_EFI)
  158. endif
  159. define ROOTFS_ISO9660_CMD
  160. $(HOST_DIR)/bin/xorriso -as mkisofs \
  161. $(ROOTFS_ISO9660_OPTS) \
  162. -o $@ $(ROOTFS_ISO9660_TMP_TARGET_DIR)
  163. endef
  164. ifeq ($(BR2_TARGET_ROOTFS_ISO9660_HYBRID),y)
  165. define ROOTFS_ISO9660_GEN_HYBRID
  166. $(HOST_DIR)/bin/isohybrid -t 0x96 $@
  167. endef
  168. ROOTFS_ISO9660_POST_GEN_HOOKS += ROOTFS_ISO9660_GEN_HYBRID
  169. endif
  170. $(eval $(rootfs))