を導入するいくつかの重要なLinuxシステムカーネルファイル

ネットワークでは、多くのサーバがLinuxシステムを使用しています。サーバーのパフォーマンスをさらに向上させるためには、特定のハードウェアと要件に従ってLinuxカーネルを再コンパイルする必要があるかもしれません。 Linuxカーネルをコンパイルするには、所定の手順に従う必要がありますいくつかの重要なファイルがカーネルのコンパイルに関係しています。たとえば、RedHat Linuxの場合、/bootディレクトリにLinuxカーネルに関連するファイルがいくつかあります。実行するには/bootと入力します。ls– l。 RedHat Linuxカーネルをコンパイルした人は、System.map、vmlinuz、initrd-2.4.7-10.imgに強い印象を与えるかもしれません。カーネルをコンパイルするプロセスはこれらのファイルの確立を伴うからです。では、これらのファイルはどうやって作られたのでしょうか。役割は何ですか?この記事ではそのいくつかを紹介します。

まず、vmlinuz

vmlinuzは起動可能な圧縮カーネルです。 < vm>は"仮想メモリ"の略です。 640KBのメモリ制限があるDOSのような古いオペレーティングシステムとは異なり、Linuxは仮想メモリをサポートします。 Linuxはハードディスクスペースを仮想メモリとして使うことができるので、 "vm"という名前になります。 Vmlinuzは、/boot /vmlinuzにある実行可能なLinuxカーネルで、通常はソフトリンクです。

vmlinuzをビルドする方法は2つあります。 1つは、 "make zImage"によってカーネルを作成し、それから:

' cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot /vmlinuz' zImageは小さなカーネルで動作し、下位互換性のために存在します。 2つ目は、カーネルがmake bzImageコマンドを使用してコンパイルされた後、次のコマンドで生成されることです。<; cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage/boot/vmlinuz bzImageは圧縮されたカーネルイメージですbzImageはbzip2では圧縮されていないことに注意してくださいbzImage内のbzは誤解されやすく、bzは "big zImage"を意味します。 bzImageのbは「大きい」意味です。

zImage(vmlinuz)とbzImage(vmlinuz)はどちらもgzipで圧縮されています。圧縮ファイルであるだけでなく、gzip解凍コードが2つのファイルの先頭に埋め込まれています。ですから、gunzipやgzip– dcでvmlinuzを解凍することはできません。

カーネルファイルには、カーネルを解凍して起動するための小さなgzipが含まれています。両者の違いは、古いzImageがカーネルをローエンドメモリ(最初の640K)に解凍し、bzImageがカーネルをハイエンドメモリ(1M以上)に解凍することです。カーネルが小さければ、zImageまたはbzImageのどちらかを使用することができます。大規模なカーネルはbzImageを使用し、zImageを使用することはできません。

vmlinuxは非圧縮カーネルで、vmlinuzはvmlinuxの圧縮ファイルです。

2番目に、initrd-x.x.x.img

initrdは' initial ramdisk'の略です。 initrdは通常、実際のカーネルvmlinuzが引き継いでブートを続行できる状態にハードウェアを一時的にブートするために使用されます。たとえば、scsiハードディスクを使用していて、カーネルvmlinuzにこのscsiハードウェアドライバがない場合、カーネルはscsiモジュールをロードする前にルートファイルシステムをロードできませんが、scsiモジュールはルートファイルシステムの/lib /modulesの下に格納されます。この問題を解決するには、実際のカーネルを読み込むinitrdカーネルを起動し、initrdを使用してscsiブート問題を修正します。 Initrd-2.4.7-10.imgはgzipで圧縮されたファイルですこのファイルの内容を見てみましょう。

initrdの実装はいくつかのモジュールをロードしたりファイルシステムをインストールしたりします。

