PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bootbaren USB-Stick für 32bit UEFI erstellen



ThorstenHirsch
02.02.14, 23:26
Die Dödel bei Lenovo bringen doch tatsächlich seit November 2013 Atom-Tablets (32bit) mit UEFI raus. Und so eins habe ich jetzt in die Finger bekommen. Das Problem: mit 32bit UEFI hat wohl niemand gerechnet, deshalb unterstützt bspw. der USB Creator von Ubuntu UEFI nur bei 64bit Images.
Aber ich bin nicht der Erste, der dieses Problem hat.

Was ich schon weiß:
- UEFI braucht eine GPT-Partitionstabelle (ein einfacher MBR reicht nicht mehr), Lösung: gdisk
- UEFI braucht eine FAT-Partition (muss nicht die erste sein), die jedoch die Partitions-ID EF00 aufweist (es darf nur eine Partition mit dieser ID auf dem USB-Stick geben), Lösung: mkfs.vfat und gdisk
- UEFI erwartet in seiner UEFI-Partition ein Unterverzeichnis /mnt/efi/boot, wo es bei 64bit-Systemen die Datei bootx64.efi erwartet, bei 32bit muss sie bootia32.efi heißen
- ein solcher Bootloader heißt efilinux, ist wohl von Intel und wird neuerdings auch von Ubuntu benutzt; um das 32bit-Paket auf einem 64bit-Ubuntu zu installieren, muss man das Paket "efilinux:i386" installieren; der Bootloader ist dann unter /usr/lib/efilinux zu finden (es gibt nur 1 Datei dort, die heißt zwar nicht bootia32.efi, aber sie ist es)
- für efilinux wird ein Boot-Menü (ähnlich grub.cfg) benötigt, die Datei muss wohl efilinux.cfg heißen und ebenfalls unter /efi/boot liegen
- bei Pfaden auf der EFI-Partition muss "\" benutzt werden (also bspw. für den Pfad der initrd)
- fängt eine Zeile mit "-f " an, wird dieser Eintrag geladen ohne dass ein Boot-Menü angezeigt wird
- Kommentare scheinen schon mal nicht mit "#" am Anfang der Zeile eingeleitet zu werden.

Was ich nicht weiß:
- Inhalt der efilinux.cfg: Welches device ist "0:" in "0:\vmlinuz"? Das Boot-Medium selbst? Warum brauche ich das, wenn laut anderen Beispielen auch einfach "\vmlinuz" funktionieren soll? (Es sieht so aus als würd 0:\vmlinuz und \vmlinuz gleichermaßen funktionieren.)
- Kann man das irgendwie debuggen?

