Frage:
Raspberry pi 3 - warum die FAT-Partition?
Jessica 6
2016-03-14 18:02:32 UTC
view on stackexchange narkive permalink

Ich fange gerade mit einem Raspberry Pi 3 mit WLAN an. Ich baue mit einem der Ubuntu-Bilder, die ich heruntergeladen habe. Nachdem ich das Image auf die SD-Karte geschrieben hatte, sah ich, dass die erste Partition FAT32 war. Warum ist das notwendig? Ich habe dasselbe auch für bootfähige USB-Sticks gesehen, konnte aber nie einen guten Grund dafür finden. Ich habe auf StackOverflow.com gepostet und mir wurde gesagt, ich sollte stattdessen hier posten. Aber ich erhielt eine etwas uninformative Antwort:

"Weil der Bootloader nur weiß, wie man Dateien aus einem FAT-Dateisystem liest"

Meine Frage lautet "Warum?". Ich meine, eine reguläre Festplatteninstallation von Linux muss dieses Spiel nicht spielen, oder?

Ich werde mir nicht die Mühe machen, eine vollständige Antwort zu geben, in der Hoffnung, dass jemand, der die technischen Details besser kennt, dies tun wird, aber diese Antwort ist im Wesentlichen richtig - sie hat mit der proprietären Festplatte / Software / Software zu tun, die das Gerät startet (ist es nicht) eine offene Plattform). Dies ist auf allen pi-Modellen unabhängig vom Betriebssystem erforderlich, und Sie können die mit Linux verbundenen Allzweck-Bootloader (z. B. GRUB) nicht verwenden.
Aber warum gilt dies nicht für Festplatteninstallationen? Wenn ich meine Linux Mint-Festplatte überprüfe, wird keine FAT32-Partition darauf angezeigt. Oder ist es mit fdisk einfach nicht sichtbar?
Ich werde klarstellen, was ich mit "das Gerät" in * "gemeint habe, es hat mit der ** proprietären ** Festplatte / Firma / Software zu tun, die das Gerät bootet (es ist keine offene Plattform)" * - das Gerät ist das Himbeer-Pi, und es ist keine Festplatte oder ein Laptop oder ein Smartphone usw. (obwohl es viel näher an der letzten als an den ersten beiden ist). Ein normaler Computer verfügt über eine konfigurierbare Firma / Software (BIOS, UEFI), die überprüft, was angeschlossen ist und von welchem ​​Gerät der Bootcode geladen werden soll. Das pi macht das auch, außer dass es nicht konfigurierbar ist und es nur eine Option gibt: die erste, fat32-basierte Partition auf der SD-Karte.
... und dort erwartet es einen proprietären (?) Bootcode. Ich glaube, dass dies rückentwickelt werden kann und wurde (es ist möglicherweise nicht einmal wirklich proprietär), aber das Hauptproblem ist, dass es nur eine Option gibt, wie es geladen wird (und wofür es später verwendet wird - ich glaube, es bootstraps * the GPU *, lädt Firmware hinein, dann lädt das einen Betriebssystemkern in RAM und die eigentliche CPU).
Ich fange an zu verstehen, aber ich habe so etwas gesehen, als ich einen bootfähigen Thumbdrive für einen Standard-PC erstellt habe: Die erste Partition ist FAT32. Ich dachte nur, dass dies der Grund dafür ist, dass es für den Himbeer-Pi genauso ist. Meine Frage bezieht sich also auch auf bootfähige Thumbdrives.
Standard-PC hat NOR-Flash mit sehr fettem Bootloader. Der Bootloader von RPI ist VIEL einfacher.
Fünf antworten:
#1
+8
GSH
2016-03-17 02:12:01 UTC
view on stackexchange narkive permalink

Wenn der BCM2837 zum ersten Mal gestartet wird, muss er seinen Code aus einem permanenten Speicher lesen. Die meisten Prozessoren sprechen dazu mit NAND-Flash (d. h. dem BIOS), da dies sehr einfach ist. Dies tun wir jedoch nicht. Stattdessen implementieren wir den Dateisystem-Lesecode im Bootrom, um eine Datei mit dem Namen bootcode.bin zu lesen und diese dann auszuführen.

