Benötige ich ein Dateisystem, wenn ich keine Daten speichern möchte?


8

Ich habe hier eine Frage gestellt. Ist ein Dateisystem obligatorisch?

Einer der Kommentare ist:

Wie würde ein System ohne Dateisystem unter Linux funktionieren, da selbst ein Drucker oder eine Ethernet-Karte als Datei betrachtet wird? Was ist dein Ziel hier? ... Kiwy 24. Februar um 14:18 Uhr

Hier ist eine Protokollmeldung beim Booten von Linux ohne Dateisystem (das am Ende hängt):

    [Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] U-Boot 2013.07 (Apr 08 2014 - 14:27:03)
[Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] Memory: ECC disabled
[Tue Apr 08 20:07:18.298 2014] DRAM:  1 GiB
[Tue Apr 08 20:07:18.308 2014] SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
[Tue Apr 08 20:07:18.341 2014] *** Warning - bad CRC, using default environment
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] In:    serial
[Tue Apr 08 20:07:18.341 2014] Out:   serial
[Tue Apr 08 20:07:18.341 2014] Err:   serial
[Tue Apr 08 20:07:18.341 2014] U-BOOT for Xilinx-ZC702-14.7
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
[Tue Apr 08 20:07:18.697 2014] Linux
[Tue Apr 08 20:07:18.697 2014]      Load Address: 0x00008000
[Tue Apr 08 20:07:18.697 2014]      Entry Point:  0x00008000
[Tue Apr 08 20:07:18.697 2014]    Verifying Hash Integrity ... OK
[Tue Apr 08 20:07:18.697 2014] ## Loading fdt from FIT Image at 01000000 ...
[Tue Apr 08 20:07:18.697 2014]    Using 'conf@1' configuration
[Tue Apr 08 20:07:18.697 2014]    Trying 'fdt@1' fdt subimage
[Tue Apr 08 20:07:18.697 2014]      Description:  Flattened Device Tree blob
[Tue Apr 08 20:07:18.697 2014]      Type:         Flat Device Tree
[Tue Apr 08 20:07:18.697 2014]      Compression:  uncompressed
[Tue Apr 08 20:07:18.697 2014]      Data Start:   0x0111d344
[Tue Apr 08 20:07:18.697 2014]      Data Size:    11179 Bytes = 10.9 KiB
[Tue Apr 08 20:07:18.697 2014]      Architecture: ARM
[Tue Apr 08 20:07:18.697 2014]      Hash algo:    crc32
[Tue Apr 08 20:07:18.697 2014]      Hash value:   a7a92b47
[Tue Apr 08 20:07:18.697 2014]      Hash algo:    sha1sha1+ OK
[Tue Apr 08 20:07:18.702 2014]    Booting using the fdt blob at 0x111d344
[Tue Apr 08 20:07:18.702 2014]    UncomprOK
[Tue Apr 08 20:07:18.702 2014]    Loading Device Tree to 07ffa000, end 07fffbaa ... OK
[Tue Apr 08 20:07:18.702 2014] 
[Tue Apr 08 20:07:18.702 2014] Starting kernel ...
[Tue Apr 08 20:07:18.702 2014] 
[Tue Apr 08 20:07:19.453 2014] u @c0a7b000 s5568 r8192 d14912 u32768
[Tue Apr 08 20:07:19.453 2014] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
[Tue Apr 08 20:07:19.453 2014] Kernel command line: root=mtd:jffs2 rw rootfstype=jffs2 console=ttyPS0,115200
[Tue Apr 08 20:07:19.453 2014] PID hash table entries: 4096 (order: 2, 16384 bytes)
[Tue Apr 08 20:07:19.453 2014] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[Tue Apr 08 20:07:19.453 2014] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[Tue Apr 08 20:07:19.453 2014] __ex_table already sorted, skipping sort
[Tue Apr 08 20:07:19.453 2014] Memory: 1024MB = 1024MB total
[Tue Apr 08 20:07:19.453 2014] Memory: 1036960k/1036960k available, 11616k reserved, 270339 16




[Tue Apr 08 20:07:19.625 2014] I reach build/linux/kernel/xlnx-3.8/source/net/socket.c:





