読者です 読者をやめる 読者になる 読者になる

Engineer of the lawyer

I was able to pass the Network Specialist. Next target is the Project Manager.

カーネルに関すること LPIC201

201試験に向けて勉強してきたけど、悪いサボり癖、五月病のような気怠さで勉強を怠ってしまっていた。
今日はとことんやる。

f:id:thcom:20061001234902j:plain







安定版かどうかの判断のためには、まずバージョンが 2.6 より前か、以降かを見ること
2.6より前では、2.X.Y の X が奇数だと開発版、偶数だと安定版
2.6以降は以下の表記で表される


2.6系以降のカーネルにおける表記

-rc リリース候補版
-git 開発版
-mm パッチ版
-ac パッチ版

※一般的にカーネルのソースやビルドに必要なファイルを置くディレクトリのパス
/usr/src/linux/











bzImageについて

bzImageはカーネルイメージを圧縮し、自己伸張できるようにした形式
zImage と bzImage の具体的な制限の違いで重要な点は、zImage は 512KB 以下のイメージしか扱えないという点











カーネルパラメータについて

カーネルパラメータは、カーネルの動作や細かな設定値を参照・変更するための仕組み
カーネルパラメータの多の項目は、実行時に値を変更することができ、すぐに新設定が有効となる
カーネルパラメータはビルド時ではなく実行中に設定を変更することができる
恒久的に(再起動後も)設定を有効にするためには、起動時に自動実行されるスクリプトを編集し、起動毎に設定したい値を変更する sysctl コマンドを実行するようにするか、/etc/sysctl.conf という専用の設定ファイルに設定を記述する










/boot 以下のファイル

/boot/vmlinuz-(ver)  カーネルのイメージ
/boot/System.map-(ver) カーネルのアドレスマップ
/boot/initrd.img(ver) 初期RAMディスクイメージ
/boot/config(ver)   ビルド時のカーネル設定










patchコマンド

patchコマンドのオプション
-p0 パッチ内のパスを修正しない #消さない
-p1 パッチ内のパスの先頭1ディレクトリを削る #1つ消す
-p2 パッチ内のパスの先頭2ディレクトリを削る #2つ消す
-d パッチ適用の際の作業ディレクトリを指定 #dだからディレクトリ
-R パッチを逆向きに適用し、変更を取り消す #Rだからリバース?
-C 実際には適用を行わず、処理を確認

※間違ったpatchを当ててしまった場合は、patch -Rでもう一度patchを当てればよい
※パッチの適用は通常 patch コマンドを利用して行うが、カーネルをパッチでバージョンアップする場合などには、大量のパッチを当てなければいけないことがある。
その際にパッチをひとつひとつ正しい順番で適用していくのは手間なので、/usr/src/linux/scripts ディレクトリ内に、patch-kernel というスクリプトが用意されてる。これを使うと、カーネルのソースコードに対して、バージョンアップのためのパッチを順々に自動で適用することが可能










makeコマンドいろいろ

make mrproper
設定ファイルを含めてソースディレクトリ内を初期化する
カーネルソースをダウンロードしてきたら、ビルドする前に、まずこのコマンドで設定ファイルを確実に初期化すること

make clean
設定ファイルは残してソースディレクトリ内の一時ファイル等を削除する

make modules
カーネルモジュールのみをビルドする。カーネル本体はビルドしない

make modules_install
ビルドし終わったカーネルモジュールを、実際に現在のシステムにインストールする

make
引数でターゲットを指定しない場合、make allとなる。
make allは依存関係のチェック、カーネル本体とモジュールのビルド、不要になった一時ファイルの削除が自動的に行われる
(ターゲット)
make config 対話的に設定を行う
make menuconfig ターミナル上のGUIで設定を行う
make xconfig X上のGUIで設定を行う
make defconfig デフォルト状態の設定ファイルを作る
make oldconfig 現在のカーネルの設定を引き継ぐ
make cloneconfig (oldconfigと同じ)
make clean 設定ファイルを除いて一時ファイル等を削除
make mrproper 設定ファイルを含めて一時ファイル等を削除












initrd 形式はマウント可能なファイルシステムイメージを gzip 圧縮したもの。
gzip -d や gunzip コマンドで gzip を解凍した後、mount でマウントを行えば、イメージ内のディレクトリ・ファイルを参照することができる
ただし、イメージファイルをマウントするためには、マウントオプションでループバック形式であることを伝える必要がある
これを行うためには mount -o loop のようにオプションを指定すること


カーネルモジュールの実行時のコマンド

lsmod 現在有効にされているすべてのモジュールを表示
modinfo モジュールを指定して、その情報を表示
insmod モジュールを動的ロード
rmmod モジュールをアンロード
modprobe 依存関係を考慮してロード、アンロード
depmod 依存関係ファイルmodules.depを更新











modprobeオプション

-f 強制的に操作を行う
-r ロードではなくアンロードする
-l ロードできるモジュールの一覧を表示
--show-depends 指定したモジュールの依存関係を表示













unameは現在の環境の様々な情報を取得、表示することができるコマンド

-s カーネルの名前を表示
-r カーネルのバージョンを表示
-n ホスト名を表示 #nameだから
-m ハードウェア名を表示
-p CPUタイプを表示
-a 以上すべての情報を表示