カーネルソースツリーには何が含まれていますか?これはLinuxカーネルヘッダファイルに関連していますか?

カーネルソースツリーには何が含まれていますか?これはLinuxカーネルヘッダファイルに関連していますか?

私は本から通常Linuxソースツリーと/usr/src/linux一般的なサブディレクトリセット(arch、、、 ...)blockcryptoの参照を読みます。

私はこのツリーにカーネルを構成するバイナリが含まれると思います。私のシステム(Ubuntu 10.04)で...

  1. 私が持っているさまざまなカーネルの場合(手動インストールではなく自動ソフトウェアダウンロードを使用する場合)、この場所で各カーネルに対して次の2つのサブディレクトリを見つけます。

    /usr/src/linux-headers-2.6.32-22
    /usr/src/linux-headers-2.6.32-22-generic
    
  2. サブディレクトリにはバイナリなどがあると予想されます。しかし、ツリーのかなりの部分を調べた結果、常にここの最後のサブディレクトリに1つがあるようですMakefile(読み込むと、通常は設定ファイル、その後はインストールファイルのように聞こえます)。時にはスタンドアロンファイルもあります。その他のファイル(ほとんどKconfig)。

私の質問は素朴かもしれませんが、少し混乱しています。 (2) カーネルソースツリーで見なければならないことはありますか? 「タイトル」を明示的に引用する必要があるのはなぜですか。いくつかの追加ソフトウェアをインストールする必要がありますが、linux-generic-headersこれが関連しているかどうかはわかりません。 makefileを使用するには妥当な理由があることがわかります(たとえば、/driverサブディレクトリにモジュールをインストールするなど)。しかし、(ほぼ)makefileだけを使用しますか?

ベストアンサー1

kernel-header名前が示すように、配布パッケージにはカーネルモジュールなどのソフトウェアを構築するために必要なカーネルヘッダファイル(および必要なパイプ)のみが含まれています。

カーネルでバイナリを見つけることを期待してはいけません。源泉ビルド出力を除くディレクトリです。 (カーネルを直接設定してビルドした場合、カーネルソースディレクトリには、コンパイルされたオブジェクト、モジュール、ビルドされたカーネル自体、およびカーネルを操作する他のいくつかのエントリも含まれます。)
KConfigファイルは、カーネル構成の説明です。特定のディレクトリ/モジュールに使用できるオプション(およびその依存関係)。
それ以外はすべて(主に)Cソースコード、ヘッダファイル、Makefilescファイルです。そこにいくつかのヘルパースクリプトとアセンブリのソースコードがあります。

ヘッダーパッケージ(あなたがインストールしたもの)にのみ含まれています。ヘッダー上記の一部(すべてではない - 単に「エクスポートされた」ヘッダー)といくつかのビルドインフラストラクチャ。だからあなたが見ることが期待されます。ヘッダーパッケージ欲しくないCソースコードが含まれています(一部のスタブとビルドインフラストラクチャコードを除く)。このタイプのパッケージの主なポイントは、スペース(および帯域幅)を節約することです。完全なLinuxカーネルソースツリーはかなり大きく、カーネルを直接コンパイルする予定がない限り完全に不要です。ヘッダーパッケージは、モジュールを構築するために必要な正しいコンテンツを提供するためにディストリビューションで構築され提供されますが、それ以上は提供されません。 (もちろんコンパイルされたカーネルは含まれていません。)

あなたのコメントを解決するために、ヘッダーパッケージはどこにも再配置されません。特定のバージョンのカーネル用に構築され、特定のディレクトリにパッケージ化されています。それはファイルセットだけです。 (ヘッダーパッケージは、現在安定しているカーネルバイナリパッケージと必ずしも同じバージョンである必要はありません。ヘッダーパッケージは一般的で、実行中の実際のカーネルよりも遅くなる可能性があります。ただし、現在のインストールより古いカーネルでは提供しないでください。)カーネルの更新バージョン)。

インストールされたカーネルバイナリ/boot通常、ブートローダのバイナリと設定ファイルがこのディレクトリにインストールされます。 (時々これはデフォルトではマウントされていない別のファイルシステムです。)ファイルの正確な名前はカーネルとディストリビューションによって異なります。 (ブートローダも同様です。)

インストールされたカーネルモジュール次のサブディレクトリにあります。

/lib/modules/`uname -r`/

たとえば、私のシステムでは現在、次の場所にいます。

/lib/modules/3.1.4-gentoo/

完全なカーネルソースコード:Ubuntuでカーネルソースコード全体を使用してカーネルを直接ビルドするには、指示に従ってインストールする必要があります。ここ

ソースターボールをダウンロードしてkernel.orgどこかに抽出することもできます(実行いいえこのタールボールを使用している場合は、Ubuntuによってインストールされたファイルを上書きして、個人コンテンツをRPM管理コンテンツとは別に保ちます。

/usr/src/linuxカーネルソースコードを保存する伝統的な場所はありますが、カーネルソースコードを他の場所に保存するのを防ぐ方法はありません。パスは通常、ディレクトリへのシンボリックリンクでもあります。たとえば、マイコンピュータには次のものがあります。

 $ ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18 Dec  7 17:03 /usr/src/linux -> linux-3.1.4-gentoo

シンボリックリンクの目的は、カーネルソースコードに依存するアプリケーションの構築を簡素化することです。ツリーの外側でモジュールをビルドするときに正しいバージョンまたはパス情報を指定する必要がないように、そのパスを実行中(またはターゲット)カーネルに接続します。少なくともソースコードベースの展開には役立ちます。

おすすめ記事