[Tue Apr 08 20:07:19.625 2014] DMA: preallocated 256 KiB pool for atomic coherent allocations
[Tue Apr 08 20:07:19.625 2014] xgpiops e000a000.ps7-gpio: gpio at 0xe000a000 mapped to 0xf004e000
[Tue Apr 08 20:07:19.625 2014] GPIO IRQ not connected
[Tue Apr 08 20:07:19.625 2014] XGpio: /amba@0/gpio@41220000: registered, base is 255
[Tue Apr 08 20:07:19.625 2014] GPIO IRQ not connected
[Tue Apr 08 20:07:19.625 2014] XGpio: /amba@0/gpio@41200000: registered, base is 251
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new interface driver usbfs
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new interface driver hub
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new device driver usb
[Tue Apr 08 20:07:19.625 2014] Switching to clocksoutyPS0 at MMIO 0xe0001000 (irq = 82) is a xuartps
[Tue Apr 08 20:07:19.629 2014] console [ttyPSxusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000
[Tue Apr 08 20:07:19.670 2014] xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00
[Tue Apr 08 20:07:19.675 2014] hub 1-0:1.0: USB hub found
[Tue Apr 08 20:07:19.675 2014] hub 1-0:1.0: 1 port detected
[Tue Apr 08 20:07:19.681 2014] xi2cps e0004000.ps7-i2c: 400 kHz mmio e0004000 irq 57
[Tue Apr 08 20:07:19.686 2014] xadcps f8007100.ps7-xadc: enabled:   yes reference:  external
[Tue Apr 08 20:07:19.709 2014] xwdtps f8005000.ps7-wdt: Xilinx Watchdog Timer at f00ea000 with timeout 10s
[Tue Apr 08 20:07:19.709 2014] sdhci: Secure Digital Host Controller Interface driver
[Tue Apr 08 20:07:19.709 2014] sdhci: Copyright(c) Pierre Ossman
[Tue Apr 08 20:07:19.709 2014] sdhci-pltfm: SDHCI platform and OF driver helper
[Tue Apr 08 20:07:19.729 2014] usbcore: registered new interface driver usbhid
[Tue Apr 08 20:07:19.729 2014] usbhid: USB HID core driver


[Tue Apr 08 20:07:19.729 2014]  I am at build/linux/kernel/xlnx-3.8/source/drivers/hid/usbhid/hid-core.c



[Tue Apr 08 20:07:19.729 2014] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[Tue Apr 08 20:07:19.781 2014] MTD: MTD device with name "jffs2" not found.
[Tue Apr 08 20:07:19.781 2014] List of all partitions:
[Tue Apr 08 20:07:19.781 2014] No filesystem could mount root, tried:  jffs2
[Tue Apr 08 20:07:19.781 2014] Kernel panic - not syncing: VFS: Unable to mount root fs on mtd:jffs2
[Tue Apr 08 20:07:19.781 2014] CPU1: stopping
[Tue Apr 08 20:07:19.781 2014] Backtrace: 
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c0011094>] from [<c01c6408>]
[Tue Apr 08 20:07:19.781 2014]  r6:c0246418 r5:00000000 r4:00000001 r3:60000193
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c01c63f0>] from [<c0011fbc>]
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c0011f78>] from [<c0012270>]
[Tue Apr 08 20:07:19.781 2014]  r4:c0247ef4 r3:c0011f78
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c001220c>] from [<c00084e4>]
[Tue Apr 08 20:07:19.781 2014]  r5:ef07bf68 r4:f8f00100
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c0008484>] from [<c000da00>]
[Tue Apr 08 20:07:19.824 2014] Exception stack(0xef07bf68 to 0xef07bfb0)
[Tue Apr 08 20:07:19.824 2014] bf60:                   c0a838d0 00000000 00000003 00000000 ef07a000 c01cd528
[Tue Apr 08 20:07:19.824 2014] bf80: ef07a000 c025c418 0000406a 413fc090 00000000 ef07bfbc ef07bfc0 ef07bfb0
[Tue Apr 08 20:07:19.824 2014] bfa0: c000e94c c000e950 60000113 ffffffff
[Tue Apr 08 20:07:19.824 2014]  r6:ffffffff r5:60000113 r4:c000e950 r3:c000e94c
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c000e924>] from [<c000eacc>]
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c000ea40>] from [<c01c4208>]
[Tue Apr 08 20:07:19.824 2014]  r5:00000001 r4:c024cf68
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c01c4118>] from [<001c37c8>]
[Tue Apr 08 20:07:19.844 2014]  r6:10c03c7d r5:00000015 r4:2f06406a r3:c01c37b0
[Tue Apr 08 20:07:19.844 2014] MTD: MTD device with name "jffs2" not found.
[Tue Apr 08 20:07:19.844 2014] List of all partitions:
[Tue Apr 08 20:07:19.844 2014] No filesystem could mount root, tried:  jffs2
[Tue Apr 08 20:07:19.844 2014] Kernel panic - not syncing: VFS: Unable to mount root fs on mtd:

