On 09/20/2012 11:28 PM, Gerardo Exequiel Pozzi wrote:
On 09/15/2012 12:40 PM, Keshav P R wrote:
Hi,
      In some UEFI systems, startup.nsh does not start and the boot
stops at Shell prompt without giving any indication of any error
whatsoever. I think instead of relying on UEFI Shell, we should use a
proper, simple UEFI boot manager to load EFISTUB kernel in archiso.
          So here is a patch replacing UEFI Shell as the primary boot
pathway to gummiboot. I have renamed the UEFI Shell binaries and
archiso now includes both v1 and v2 shell binaries, accessible via
gummiboot menu. Some options present in shell v2 is not present in v1,
but v1 works in all firmwares while v2 works only in >=2.3 (spec.
version) firmwares.
          I have attached the patch. For this support,
gummiboot-efi-x86_64 https://aur.archlinux.org/packages.php?ID=62791
should be moved to [extra] or [core] repo. Please give your comments.

Regards.

Keshav

reviewing a more in deep the patch... (next time please attach inline...)


+            mkdir -p ${work_dir}/iso/loader/entries

and etc...can not be in ${work_dir}/iso/EFI/loader ? I want to avoid multiple directories on the root.

uggg, no is not possible, it looks at fixed location [#1]

[#1] http://cgit.freedesktop.org/gummiboot/tree/gummiboot.c#n1168



+ cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/shellx64_v1.efi
+
+ # There are plans to support command line options via a config file (not yet in linux-3.3)

such line empty contains spaces, also here...

+ #echo "archisobasedir=${install_dir} archisolabel=${iso_label} initrd=\\EFI\\boot\\archiso.img" > ${work_dir}/efiboot/EFI/boot/linux.conf
+
             umount ${work_dir}/efiboot


+ # There are plans to support command line options via a config file (not yet in linux-3.3)

and related lines, they are "obsolete" in favor of gummiboot :)


you can split this function make_boot_efi() in two, one for efiboot.img and other for /EFI

make_boot_efi() -> steps to build /EFI directory, for usbboot or EFI firmwares that understands iso9660 filesystem.
make_boot_efiboot() ->  steps to build efiboot.img for "El Torito".


done ;)

diff --git a/configs/releng/build.sh b/configs/releng/build.sh
index df089d4..f7365a7 100755
--- a/configs/releng/build.sh
+++ b/configs/releng/build.sh
@@ -65,19 +65,17 @@ make_boot() {
     fi
 }

-# Prepare EFI "El Torito" boot image (using Linux >= 3.3 EFI boot stub)
-make_boot_efi() {
+make_efi() {
     if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
         if [[ ${arch} == "x86_64" ]]; then
-            ## Start - UEFI USB

             mkdir -p ${work_dir}/iso/EFI/boot
cp ${work_dir}/root-image/boot/efi/EFI/gummiboot/gummibootx64.efi ${work_dir}/iso/EFI/boot/bootx64.efi

             mkdir -p ${work_dir}/iso/loader/entries
- cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/loader.conf - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/uefi-shell-v2-x86_64.conf - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/uefi-shell-v1-x86_64.conf + cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/

             sed "s|%ARCHISO_LABEL%|${iso_label}|g;
s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf
@@ -87,9 +85,14 @@ make_boot_efi() {
# EFI Shell 1.0 for non UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Efi-shell ) wget -O ${work_dir}/iso/EFI/shellx64_v1.efi https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi

-            ## End - UEFI USB
+        fi
+        : > ${work_dir}/build.${FUNCNAME}
+    fi
+}

-            ## Start - UEFI CD
+make_efiboot() {
+    if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+        if [[ ${arch} == "x86_64" ]]; then

             mkdir -p ${work_dir}/iso/EFI/archiso
dd of=${work_dir}/iso/EFI/archiso/efiboot.img bs=1 seek=20M count=0
@@ -106,24 +109,18 @@ make_boot_efi() {
cp ${work_dir}/root-image/boot/efi/EFI/gummiboot/gummibootx64.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi

             mkdir -p ${work_dir}/efiboot/loader/entries
- cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/loader.conf - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf + cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/

             sed "s|%ARCHISO_LABEL%|${iso_label}|g;
s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf

- cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/shellx64_v2.efi - cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/shellx64_v1.efi
-
- # There are plans to support command line options via a config file (not yet in linux-3.3) - #cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/boot/bootx64.efi - #cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/boot/archiso.img - #echo "archisobasedir=${install_dir} archisolabel=${iso_label} initrd=\\EFI\\boot\\archiso.img" > ${work_dir}/efiboot/EFI/boot/linux.conf
-
+            cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/
+            cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/
+
             umount ${work_dir}/efiboot

-            ## End - UEFI CD
         fi
         : > ${work_dir}/build.${FUNCNAME}
     fi
@@ -293,7 +290,8 @@ make_common_single() {
     make_packages
     make_setup_mkinitcpio
     make_boot
-    make_boot_efi
+    make_efi
+    make_efiboot
     make_syslinux
     make_isolinux
     make_customize_root_image
--
1.7.12.1


--
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1

Reply via email to