@@ -8,10 +8,47 @@ config BR2_TARGET_ROOTFS_ISO9660
help
Build a bootable iso9660 image
+if BR2_TARGET_ROOTFS_ISO9660
+
config BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU
string "Boot menu.lst file"
- depends on BR2_TARGET_ROOTFS_ISO9660
default "fs/iso9660/menu.lst"
+ help
+ Grub configuration
+ Define menu, commands and options for grub
+
+config BR2_TARGET_ROOTFS_ISO9660_JOLIET
+ bool "Create iso with Joliet format (long filenames)"
+ default y
+ help
+ Generate iso image with Joliet directory records.
+ Use Unicode and each path component can be up 64
+ Unicode characters long.
+
+config BR2_TARGET_ROOTFS_ISO9660_ROCK_RIDGE
+ bool "Create iso with Rock Ridge extensions (POSIX filesystem)"
+ default y
+ help
+ Generate iso image with Rock Ridge directory information,
+ which makes it a POSIX filesystem (file mode, uid, gid, ...)
+
+config BR2_TARGET_ROOTFS_ISO9660_NAME
+ string "Volume label"
+ default ""
+ help
+ cdrom name
+
+config BR2_TARGET_ROOTFS_ISO9660_INPUT_CHARSET
+ string "Input filename character encoding"
+ default "utf8"
+ help
+ The character encoding with which the names of the files that
+ will be copied into the iso9660 filesystem are encoded. For the
+ RockRidge directory, the same encoding will be used. For the
+ Joliet directory, it will be converted to UTF-16.
+ (see program genisoimage : genisoimage -input-charset help)
+
+endif # BR2_TARGET_ROOTFS_ISO9660
comment "iso image needs a Linux kernel to be built"
depends on BR2_i386 || BR2_x86_64
@@ -9,33 +9,53 @@
ISO9660_TARGET_DIR = $(BUILD_DIR)/iso9660
ISO9660_BOOT_MENU := $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU))
+ISO9660_CHARSET = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_INPUT_CHARSET))
+ISO9660_NAME = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_NAME))
+ISO9660_KERNEL_DST = $(ISO9660_TARGET_DIR)/kernel
+
+ISO9660_BOOTLOADER_BIN = $(GRUB_DIR)/stage2/stage2_eltorito
+ISO9660_BOOTLOADER_DIR = $(ISO9660_TARGET_DIR)/boot/grub/
+ISO9660_BOOTLOADER_DST_CFG = $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
+ISO9660_ELTORITO_BOOT = boot/grub/stage2_eltorito
$(BINARIES_DIR)/rootfs.iso9660: host-cdrkit host-fakeroot linux rootfs-cpio grub
@$(call MESSAGE,"Generating root filesystem image rootfs.iso9660")
- mkdir -p $(ISO9660_TARGET_DIR)
- mkdir -p $(ISO9660_TARGET_DIR)/boot/grub
- cp $(GRUB_DIR)/stage2/stage2_eltorito $(ISO9660_TARGET_DIR)/boot/grub/
- cp $(ISO9660_BOOT_MENU) $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
+ @mkdir -p $(ISO9660_TARGET_DIR)
+ @mkdir -p $(ISO9660_BOOTLOADER_DIR)
+
+ @cp $(ISO9660_BOOTLOADER_BIN) $(ISO9660_BOOTLOADER_DIR)
+ @cp $(ISO9660_BOOT_MENU) $(ISO9660_BOOTLOADER_DST_CFG)
+ @cp $(LINUX_IMAGE_PATH) $(ISO9660_KERNEL_DST)
+
ifeq ($(BR2_TARGET_GRUB_SPLASH),)
- $(SED) '/^splashimage/d' $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
+ @$(SED) '/^splashimage/d' $(ISO9660_BOOTLOADER_DST_CFG)
else
- cp boot/grub/splash.xpm.gz $(ISO9660_TARGET_DIR)/
-endif
- cp $(LINUX_IMAGE_PATH) $(ISO9660_TARGET_DIR)/kernel
+ @cp boot/grub/splash.xpm.gz $(ISO9660_TARGET_DIR)/
+endif # BR2_TARGET_GRUB_SPLASH
+
ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
- $(SED) '/initrd/d' $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
+ @$(SED) '/initrd/d' $(ISO9660_BOOTLOADER_DST_CFG)
else
- cp $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) $(ISO9660_TARGET_DIR)/initrd
-endif
+ @cp $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \
+ $(ISO9660_TARGET_DIR)/initrd
+endif # BR2_TARGET_ROOTFS_INITRAMFS
+
# Use fakeroot to pretend all target binaries are owned by root
- rm -f $(FAKEROOT_SCRIPT)
- echo "chown -R 0:0 $(ISO9660_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
+ @rm -f $(FAKEROOT_SCRIPT)
+ @echo "chown -R 0:0 $(ISO9660_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
# Use fakeroot so mkisofs believes the previous fakery
- echo "$(HOST_DIR)/usr/bin/genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot " \
- "-boot-load-size 4 -boot-info-table -o $@ $(ISO9660_TARGET_DIR)" \
+ @echo "$(HOST_DIR)/usr/bin/genisoimage " \
+ "$(GENISOIMAGE_OPTS) " \
+ "-b $(ISO9660_ELTORITO_BOOT) " \
+ "-no-emul-boot " \
+ "-boot-load-size 4 " \
+ "-boot-info-table " \
+ "-input-charset '$(ISO9660_CHARSET)' " \
+ "-V '$(ISO9660_NAME)' " \
+ "-o $@ $(ISO9660_TARGET_DIR)" \
>> $(FAKEROOT_SCRIPT)
- chmod a+x $(FAKEROOT_SCRIPT)
- $(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
+ @chmod a+x $(FAKEROOT_SCRIPT)
+ @$(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
-@rm -f $(FAKEROOT_SCRIPT)
-@rm -rf $(ISO9660_TARGET_DIR)
@@ -49,3 +69,11 @@ rootfs-iso9660: $(BINARIES_DIR)/rootfs.iso9660
ifeq ($(BR2_TARGET_ROOTFS_ISO9660),y)
TARGETS_ROOTFS += rootfs-iso9660
endif
+
+ifeq ($(BR2_TARGET_ROOTFS_ISO9660_JOLIET),y)
+GENISOIMAGE_OPTS += -J
+endif
+
+ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ROCK_RIDGE),y)
+GENISOIMAGE_OPTS += -R
+endif