Aus diesem Grund müssen wir die SD-Karte so formatieren, dass ist einfach zu implementieren. Wenn Sie sich jemals gefragt haben, wie schwierig es sein könnte, ext4 zu implementieren, schauen Sie sich die Spezifikation an ... Im Vergleich dazu habe ich den FAT-Code in ungefähr 250 Bytes geschrieben.

Das andere Problem ist das SD-Karten wurden traditionell beim Kauf mit FAT formatiert, und daher macht es keinen Sinn, etwas anderes zu implementieren. Die einzige andere Option ist exFAT, da diese Dateigrößen> 4 GB unterstützen.

Wenn Sie es mit ext4 formatieren, können Sie es nicht auf einem PC (ohne Tools von Drittanbietern) lesen, wenn Sie NTFS formatieren kann es nicht auf eine Linux-Box schreiben (tatsächlich gibt es Tools, aber sie sind nicht sehr zuverlässig), HFS ist wieder geschlossen und wird nicht gemeinsam genutzt!

FAT und exFAT sind die einzigen Dateisysteme, die im gesamten Betrieb gemeinsam sind Systeme ...

Mit FAT meinen Sie FAT32, und ich bin mir nicht sicher, ob exFAT so häufig vorkommt: "Microsoft hat die vollständige exFAT-Dateisystemspezifikation nicht offiziell veröffentlicht, und für die Erstellung und Verbreitung von exFAT-Implementierungen ist eine restriktive Lizenz von Microsoft erforderlich." [(Wiki) ] (https://en.wikipedia.org/wiki/ExFAT#Restrictive_licensing_and_software_patents).
Tatsächlich hat dies einen Einfluss darauf, warum die RPis nur Flash / USB-Geräte mit bis zu 32 GByte unterstützen können - da die größeren Geräte mit 64 GB oder mehr das proprietäre [exFAT] (https://en.wikipedia.org/wiki/ExFAT) zu beauftragen scheinen ) Dateisystem, das, wie @jiggunjer hervorhebt, in einem FOSS nicht verwendet werden kann Betriebssystem wie Raspbian ...
#2
+3
pd_au
2016-03-14 19:49:48 UTC
view on stackexchange narkive permalink

Ich vermute, dass dieses Thema den Gründen ähnelt, aus denen der Pi keine Echtzeituhr (RTC) hat oder warum er nicht über Wake im LAN gestartet werden kann. Um es einfach auszudrücken: Um Kosten zu sparen, verfügt der Pi nicht über ein normales PC-BIOS. Ein BIOS muss im Flash-ROM gespeichert sein. Das Hinzufügen eines Flash-ROM zum Pi würde Geld kosten. Das einfache Speichern des BI-Äquivalents von BIOS-Dateien in einer separaten Partition auf der SD-Karte spart Geld und ermöglicht eine einfachere und weniger riskante Aktualisierung.

Warum diese Partition in FAT32 formatiert ist, würde ich vorschlagen sehr einfache und pragmatische Kompatibilitätswahl. Die meisten Leute laufen unter Windows (ooh, ich kann alle FOSS-Eiferer kriechen hören ... Es tut mir leid, aber es ist eine Tatsache). Um zu überprüfen, ob die Startdateien erfolgreich geschrieben wurden (unter Windows, Linux oder OSX), gibt es nur eine Möglichkeit: FAT32.

Sicher, Sie können ein Programm wie Linux Reader von DiskInternals installieren, um eine ext4-Partition unter Windows zu lesen, aber das ist nur eine Menge Durcheinander mit dem durchschnittlichen Kind oder Elternteil (auf das der Pi in erster Linie abzielt) muss nicht tolerieren.

IMHO FAT wird ausgewählt, weil es sehr einfach zu implementieren ist. Es ist viel einfacher als ext2 oder xfs.
Ich denke, technisch gesehen wäre die Pi-Version eines BIOS der Code, der vor dem Lesen der ersten Partition ausgeführt wird ...
#3
  0
PaulF8080
2016-03-16 00:43:30 UTC
view on stackexchange narkive permalink

Der / boot befindet sich in dieser Partition, sodass Sie die Festplatte in einen Kartenleser auf Ihrem PC legen und Startprobleme beheben, einschließlich der Bearbeitung von /boot/config.txt .

#4
  0
HankB
2016-03-16 01:23:50 UTC
view on stackexchange narkive permalink

Der "Bootloader" (und in vielen Fällen nur der Bootloader der ersten Stufe) ist für das Laden des Codes verantwortlich, der den Rest des Betriebssystems einlädt.

In einem typischen Fall PC Das BIOS verwendet dazu Code, der sich nicht einmal in einer Festplattenpartition befindet. Im Fall von Linux wäre dies GRUB (früher LILO). Dies ist der Code, der zur Linux / Boot-Partition geht und diesen lädt und der wiederum den Rest des Betriebssystems lädt.

Auf dem Pi geht das Äquivalent des BIOS zur SD-Karte und sucht nach einer FAT-Partition, von der geladen werden kann. Soweit ich weiß, muss diese Partition möglicherweise mit einem festen Versatz auf dem Gerät vorhanden sein. Es lädt diesen Code und das ist es, was das Betriebssystem von der EXT4-Karte liest.

Ich bin mit UEFI-Ladern weniger vertraut und kann sie nicht kommentieren. Ich könnte auch in Bezug auf zwei Bootloader-Stufen nicht korrekt sein. Es kann mehr geben. Wenn Sie interessiert sind, googeln Sie den PC-Bootloader und Sie finden weitere Informationen.

#5
  0
jiggunjer
2017-01-19 18:22:25 UTC
view on stackexchange narkive permalink

Es gibt verschiedene Möglichkeiten, diese Frage zu interpretieren:

  • Warum benötigt ein einzelnes Betriebssystem zwei Partitionen? Genauer gesagt: zwei Volumes?
  • Warum erfordert diese zusätzliche Partition ein FAT32-Dateisystem im Gegensatz zu z. NTFS oder Ext4?
  • (implizite Frage?): Welche Dateien befinden sich in diesem FAT32-Dateisystem.

1. Die Antwort auf die erste ist:
Es erfordert technisch keine zwei Partitionen, nur dass die Partition mit den Startdateien FAT32 ist.
Da FAT32 nicht gut zum Ausführen geeignet ist Bei einem gesamten Betriebssystem müssen die Entwickler zwei Dateisysteme verwenden, daher zwei Partitionen. Ich glaube, Ext4 ist für Linux-Betriebssystempartitionen üblich.

2. Warum FAT32 für die Startdateien? Wir spekulieren aus folgenden Gründen:

  • Einfache / kompakte Implementierung des Dateisystemtreibers in einem Bootloader. Die meisten anderen Dateisysteme sind komplexer. Das Schreiben eines Bootloaders ist nicht einfach, insbesondere wenn Sie so viel On-Chip-NAND wie möglich minimieren müssen.

  • Andere Dateisysteme können (höhere) Lizenzkosten enthalten oder sind nicht ordnungsgemäß dokumentiert.

  • Das FAT32-Dateisystem wird von gängigen Betriebssystemen wie Windows, MacOS und Linux unterstützt. Sie müssen also keine speziellen Treiber installieren, um auf die Dateien auf der SD-Karte / dem Image zuzugreifen.

3. Die Startdateien ähneln einer lobotomierten Version von GRUB, und ich glaube, sie sind Closed Source. Es sollte alle Dateien enthalten, die zum Laden des Kernels Ihrer Wahl erforderlich sind, einschließlich der Basistreiber (die sich von den später geladenen Kerneltreibern unterscheiden oder zu diesen hinzugefügt werden können).


Bezüglich Ihre Analogien:

Ich habe dasselbe auch für bootfähige USB-Sticks gesehen, [...] eine reguläre Festplatteninstallation von Linux muss dieses Spiel nicht spielen, oder? ?

Eigentlich haben sie es getan. Und in einigen Fällen auch. Z.B. Durch die Installation von Windows 7 auf einem BIOS-Computer werden zwei Partitionen erstellt, eine 100-MB-NTFS-Partition, die Startdateien enthält. Es ist üblich, dass Linux-Computer eine separate / boot -Partition haben, die die Bootloader- (z. B. GRUB) und Kernel + -Treiberdateien enthält. Die Trennung ist nicht unbedingt erforderlich, da diese Bootloader den MBR verwenden. Die Verwendung des MBR ist jedoch "hackiger" als die Verwendung eines geeigneten Dateisystems. Aus diesem Grund bevorzugt die neuere UEFI-Boot-Firmware auch ein separates FAT-Dateisystem für Boot-Dateien (was Sie wahrscheinlich auf Ihrem USB-Stick gesehen haben).



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...