web-dev-qa-db-ja.com

Linuxカーネルのコンパイル:スタンドアロンOS

こんにちはみんな私はLinuxカーネルのコンパイルに慣れていないので、いくつか質問があります:Linuxカーネルをコンパイルすることによって、Linuxの配布に依存しない完全にスタンドアロンのOSを構築していますか?

はいの場合... initramfsコマンドを使用してinitrdファイルを作成したいのに、実行中のLinux destrubution(Ubuntu 10.4を実行している)に関する情報が追加されるのはなぜですか?

モジュールをコンパイルして、コンパイルしたLinuxにモジュールを追加するにはどうすればよいですか?また、モジュールをどこに配置すればよいですか?

これは私がやってきたことの夏です:

1.カーネルソース(3.4.1)を取得し、「makeall」コマンドを使用してコンパイルします(現在のlinux .configを使用しています)

  1. メモリスティックにgrubをインストールする

  2. コンパイルされたbzImageをメモリスティックの/ bootディレクトリに置く

  3. 「initramfs」コマンドを使用してinitrdファイルを作成し、それを/ bootにも配置します。

  4. メモリースティックを使用してPCを起動し、grub>ターミナルに入る

  5. 「root(hd0,0)」を使用する; "カーネル/ boot/bzImage"; 「initrd/boot/initrd.img」、次に「boot」コマンドで起動します。

  6. 「/lib/modules/3.4.1/modules.dep」ファイルが見つからなかったというエラーの後に(initramfs)ターミナルに入る!!!

私は何が間違っているのですか?

2
morTie

Linuxカーネルをコンパイルすることで、Linuxの配布に依存しない完全にスタンドアロンのOSを構築していますか?

いいえ。Linux自体はオペレーティングシステムではありません。それは単なるカーネルです。コンピュータとの対話を容易にするために、システムライブラリと基本的なソフトウェアのコレクションで構成されるuserlandが必要です。 「Linux」というときの一般的な意味では、これはGNU Project)と呼ばれる別のプロジェクトによって提供されます。技術的には、「GNU/Linux」と呼ぶ必要があります(一部の人はそうします)。 "。

Initramfsコマンドを使用してinitrdファイルを作成したいのに、実行中のlinux destrubution(Ubuntu 10.4を実行している)に関する情報が追加されるのはなぜですか?

Initrdには、起動時にシステムを最初にセットアップするプログラムのコレクションが含まれているため、必要なドライバーとデーモンをロードし、必要なパーティションを見つけてハードドライブにマウントします。実際には、ユーザーだけでなくカスタマイズされています。配布ですが、特定のインストール、構成、およびコンピューターに適用されます。通常、他の人のinitrdと互換性はありません。そのため、システムで生成する必要があります。

モジュールをコンパイルして、コンパイルしたLinuxにモジュールを追加するにはどうすればよいですか?また、モジュールをどこに配置すればよいですか?

独自のカーネルをコンパイルする場合は、おそらくコンパイル前にカーネルソースディレクトリでmake menuconfigを実行します。これにより、コンパイルする機能と、それらをカーネルバイナリに統合するか、使用可能にするかを選択できます。モジュールとして。

これは私がやってきたことの夏です:

これが希望どおりに機能しない理由はいくつかあります。

カーネルソース(3.4.1)を取得し、「makeall」コマンドを使用してコンパイルします(現在のlinux .configを使用しています)

Linuxカーネルの3.xブランチよりもかなり前のUbuntu10.04を実行している場合は、3.4は言うまでもありません。少なくとも膨大な量の余分な作業がなければ、正しく機能しない可能性があります。設定ファイルもかなり変更されました。率直に言って、(おそらくLinux 2.6の)設定ファイルの内容が3.4での動作と一致しないことについて、左右にエラーがスローされないことに驚いています。また、Ubuntuは必要な機能を含むようにカーネルにパッチを適用し、システム内の他のすべてのものとうまく機能するようにするため、kernel.orgからプレーンなVanillaカーネルソースではなく、Ubuntuのカーネルソースパッケージをダウンロードすることをお勧めします。最後に、いくつかの手順が欠落しています。これについては後で説明します。

コンパイルされたbzImageをメモリスティックの/ bootディレクトリに置く

これであなたの意図が何であるかはわかりませんが、メモリスティックに完全に起動可能なLinuxをインストールする場合は、それ以上のものがあります-そのメモリにはユーザーランドのものはまったくありませんたとえば、スティック。これが実際に行うことは、正しく設定されている場合、メモリスティックのカーネルを使用してハードドライブでUbuntuインストールを実行することです。これでうまくいくと思いますが、ハードドライブにカーネルをインストールするだけでなく、なぜそうするのでしょうか。既存のものと並べて設置できるので、自由に切り替えることができます。

「/lib/modules/3.4.1/modules.dep」ファイルが見つからなかったというエラーの後に(initramfs)ターミナルに入る!!!

これは、前に述べた失敗したステップに戻ります。モジュールをmake modules_installに配置するには、新しいカーネルを/lib/modulesする必要があります。

ただし...

非常に特別な必要がない限り、理想的にはカーネルを「従来の」方法でコンパイルするべきではないため、これは実際には重要ではありません。最近、実際に独自のカーネルをコンパイルする必要がある場合、ほとんどのディストリビューションには、カスタムカーネルバージョン(該当する場合)を使用し、ビルドプロセスを自動化し、カーネルをパッケージとしてインストールして、クリーンにインストールおよび削除できるようにする方法があります。必要に応じて、新しいカーネルまたは古いカーネルを選択できるようにブートローダーを構成します。 Ubuntuでは、次の手順に従う必要があります。 カーネル/コンパイル-Ubuntu Wiki

これは、キックや教育目的のためだけにカーネルを「昔ながらの」方法でコンパイルできないということではありません。最初のカーネルをそのようにコンパイルしましたが、これはより良い方法ができる前のことでした。システムが壊れていないことが重要な場合は、ディストリビューションに推奨される方法を使用し、ソースを使用して、パッケージ管理を使用してください。

11
tgies

Linuxカーネルを再コンパイルまたはコンパイルする場合、新しいディストリビューションは作成されません。カーネルの新しいバージョンまたは異なるバージョンのみを作成しています。カーネルは、ロードされ、PCがPOSTプロセスを完了した後、ブートローダーによって実行される単一のファイルです。

ディストリビューションは、標準のUNIXユーティリティ(通常はパッケージマネージャー)など、他の多くのファイルで構成されています。独自のカーネルを(再)コンパイルする場合、これには何の影響もありません。

自分のカーネルをコンパイルしてからしばらく経ちましたが、makeコマンドの後にdepmod -aを実行する必要があると思います。

1
LawrenceC