UEFI Shell

Hier ist die Work-in-Pogress Zone für alles Nichtallgemeine sondern Konkrete an Vorarbeiten für die kommenden UEFI-Wiki-Artikel
Forumsregeln
Alles was konkrete Vorarbeiten zu den geplanten UEFI bezogenen Wiki-Artikeln angeht und keine allgemeine Infos sondern eben genauere Arbeitsschritte, detaliertere Anleitungen, aufgetauchte Probleme, Workarounds um eben diese etc. darstellt bitte hier reinsetzen.

UEFI Shell

Beitragvon Robi » Do 12. Feb 2015, 23:40

Die UEFI-Shell ist auf den ersten Blick eine mutiertes DOS in einem Pre-Operating System.
In einigen UEFIs ist sie integriert, ZB auch in dem viertuellem das wir nutzen.
Bei vielen derzeit im Umlauf befindlicher Systemboards kann sie zwar vom der jeweiligen EFI-Konfigurationsoberfläche oder -Menü gestartet werden, muss aber erst vorher irgendwo runtergeladen und auf die EFI-Partition kopiiert werden.

wir können dieses Benutzerhandbuch verwenden (ist zwar schön älter, aber vollständig und selbst in der aktuellen Version 2.1 sind nur wenige Befehle mehr drin, sonst ist es immer noch genau so wie in diesem Handbuch beschrieben.)

Ziel:
    * Da für einen von Linux kommenden User diese Shell mehr als gewöhnungsbedürftig ist und eine Menge an Eigenheiten hat, sollten wir die Besoner- und Eigenheiten mal konzentriert in einem Wiki zusammenfassen, damit man bei Bedarf schnell das Richtige findet.

    * Wir brauchen einen Zeitstabilen und stets aktuellen Link auf ein 64bit Shell-binary und eine Beschreibung wie man das installiert, damit die User bei Bedarf wenn auf ihren Systemboard keine EFI-Shell integriert ist, diese sich installieren und nutzen können.

    * Wir sollten ein paar nützliche Befehle vorstellen, eventuell ein oder zwei kleine nützliche Scripte schreiben, damit der User einen Einblick bekommt wie sie angewendet wird und was man damit machen kann.

    * Optionals und darüber hinaus ist es eventuell noch ein paar Befehle herauszusuchen die ein User eingeben müsste um brauchbare Informationen zur Fehlersuche zB in einem Forum zu posten.

Alles was mit der Shell zu tun hat erstmal hierher.

robi
Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Re: UEFI Shell

Beitragvon Robi » Sa 21. Feb 2015, 21:11

Die meisten derzeit im Umlauf befindlichen Systemboards für Otto Normalverbraucher mit UEFI sollten eventuell keine in der Firmware integrierte UEFI-Shell haben.
Es gibt jedoch meistens einen Menüpunkt im jeweiligem UEFI-Setupmenu eine solche Shell zu starten. Das Binary für die UEFI-Shell müsste jedoch vorher auf eine FAT Partition kopiert werden.

Derzeit muss bei der Shell ein Unterschied gemacht werden zwischen UEFI < 2.3.1und UEFI >= 2.3.1 in der Firmware der Systemboards
    * UEFI-Shell v1 funktioniert in allen Versionen. (allerdings ist der Befehl "bcfg" mit dem die Bootkonfiguration aus der Shell erfolgen kann nicht möglich)
    * UEFI-Shell v2 funktioniert pächtig wohl in allen UEFI-Versionen > 2.3. in kleineren Versionen bleibt die V2 Shell beim Start mit einem ASSERT_EFI_ERROR hängen, (da Abhängikeiten zu Hii in der Shell V2 nicht erfüllt sind)

    * für den Fall das efibootmgr in Linux nicht richtig funktionieren und man die Bootkonfiguration desshalb über die UEFI Shell machen möchte, man jedoch eine V1 Shell benutzen müßte da die V2 wegen UEFI < 2.3 nicht funktioniert, hier eine modifizierte V2 Shell die auch auf Versionen < 2.3 funktionieren soll, ( noch nicht getestet)

