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