カーネル 201 その2

/ LPIC / Comment[0]
/usr/src/linux/以下の構造

arch/ アーキテクチャに依存したコード
configs/ .configカード
crypto/ 暗号処理関数
drivers/ 各種デバドラ
fs/ ファイルシステム関連
include/ C言語インクルードファイル
init/ 初期化コード
ipc/ プロセス間通信関連
kernel/ カーネル機能
lib/ モジュール
mm/ メモリ関連
net/ 各種ネットワークプロトコル関連
scripts/ カーネル作成支援スクリプト
Documentation/ ドキュメント
.config カーネル設定ファイル
Makefile カーネルmakefile

カーネルのコンフィギュレーションファイル
.config

現在のカーネルコンフィギュレーションを新しい設定に反映させる
# make oldconfig

追加された機能についてのみ問い合わせを行い、前から存在する設定は既存の設定ファイルをそのまま使う
# cp /boot/config-2.6.32-22-generic .config
# make config


.configカーネルコンフィギュレーション
# make menuconfig
Y カーネルに組み込む
M ローダブルモジュールとする
N 組み込まない

ターゲット指定なしで実行するとカーネルとモジュールのコンパイル両方実行される
# make

makeの主なターゲット
clean .config以外の不要ファイルを削除
mrproper .configやバックアップファイルを含め不要ファイルを削除
distclean .configやバックアップファイルやpatchが作成したファイルなども削除
defconfig デフォルト値を設定した.configを作成
all すべてのビルドを実施する
modules 動的モジュールをすべてビルド
rpm カーネルをビルド後にrpmパッケージを作成
rpm-pkg ソースrpmパッケージを作成
binrpm-pkg ビルド済みカーネルとモジュールのrpmパッケージを作成
dep-pkg ビルド済みカーネルとモジュールのdebパッケージを作成

モジュールのインストール
# make modules_install

カーネルのインストール
# make install


手作業でカーネルを配置

カーネルイメージを/boot/にバージョン名を付けてコピー ついでにvmlinuzでもリンクを作成しておく
# cp /usr/src/linux/arch/x86/boot/bzImage /boot/vmlinuz-`uname -r`
# ln -s /boot/vmlinuz-`uname -r` /boot/vmlinuz


System.mapも/boot/にコピー ついでにSystem.mapでもリンクを作成しておく
# cp /usr/src/linux/System.map /boot/System.map-`uname -r`
# ln -s /boot/System.map-`uname -r` /boot/System.map


System.mapはカーネルのメモリアドレスとシンボルとのマッピングが記述されている。
シンボルの一覧は/proc/kallsymsで確認できる。


初期RAMディスク
初期RAMディスク(Initial RAM Disk: initrd)ループバックマウントでメモリ上に展開し、ルートファイルシステムとしてカーネルを起動する
初期RAMディスクにはSCSIなど必要最低限のドライバを組み込んでおく必要がある。

初期RAMディスクには2種類ある
ファイルシステムイメージを圧縮したinitrd
cpioアーカイブを圧縮したinitramfs

初期RAMディスクを作成
# mkinitramfs -o /boot/initrd.img-`uname -r` `uname -r`
# mkinitrd /boot/initrd.img-`uname -r` `uname -r`



カーネルイメージ配置コマンド
# installkernel バージョン カーネルイメージ ディレクトリ

カーネルイメージとSystem.mapを配置
# installkernel 2.6.32-22-generic /usr/src/linux-headers-2.6.32-22-generic/arch/x86/boot/bzImage System.map


ブートローダを設定
/boot/grub/grub.conf
menuentry 'Ubuntu, with Linux 2.6.32-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,4)'
search --no-floppy --fs-uuid --set 0d8e4-31b5-4dc8-b67b-4b9537ea31e4
linux /boot/vmlinuz-2.6.32-22-generic root=UUID=0d8e4231b5-4dc8-b67b-4b9537ea31e4 ro quiet splash
initrd /boot/initrd.img-2.6.32-22-generic
}
関連記事

コメント

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