Getestet wurde mit einem USB-Stick normal mit DOS-Partitioniert und auf Partition 1 normales FAT Dateisystem
Die Downgeloadeste Datei des UEFI-Shell Binary wurde dort hinkopiert und umbenannt, es hat bei meinen Versuchen sowohl der Dateiname
shellx64.efi wie auch shell.efi funktioniert. Im UEFI-Setup unter EXIT gab es einen entsprechenden Menüpunkt zum Starten der UEFI-Shell. (Systemboard: ASRock E350M1/USB3 ; UEFI 2.0)

eine weitere Möglichkeit für den Fall das ein Menüpunkt zum Starten der Shell nicht im Setup gefunden werden kann:
Die Shell Binary Datei als /efi/boot/bootx64.efi in dem FAT Verzeichnis ablegen, sollte bewirken das diese Shell als Bootoption zur Verfügung steht. ( noch nicht getestet)

robi
Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Re: UEFI Shell

Beitragvon linuxfreund » Sa 14. Mär 2015, 17:37

Mein HP Pavilion 500-136eg Desktop-PC läuft mit einem HP-modifizierten AMI-UEFI-Setup-Utility.
Es existiert dort kein Menüpunkt zum Starten einer UEFI-Shell.
Ich habe daher einen Fat32-formatierten USB-Stick verwendet und die UEFI-Shell bei Rechnerstart vom USB-Stick gebootet.
Hat funktioniert!

Allerdings war mein Rechner danach anscheinend etwas "Durcheinander", denn ein darauffolgender Restart bootete erneut direkt in die UEFI-Shell.
Rechner ausgeschaltet, USB-Stick raus und PC wieder angeschaltet: Kein Grub2 mehr! PC bootet direkt in Windows8.1!
Windows8.1-Restart: PC zeigt wieder Grub2 an und ich kann in openSUSE13.1 booten!

Erstellt habe ich den USB-Stick folgendermaßen:

