----- Mensaje original -----
De: Keshav P R <the.ridikulus.rat@gmail.com> Para: Arch Linux Release Engineering <arch-releng@archlinux.org> CC: Enviado: martes, 20 de marzo de 2012 13:13 Asunto: Re: [arch-releng] [DRAFT][RFC][PATCH][archiso] Add UEFI boot support via Linux >= 3.3 EFI boot stub.
On Tue, Mar 20, 2012 at 21:29, Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> wrote:
Support is only added to x86_64. This only works via (U)EFI shell. Boot with:
fs0:\EFI\linux\vmlinuz.efi archisolabel=ARCH_201203 initrd=\EFI\linux\archiso.img
There are plans to support command line options via a config file (not yet in linux-3.3), in such case vmlinuz.efi can be renamed to bootia64.efi and placed to \EFI\boot to automatic boot.
--- archiso/mkarchiso | 11 ++++++++++- configs/releng/build.sh | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/archiso/mkarchiso b/archiso/mkarchiso index ad88b0b..208f7b6 100755 --- a/archiso/mkarchiso +++ b/archiso/mkarchiso @@ -380,6 +380,8 @@ command_checksum () {
# Create an ISO9660 filesystem from "iso" directory. command_iso () { + local _iso_efi_boot_args + if [[ ! -f "${work_dir}/iso/isolinux/isolinux.bin" ]]; then _msg_error "The file '${work_dir}/iso/isolinux/isolinux.bin' does not exist." 1 fi @@ -387,6 +389,12 @@ command_iso () { _msg_error "The file '${work_dir}/iso/isolinux/isohdpfx.bin' does not exist." 1 fi
+ if [[ -d "${work_dir}/iso/EFI" ]]; then + _iso_efi_boot_args="-eltorito-alt-boot --efi-boot EFI/archiso/archiso.fat -no-emul-boot" + else + _iso_efi_boot_args="" + fi + _show_config iso
if _is_directory_changed "${work_dir}/iso" "${out_dir}/${img_name}"; then @@ -398,9 +406,10 @@ command_iso () { fi xorriso -as mkisofs ${_qflag} -r -l \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ - -iso-level 3 \ -no-emul-boot -boot-load-size 4 -boot-info-table \ + ${_iso_efi_boot_args} \ -isohybrid-mbr ${work_dir}/iso/isolinux/isohdpfx.bin \ + -iso-level 3 \ -p "prepared by mkarchiso" \ -publisher "${iso_publisher}" \ -A "${iso_application}" \ diff --git a/configs/releng/build.sh b/configs/releng/build.sh index 2faf210..f4ca11e 100755 --- a/configs/releng/build.sh +++ b/configs/releng/build.sh @@ -58,6 +58,29 @@ make_boot() { fi }
+# Prepare /EFI (using linux EFI boot stub) +make_boot_efi() { + if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then + if [[ ${arch} == "x86_64" ]]; then + mkdir -p ${work_dir}/iso/EFI/linux + cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/iso/EFI/linux/vmlinuz.efi + cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/iso/EFI/linux/archiso.img
Why duplicate the files? /EFI/linux/archiso.img in this case. You can always use
fs0:\EFI\linux\vmlinuz.efi archisolabel=ARCH_201203 initrd=\boot\x86_64\archiso.img
True, I am just testing this stuff just now. initrd=\arch\boot\x86_64\archiso.img
+ # There are plans to support command line options via a config file (not yet in linux-3.3) + # echo "archisolabel=${iso_label} initrd=\EFI\linux\archiso.img" | iconv -f ascii -t ucs2 > ${work_dir}/iso/EFI/linux/vmlinuz.conf + mkdir -p ${work_dir}/iso/EFI/archiso + mkdir -p ${work_dir}/fat + dd of=${work_dir}/iso/EFI/archiso/archiso.fat bs=1 seek=32M count=0 + mkfs.vfat ${work_dir}/iso/EFI/archiso/archiso.fat + mount ${work_dir}/iso/EFI/archiso/archiso.fat ${work_dir}/fat/ + mkdir -p ${work_dir}/fat/EFI/linux + cp ${work_dir}/iso/EFI/linux/vmlinuz.efi ${work_dir}/fat/EFI/linux + cp ${work_dir}/iso/EFI/linux/archiso.img ${work_dir}/fat/EFI/linux + # cp ${work_dir}/iso/EFI/linux/vmlinuz.conf ${work_dir}/fat/EFI/linux + umount ${work_dir}/fat/ + fi + fi +} +
This is going to increase the iso size like hell. Having the kernel and initrd files within a FAT image inside the iso is not a good idea. A 32 MB fat image, come on. I know this is required for CD booting, but this is not a good idea with efistub efilinux or elilo etc. For USB booting you can just have the files in the iso itself, wherein the user simply extract the iso in a FAT32 USB and boots from it. I say drop support for iso booting via this fat fs image and support uefi boot only in case of USBs.
Regards.
Keshav
OK, so just ignore this draft patch. UEFI boot support can be made manually by the user, just doing a copy of vmlinuz to the right place and optionally installing a boot manager. A documentation on the wiki is sufficient.