カーネルはinitramfsの/ devのエントリを削除しますか?

カーネルはinitramfsの/ devのエントリを削除しますか?

私はinitramfsイメージから起動する完全にカスタマイズされた最小組み込みLinux(バニラ、3.3.8、i486、Vortex86dx)システムを持っています。標準のデプロイスクリプトは使用されず、単一のrcSファイルのみが初期化に使用されます。

私は、/dev/hda1と/dev/hda2という2つのパーティションを持つIDEフラッシュドライブを持っています。

これは固定システム用の最小組み込みディストリビューションであるため、/dev/hda1および/dev/hda2を含む静的/devディレクトリがあり、UDEVはありません。

init が rcS を呼び出すと、/dev/hda1 エントリが存在しなくなります。現在、他のスクリプト、ユーザーアプリケーション、デーモンは実行されていません。 /dev/hda1現れるカーネルによって削除(?)

開発中にNFSルートファイルシステムを介してターゲットを起動すると、同じ問題は発生しません。

私はBuildrootを使用してdevice_table_dev.txtファイルを介して/ devディレクトリを作成します。例えば

# IDE Devices
/dev/hda    b   640 0   0   3   0   0   0   -
/dev/hda    b   640 0   0   3   1   1   1   4

Buildrootの出力/イメージでrootfs.tar.gzを確認しました。 /devディレクトリには/dev/hda1が含まれています。

brw-r-----  1 root root  3,   0 Jul  2 13:44 hda
brw-r-----  1 root root  3,   1 Jul  2 13:44 hda1
brw-r-----  1 root root  3,   2 Jul  2 13:44 hda2
brw-r-----  1 root root  3,   3 Jul  2 13:44 hda3
brw-r-----  1 root root  3,   4 Jul  2 13:44 hda4

ターゲットの実行後のディレクトリリスト(スクリプトの上部にあるrcS内で実行されます)は次のとおりです。

brw-r-----   1 root   root    3,   0 Jul  2 12:44 hda
brw-r-----   1 root   root    3,   2 Jul  2 12:44 hda2
brw-r-----   1 root   root    3,   3 Jul  2 12:44 hda3
brw-r-----   1 root   root    3,   4 Jul  2 12:44 hda4

/dev/hda1はありません。 /dev/hda2は同じディスク上のパーティションですが、まだ存在します。奇妙な。

Busybox ユーティリティ "mdev -s" を実行すると、ターゲットから /dev/hda1 を復元し、正常に動作します。たとえば、インストールできます。

前にこのような行動を見た人はいますか?

カーネルは/ devのエントリを削除しますか?

答え1

サブシステムは起動時にファイルシステムをudev作成してマウントします。デバイスが検出されると、カーネルはコンテンツを埋めます。仮想メモリに常駐するため永続性がないため、再起動後も変更は保持されません。すでに1つある場合でも、新しいファイルシステムをインストールすると、そのディレクトリが非表示になり、すべてのデバイス固有の情報が削除されたように見えます。そうではありませんが、最終結果は同じです。特別商品は期待していたものとは異なります。tmpfs/devtmpfs/dev

hdaあなたのアイテムがアイテムhdaXに置き換えられたことがわかります。または、ドライブに割り当てられている名前を確認して入手してください。sdasdaX/proc/devices/proc/partitionsudev

時には、このような迅速で汚れたソリューションがfdisk -l /dev/[sh]d[a-z]役に立ちます(各タイプのディスクが26個未満の場合はより良いです)。

ちなみに、使用された命名体系udevは標準化されているので、静的は/dev規則に従うよりも悪いかもしれません。udevそう思ったらそう/dev/sdaしてください。後で潜在的な奇妙さと誤解を避けることができます。

関連情報