Ai-je besoin d'un système de fichiers lorsque je ne veux pas stocker de données

8

J'ai posé une question ici Est-il obligatoire d'avoir un système de fichiers

L'un des commentaires est le suivant:

comment un système sans système de fichiers fonctionnerait-il sur linux, car même une imprimante ou une carte Ethernet est considérée comme un fichier? Quel est votre objectif ici? ... Kiwy 24 février à 14:18

Voici maintenant un message de log lors du démarrage de linux sans système de fichiers (qui se bloque à la fin):

    [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:

Je démarre à partir du flash.

Maintenant, à partir du journal, il est très clair que de nombreux pilotes sont déjà chargés même si le chargement du système de fichiers a échoué (car je n'ai pas intentionnellement mis le système de fichiers rootfs.jffs2 en flash).

En se référant maintenant au commentaire ci-dessus, si tout est fichier sous Linux, comment se fait-il que les pilotes soient chargés avec succès? Vous pouvez voir USB, GPIO, SD tout arrive avant qu'il ne demande le système de fichiers (et a échoué).

Est-il donc techniquement correct de dire que

Linux DOIT avoir un système de fichiers

Contexte Ce que j'essaie de réaliser est de faire fonctionner Linux sur un système où une application de contrôle sera exécutée. L'application capture simplement certaines données et les envoie à certains esclaves. Il n'est pas du tout question de stocker des données. Je voudrais donc me débarrasser complètement du système de fichiers. Selon ma compréhension, le système de fichiers est requis pour le stockage des données et puisque je ne stocke aucune donnée, alors pourquoi avoir un système de fichiers et augmenter l'utilisation des ressources?

Mise à jour

Bien que je l'ai mentionné en arrière - plan , mais pour être précis, l'envoi des données aurait lieu via USB ou Ethernet, il est donc naturel d'avoir des pilotes correspondants.

user2799508
la source
1
Agréable d'être cité B-)
Kiwy
Où souhaitez-vous stocker votre application de contrôle?
el.pescado
@ el.pescado au même endroit où je garderai le système d'exploitation, essentiellement la mémoire flash.
user2799508
@ user2799508 dans initrd?
el.pescado

Réponses:

15

Si vous avez besoin de Linux, vous avez besoin d'un système de fichiers.

(Je veux dire Linux le système d'exploitation ici, plutôt que Linux le noyau du système d'exploitation. J'arriverai à cette interprétation plus étroite ci-dessous.)

Votre observation sur le chargement des pilotes de périphérique au démarrage avant que le système de fichiers n'existe est un hareng rouge. Vous pouvez charger un pilote sans avoir de système de fichiers. Ce que vous ne pouvez pas faire, c'est fd = open("/dev/foo", O_RDONLY)sans système de fichiers.

Cela ne signifie pas que vous avez besoin d'un support de stockage réinscriptible persistant formaté avec un système de fichiers traditionnel, comme avec votre exemple JFFS2. Tout ce dont vous avez besoin pour prendre en charge une /devarborescence traditionnelle est une structure de données qui se comporte comme un système de fichiers sur disque. Les Linux modernes utilisent udev sur un système de fichiers en mémoire pour permettre l'accès aux /devnœuds sans avoir besoin d'un stockage persistant pour les /devnœuds, par exemple.

Vous avez également besoin d'un système de fichiers pour utiliser plusieurs autres capacités de Linux-the-OS:

  • Besoin de bibliothèques partagées ou de modules de langage de script? Vous avez besoin d' un système de fichiers pour stocker /lib/libfoo.*, /usr/lib/perl5/*, /lib/ld.so, /etc/ld.so.cache, etc.

  • Besoin de modules de noyau chargeables? Vous avez besoin d'un système de fichiers pour/lib/modules/$(uname -r)/*

  • Besoin de plus d'un exécutable, comme un shell ou un éditeur de texte? Ils ont besoin d'un système de fichiers pour vivre.

  • Besoin du noyau pour appliquer le contrôle d'accès? La plupart de cela se fait via des bits d'autorisation , des ACL et des étiquettes SELinux sur un fichier ou un répertoire quelque part.

Je pourrais probablement trouver d'autres exemples, mais cela suffira.

Il est possible de charger toutes les ressources dont votre système a besoin à partir du stockage persistant dans la RAM, de sorte qu'une fois démarré, le système n'utilise pas du tout de stockage persistant. Les distributions Linux en direct le font. Il est également courant que les systèmes d'exploitation Linux intégrés construisent l'intégralité de leur système de fichiers dans la RAM au démarrage, de sorte qu'une fois démarrés, ils ne continuent plus de référencer le stockage persistant tel qu'un périphérique de stockage flash .

Si vous construisez un système intégré à tâche unique à portée étroite, vous n'avez probablement pas besoin de Linux-the-OS. Vous n'aurez peut-être besoin que d'un système d'exploitation intégré plus petit et moins fonctionnel , ou vous pourrez peut-être écrire directement sur le métal .

Certaines des autres réponses ici parlent de dépouiller Linux au point où il ne vous reste que Linux-le-noyau, soit associé à un seul exécutable - votre programme, exécuté sous le noyau - ou exécuté comme un programme monolithique avec votre code incorporé statiquement en son sein. Quoi qu'il en soit, vous pouvez vous éloigner complètement de la nécessité d'un système de fichiers, mais vous ne vous retrouvez plus avec Linux-the-OS.

Warren Young
la source
4
Besoin de bibliothèques partagées? Non - vous pouvez utiliser des binaires statiques. Besoin de modules chargeables? Non - vous pouvez compiler un noyau monolithique. Besoin de plus d'un exécutable? Nah - tout mettre dedans init. Oh, mais où serait initchargé? Bingo!
Gilles 'SO- arrête d'être méchant'
1
@ Gilles: Allez assez loin dans cette voie, et vous vous retrouvez avec la réponse d'Achmed et le problème qui en résulte.
Warren Young
1
Non, il y a une énorme différence entre avoir initet modifier le noyau pour faire autre chose que charger init.
Gilles 'SO- arrête d'être méchant'
Je connais. Vous décrivez la dernière étape de la progression vers la réponse d'Achmed. Je vous préviens simplement d'une conséquence potentielle de l'idée d'aller trop loin.
Warren Young
Je ne suis pas d'accord avec l'idée qu'il peut y avoir trop loin . L'intérêt d'un noyau open source est que sa source est ouverte au changement. Adapter les logiciels open source à d'autres fins est l'objectif des logiciels open source. Si vous en faites un mauvais travail ou si votre objectif est trop singulier, vos modifications meurent avec vous, mais si votre modification en vaut la peine, les autres bénéficieront de vos efforts et, probablement, des leurs lorsqu'ils apporteront les leurs.
mikeserv
7

J'ai écrit une réponse à une question connexe qui détaille comment le concept d'un fichier est au cœur du fonctionnement d'Unix, et comme vous ne pouvez pas avoir un fichier sans une sorte de système de fichiers, cela signifie que vous en avez absolument besoin.

Cependant, il est possible de survivre sans un système de fichiers qui existe sur n'importe quel support de stockage persistant. Votre initramfsimage peut être compilée dans le noyau lui-même (ou autrement placée quelque part où le chargeur de démarrage peut y accéder). Techniquement, l'image qui est écrite sur un support de stockage est une archive et non un système de fichiers; il ne le devient qu'après son chargement. Si vous y mettez tous les fichiers binaires dont vous avez besoin, il n'est pas nécessaire de les placer dans un système de fichiers sur un support de stockage. De cette façon, vous pouvez vous assurer que tous les systèmes de fichiers nécessaires au fonctionnement du système existent uniquement en mémoire.

Bien sûr, les inconvénients sont que, puisque tout ce dont le système a besoin doit exister en mémoire, vous pourriez constater que vous n'avez tout simplement pas assez pour ce que vous voulez faire. Vous aurez également du mal à écrire toutes les données que vous souhaitez conserver après un redémarrage.

Graeme
la source
Un point très saillant sur les initramfsimages est que vous n'êtes pas limité à seulement 1. Simplement cpioune autre image au sommet de la première et vous êtes prêt à partir. OU compilez dans le premier et ajoutez le reste après le démarrage. Les possibilités sont infinies, notez également que, comme les cpiooutils sont inclus dans le noyau, il n'est pas inconcevable d'enregistrer les modifications de cette façon, bien que vous seriez limité à écrire l' cpioimage enregistrée sur un périphérique brut si vous n'aviez pas d'autre système de fichiers.
mikeserv
En outre, techniquement, l' cpioimage ne devient pas un système de fichiers mais est décompressée dans un système de fichiers - initramfsou rootfscomme vous le préférez.
mikeserv
5

En fait, techniquement parlant, vous n'avez pas besoin d'un système de fichiers. Le comportement par défaut est d'avoir un système de fichiers à partir duquel démarrer. (par exemple /sbin/initest lancé à partir de là). Cependant, si vous le souhaitez, vous pouvez voir ce qui se passe do_basic_setup()en linux-source/init/main.c. Au moment où cette routine est appelée, le noyau et CPU0 sont prêts pour un vrai travail. Vous pouvez déchiqueter tout le travail requis pour démarrer initramfs - qui est aussi un système de fichiers! - et n'importe quoi après et remplacez-le par votre propre code pour travailler sans les systèmes de fichiers.

Vous pouvez ensuite utiliser les threads du noyau pour générer les processus que vous souhaitez. Cependant, tout cela serait super laid.

Ahmed Masud
la source
1
Bien que cela soit vrai, ne nécessiterait-il pas à peu près que vous GPL votre système? Vous ne pouvez pas utiliser le trou de licence du module du noyau car aucun système de fichiers ne signifie aucun module du noyau chargeable dynamiquement.
Warren Young
+1 pour être concis, techniquement correct et la seule réponse pour répondre correctement à la question jusqu'à présent. Linux n'est qu'une base de code, vous pouvez l'utiliser comme vous le souhaitez, notamment en supprimant le besoin de nombreux composants de base.
Vality
@Ahmed Masud Voulez-vous dire que j'ai encore besoin d'un système de fichiers - initramfs? (J'aurai cependant besoin d'Ethernet et USB dans mon application)
user2799508
@mikeserv, les noyaux antérieurs à 2.6 n'ont pas besoin initramfs- ils utilisent initrd.
Graeme
@Graeme Cela est également vrai, comme je le sais et je me suis même noté ailleurs sur ce site. J'ai tendance à penser plus actuellement que cela, même si cela est une erreur. Mais, pour ma défense - je ne suis pas seul. Même OpenWRT utilise 2.6+ depuis plusieurs années, malgré les pilotes Broadcom d'origine qui lui ont donné à l'origine un but et un nom qui n'a jamais vu de mise à jour officiellement compatible 2.6.
mikeserv
1

Un système de fichiers fournit plus qu'un simple emplacement pour stocker des fichiers. C'est là que vivent les exécutables (programmes), les bibliothèques et les fichiers de configuration de votre système. Au minimum, le noyau Linux nécessite un système de fichiers pour lui permettre de trouver / exécuter le processus " init " qui est chargé de s'assurer que les autres processus sont démarrés en fonction de votre système.

En ce qui concerne tout est un fichier, cette phrase signifie que les systèmes Linux / Unix donnent accès aux périphériques, aux ressources et aux fichiers via une abstraction de fichiers. Cela signifie qu'il existe une interface cohérente (ouvrir, fermer, lire, écrire, ...) pour (presque!) Tout.

Votre confusion avec les pilotes de périphérique est due au fait que vous confondez la source des instructions du pilote de périphérique avec les instructions réelles de la machine exécutable qui implémentent le pilote de périphérique. Dans l'exemple que vous avez fourni, les pilotes de périphérique sont intégrés directement dans le noyau et peuvent s'exécuter une fois que l'image du noyau a été chargée en mémoire. Si les pilotes de périphériques sont construits sous forme de modules, ils sont contenus dans des fichiers du système de fichiers et les instructions de la machine exécutable sont chargées à partir du fichier dans la mémoire du noyau où elles sont exécutées. Une fois le pilote de périphérique chargé et en cours d'exécution, il rend généralement les périphériques qu'il contrôle disponibles dans / dev via le système de fichiers.

Une fois que le noyau exécute le processus d'initialisation et que tous ses enfants doivent accéder au fichier pour interagir avec d'autres processus, accéder aux périphériques, demander la mémoire virtuelle, obtenir des sources de nombres aléatoires, s'envoyer des messages. C'est pour l'essentiel effectué via l'accès au système de fichiers. L'envoi / la réception via le réseau est une exception à l'obligation d'accès au système de fichiers, mais vous trouverez probablement un besoin d'accéder très rapidement à un système de fichiers.

Compte tenu de votre cas d'utilisation, vous devriez envisager d'utiliser une petite distribution configurable telle que OpenWrt . Avec cela, vous pouvez construire un système sur lequel un ensemble minimal de logiciels est installé et qui fonctionne essentiellement à partir de la RAM sans avoir à écrire quoi que ce soit sur un stockage stable. Une fois que vous avez exécuté, vous pouvez toujours supprimer les composants inutiles, mais ne sous-estimez pas l'aide apportée par une distribution dotée d'outils de débogage et d'une base d'utilisateurs active.

Richm
la source
0

Les systèmes de fichiers sont un moyen pour les systèmes d'exploitation d'organiser des données stockées en permanence. Plus précisément, ils permettent au système d'exploitation de stocker et de récupérer efficacement les données. Lorsque vous dites que vous avez démarré à partir d'un lecteur flash, cela signifie que ce lecteur flash a certainement un système de fichiers. Le fait que le noyau ait chargé un pilote signifie qu'il devait avoir un moyen de le trouver quelque part. Ce "trouver quelque part" est réalisé par le système de fichiers. Mais même si le noyau est monolithique et a tout compilé, alors au moins le chargeur de démarrage doit avoir eu un moyen de trouver le noyau.

En théorie, vous pourriez le faire sans un système de fichiers sophistiqué, simplement mettre tout à un emplacement fixe et coder en dur cet emplacement, mais à quoi cela servirait-il? Et nous ne parlons pas encore de vos fichiers de données comme les e-mails et tout le reste. Sans système de fichiers, il n'y a aucun moyen sûr de les stocker (et de les retrouver plus tard). Même si vous ne voulez stocker aucun fichier, le système d'exploitation est plus que le noyau, il comprend divers services et programmes utilisateur qui sont stockés dans des fichiers.

Pour faire court, vous devez avoir un système de fichiers quelque part, car si le noyau n'en trouve pas (comme dans votre exemple) il panique (comme le montre votre journal) - ce qui signifie qu'il refuse de faire quoi que ce soit. Mais si exécuter une installation linux sur un lecteur flash (avec un système de fichiers) convient à vos besoins, vous n'avez pas besoin d'un système de fichiers sur disque ou ailleurs.

contre-mode
la source
1
Les systèmes d'exploitation Unixy utilisent le système de fichiers pour plus que des données persistantes. Il y a des arbres impersistent (devfs, /proc, /sys...), il est l'épine dorsale de contrôle d'accès le plus, etc.
Warren Jeune
/ proc et / sys ne sont que des assistants, le système pourrait - en principe - fonctionner correctement sans eux. / sys est spécifique à Linux, / proc pourrait être remplacé par quelque chose comme sysctl comme le fait FreeBSD.
contre-mode
0

Si vous voulez que le système d'exploitation Linux fonctionne, il doit avoir un système de fichiers.

Mais il n'est pas nécessaire que le système de fichiers se trouve sur un disque dur (ou SSD, etc.). En fait, il n'est même pas nécessaire que Linux soit sur l'appareil.

Vous pouvez utiliser le protocole BOOTP pour charger le système d'exploitation sur le réseau. Vous avez cependant besoin d'un peu de RAM pour que cela soit efficace. Le chargeur de démarrage est une ROM standard sur la carte réseau. Tout le reste est transféré via le réseau et stocké dans un système de fichiers virtuel créé dans la RAM.

Cependant, pour un appareil dédié, il serait préférable d'installer une mémoire flash avec l'équivalent d'un disque USB Live Boot et d'exécuter votre programme à partir de là. On dirait que vous essayez déjà de faire quelque chose comme ça. Lors de l'exécution à partir d'un disque Flash ou d'une ROM, un système de fichiers virtuel est également créé dans la RAM, mais vous avez besoin de moins de RAM que si vous utilisez la méthode BOOTP.

Contrairement à Ubuntu, Debian utilise une image de démarrage hybride qui peut être directement copiée sur un disque flash USB à l'aide de dd, vous pouvez trouver cela plus facile à utiliser, d'autant plus qu'Ubuntu nécessite l'utilisation d'un programme spécial pour créer l'USB amorçable et que ce programme est un peu bogué.

Vous pouvez ajouter vos propres programmes à une image du système d'exploitation à l'aide de divers outils pour monter l'ISO en tant que système de fichiers en lecture / écriture. Vous pouvez utiliser rc.local pour démarrer le programme, mais sachez que rc.local s'exécute plusieurs fois au démarrage. Vous pouvez également créer un script /etc/init.d/ mais c'est plus compliqué.

En résumé: votre programme n'a pas besoin d'un système de fichiers, mais le système d'exploitation en a besoin, mais aucun disque réel / physique n'est nécessaire.

codeslinger
la source
0

Les ordinateurs antérieurs (et certains systèmes embarqués modernes) n'ont pas de système de fichiers. Mon Apple] [(et le Commodore PET de l'école) avait le système d'exploitation dans la ROM et était prêt à rouler environ 2 secondes après un démarrage à froid. Vous souhaitez charger un logiciel? Saisissez la source manuellement ou tapez LOAD, appuyez sur Entrée, puis sur PLAY sur le magnétophone. Ensuite, nous avons obtenu un lecteur de disque - et nous nous sommes beaucoup réjouis.

Cependant, le cœur même de Linux suppose qu'un système de fichiers est présent, et presque tout le reste s'appuie sur cela. Si vous voulez implémenter un véritable système d'exploitation sans système de fichiers, c'est certainement possible, mais votre matériel et votre système d'exploitation devront tous deux être construits autour du concept.

La méthode d'Apple consistait à câbler le système d'exploitation dans les 16 derniers Ko de mémoire, le processeur (MC6502) était câblé pour passer à l'emplacement stocké en permanence dans les 2 derniers octets de mémoire.

Paul
la source
-3

Non, Linux n'a pas besoin d'avoir un système de fichiers au sens strict. Dans votre cas, vous avez un problème différent.

"Aucun système de fichiers n'a pu monter root, essayé: jffs2" "MTD: périphérique MTD avec le nom" jffs2 "introuvable."

Je suppose qu'une partie du processus de chargement ne trouve pas / l'endroit où monter ou n'a pas la possibilité de monter ce système de fichiers.

jefro
la source
2
Votre réponse dit "vous n'avez pas besoin d'un système de fichiers mais votre problème est que vous avez besoin d'un système de fichiers". Cela n'a aucun sens et n'est pas cohérent en interne.
casey
Je ne comprends pas cela ... cette erreur est due au fait qu'il n'y a pas de système de fichiers à monter, car il n'a pas de système de fichiers. Le monteur fonctionne bien, il n'a tout simplement pas de fs valides sur son disque flash.
Vality