Linuxカーネルファイルの詳細な説明

Linuxカーネルファイルには、vmlinuz、initrd.img、System.mapの3つがあります。カーネルを研究している人々にとって、これらの3つのファイルは非常に重要です。

1.vmlinuz

vmlinuzは、起動可能な圧縮カーネルです。「Vm」は「仮想メモリ」の略です。Linuxは仮想メモリをサポートしています。

vmlinuzを確立する方法は2つあります。1つは、カーネルのコンパイル時に「makezImage」によって作成されます。zImageは小さなカーネルに適しており、下位互換性のために存在します。2つ目は、コンパイル時にコマンドmakebzImageを使用してカーネルを作成することです。bzImageは圧縮されたカーネルイメージです。bzImageはbzip2で圧縮されていないことに注意してください。bzImageのbzは誤解を招く恐れがあり、bzは「bigzImage」を表します。bzImageのbは「大きい」を意味します。

zImage(vmlinuz)とbzImage(vmlinuz)の両方がgzipで圧縮されています。これらは圧縮ファイルであるだけでなく、gzip解凍コードが2つのファイルの先頭に埋め込まれています。したがって、gunzipまたはgzip-dcを使用してvmlinuzを解凍することはできません。

カーネルファイルには、カーネルを解凍して起動するための小さなgzipが含まれています。2つの違いは、古いzImageがカーネルをローエンドメモリ(最初の640K)に解凍し、bzImageがカーネルをハイエンドメモリ(1M以上)に解凍することです。カーネルが比較的小さい場合は、zImageまたはbzImageのいずれかを使用でき、2つの方法で起動されたシステムの動作時間は同じです。大きなカーネルはbzImageを使用しますが、zImageは使用しません。

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

2.initrd.img

initrdは「initialramdisk」の略です。Initrdは通常、ハードウェアを一時的に起動して、実際のカーネルvmlinuzが引き継いで起動を続行できる状態にするために使用されます。Initrdは主に、ext3やその他のファイルシステムおよびscsiデバイス用のドライバーをロードするために使用されます。たとえば、scsiハードディスクが使用され、scsiハードウェアドライバがカーネルvmlinuzにない場合、カーネルはscsiモジュールをロードする前にルートファイルシステムをロードできませんが、scsiモジュールはルートの/ lib / modulesに保存されます。ファイルシステム。この問題を解決するために、実際のカーネルを読み取ることができるinitrdカーネルを起動し、initrdを使用してscsiブートの問題を修正することができます。initrd.imgは、gzipで圧縮されたファイルです。

initrdイメージファイルは、mkinitrdを使用して作成されます。mkinitrdユーティリティは、initrdイメージファイルを作成できます。このコマンドはRedHat独自のものです。他のLinuxディストリビューションには、対応するコマンドがある場合があります。これは非常に便利なユーティリティです。

3.System.map

System.mapは、特定のカーネルのカーネルシンボルテーブルです。これは、現在実行しているカーネルのSystem.mapへのリンクです。
カーネルシンボルテーブルはどのように作成されますか?System.mapは「nmvmlinux」によって生成され、無関係なシンボルは除外されます。

nm /boot/vmlinux-2.6.32-10 > System.map
下面几行来自/usr/src/linux-2.6/Makefile:
nm vmlinux | grep -v ‘compiled\|\.o$$\|
[aUw]\|\.\.ng$$\|LASH[RL]DI’ | sort > System.map

4.initrdとinitramfsの違い

まず、カーネルがinitを開始するための2つのスキームを紹介します。
1つ目はramdiskで、メモリ(ram)をディスク(disk)として使用してマウントし、RAM内のinitを見つけて実行します。
2つ目はramfsで、ファイルシステムをRAMに直接マウントし、ファイルシステムでinitを実行します。
Initrd(ini​​t ramdisk)はramdiskの実現であり、initramfsはramfsの実現です。
tmpfsはramfsの拡張バージョンです。rootfsは、ramfs / tmpfsの特別なインスタンスです。したがって、initramfsはtmpfs / rootfsの実装にすることもできます。

カーネル2.6はinitramfsであるため、ファイル名と混同しないでください。ただし、多くの場合、従来のinitrd名が使用されています。

参照:https//blog.csdn.net/zhongbeida_xue/article/details/106627102

おすすめ

転載: blog.51cto.com/14207158/2659291