Ich habe mich an diese Anleitung gehalten und das aktuellste Paket "UDK2014.SP1.P1.Complete.MyWorkSpace.zip" (UEFI development Kit 2014 SP1 Specification Release #1) ) von http://www.tianocore.org/ heruntergeladen.
Dieses Paket entpackt. Dann das Paket "UDK2014.SP1.P1.MyWorkSpace.zip" entpackt.
MyWorkSpace/EdkShellBinPkg/Bin/X64/ --> Den Ordner "Apps" auf USB-Stick kopiert
MyWorkSpace/EdkShellBinPkg/FullShell/X64/ --> Die Datei "Shell_Full.efi" auf USB-Stick kopiert
MyWorkSpace/EdkShellBinPkg/MinimumShell/X64/ --> Die Datei "Shell.efi" auf USB-Stick kopiert
Dann die Verzeichnisse efi/boot/ auf dem USB-Stick erstellt und die Datei "Shell_Full.efi" hineinkopiert und in "bootx64.efi" umbenannt.

HP Pavilion: Intel Quad-Core i5-4440 3.10 GHz, NVIDIA Geforce 640 GT, 12 GB RAM, 1TB HDD
Sony Vaio SVF-15N2L2ES: Intel Core i5 1.60 GHz, 508 GB HDD, 4 GB DDR3-RAM, Intel HD Graphics 4400
Beide openSUSE13.1(Desktop), openSUSE13.2(Laptop) + Windows8.1

Benutzeravatar
linuxfreund
 
Beiträge: 62
Registriert: Mo 9. Mär 2015, 21:25

Re: UEFI Shell

Beitragvon linuxfreund » Sa 14. Mär 2015, 19:19

Die Variante mit dem USB-Stick läuft nicht optimal:
Wie ich schon vorher gepostet habe lässt sich die UEFI-Shell nicht verlassen ohne das wieder in die Shell zurückgebootet wird.
Verwendete Befehle:
"reset" --> Reboot wird durchgeführt und ich lande wieder in der Shell
"exit" --> Shell wird beendet und einzigst ein HP-Logo ist noch auf dem Bildschirm zu sehen. Beenden mit Power-Off-Taste

Im ausgeschalteten Zustand USB-Stick abgestöpselt und wieder eingeschaltet: HP-Automatischer Reparatur-Modus startet dieses Mal. Beim letzten Mal wurde wie gesagt direkt in Windows8.1 gebootet.
Ergebnis HP-Diagnose: "Computer wurde nicht ordnungsgemäß heruntergefahren. Neustart kann das Problem beheben". Also Neustart: Grub2 erscheint wieder.. alles ok.

Ich habe auch mal die Befehle:
"devices" und "devtree" ausprobiert.
Leider wurden die sehr langen Ausgaben einfach heruntergescrollt, so dass ich nur das letzte Ende noch sehen konnte. Ein Möglichkeit wie ich in der Shell nach oben scrollen kann ist mir nicht bekannt. Pfeil-Taste funktioniert nicht, dann wird in der Befehlshistorie geblättert.

Auch die Auflösung ist nicht optimal. Ich erhalte keine bildschirmfüllende Ansicht. Gute 60% des Bildschirms bleiben ungenutzt.

Fazit: Es ist mir zwar gelungen mittels USB-Stick eine UEFI-Shell zu erhalten, aber Spaß macht das aufgrund der geschilderten Probleme keinen!

Vielleicht habe ich den USB-Stick ja auch nicht optimal erstellt und es gibt bessere Varianten!?

HP Pavilion: Intel Quad-Core i5-4440 3.10 GHz, NVIDIA Geforce 640 GT, 12 GB RAM, 1TB HDD
Sony Vaio SVF-15N2L2ES: Intel Core i5 1.60 GHz, 508 GB HDD, 4 GB DDR3-RAM, Intel HD Graphics 4400
Beide openSUSE13.1(Desktop), openSUSE13.2(Laptop) + Windows8.1

Benutzeravatar
linuxfreund
 
Beiträge: 62
Registriert: Mo 9. Mär 2015, 21:25

Re: UEFI Shell

Beitragvon Robi » Sa 14. Mär 2015, 19:35

2 Dinge, erstens UEFI ist nicht wirklich Hotplug fähig, das bedeutet es kann nicht wirklich erkennen ob da jetzt ein USB-Stick dazugekommen ist oder abgezogen wurde, Dazu müsste wahrscheinlich die kompletten Treiber reloaded werden, damit er den Device-Tree dann wieder richtig aufbaut.

zweitens. der USB-Stick ist nicht optimal angelegt. Bei dir mag es funktionieren, bei anderen wird er rummeckern. ich schreibe ein Script das einen solchen Stick automatisch erstellt. Allerdings ist mein neuer Rechner mit einem vernünftigen UEFI noch in Form von Ersatzteilen hier im Schrank und das Gehäuse wo das alles rein kommen soll, ist zwar auch schon da, muss aber warten bis ich Geburtstag habe, damit es nutzen darf :) sprich. ich brauche jemanden zum ausprobieren.

in der Shell, an jeden Befehl "-b" anhängen, dann kommen die Ausgaben seitenweise, als wenn man sie mit "more" anschauen würde.

immer eines nach dem anderem, ich schreib erstmal ein Script das einen USB-Stick erstellt und da die Shell aus dem Netz läd und dort drauf kopiert. Später kommt dort auch noch ein Script mit drauf, das die wichtigsten Informationen dort speichert, damit die User die dann unter Linux oder Windows anschauen können uns was gebraucht wird, dann in ein Forum runterladen können.

robi
Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Re: UEFI Shell

Beitragvon Robi » So 15. Mär 2015, 02:53

Mal hier die erste Version des Scripts.

