initrdについて学びたいです。私はフォローしましたこのチュートリアル最初から独自のinitrdを作成し、そこにbusyboxをインストールしました。その後、isolinuxを使用して.isoを作成してvirtualboxでテストできました。良い結果!
busyboxの基本コマンドがあるので、ファイルシステムをマウントしたいと思います。ただし、/ devディレクトリはチュートリアルをたどりながら作成したいくつかのファイルを除いてほとんど空です(sdaなし)。私はudevについて学び、これが私に必要なものだと思います。しかし、どのように進むべきかわかりません。
udevから最新のソースコードを取得してコンパイルしてinitrdに追加する必要がありますか?それでは、私の初期化スクリプトで/bin/udevなどを呼び出しますか?それとも/devディレクトリを埋める別の/より良い方法はありますか?
編集する:私が行ったことに関する追加情報とアップデートです。
- 仮想ボックスですべてをテストしました。私はVirtual Boxにubuntu Minimalをインストールし、initrdで.isoを作成し、VirtualBoxのISOから起動しました。
- 私は
/lib/modules
vmlinuzとdebian-businesscard.isoのファイルを使って、以前にリンクされたチュートリアルに従って作成したinitrdにコピーしました。 - カーネルは
CONFIG_DEVTMPFS=y
/dev
tty0-tty63や他のいくつかのデバイスなど、いくつかのデバイスがありますが、sda / hdaはありません。lspci -k
現在のオペレーティングシステムと仮想ボックスで実行して、どのモジュールが使用されているかを確認します。モジュールSATA Controller
として使用されるそうです。ahci
- 実行すると、
modprobe -v ahci
多くの「不明なシンボル:ata_some_stuff」について文句を言いますがSCSI Subsystem initialized
、ATA-6: VBOX HARDDISK
などを返しますDirect-Access ATA VBOX HARDDISK
。ただし、ハードドライブデバイスがまだ見つかりません/dev
。
私の現在の/init/
スクリプトは次のとおりです。
#!/bin/ash
mount -t devtmpfs none /dev
mount -t proc /proc /proc
mount -t sysfs none /sys
modprobe -v ahci
echo "Hello world"
exec /bin/ash --login
何が間違っているのか、どうすればいいのか知っている人はいますか?
答え1
Gilesの答えは正確ですが、昔ながらです:-).注目すべきもう一つのことは、(何よりも用語についてもっと詳しく見ることです)、リンクされたガイドがinitrdではなくinitramfsを作成する方法のガイドラインであることです。どちらも同様で同じ目的を提供しますが、画像を保存して読み込む方法は異なります。
とにかく、あなたの質問に対する答えは実際には非常に簡単です。
devtmpfs
カーネルで有効(CONFIG_DEVTMPFS=y
)mount -t devtmpfs none /dev
スクリプトで最初に実行しますinit
。
それはすべてです。 devtmpfsは/dev
udevのように埋められます。/dev
(initramfsイメージから)、またはなどを使用して基本を事前に入力する必要さえありません。null
zero
console
答え2
Udevは、/dev
カーネルにロードされたドライバとそのドライバが検出したデバイスに基づいて自動的に入力されます。デバイスの名前と権限は、管理者が詳細に調整できる一連の規則に基づいています。ほとんどのLinuxシステムはudevを使用する必要があります。例外は、システム設定時にハードウェア構成が知られており、後で変更されないシステム(通常は組み込み)です。
通常、udev
開始シーケンスの最初にこれを呼び出します。この前に実行する必要があるいくつかの操作の1つは、マウントと/proc
デーモン/sys
を起動した後にudevadm trigger --action=add; udevadm settle
udevを呼び出して、カーネルで保留中のすべてのイベントを処理し(trigger
)、続行する前にイベントが処理されるのを待ちます(settle
)。その後、ルートファイルシステムを含むデバイスを探すことができます。
バイナリに加えて、udevd
initrdの他の部分も必要です。udev
これには、設定ファイル/etc/udev
、基本設定、/lib/udev
およびinitrdに含まれるudevルールから呼び出す必要があるプログラムなどのscsi_id
補助バイナリが含まれます。/lib/udev
initrdが終了したら、実際のルートパーティションに制御を渡す前に、udevd
initrdの他のすべてのプログラムのように停止する必要があります。これにより、デバイスが取り外されることはありません/dev
。mount --move /dev /root/dev
インストールを/dev
実際のルートディレクトリに移動するために使用されます。
Gentooには1つありますinitramfsガイドそしてinitramfs Wikiページudevなどが言及されました。 Initramfsはinitrdの最新の後継バージョンで、ファイルシステムイメージの代わりにcpioアーカイブを使用し、異なるプロセスインターフェイスを持ちます(initrdでは/linuxrc
シャットダウンする必要があり、initramfsでは実際のルートで初期化する必要があり/init
ますexec
)(今日のほとんどのシステムにはスイッチがありますが)にもかかわらず)。ファイルはまだinitrdと呼ばれることがあります)。