Links, wo ich meine Infos gefunden habe: USBStickUEFIHowto vom Ubuntu Wiki (https://wiki.ubuntu.com/USBStickUEFIHowto) und eine Frage auf askubuntu.com zu 32bit UEFI (http://askubuntu.com/questions/392719/32-bit-uefi-boot-support).

Ich hab' den Eindruck, dass UEFI von Ernie und Bert entwickelt wurde. Und da rede ich noch nicht mal von dem unsäglichen Secure Boot! Das ist doch echt unterirdisch.

Kann mir dennoch jemand bei meinen Fragen weiterhelfen?

ThorstenHirsch
04.02.14, 20:05
Okay, ich bin ein bisschen weiter gekommen. Meine Antworten habe ich im ersten post ergänzt. Offen ist leider noch:

- Linux (der Kernel) bootet nicht, der Bootvorgang bleibt hier hängen:

efilinux loader 1.0
Using efilinux config file

Diesen Zustand bekomme ich auf 2 Varianten hin - bei einer bleibt die LED vom USB-Stick an, bei der anderen geht sie aus. Ich weiß nicht, was besser ist.

neverless
16.11.14, 11:40
Der PI320 besitzt einen 64Bit-Prozessor (Atom Z3735F Bay Trail-CR) und ein 32Bit-UEFI, was sich für Linux als sehr unglückliche Kombination darstellt.
Das vorinstallierte Windows 8.1 ist ebenfalls 32Bit, was angesichts des Hauptspeichers von 2GB durchaus verständlich ist, denn 32Bit-Programme können ohnehin nicht mehr Speicher adressieren.
Im Prinzip würde also auch ein 32Bit-Linux ausreichen, doch leider stellt bisher keine große Distribution UEFI und 32Bit-Kernel zur Verfügung. 32-Bit-Distributionen verwenden BIOS+MBR und die 64Bit-Varianten verwenden UEFI+GPT.
Dies hat technische Hintergründe, auf die ich hier nicht näher eingehe (http://www.golem.de/news/linux-bios-bugs…308-100731.html).
Nun ist es beim PI320 glücklicherweise möglich, mithilfe einer "bootia32.efi" den Rechner von USB-Stick/-CD-Rom zu starten. Selbst die beiliegende Recovery-CD von Zotac enthält diese Datei, ist aber für unsere Zwecke ungeeignet.


Um Ubuntu auf dem PI320 zu installieren, braucht man:
-einen internetfähigen Windows-PC
-Ubuntu 14.10 64Bit als ISO (z.B. ubuntu-14.10-desktop-amd64.iso)
-rufus-1.4.10.exe
-bootia32.efi von github (für den USB-Stick)
-7zip (oder jedes andere Programm, mit dem Dateien aus ISO-Abbildern extrahiert werden können)
-einen 2GB USB-Stick oder größer

Unter Windows den Stick einstecken und Rufus starten. Einstellungen: GPT Partitionierungsschema für UEFI Computer, Fat32, 4096 Byte
Das Symbol rechts von "startfähiges Laufwerk erstellen mit: ISO-Abbild" anklicken, die ubuntu-14.10-desktop-amd64.iso suchen und auswählen.
Schaltfläche "Start" anklicken und warten, bis Rufus mit dem Vorgang fertig ist. Rufus beenden.
Dann die Datei "bootia32.efi" auf den Ubuntu-USB-Stick in das Verzeichnis "EFI/boot" kopieren. Der Stick ist nun einsatzbereit.

Den Stick an den PI320 anschliessen, einschalten und mit Taste "ESC" ins UEFI springen. Unter "Security" bitte "Secure Boot" auf disable stellen. Unter "Boot" bitte "Fast Boot" auf disable stellen.
"F10" drücken und "Save Changes and Exit" auswählen. Der Rechner startet neu. Taste "F8" mehrfach drücken, bis die Bootauswahl erscheint und den USB-Stick auswählen.
Anschliessend mit "Try Ubuntu without installing" starten. Nachdem Ubuntu gestartet ist, sollte in den "System Settings" mit "Brightness & Lock" der Bildschirmschoner abgeschaltet werden, weil der PI320 nicht mehr daraus aufwacht!
Danach links oben bei der Aktionsleiste nach "gparted" suchen. Mit "gparted" kann man die interne eMMC umpartitionieren. Ich habe die Windowspartition auf 8GB verkleinert, so dass etwa 18GB für Ubuntu frei werden.

Man kann nun den Ubuntu-Installer in der Aktionsleiste starten und das Programm holt ein paar Auskünfte bezüglich Sprache, Tastatur usw ein. Dann kommt der Punkt, an dem Ubuntu nach dem Installationstyp fragt. Hier "Ubuntu neben Windows Boot Manager installieren" auswählen. Nach der Installation nicht neu starten, sondern Netzwerkkabel einstecken und ein Terminal öffnen.

Jetzt folgende Befehle im Terminal eingeben:
sudo -s
mount /dev/mmcblk0p5 /mnt
mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf
chroot /mnt /bin/bash
apt-get update
apt-get -y remove grub-efi-amd64
apt-get -y install grub-efi-ia32
sed -i 's/vmlinuz-3.16.0-23-generic.efi.signed/vmlinuz-3.16.0-23-generic/g' /boot/grub/grub.cfg

Fertig. Nach einem Neustart sollte jetzt Grub2 starten und sowohl Ubuntu, als auch Windows zur Auswahl anbieten.
Viel Spaß!

chris1005
02.01.15, 00:00
Hallo

Ich versuche grade das was in dem Thread oben beschrieben ist.
Bei mir Startet nach dem Start Grub nicht sonder nur der Windows Bootloader mit Windows 8.1 als einziger Punkt.
Jedoch gab es bei mir auch den Ordner mount /dev/mmcblk0p5 nicht und /dev/mmcblk0p1 lies sich nicht einbinden.
Habe ein Surftab Wintron 10.1

jemand eine Idee ?

MfG chris :)

neverless
07.01.15, 18:03
Hallo chris1005,

die Geräte /dev/mmcblk0p5 und /dev/mmcblk0p1 sind die Partitionen des internen Laufwerks (ähnlich wie die Laufwerksbuchstaben unter Windows).
Die von mir angegebenen Partitionen beziehen sich nur auf den Mini-PC PI320 und auch nur solange die Werkseinstellungen nicht verändert wurden.
Um die Partitionsbezeichnungen für dein Gerät herauszubekommen, kannst du nach "sudo -s" den Befehl "fdisk -l" (kleines L) ausführen.
Sehr wahrscheinlich werden deine Partitionen als "/dev/sda1" , "/dev/sda2" usw. bezeichnet sein. Leider kenne ich das Surftab nicht und kann daher keine genaueren Angaben machen.
Falls deine Linuxkenntnisse nicht ausreichen, um die richtigen Partitionen auf deinem Gerät herauszufinden und an den entsprechenden Stellen in meinem Script einzufügen, dann bleibt dir leider nur der Weg, das Internet nach einer Anleitung für exakt dein Gerätemodell zu durchsuchen. Bedauerlicherweise ist Linux zwar ein mächtiges Betriebssystem, doch leider noch nicht sehr bedienungsfreundlich. Je älter dein Gerät ist, desto besser sind die Chancen, dass du eine gute Anleitung findest.

Viel Erfolg!

Avantar
10.01.15, 15:32
Der PI320 besitzt einen 64Bit-Prozessor (Atom Z3735F Bay Trail-CR) und ein 32Bit-UEFI, was sich für Linux als sehr unglückliche Kombination darstellt.
Das vorinstallierte Windows 8.1 ist ebenfalls 32Bit, was angesichts des Hauptspeichers von 2GB durchaus verständlich ist, denn 32Bit-Programme können ohnehin nicht mehr Speicher adressieren.
Im Prinzip würde also auch ein 32Bit-Linux ausreichen, doch leider stellt bisher keine große Distribution UEFI und 32Bit-Kernel zur Verfügung. 32-Bit-Distributionen verwenden BIOS+MBR und die 64Bit-Varianten verwenden UEFI+GPT.
Dies hat technische Hintergründe, auf die ich hier nicht näher eingehe (http://www.golem.de/news/linux-bios-bugs…308-100731.html).
Nun ist es beim PI320 glücklicherweise möglich, mithilfe einer "bootia32.efi" den Rechner von USB-Stick/-CD-Rom zu starten. Selbst die beiliegende Recovery-CD von Zotac enthält diese Datei, ist aber für unsere Zwecke ungeeignet.


Um Ubuntu auf dem PI320 zu installieren, braucht man:
-einen internetfähigen Windows-PC
-Ubuntu 14.10 64Bit als ISO (z.B. ubuntu-14.10-desktop-amd64.iso)
-rufus-1.4.10.exe
-bootia32.efi von github (für den USB-Stick)
-7zip (oder jedes andere Programm, mit dem Dateien aus ISO-Abbildern extrahiert werden können)
-einen 2GB USB-Stick oder größer

Unter Windows den Stick einstecken und Rufus starten. Einstellungen: GPT Partitionierungsschema für UEFI Computer, Fat32, 4096 Byte
Das Symbol rechts von "startfähiges Laufwerk erstellen mit: ISO-Abbild" anklicken, die ubuntu-14.10-desktop-amd64.iso suchen und auswählen.
Schaltfläche "Start" anklicken und warten, bis Rufus mit dem Vorgang fertig ist. Rufus beenden.
Dann die Datei "bootia32.efi" auf den Ubuntu-USB-Stick in das Verzeichnis "EFI/boot" kopieren. Der Stick ist nun einsatzbereit.

Den Stick an den PI320 anschliessen, einschalten und mit Taste "ESC" ins UEFI springen. Unter "Security" bitte "Secure Boot" auf disable stellen. Unter "Boot" bitte "Fast Boot" auf disable stellen.
"F10" drücken und "Save Changes and Exit" auswählen. Der Rechner startet neu. Taste "F8" mehrfach drücken, bis die Bootauswahl erscheint und den USB-Stick auswählen.
Anschliessend mit "Try Ubuntu without installing" starten. Nachdem Ubuntu gestartet ist, sollte in den "System Settings" mit "Brightness & Lock" der Bildschirmschoner abgeschaltet werden, weil der PI320 nicht mehr daraus aufwacht!
Danach links oben bei der Aktionsleiste nach "gparted" suchen. Mit "gparted" kann man die interne eMMC umpartitionieren. Ich habe die Windowspartition auf 8GB verkleinert, so dass etwa 18GB für Ubuntu frei werden.

Man kann nun den Ubuntu-Installer in der Aktionsleiste starten und das Programm holt ein paar Auskünfte bezüglich Sprache, Tastatur usw ein. Dann kommt der Punkt, an dem Ubuntu nach dem Installationstyp fragt. Hier "Ubuntu neben Windows Boot Manager installieren" auswählen. Nach der Installation nicht neu starten, sondern Netzwerkkabel einstecken und ein Terminal öffnen.

Jetzt folgende Befehle im Terminal eingeben:
sudo -s
mount /dev/mmcblk0p5 /mnt
mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf
chroot /mnt /bin/bash
apt-get update
apt-get -y remove grub-efi-amd64
apt-get -y install grub-efi-ia32
sed -i 's/vmlinuz-3.16.0-23-generic.efi.signed/vmlinuz-3.16.0-23-generic/g' /boot/grub/grub.cfg

Fertig. Nach einem Neustart sollte jetzt Grub2 starten und sowohl Ubuntu, als auch Windows zur Auswahl anbieten.
Viel Spaß!

Hallo

danke für die super Anleitung!
Alles funktioniert so wie beschrieben.:)

Ich habe dann versucht die Treiber (Wlan-Wifi Audio Bluetooth) für das Gerät zu installieren bisher leider ohne Erfolg.

Dazu habe ich die Treiber für Asus T100 (BayTrail Prozessor Z3740) verwendet.

Gibt es eventuell Unterschiede bei den verschiedenen Prozessoren, dass man für den Zotac 321 (Z3735F) nicht dieselbe verwenden darf?

Hat schon jemand es geschafft diese Geräte zum Laufen zu bringen?

Für jegliche Hilfe wäre ich sehr dankbar.

qgc
10.01.15, 21:10
Ich möchte mich ebenfalls für die Anleitung bedanken, ausprobiert auf einem PI320. Bei mir treten bei den letzten Schritten leider noch Schwierigkeiten auf - ich habe die Fragen dazu mit einem % Zeichen markiert:

sudo -s
% Ich habe Windows beim Partitionieren entfernen lassen, dadurch ist EXT4 partition /dev/mmcblk0p2 hier. Könnte das noch andere Seiteneffekte gehabt haben?
mount /dev/mmcblk0p5 /mnt
% Der Installer hat eine EFI boot partition neu erstellt. Das hier muss /mnt/boot/efi heissen, nicht /mnt/boot, korrekt? Siehe Frage dazu weiter unten:
mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf
chroot /mnt /bin/bash
apt-get update
apt-get -y remove grub-efi-amd64
% Die Installation von 32bit EFI GRUB lief durch, allerdings brach die Konfiguration mit einer Fehlermeldung ab. Beim 2. Versuch (nachdem das Booten nicht geklappt hat) habe ich /dev/mmcblk0p1 auf /mnt/boot gemounted (ohne /efi). Dann ohne Fehlermeldung, aber immernoch ohne erfolgreichen boot
apt-get -y install grub-efi-ia32
% Das war revision -28 beim aktuellen 14.10 Desktop installer, aber sonst kein Unterschied
sed -i 's/vmlinuz-3.16.0-23-generic.efi.signed/vmlinuz-3.16.0-23-generic/g' /boot/grub/grub.cfg

Falls jemand den Inhalt von /mnt/boot und /mnt/boot (die Ausgabe von ls) posten könnte, wäre mir wahrscheinlich schon sehr geholfen, da ich prüfen kann wo etwas schief gelaufen ist.

Avantar
10.01.15, 22:06
Hallo,
wenn ich richtig verstanden habe, sind alle Partitionen von Windows gelöscht worden.

Der interne Speicher war ja mit Windows schon voll belegt. Um Ubuntu neu zu installieren, musstest Du die Windows Partition verkleinern um Platz für Ubuntu zu bekommen.
In der obigen Anleitung ging der Autor davon aus, dass </dev/mmcblk0p5> mit installiertem Windows die erste Partition war die neu erstellt wurde vom der Ubuntu Installation.

Wenn jetzt </dev/mmcblk0p2 > die Linux Partition ist so muss man natürlich auch diese und nicht </dev/mmcblk0p5> mounten.
Der Befehl lautet dann
mount /dev/mmcblk0p2 /mnt

Du hast recht in der Annahme, dass im letzten Befehl jetzt der Kernel <vmlinuz-3.16.0-28-generic.efi.signed> genommen werden muss.
Die Befehlszeile ist dann
sed -i 's/vmlinuz-3.16.0-28-generic.efi.signed/vmlinuz-3.16.0-28-generic/g' /boot/grub/grub.cfg

Bitte starte nochmals mit dem USB-Stick zum testen Deinen Computer und gebe alle Befehle nochmals der Reihe nach an. Die beiden Zeilen die ich angesprochen habe müssen allerdings geändert werden.

Danach sollte die Installation funktionieren.

Weiterhin habe ich den neueren Kernel <3.18.0-031800-generic> installiert, dieser hat schon einige Dinge im Kernel realisiert, die für den BayTrail Prozessor notwendig sind.

qgc
11.01.15, 11:25
@Avantar: Das habe ich versucht und Ubuntu taucht auch 2x im UEFI Menu auf, aber Boot-Versuche enden damit dass er in die UEFI shell zurück fällt. Ist nach dem Ändern der Grub config noch ein tool-run nötig um diese Anzuwenden? Hat sonst jemand Tipps zum Debugging?

Avantar
11.01.15, 19:24
@Avantar: Das habe ich versucht und Ubuntu taucht auch 2x im UEFI Menu auf, aber Boot-Versuche enden damit dass er in die UEFI shell zurück fällt. Ist nach dem Ändern der Grub config noch ein tool-run nötig um diese Anzuwenden? Hat sonst jemand Tipps zum Debugging?

Hallo,
Ich habe es selbst nochmals ausbrbiert und mein System bootet anstandslos.

Du kannst nochmal versuchen die Konfuguation Grub2 zu erzeugen.
Das passiert mit
<sudo update-grub>

Viel Glück

qgc
13.01.15, 22:05
@Avantar: Danke für den cross-check. Auch der 3. Versuch hat es nicht gebracht, ich fange jetzt nochmal ganz vorne an. Welche disks hast du wenn du ls /dev/mmc* eingibst? Ich komme da noch auf zwei je 4 MB grosse boot partitionen / disks.

qgc
13.01.15, 22:11
Hier ist das offizielle Ubuntu issue:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1341944

Mansaylon
12.12.15, 17:19
Der Beitrag hier ist zwar schon etwas älter... aber hat jemand schon ein CentOS 7 64bit auf den PI320 gebracht?
Bis zu grub> komme ich..... weiter nicht.
Ich will auch nicht einen parallel Betrieb von Linux und Windows haben.... lediglich ein CentOS 7.