Vorher nachschauen das der USB-Stick nicht mehr gemountet ist, und vor allen nachschauen welches Device der jetzt genau hat und bitte nicht verwechseln. hier das Device von der Bootplatte und das System ist im Eimer, Es kommt auch nochmal im Script die Warung bevor irgend was geschrieben wird, bitte genau anschauen ob das auch wirklich der USB-Stick ist. (dieser Abschnitt im Script muss in einer entgültigen Version noch bedeutend besser abgesichert werden, ua muss geprüft werden ob da noch igendwelche Dateien offen sind.)
Ach, und was vorher auf dem Stick war, ist dann natürlich auch komplett weg, das Script setzt hier nicht nur ein partitionstabelle neu drauf, es bügelt auch erstmal ne Menge NULLen auf den Stick.
Das Script läd sich die EFI-Shell Datei selbst aus dem Netz. also sollte eine Netzverbindung bestehen.

Code: Alles auswählen
fdisk -l

sollte durchaus seine Dienst leisten um den USB-Stick eindeutig zu indentifizieren.
Angenommen Script hat den von mir vorgeschlagenen Namen mkusb.sh und USB-Stick ist /dev/sdc

dann Script mit folgendem Befehl starten. (geht aber aufgrund der darin befindlichen Befehle nur als user root)
Code: Alles auswählen
bash ./mkusb.sh /dev/sdc

Das Script kann 1 oder 2 oder 3 Minuten laufen, nicht abbrechen. Die ganzen Warungen und sonstige Ausgaben habe ich im Script in den Müll geworfen, nicht damit jemand irgendwelche Panik bekommt wenn er die Ausgaben sieht die hier zB von parted im Scripts kommen.

Script und der daraus entstandene USB-Stick, ist bei mir beides gelaufen auf echter Maschine mit UEFI 2.0 und auf VM mit UEFI 2.4

robi
Code: Alles auswählen
 
#!/bin/bash

# Scriptname:  mkusb.sh

# Test-Script legt schreibt auf einen USB-Stick eine UEFI-Partition an
# und legt eine UEFI-Shell als default Bootoption für diesen Stick ab

# Achtung: Scipt ist nicht fuer die Allgemeinheit freigegeben.
# im Moment Testmodus: Nutzung nur nach lesen der dazugehoerenden Hinweise im Forum
# Autor: Robi@linux-club.de
# Version 0.0  vom  14.03.2015


#------------------ Konfigurationsbereich im Script --------------------------------
# bitte nur 1 von 3 moeglichen Optionen auswaehlen, Abhaengig von eurer UEFI-Version

# Shell V2 fuer UEFI >=2.3.1
SHELL_BIN="https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi"

# Shell V1 fuer alle Versionen aber ohne bcfg , keine Bootkonfiguration moeglich
#SHELL_BIN="https://svn.code.sf.net/p/edk2/code/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi"

# Shell V2 fuer UEFI <2.3.1 modifiziert mit bcfg , Bootkonfiguration moeglich
#SHELL_BIN="http://dl.dropbox.com/u/17629062/Shell2.zip"
#------------------------------------------------------------------------------------

#---------- ab hier Script nicht aendern, ausser ihr wisst was ihr hier tut----------

