From owner-svn-src-all@freebsd.org Fri Mar 23 20:56:20 2018 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ED4E6F6E05B; Fri, 23 Mar 2018 20:56:19 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9792D8C1ED; Fri, 23 Mar 2018 20:56:19 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 921D025043; Fri, 23 Mar 2018 20:56:19 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w2NKuJJ3037844; Fri, 23 Mar 2018 20:56:19 GMT (envelope-from benno@FreeBSD.org) Received: (from benno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w2NKuJr5037840; Fri, 23 Mar 2018 20:56:19 GMT (envelope-from benno@FreeBSD.org) Message-Id: <201803232056.w2NKuJr5037840@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: benno set sender to benno@FreeBSD.org using -f From: Benno Rice Date: Fri, 23 Mar 2018 20:56:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r331463 - in head: release/amd64 usr.sbin/makefs/cd9660 X-SVN-Group: head X-SVN-Commit-Author: benno X-SVN-Commit-Paths: in head: release/amd64 usr.sbin/makefs/cd9660 X-SVN-Commit-Revision: 331463 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Mar 2018 20:56:20 -0000 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 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