Ich boote von Flash.

Aus dem Protokoll geht hervor, dass viele der Treiber bereits geladen sind, obwohl das Laden des Dateisystems fehlgeschlagen ist (weil ich das Dateisystem rootfs.jffs2 absichtlich nicht in Flash eingefügt habe).

Nun, unter Bezugnahme auf den obigen Kommentar, wenn alles Datei unter Linux ist, warum werden Treiber erfolgreich geladen? Sie können sehen, USB, GPIO, SD alles kommt, bevor es nach Dateisystem fragt (und fehlgeschlagen).

Ist es technisch korrekt, das zu sagen?

Linux muss ein Dateisystem haben

Hintergrundinformationen Ich versuche, Linux auf einem System auszuführen, auf dem eine Steuerungsanwendung ausgeführt wird. Die Anwendung erfasst nur einige Daten und sendet sie an einige Slaves. Es ist überhaupt keine Frage der Speicherung von Daten. Also möchte das Dateisystem komplett loswerden. Nach meinem Verständnis ist ein Dateisystem zum Speichern von Daten erforderlich. Da ich keine Daten speichern werde, warum also ein Dateisystem haben und die Ressourcennutzung erhöhen?

Aktualisieren

Ich habe dies zwar im Hintergrund erwähnt , aber um genau zu sein, würde das Senden der Daten über USB oder Ethernet erfolgen, so dass es natürlich ist, entsprechende Treiber zu haben.


1
Schön zitiert zu werden B-)
Kiwy

Wo möchten Sie Ihre Steuerungsanwendung speichern?
el.pescado

@ el.pescado an der gleichen Stelle, an der ich das Betriebssystem behalten werde, im Grunde Flash-Speicher.
user2799508

@ user2799508 in initrd?
el.pescado

Antworten:


15

Wenn Sie Linux benötigen, benötigen Sie ein Dateisystem.

(Ich meine hier Linux als Betriebssystem und nicht Linux als Betriebssystemkernel. Ich werde weiter unten auf diese engere Interpretation eingehen.)

Ihre Beobachtung, dass Gerätetreiber beim Booten geladen werden, bevor das Dateisystem vorhanden ist, ist ein roter Hering. Sie können einen Treiber ohne Dateisystem laden. Was Sie nicht tun können, ist fd = open("/dev/foo", O_RDONLY)ohne ein Dateisystem.

Dies bedeutet nicht, dass Sie ein dauerhaft wiederbeschreibbares Speichermedium benötigen, das mit einem herkömmlichen Dateisystem formatiert ist, wie in Ihrem JFFS2-Beispiel. Alles, was Sie zur Unterstützung eines herkömmlichen /devBaums benötigen, ist eine Datenstruktur, die sich wie ein Dateisystem auf der Festplatte verhält . Moderne Linuxes verwenden udev in einem speicherinternen Dateisystem, um den Zugriff auf /devKnoten zu ermöglichen, ohne beispielsweise dauerhaften Speicher für die /devKnoten zu benötigen .

