vmlinuzとinitrd.imgとSystem.mapって 201

/ LPIC / Comment[0]
カーネルをmakeするとvmlinuzとSystem.mapが作成されますがこれは一体なんでしょう。
# make defconfig
# make
# make modules_install
# ls -F
COPYING         Module.symvers  drivers/   lib/             security/
CREDITS README firmware/ mm/ sound/
Documentation/ REPORTING-BUGS fs/ modules.builtin tools/
Kbuild System.map include/ modules.order usr/
Kconfig arch/ init/ net/ virt/
MAINTAINERS block/ ipc/ samples/ vmlinux*
Makefile crypto/ kernel/ scripts/ vmlinux.o

vmlinuzはカーネルイメージ


Liunuxカーネルはこのようなイメージファイルの形でファイルシステム上に格納されています。
カーネルをコンパイルするときに、zImageとbzImageを選択できるようになっていますが、
zImageには512KBまでのメモリ制限があります。
bzImageは拡張メモリを有効にするため、1MB以降のメモリ空間への展開が可能となっています。


System.mapはカーネルのシンボルテーブル


メモリアドレスとシンボルとのマッピングが記されています。
カーネルパニック時などの際のデバッグに役立ちます。
シンボル一覧は/proc/kallsymsで確認できます。


initrd.imgは初期RAMディスク


必要最低限のものが詰まった小さなルートファイルシステムです。
メモリに展開後、ループバックマウントされ最小限のLinuxルートファイルシステムとなり、その中に内臓されたドライバによりHDD内の本体ルートファイルシステムを読み込みます。

カーネルをmakeした後はmkinitrdコマンドでこの初期RAMディスクを作成してやります。
# mkinitrd initrd.img 3.15.9

initrd.imgはgzipにより圧縮されています。
# file initrd.img
initrd.img: gzip compressed data, from Unix, last modified: Wed Aug 13 23:13:44 2014, max compression


展開してみます。
なぜか標準出力を介さないと展開できません。
# gzip -dc initrd.img > initrd
# file initrd
initrd: ASCII cpio archive (SVR4 with no CRC)

initrd.imgの正体はcpioアーカイブでした。

さらにcpioを展開して中身を見てみます。
# mkdir temp; cd temp
# cat ../initrd | cpio -id
# ls -F
bin@  etc/   lib@    proc/  run/   shutdown*  sysroot/  usr/
dev/ init@ lib64@ root/ sbin@ sys/ tmp/ var/
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可