svn commit: r331463 - in head: release/amd64 usr.sbin/makefs/cd9660

Benno Rice benno at FreeBSD.org
Fri Mar 23 20:56:20 UTC 2018


Author: benno
Date: Fri Mar 23 20:56:18 2018
New Revision: 331463
URL: https://svnweb.freebsd.org/changeset/base/331463

Log:
  Allow makefs to properly tag UEFI El Torito boot images. Use them in amd64 ISOs.
  
  UEFI booting requires an EFI System Partition (ESP). On most storage devices
  this will be in a specific partition type. To allow booting from CD/ISO
  filesystems, UEFI will look for an ESP in the form of a FAT filesystem image
  embedded in the image. Historically FreeBSD has added one of these to its
  amd64 ISO images but marked it as simply another i386 boot image. Luckily for
  us most UEFI implementations are rather forgiving and work this out for us.
  
  This change adds the ability to mark a boot image as being a UEFI image. It
  also modifies our ISO generation to use this marking for the UEFI image we
  embed.
  
  Reported by:	Thomas Schmitt <scdbackup at gmx.net>
  Reviewed by:	emaste, imp
  MFC after:	1 week
  Sponsored by:	iXsystems, Inc.
  Differential Revision:	https://reviews.freebsd.org/D14809

Modified:
  head/release/amd64/mkisoimages.sh
  head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
  head/usr.sbin/makefs/cd9660/cd9660_eltorito.h

Modified: head/release/amd64/mkisoimages.sh
==============================================================================
--- head/release/amd64/mkisoimages.sh	Fri Mar 23 20:32:54 2018	(r331462)
+++ head/release/amd64/mkisoimages.sh	Fri Mar 23 20:56:18 2018	(r331463)
@@ -38,7 +38,7 @@ if [ "$1" = "-b" ]; then
 	umount efi
 	rmdir efi
 	mdconfig -d -u $device
-	bootable="-o bootimage=i386;efiboot.img -o no-emul-boot $bootable"
+	bootable="-o bootimage=efi;efiboot.img -o no-emul-boot $bootable"
 	
 	shift
 else

Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
==============================================================================
--- head/usr.sbin/makefs/cd9660/cd9660_eltorito.c	Fri Mar 23 20:32:54 2018	(r331462)
+++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.c	Fri Mar 23 20:56:18 2018	(r331463)
@@ -104,9 +104,12 @@ cd9660_add_boot_disk(iso9660_disk *diskStructure, cons
 	else if (strcmp(sysname, "macppc") == 0 ||
 	         strcmp(sysname, "mac68k") == 0)
 		new_image->system = ET_SYS_MAC;
+	else if (strcmp(sysname, "efi") == 0 ||
+		 strcmp(sysname, "uefi") == 0)
+		new_image->system = ET_SYS_UEFI;
 	else {
 		warnx("boot disk system must be "
-		      "i386, powerpc, macppc, or mac68k");
+		      "efi, i386, powerpc, macppc, mac68k");
 		free(temp);
 		free(new_image);
 		return 0;
@@ -338,12 +341,12 @@ cd9660_setup_boot(iso9660_disk *diskStructure, int fir
 	int used_sectors;
 	int num_entries = 0;
 	int catalog_sectors;
-	struct boot_catalog_entry *x86_head, *mac_head, *ppc_head,
+	struct boot_catalog_entry *x86_head, *mac_head, *ppc_head, *uefi_head,
 		*valid_entry, *default_entry, *temp, *head, **headp, *next;
 	struct cd9660_boot_image *tmp_disk;
 
 	headp = NULL;
-	x86_head = mac_head = ppc_head = NULL;
+	x86_head = mac_head = ppc_head = uefi_head = NULL;
 
 	/* If there are no boot disks, don't bother building boot information */
 	if (TAILQ_EMPTY(&diskStructure->boot_images))
@@ -421,6 +424,9 @@ cd9660_setup_boot(iso9660_disk *diskStructure, int fir
 			break;
 		case ET_SYS_MAC:
 			headp = &mac_head;
+			break;
+		case ET_SYS_UEFI:
+			headp = &uefi_head;
 			break;
 		default:
 			warnx("%s: internal error: unknown system type",

Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.h
==============================================================================
--- head/usr.sbin/makefs/cd9660/cd9660_eltorito.h	Fri Mar 23 20:32:54 2018	(r331462)
+++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.h	Fri Mar 23 20:56:18 2018	(r331463)
@@ -44,6 +44,7 @@
 #define	ET_SYS_X86	0
 #define	ET_SYS_PPC	1
 #define	ET_SYS_MAC	2
+#define	ET_SYS_UEFI	0xef
 
 #define ET_BOOT_ENTRY_SIZE 0x20
 


More information about the svn-src-head mailing list