Sie benötigen außerdem ein Dateisystem, um verschiedene andere Funktionen von Linux-the-OS nutzen zu können:

  • Benötigen Sie gemeinsam genutzte Bibliotheken oder Skriptsprachenmodule? Sie benötigen ein Dateisystem zu speichern /lib/libfoo.*, /usr/lib/perl5/*, /lib/ld.so, /etc/ld.so.cache, usw.

  • Benötigen Sie ladbare Kernelmodule? Sie benötigen ein Dateisystem für/lib/modules/$(uname -r)/*

  • Benötigen Sie mehr als eine ausführbare Datei wie eine Shell oder einen Texteditor? Sie brauchen ein Dateisystem, in dem sie leben können.

  • Benötigen Sie den Kernel, um die Zugriffskontrolle zu erzwingen? Das meiste davon erfolgt über Berechtigungsbits , ACLs und SELinux-Labels in einer Datei oder einem Verzeichnis.

Ich könnte mir wahrscheinlich weitere Beispiele einfallen lassen, aber das wird reichen.

Es ist möglich, alle Ressourcen, die Ihr System benötigt, aus dem dauerhaften Speicher in den Arbeitsspeicher zu laden, sodass das System nach dem Start überhaupt keinen dauerhaften Speicher verwendet. Live-Linux-Distributionen tun dies. Es ist auch üblich, dass eingebettete Linux-Betriebssysteme beim Booten ihr gesamtes Dateisystem im RAM erstellen, sodass sie nach dem Booten nicht mehr auf persistenten Speicher wie ein Flash-Speichergerät verweisen .

Wenn Sie ein eingebettetes Single-Purpose-Single-Task-Embedded-System mit engem Umfang erstellen, benötigen Sie wahrscheinlich kein Linux-the-OS. Möglicherweise benötigen Sie nur ein kleineres, weniger funktionsfähiges Embedded-Betriebssystem , oder Sie können direkt auf das Metall schreiben .

Einige der anderen Antworten hier sprechen davon, Linux bis zu dem Punkt zu reduzieren, an dem Sie nur noch Linux-the-Kernel übrig haben, entweder gepaart mit einer einzelnen ausführbaren Datei - Ihrem Programm, das unter dem Kernel ausgeführt wird - oder als monolithisches Programm mit Ihr Code ist statisch darin enthalten. In beiden Fällen können Sie sich völlig von der Notwendigkeit eines Dateisystems lösen, aber am Ende haben Sie nicht mehr Linux-the-OS.


4
Benötigen Sie gemeinsam genutzte Bibliotheken? Nein - Sie können statische Binärdateien verwenden. Benötigen Sie ladbare Module? Nein - Sie können einen monolithischen Kernel kompilieren. Benötigen Sie mehr als eine ausführbare Datei? Nein - steck alles rein init. Oh, aber wo würde initgeladen werden? Bingo!
Gilles 'SO - hör auf böse zu sein'

1
@ Gilles: Gehen Sie diesen Weg weit genug, und Sie erhalten Achmeds Antwort und das daraus resultierende Problem.
Warren Young

1
Nein, es gibt einen großen Unterschied zwischen initdem Kernel und dem Ändern des Kernels, um etwas anderes als das Laden zu tun init.
Gilles 'SO - hör auf böse zu sein'

Ich kenne. Sie beschreiben den letzten Schritt auf dem Weg zu Achmeds Antwort. Ich warne nur vor einer möglichen Konsequenz, wenn die Idee zu weit geht.
Warren Young

Ich bin nicht einverstanden mit der Idee, dass es überhaupt zu weit gehen kann . Der gesamte Punkt eines Open-Source-Kernels besteht darin, dass seine Quelle offen für Änderungen ist. Das Anpassen von Open-Source-Software an alternative Zwecke ist der Zweck von Open-Source-Software. Wenn Sie einen schlechten Job machen oder wenn Ihr Zweck zu einzigartig ist, sterben Ihre Änderungen mit Ihnen, aber wenn sich Ihre Änderung lohnt, werden andere von Ihren Bemühungen profitieren und Sie wahrscheinlich von ihren, wenn sie ihre eigenen beitragen.
Mikesserv

7

Ich habe eine Antwort auf eine verwandte Frage geschrieben , in der detailliert beschrieben wird, wie das Konzept einer Datei für die Funktionsweise von Unix von zentraler Bedeutung ist. Da Sie keine Datei ohne ein Dateisystem haben können, benötigen Sie auf jeden Fall eine.

Jedoch ist es möglich , ohne ein Dateisystem , um zu überleben , die auf jedem persistente Speichermedien vorhanden ist . Ihr initramfsImage kann in den Kernel selbst kompiliert werden (oder auf andere Weise an einem Ort abgelegt werden, an dem der Bootloader darauf zugreifen kann). Technisch gesehen ist das Bild, das auf Speichermedien geschrieben wird, ein Archiv und kein Dateisystem. es wird erst so, nachdem es geladen wurde. Wenn Sie alle benötigten Binärdateien darin ablegen, müssen Sie sie nicht in einem Dateisystem auf Speichermedien ablegen. Auf diese Weise können Sie sicherstellen, dass alle erforderlichen Dateisysteme, die das System ausführen muss, nur im Speicher vorhanden sind.

Die Nachteile sind natürlich, dass Sie möglicherweise nicht genug für das haben, was Sie tun möchten, da alles, was das System benötigt, im Speicher vorhanden sein muss. Außerdem fällt es Ihnen schwer, Daten zu schreiben, die Sie nach einem Neustart beibehalten möchten.


Ein sehr wichtiger Punkt bei initramfsBildern ist, dass Sie nicht nur auf 1 beschränkt sind. Einfach ein cpioweiteres Bild auf dem ersten und Sie können loslegen. ODER kompilieren Sie im ersten und fügen Sie den Rest nach dem Start hinzu. Die Möglichkeiten sind endlos. Beachten Sie auch, dass es nicht unvorstellbar ist, Änderungen auf diese Weise zu speichern , da die cpioTools im Kernel enthalten sind. Sie können das gespeicherte cpioImage jedoch nur auf ein unformatiertes Gerät schreiben , wenn Sie kein anderes Dateisystem haben.
Mikesserv

Technisch gesehen wird das cpioImage auch nicht zu einem Dateisystem, sondern wird in ein Dateisystem entpackt - initramfsoder rootfswie Sie es bevorzugen.
Mikesserv

5

Eigentlich brauchen Sie technisch gesehen kein Dateisystem. Das Standardverhalten besteht darin, über ein Dateisystem zu verfügen, von dem aus gestartet werden kann. (zB /sbin/initwird von dort aus gestartet). Wenn Sie jedoch möchten , können Sie sehen , was passiert in do_basic_setup()in linux-source/init/main.c. Wenn diese Routine aufgerufen wird, sind der Kernel und die CPU0 für die eigentliche Arbeit bereit. Sie können die gesamte Arbeit, die zum Booten von initramfs erforderlich ist, vernichten - auch ein Dateisystem! - und alles danach und ersetzen Sie es durch Ihren eigenen Code, um ohne die Dateisysteme zu arbeiten.

Sie können dann Kernel-Threads verwenden , um die gewünschten Prozesse zu erzeugen. All dies wäre jedoch super hässlich.


1
Während dies alles wahr ist, würde es nicht so ziemlich erfordern, dass Sie Ihr System GPL? Sie können die Lizenzierungslücke für Kernelmodule nicht verwenden, da kein Dateisystem keine dynamisch ladbaren Kernelmodule bedeutet.
Warren Young

+1 für prägnant, technisch korrekt und die einzige Antwort, um die Frage bisher richtig zu beantworten. Linux ist nur eine Codebasis. Sie können es verwenden, wie Sie möchten, einschließlich der Notwendigkeit vieler grundlegender Komponenten.
Vality

@Ahmed Masud Meinst du, ich brauche noch ein Dateisystem - initramfs? (Ich brauche jedoch Ethernet und USB in meiner Anwendung)
user2799508

@mikeserv, Kernel vor 2.6 brauchen initramfssie nicht - sie verwenden initrd.
Graeme

@Graeme Dies ist auch wahr, wie ich weiß und mich sogar an anderer Stelle auf dieser Seite notiert habe. Ich neige dazu, aktueller zu denken, auch wenn dies ein Trugschluss ist. Aber zu meiner Verteidigung bin ich nicht allein. Sogar OpenWRT verwendet seit mehreren Jahren 2.6+, trotz der ursprünglichen Broadcom-Treiber, die ihm ursprünglich einen Zweck gaben, und eines Namens, der nie ein offiziell 2.6-kompatibles Update sah.
Mikesserv

1

Ein Dateisystem bietet mehr als nur einen Speicherort für Dateien. Hier befinden sich die ausführbaren Dateien (Programme), Bibliotheken und Konfigurationsdateien für Ihr System. Der Linux-Kernel benötigt mindestens ein Dateisystem, damit er den " init " -Prozess finden / ausführen kann, der dafür verantwortlich ist, dass andere Prozesse entsprechend Ihrem System gestartet werden.

In Bezug auf alles, was eine Datei ist , bedeutet dieser Ausdruck, dass Linux / Unix-Systeme über eine Dateiabstraktion Zugriff auf Geräte, Ressourcen und Dateien gewähren. Das bedeutet, dass es zu (fast!) Alles eine konsistente (Öffnen, Schließen, Lesen, Schreiben, ...) Schnittstelle gibt.

Ihre Verwechslung mit Gerätetreibern entsteht, weil Sie die Quelle der Gerätetreiberanweisungen mit den tatsächlichen ausführbaren Maschinenanweisungen verwechseln, die den Gerätetreiber implementieren. In dem von Ihnen angegebenen Beispiel sind die Gerätetreiber direkt in den Kernel integriert und können ausgeführt werden, sobald das Kernel-Image in den Speicher geladen wurde. Wenn die Gerätetreiber als Module erstellt wurden , sind sie in Dateien im Dateisystem enthalten, und die Anweisungen des ausführbaren Computers werden aus der Datei in den Kernelspeicher geladen, wo sie ausgeführt werden. Sobald der Gerätetreiber geladen ist und ausgeführt wird, werden die von ihm gesteuerten Geräte in der Regel in / dev über das Dateisystem verfügbar.

Sobald der Kernel den Init-Prozess ausführt und alle untergeordneten Elemente auf die Datei zugreifen müssen, um mit anderen Prozessen zu interagieren, auf Geräte zuzugreifen, virtuellen Speicher anzufordern, Zufallszahlenquellen abzurufen und Nachrichten aneinander zu senden. Dies erfolgt hauptsächlich über den Dateisystemzugriff. Das Senden / Empfangen über das Netzwerk ist eine Ausnahme von der Anforderung des Dateisystemzugriffs, aber Sie werden wahrscheinlich ohnehin sehr schnell auf ein Dateisystem zugreifen müssen.

In Anbetracht Ihres Anwendungsfalls sollten Sie eine kleine konfigurierbare Distribution wie OpenWrt verwenden . Damit können Sie ein System erstellen, auf dem nur eine minimale Menge an Software installiert ist und das im Wesentlichen aus dem RAM ausgeführt wird, ohne dass etwas in einen stabilen Speicher geschrieben werden muss. Sobald Sie dies ausgeführt haben, können Sie nicht benötigte Komponenten jederzeit entfernen, aber unterschätzen Sie nicht die Hilfe, die eine Distribution mit Debugging-Tools und einer aktiven Benutzerbasis bietet.


0

Dateisysteme sind ein Mittel für Betriebssysteme, um dauerhaft gespeicherte Daten zu organisieren. Insbesondere ermöglichen sie dem Betriebssystem das effiziente Speichern und Abrufen von Daten. Wenn Sie sagen, dass Sie von einem Flash-Laufwerk gebootet haben, bedeutet dies, dass dieses Flash-Laufwerk mit Sicherheit über ein Dateisystem verfügt. Die Tatsache, dass der Kernel einen Treiber geladen hat, bedeutet, dass er eine Möglichkeit gehabt haben muss, ihn irgendwo zu finden. Dieses "irgendwo finden" wird vom Dateisystem erreicht. Aber selbst wenn der Kernel monolithisch ist und alles kompiliert hat, muss zumindest der Bootloader eine Möglichkeit gehabt haben, den Kernel zu finden.

Theoretisch könnten Sie dies ohne ein ausgeklügeltes Dateisystem tun, indem Sie einfach alles an einem festen Ort ablegen und diesen Ort fest codieren. Aber welchen Zweck würde das erfüllen? Und wir sprechen noch nicht über Ihre Datendateien wie E-Mails und alles andere. Ohne ein Dateisystem gibt es keine gute Möglichkeit, diese zu speichern (und später zu finden). Selbst wenn Sie keine Datei speichern möchten, ist das Betriebssystem mehr als nur der Kernel. Es enthält verschiedene Dienste und Benutzerlandprogramme, die in Dateien gespeichert sind.

Um es kurz zu machen, Sie müssen irgendwo ein Dateisystem haben, denn wenn der Kernel keines findet (wie in Ihrem Beispiel), gerät er in Panik (wie Ihr Protokoll zeigt) - was bedeutet, dass er sich weigert, etwas zu tun. Wenn die Ausführung einer Linux-Installation von einem Flash-Laufwerk (mit einem Dateisystem) Ihren Anforderungen entspricht, benötigen Sie kein Dateisystem auf der Festplatte oder anderswo.


1
Unixy-Betriebssysteme verwenden das Dateisystem nicht nur für persistente Daten. Es gibt impersistent Bäume (devfs /proc, /sys...), es ist das Rückgrat der meisten Zugriffskontrolle usw.
Warren Young

/ proc und / sys sind nur Helfer, das System könnte im Prinzip ohne sie gut funktionieren. / sys ist linuxspezifisch, / proc könnte wie FreeBSD durch sysctl ersetzt werden.
Gegenmodus

0

Wenn das Linux-Betriebssystem funktionieren soll, muss es über ein Dateisystem verfügen.

Es ist jedoch nicht erforderlich, dass sich das Dateisystem auf einer Festplatte (oder einer SSD usw.) befindet. Tatsächlich ist es nicht einmal erforderlich, dass Linux überhaupt auf dem Gerät installiert ist.

Sie können das BOOTP-Protokoll verwenden, um das Betriebssystem über das Netzwerk zu laden. Sie benötigen jedoch ziemlich viel RAM, damit dies effektiv ist. Der Bootloader ist ein Standard-ROM auf der Netzwerkkarte. Alles andere wird über das Netzwerk übertragen und in einem virtuellen Dateisystem gespeichert, das im RAM erstellt wird.

Für ein dediziertes Gerät ist es jedoch besser, einen Flash-Speicher mit dem Äquivalent einer USB Live Boot-Diskette zu installieren und Ihr Programm von dort aus auszuführen. Es hört sich so an, als würden Sie bereits versuchen, so etwas zu tun. Wenn Sie von einer Flash-Disk oder einem ROM ausgeführt werden, wird auch ein virtuelles Dateisystem im RAM erstellt. Sie benötigen jedoch weniger RAM als bei Verwendung der BOOTP-Methode.

Im Gegensatz zu Ubuntu verwendet Debian ein Hybrid-Boot-Image, das mit dd direkt auf ein USB-Flash-Laufwerk kopiert werden kann. Dies ist möglicherweise einfacher zu handhaben, insbesondere da Ubuntu die Verwendung eines speziellen Programms zum Erstellen des bootfähigen USB erfordert und dieses Programm dies ist etwas fehlerhaft.

Sie können einem Betriebssystem-Image mithilfe verschiedener Tools eigene Programme hinzufügen, um die ISO als Lese- / Schreibdateisystem bereitzustellen. Sie können rc.local verwenden, um das Programm zu starten. Beachten Sie jedoch, dass rc.local beim Start mehrmals ausgeführt wird. Sie können auch ein Skript /etc/init.d/ erstellen, dies ist jedoch komplizierter.

Zusammenfassend: Ihr Programm benötigt kein Dateisystem, das Betriebssystem jedoch, es wird jedoch keine tatsächliche / physische Festplatte benötigt.


0

Frühere Computer (und einige moderne eingebettete Systeme) haben kein Dateisystem. Mein Apple] [(und das Commodore PET der Schule) hatte das Betriebssystem im ROM und war bereit, etwa 2 Sekunden nach einem Kaltstart zu rollen. Möchten Sie Software laden? Geben Sie die Quelle entweder manuell ein oder geben Sie LOAD ein, drücken Sie die Eingabetaste und spielen Sie dann auf dem Bandgerät. Dann haben wir ein Laufwerk bekommen - und es gab viel Freude.

Der Kern von Linux setzt jedoch voraus, dass ein Dateisystem vorhanden ist, und fast alles andere baut darauf auf. Wenn Sie ein echtes Betriebssystem ohne Dateisystem implementieren möchten, ist dies sicherlich möglich, aber Ihre Hardware und Ihr Betriebssystem müssen beide auf dem Konzept basieren.

Apples Methode bestand darin, das Betriebssystem in den letzten 16 KB Speicher zu verkabeln. Der Prozessor (MC6502) war fest verdrahtet, um zu dem Speicherort zu springen, der permanent in den letzten 2 Byte Speicher gespeichert war.


-3

Nein, Linux muss kein Dateisystem im engeren Sinne haben. In Ihrem Fall haben Sie ein anderes Problem.

"Kein Dateisystem konnte root mounten, versucht: jffs2" "MTD: MTD-Gerät mit dem Namen" jffs2 "nicht gefunden."

Ich vermute, ein Teil des Ladevorgangs besteht darin, entweder keinen / den Ort zum Mounten zu finden oder dieses Dateisystem nicht mounten zu können.


2
Ihre Antwort lautet "Sie benötigen kein Dateisystem, aber Ihr Problem ist, dass Sie ein Dateisystem benötigen". Es macht keinen Sinn und ist intern nicht konsistent.
Casey

Ich verstehe das nicht ... dieser Fehler ist, weil es kein Dateisystem zum Mounten gibt, weil er kein Dateisystem hat. Der Mounter funktioniert einwandfrei, er hat nur keine gültigen fs auf seiner Flash-Disk.
Vality
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.