201試験に向けて勉強してきたけど、悪いサボり癖、五月病のような気怠さで勉強を怠ってしまっていた。
今日はとことんやる。
安定版かどうかの判断のためには、まずバージョンが 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 以上すべての情報を表示