initrdイメージファイルは、mkinitrdを使用して作成されます。 mkinitrdユーティリティはinitrdイメージファイルを作成することができます。このコマンドはRedHat独自のものです。他のLinuxディストリビューションにも対応するコマンドがあります。これは便利なユーティリティです。詳細については、ヘルプを参照してください。man mkinitrd

次のコマンドは、initrdイメージファイルを作成します。

3. System.map System.mapは、特定のカーネル用のカーネルシンボルテーブルです。現在実行しているカーネルのSystem.mapへのリンクです。

カーネルシンボルテーブルはどのように作成されますか?System.mapは' nm vmlinux'によって生成され、無関係のシンボルは除外されます。この記事の例では、カーネルのコンパイル時にSystem.mapが/usr/src/linux-2.4/System.mapに作成されます。

nm /boot/vmlinux-2.4.7-10> System.map

以下の行は/usr/src/linux-2.4/Makefileからのものです。

nm vmlinux |  Grep -v '(コンパイル済み)| (.o $$)| ([aUw])| (..ng $$)| (LASH [RL] DI) '|  並べ替え> System.map

次に/bootにコピーします。

cp /usr/src/linux/System.map /boot/System.map-2.4.7-10


プログラミング時には、変数名や関数名などのいくつかのシンボルに名前が付けられます。 Linuxカーネルは、多くのグローバルシンボルを含む非常に複雑なコードブロックです。

Linuxカーネルは、シンボル名を使用する代わりに、変数または関数のアドレスによって変数または関数名を認識します。たとえば、size_t BytesReadなどのシンボルを使用する代わりに、この変数はc0343f20のように参照されます。

コンピュータを使用している場合は、c0343f20のような名前ではなく、size_t BytesReadのような名前を使用することをお勧めします。カーネルは主にcで書かれているので、コンパイラ/コネクタを使用すると、エンコード時にシンボル名を使用でき、カーネルの実行時にアドレスを使用できます。

ただし、場合によっては、シンボルのアドレスを知る必要があるか、アドレスに対応するシンボルを知る必要があります。これはシンボルテーブルによって行われます。シンボルテーブルは、すべてのシンボルとそのア​​ドレスのリストです。 Linuxのシンボルテーブルでは、2つのファイルが使用されます。

/proc /ksyms

System.map

/proc /ksymsは、カーネルが起動するときの「procファイル」です。作成しました。実際、それは実際にはファイルではなく、単にカーネルデータを表現したものですが、ファイルサイズが0であることからわかるディスクファイルのような錯覚を人々に与えます。ただし、System.mapはファイルシステムに存在する実際のファイルです。新しいカーネルをコンパイルすると、各シンボリック名のアドレスが変わり、古いSystem.mapのシンボル情報が正しくなくなります。カーネルが新しいSystem.mapをコンパイルするたびに、古いSystem.mapを新しいSystem.mapに置き換える必要があります。

カーネル自体は実際にはSystem.mapを使用しませんが、klogd、lsof、psなどの他のプログラムには正しいSystem.mapが必要です。間違った、またはまったくSystem.mapを使用しない場合、klogdの出力は信頼できないものとなり、プログラムのトラブルシューティングを行うことは困難な場合があります。 System.mapがないと、いくつかの厄介なヒントに直面する可能性があります。

他のドライバの中には、シンボルを解析するためにSystem.mapを必要とするものがありますが、現在実行している特定のカーネル用にSystem.mapが作成されていないと動作しません。

Linuxカーネルログデーモンklogd名前 - アドレス解決を実行するために、klogdはSystem.mapを使用する必要があります。 System.mapは、それを使用するソフトウェアが見つけられる場所に配置する必要があります。実行:man klogdは、System.mapに変数の場所をklogdに与えないと、System.mapを次の順序で3か所で検索することを示しています。

/boot/System.map < Br>

/System.map

/usr/src/linux/System.map


System.mapにもバージョン情報があり、klogdは適切に正しいものを見つけることができます。マップファイル

Copyright © Windowsの知識 All Rights Reserved