IMAGE=$1
if [ $# -ne 1 ]; then
    echo -e "Aufruf: $0  usb_device \n\n# Beispiel: $0 /dev/sdd"
    exit 1
fi
if [ -b "$IMAGE" ]
then
        echo "Das Script vernichtet alle bisherigen Datein auf diesen Devices"
        cat /proc/partitions | grep ${IMAGE#/dev/}
            if [  $(mount | awk '{print $1}' | grep "$IMAGE") ]
            then
                echo "ABBRUCH: es scheinen noch Bestandteile dieses blockdevices gemountet zu sein"
                exit 4
            fi

        echo
        INPUT="n"
        read -p "moechten sie die Daten auf diesen Devices überschreiben  ?:  ( j oder n )  : " INPUT
        if [ ${INPUT,,*} == "j" ]
        then
                echo
                echo "USB-Stick wird auf Device  \""$IMAGE"\" erzeugt"
        else
                    echo ABBRUCH
                    exit 2
        fi
else
        if [ ! -e "$IMAGE" ]
        then
                INPUT="n"
                echo "Die Datei \"$IMAGE\" existiert nicht"
                echo "moechten sie jetzt ein USB-Image mit diesem Namen erzeugen ?"
                echo "ein solches USB-Image koennen sie fuer Virtuelle Maschinen nutzen"
                read  -p "moechten sie ein USB-Image erzeugen ?:  ( j oder n )  : " INPUT
                if [ ${INPUT,,*} == "j" ]
                then
                        echo
                        echo "USB-Image wird in Datei \""$IMAGE"\" wird erzeugt"
                else
                            echo ABBRUCH
                            exit 2
                fi
        else
                echo
                echo "ABBRUCH: die Datei \""$IMAGE"\" existiert und ist kein Blockdevice"
                exit 3
        fi
fi

echo
echo "Erstellung des USB-Sticks $IMAGE beginnt, bitte haben sie einen Moment Geduld"

TMP_IMG=$(mktemp -u -p /var/tmp)
TMP_DIR=$(mktemp -d)

cd $TMP_DIR
echo "Download des Shell-binary"
wget -q ${SHELL_BIN}
if [ ${SHELL_BIN##*.} == "zip" ]
then
        unzip Shell2.zip
        cp Shell2/UefiShellX64.efi .
        rm -rf Shell2/
fi
cd - >/dev/null

dd if=/dev/zero of=${IMAGE} bs=512 count=265000 &>/dev/null
parted ${IMAGE} "mktable gpt" &>/dev/null
parted ${IMAGE} "mkpart p fat32 2048S  264192S"  &>/dev/null
parted ${IMAGE} "toggle 1 boot" &>/dev/null
parted ${IMAGE} "name 1 UEFI" &>/dev/null
dd if=/dev/zero of=${TMP_IMG} bs=512 count=262144 &>/dev/null
mkfs -t vfat -n UEFI-Tools ${TMP_IMG}
mmd -i ${TMP_IMG} ::/EFI
mmd -i ${TMP_IMG} ::/EFI/BOOT
mmd -i ${TMP_IMG} ::/keys
mmd -i ${TMP_IMG} ::/tools
mmd -i ${TMP_IMG} ::/logs

mcopy -i ${TMP_IMG} ${TMP_DIR}/*.efi ::/EFI/BOOT/bootx64.efi
mcopy -i ${TMP_IMG} ${TMP_DIR}/*.efi ::shellx64.efi

dd if=${TMP_IMG} of=${IMAGE} bs=512 seek=2048 count=262144 conv=notrunc &>/dev/null
rm -rf $TMP_DIR
rm -f ${TMP_IMG}
echo "Die Erstellung des USB-Sticks $IMAGE ist abgeschlossen"

exit 0
#----------------------- ENDE ------------------------------------------------------

Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Re: UEFI Shell

Beitragvon linuxfreund » So 15. Mär 2015, 12:22

Habe das Skript abgespeichert als mkusb.sh. USB-Stick ist bei mir /dev/sdc.
Skript hat den USB-Stick erstellt.
Dann Test: Neustart und UEFI-Boot vom USB-Stick:

Code: Alles auswählen
>>Checking Media Presence.......
>>Media Present.......
>>Start PXE over IPv4.

Dann hängt es sich auf und nichts geht mehr. PC reagiert auch nicht auf Strg+Alt+Esc oder Strg+Alt+Entf oder F1, F2, F3....
Nach längerer Zeit dann HP-Fehlermeldung:

Code: Alles auswählen
Boot Gerät nicht gefunden
Bitte installieren Sie ein Betriebssystem auf Ihrer Festplatte.
......

Dann kann ich den Rechner mit Strg+Alt+Entf neu starten und es kommt sofort Grub2.

Habe 2 Tests durchgeführt mit gleichem Ergebnis.

Allerdings wird mir der USB-Stick jetzt nicht mehr auf der Desktopoberfläche als Gerät angezeigt!
Mit
Code: Alles auswählen
fdisk -l

bekomme ich den Stick als /dev/sdc angezeigt.

HP Pavilion: Intel Quad-Core i5-4440 3.10 GHz, NVIDIA Geforce 640 GT, 12 GB RAM, 1TB HDD
Sony Vaio SVF-15N2L2ES: Intel Core i5 1.60 GHz, 508 GB HDD, 4 GB DDR3-RAM, Intel HD Graphics 4400
Beide openSUSE13.1(Desktop), openSUSE13.2(Laptop) + Windows8.1

Benutzeravatar
linuxfreund
 
Beiträge: 62
Registriert: Mo 9. Mär 2015, 21:25

Re: UEFI Shell

Beitragvon linuxfreund » So 15. Mär 2015, 13:16

Hier nochmal die zwei Anleitungen, die ich im Internet gefunden habe:

www.ct.de hat geschrieben:Mein Mainboard besitzt eine UEFI-Firmware. Dazu gehört doch angeblich ein DOS-ähnliches Minibetriebssystem. Wie starte ich es?

Tatsächlich steckt in jeder UEFI-Firmware ein EFI-Byte-Code-(EBC-)Interpreter, der für EFI geschriebene Programme und Treiber ausführt. Doch eine sogenannte EFI-Shell, also eine Kommandozeilenschnittstelle zur Firmware, lässt sich nur bei manchen Mainboards direkt aufrufen. Man kann sie allerdings möglicherweise nachrüsten, indem man einen FAT- oder FAT32-formatierten USB-Stick präpariert: Dazu entpackt man den Inhalt des Verzeichnisses \Edk\Other\Maintained\Application\UefiShell\bin\x64 aus dem EFI Developer Kit 1.06 (siehe Link unten) auf den Stick, sodass die Dateien Shell.efi und Shell_Full.efi im Wurzelverzeichnis stehen. Nun legt man dort noch das Verzeichnis namens „efi“ an und darin das Unterverzeichnis „boot“. Dort hinein kopiert man die erwähnte Datei Shell.efi und benennt sie um in „BOOTX64.efi“.
Schließlich muss man noch die Mainboard-Firmware dazu überreden, von dem vorbereiteten USB-Stick im UEFI-Modus zu booten. Manchmal muss man den USB-Stick dazu in der Boot-Reihenfolge an erste Stelle setzen oder ihn über das Boot-Auswahlmenü des BIOS beim Start explizit auswählen. Manche UEFI-Firmware will die EFI-Shell leider überhaupt nicht starten.

(aus: http://www.heise.de/ct/hotline/FAQ-Unified-Extensible-Firmware-Interface-1082020.html)
www.com-magazin.de hat geschrieben:Anders als bei USB-Sticks mit Windows-Systemen brauchen Sie den USB-Stick nicht erst zu formatieren und bootbar zu machen. Es genügt, die Dateien der UEFI-Shell auf den USB-Stick zu kopieren.
Verbinden Sie den USB-Stick mit dem PC. Wechseln Sie anschließend mit dem Windows-Explorer auf der Festplatte in den Ordner, in den Sie das EFI Developer Kit entpackt haben. Sie finden dort im Verzeichnis „C:\UEFI\Edk (...)\Edk\Other\Maintained\Application\UefiShell\bin\x64“ die UEFI-Shell.
Markieren Sie den Inhalt des Ordners mit [Strg A] und kopieren Sie die markierten Inhalte mit [Strg C] in die Zwischenablage.

Bild
Bootloader kopieren: Die zwei EFI-Dateien und den Ordner benötigen Sie auf dem UEFI-Boot-Stick

Wechseln Sie anschließend in das Hauptverzeichnis des USB-Sticks und fügen Sie die Zwischenablage mit [Strg V] ein. Erstellen Sie nun auf dem USB-Stick das Verzeichnis efi und in diesem Ordner das Unterverzeichnis boot. In dieses Verzeichnis kopieren Sie aus dem Hauptverzeichnis des USB-Sticks die Datei „Shell_Full.efi“. Benennen Sie die Datei „Shell_Full.efi“ im Ordner „efi\boot“ auf dem USB-Stick um in BOOTX64.efi.
Der UEFI-Boot-Stick, mit dem Sie die UEFI-Shell starten, ist damit erstellt.

(aus: http://www.com-magazin.de/praxis/bios/so-erstellen-boot-stick-uefi-193281.html?page=1_uefi-boot-stick-erstellen)

Was mir beim Vergleich der beiden Anleitungen auffällt ist das im CT-Artikel von der Datei "Shell.efi" und im COM-Artikel von der Datei „Shell_Full.efi“ die Rede ist, welche in „BOOTX64.efi“ umbenannt werden soll.
Im COM-Artikel wird gesagt das beide EFI-Dateien und der Ordner "Apps" auf dem Stick benötigt werden. So hatte ich meinen Stick ja auch erstellt und es hat bis auf die beschriebenen Fehler funktioniert. Ich hatte die Datei „Shell_Full.efi“ umbenannt.
Im CT-Artikel ist zwar nicht explizit von dem Ordner "Apps" die Rede, aber es wird vom kompletten Inhalt aus \Edk\Other\Maintained\Application\UefiShell\bin\x64 gesprochen der auf den Stick zu kopieren ist und da müsste der Ordner "Apps" ja dann auch dabei sein!

HP Pavilion: Intel Quad-Core i5-4440 3.10 GHz, NVIDIA Geforce 640 GT, 12 GB RAM, 1TB HDD
Sony Vaio SVF-15N2L2ES: Intel Core i5 1.60 GHz, 508 GB HDD, 4 GB DDR3-RAM, Intel HD Graphics 4400
Beide openSUSE13.1(Desktop), openSUSE13.2(Laptop) + Windows8.1

Benutzeravatar
linuxfreund
 
Beiträge: 62
Registriert: Mo 9. Mär 2015, 21:25

Re: UEFI Shell

Beitragvon linuxfreund » So 15. Mär 2015, 14:51

Beim Betrachten des USB-Sticks unter gparted ist mir aufgefallen das dieser mit Deinem Skript in Fat16 formatiert wurde.
Vorher hatte ich ihn in Fat32 formatiert und von Fat32 ist auch in den von mir geposteten Anleitungen die Rede.

Du hast die Verzeichnisse /EFI/BOOT Groß geschrieben, ich hatte diese in Kleinschrift angelegt: /efi/boot.
Keine Ahnung ob das was ausmachen könnte!?

HP Pavilion: Intel Quad-Core i5-4440 3.10 GHz, NVIDIA Geforce 640 GT, 12 GB RAM, 1TB HDD
Sony Vaio SVF-15N2L2ES: Intel Core i5 1.60 GHz, 508 GB HDD, 4 GB DDR3-RAM, Intel HD Graphics 4400
Beide openSUSE13.1(Desktop), openSUSE13.2(Laptop) + Windows8.1

Benutzeravatar
linuxfreund
 
Beiträge: 62
Registriert: Mo 9. Mär 2015, 21:25

Re: UEFI Shell

Beitragvon Robi » Mo 16. Mär 2015, 12:37

Ob das groß oder klein geschrieben ist, ist unwichtig da von UEFI das Groß/Klein ingnoriert wird und es dem Dateisystem sonst auch egal ist.

FAT16 oder FAT32 sollte UEFI auch egal sein, bei der relativ kleinen Größe die man für eine UEFI-Partion benötigt ist FAT16 etwas platzsparender.

soweit ich das bisher probieren konnte, scheint es UEFI ziemlich wurscht zu sein ob das jetzt shell.efi oder shellirgendwas.efi benannt ist. das x64 ist aber dazu geignet um das 64 Bit von einem eventuell ebenfalls vorhanden 32Bit binary zu unterscheiden. das full dazwischen hat auch nur für den User der das Ding startet den Hinweils, das es sich um die komplette Shell handelt, es gibt auch nicht "komplette", dort fehlen eventuell ein paar Befehle und vor allem die Hilfetexte sind extrem kurz bis nicht vorhanden, sprich damit kann man ohne Handbuch daneben wenig machen.

Was bei mir anders ist, ist der GPT den ich angelegt habe nachdem ich erstmal alles genullt habe. Wenn man einen normalen USB-Stick nimmt ist dort ein MBR-Tabelle drauf, manche UEFIs wollen dann unbedingt auch MBR-Boot machen und ignorieren das UEFI Verzeichnis und fallen mit dem MBR-Boot auf die Nase weil dort kein MBR-Bootloader ist, (dürften sie zwar laut Spezifikation nicht, aber an einigen Stellen scheint noch jeder die Spezifikation so auszulegen, wie es ihm gerade ins Konzept passt.

efi\boot\bootx64.efi (und auch die 32Bitversion) sind default Namen für Bootloader die UEFI auf jeder UEFI-Partition sucht, wenn er von diesem Device booten soll, aber normalerweise sollte er diese erst dann nehmen, wenn in der Bootkonfiguration nichts anders für diese Platte eingetragen ist. Windows legt, (wie bei dir auch) eine Kopie seines Bootmanager als efi\boot\bootx64.efi ab, für den Fall das aus irgend einem Grunde mal die Bootkonfiguration komplett weg ist und dann würde trotzdem Windows automatisch startet. Leider haben einige Hardwarehersteller bei der Erstellung ihrer UEFI-Firmware wohl nie etwas anderes ausprobiert als immer nur Windows, und so gibt es einige UEFIs die die Bootkonfiguration dann mal komplett ignorieren sobald dort auf der Platte der default Eintrag drauf ist. Das ist zB genau das Problem das dann dazu führt, das man zwar Linux auf UEFI installiert und auch den Booteintrag dazu hat, aber trotzdem immer nur Windows von dieser Platte bootet, egal was man versucht.

Wo das Shell binary auf einem USB-Stick am besten abgelegt wird, müssen wir herausfinden, UEFI hat default PATH Einträge an denen es sucht. das Wurzelverzeichnis und \bin sind auf alle Fälle dabei. Manche UEFIs haben im Setup ( in dem OVMF zB im EXIT Untermenü) einen Punkt mit dem man von dort aus eine Shell starten kann, die sich irgendwo auf einem FAT-Verzeichnis befindet, desshalb hab ich es dort zusätzlich noch abgelegt und zusätzlich noch unter \efi\boot\bootx64.efi als Defaultbootloader für den USB-Stick.

Letztlich wird es aber für einen Nomalen User einfacher sein, wenn sich die Shell auf seinem normalen UEFI-Bootpartiton der Platte und nicht auf einem zusätzlichen USB-Stick befindet, da dadurch einige der in UEFI verwendeten Gerätenamen dann anders aussehen als später ohne USB-Stick. Das einem User zu erklären der sich gar nicht so tief mit der Materie beschäftigen will, wird kompliziert. Aber das lässt sich wohl dann nicht umgehen, wenn die Kiste mal gar nicht mehr bootet, dann braucht man eben eine CD oder einen USB-Stick, um dort an die Shell zu kommen, genau dafür will ich das Script zum Erstellen des USB-Sticks optimieren. Später sollen dort eventuell auch noch NSH-Scripte drauf, die dann auch automatisch Infos einsammeln, die sich der User dann später auf dem USB-Stick anschauen kann wenn er anschließend den Stick in einen anderen Rechner steckt, dann braucht der User keine Ahnung von der EFI-Shell zu haben und kann trotzdem Informationen zB für ein Forum aus diesen Logs heraus holen.


robi
Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Nächste

Zurück zu Workspace

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron