データを保存したくない場合は、ファイルシステムが必要ですか?

データを保存したくない場合は、ファイルシステムが必要ですか?

ここで質問しました。ファイルシステムが必要ですか?

コメントの1つは次のとおりです。

ファイルシステムを持たないシステムはLinuxでどのように機能しますか?プリンタやイーサネットカードもファイルと見なされますか?ここであなたの目標は何ですか? ...ニュージーランド 2月24日, 14:18

これで、ファイルシステムなしでLinuxを起動したときに表示されるログメッセージは次のようになります(最後にあります)。

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

フラッシュから起動します。

これで、ファイルシステムがロードされていないにもかかわらず、多くのドライバがロードされたことがログから明らかになりました。

上記の説明を参照して、Linuxのすべてがファイルの場合、ドライバはどのように正常にロードされますか?ファイルシステムを要求する前に(そして失敗する前に)USB、GPIO、SDすべてが完了したことがわかります。

技術的に言えば、次のようなことは正しいですか?

Linuxにはファイルシステムが必要です。

いくつかの背景 私が達成したいのは、制御アプリケーションを実行しているシステムでLinuxを実行することです。アプリケーションは、一部のデータをキャプチャして一部のスレーブに送信します。データの保存にはまったく問題はありません。だから、ファイルシステムを完全に取り除きたいと思います。私が理解したところ、データを保存するにはファイルシステムが必要ですが、データをまったく保存しないのですが、なぜファイルシステムを持ってリソース使用量を増やすのですか?

修正する

でも背景しかし、具体的にはUSBやイーサネット経由でデータを送信するため、該当ドライバがあるのは当然だ。

答え1

Linuxが必要な場合は、ファイルシステムが必要です。

(ここではLinuxオペレーティングシステムカーネルではなくLinuxオペレーティングシステムを指します。以下でより具体的に説明します。)

ファイルシステムが存在する前に起動時にロードされるデバイスドライバの観察は赤いニシンです。ファイルシステムなしでドライバをロードできます。あなたは何ですかできないdoにはfd = open("/dev/foo", O_RDONLY)ファイルシステムはありません。

これは、JFFS2の例など、既存のファイルシステムでフォーマットされた永続書き換え可能な記憶媒体を使用する必要があるという意味ではありません。伝統的なツリーをサポートするために必要な/devものデータ構造それパフォーマンスディスク上のファイルシステムと同じです。最新のLinux使用法ウデブ/devたとえば、ノードの永続ストレージなしでメモリ内ファイルシステムのノードへのアクセスを許可します。/dev

さらに、Linuxオペレーティングシステムのさまざまな機能を利用するには、ファイルシステムが必要です。

  • 共有ライブラリまたはスクリプト言語モジュールが必要ですか?/lib/libfoo.*、、などを保存するにはファイルシステムが必要です/usr/lib/perl5/*/lib/ld.so/etc/ld.so.cache

  • ロード可能なカーネルモジュールが必要ですか?ファイルシステムが必要/lib/modules/$(uname -r)/*

  • シェルやテキストエディタなど、複数の実行ファイルが必要ですか?生き残るにはファイルシステムが必要です。

  • カーネルはアクセス制御を強制する必要がありますか?ほとんどは次のように行われます。許可ビットACLSELinuxタグファイルまたはディレクトリのどこかにあります。

おそらくもっと多くの例を挙げることができますが、この程度にします。

システムに必要なすべてのリソースは永続ストレージからRAMにロードされる可能性があるため、一度起動するとシステムは永続ストレージをまったく使用しません。ライブLinuxディストリビューションこれを行います。さらに、組み込みLinuxオペレーティングシステムは起動時にRAMにファイルシステム全体を構築することが一般的であるため、起動すると永続ストレージを参照しなくなります。フラッシュメモリデバイス

限られた単一目的、単一タスクの組み込みシステムを構築する場合、Linuxオペレーティングシステムは必要ありません。より小さく、機能が少ないことが必要な場合があります。組み込みオペレーティングシステムまたは、次のように書くこともできます。金属に直接

ここにある他の答えのいくつかは、単一の実行可能ファイル(カーネルで実行されているプログラム)と対にするか、コードが静的にマージされるモノリシックプログラムとして実行して、LinuxをLinuxカーネルとしてのみ削除する方法について説明しています。いずれにせよ、ファイルシステムの必要性を完全に排除することができますが、最終的にはLinux-the-OSではなくなりました。

答え2

私は書いた関連質問に答えるファイルの概念がUnixの仕組みの中心となる方法を詳しく説明し、ファイルシステムがないとファイルを持つことができないため、ファイルシステムが必須であることを意味します。

しかし、永久記憶媒体にファイルシステムがなくても生き残ることができます。イメージinitramfsはカーネル自体でコンパイルすることができます(またはブートローダがアクセスできるどこかに配置できます)。技術的には、記憶媒体に記録された画像はファイルシステムではなくアーカイブであり、ロードされた後にのみそのようになります。必要なバイナリをすべてここに入れると、記憶媒体のファイルシステムに入れる必要はありません。これにより、システムが動作するために必要なすべてのファイルシステムがメモリにのみ存在することを保証できます。

もちろん、欠点は、システムに必要なすべてがメモリに存在する必要があるため、必要な操作を実行するのに十分なメモリがない可能性があることです。また、再起動後も保持したいデータを作成するのが困難になります。

答え3

実際、技術的にはファイルシステムは必要ありません。デフォルトの動作は、起動するファイルシステムを持つことです。 (例:/sbin/initそこから始まります)。しかし、必要に応じてdo_basic_setup()何が起こっているのかを見ることができます。linux-source/init/main.c。このルーチンが呼び出されると、コアとCPU0は実際の作業を実行する準備が整います。 initramfsを起動するために必要なすべての作業を粉砕できます。これはファイルシステムでもあります! - それ以降のすべての項目をファイルシステムなしで動作させるには、独自のコードに置き換えます。

その後利用できますカーネルスレッド必要なプロセスを作成してください。しかし、これらすべては非常に醜いものです。

答え4

ファイルシステムは、オペレーティングシステムがデータの永続ストレージを構成する手段です。特に、これにより、オペレーティングシステムはデータを効率的に保存して取得できます。フラッシュドライブから起動したと言うと、フラッシュドライブには確かにファイルシステムがあることを意味します。カーネルがドライバをロードしたという事実は、ドライバをどこかで見つける方法があることを意味します。 「どこかで見つける」はファイルシステムによって実装されます。しかし、カーネルがモノリシックで、すべてをコンパイルしても、少なくともブートローダーカーネルを見つける方法が必要です。

理論的には、複雑なファイルシステムなしでこれを行うことができ、すべてを固定位置に置き、その場所をハードコードするだけです。しかし、それはどんな役に立ちますか?私たちが言うことはそうではありません。あなたの電子メールなどのデータファイル。ファイルシステムがない場合、これらのファイルを保存して後で見つけるための正しい方法はありません。ファイルを保存したくない場合でも、オペレーティングシステムは単なるカーネル以上であり、ファイルに保存されているさまざまなサービスとユーザースペースプログラムも含みます。

簡単に言えば、あなたは〜しなければならないどこかにファイルシステムがあります。カーネルがファイルシステムを見つけることができない場合(あなたの例のように)パニック状態になるからです(ログに表示されます)。つまり、何もしないという意味です。ただし、フラッシュドライブ(ファイルシステムを含む)からLinuxインストールを実行することが要件に適している場合、ディスクや他の場所にファイルシステムは必要ありません。

関連情報