第 4 章 カーネル構築 58
4.2 kernel v2.6.11
『17ページ
2.2.1 クロス開発環境の構築』の「kernel v2.6.11」の説明に従って環境の構築を行って
ください。4.2.1 カーネルコンフィグレーション
make ARCH=sh xconfigで、カーネルコンフィグレーションの画面を表示し、
カーネルコンフィグレーションの設定を行います。
設定した内容は、.configに書き込まれます。
お知らせ
設定をでフォルトに戻したい場合、開発キットCDの/cpz-kernelに収録されているconfig-2.6.11 で、/usr/src/cpz-2.6/linux-2.6.11.12/.configを上書きしてください。
make ARCH=sh xconfig実行で、以下のエラーメッセージで異常終了する場合は、apt-get install libqt3-devと実行し、qt関連のパッケージをインストールしてください。
kitty:/usr/src/cpz-2.6/linux-2.6.11.12# make ARCH=sh xconfig HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include HOSTCC scripts/basic/docproc
*
* Unable to find the QT installation. Please make sure that the
* QT development package is correctly installed and the QTDIR
* environment variable is set to the correct location.
*
make[1]: *** [scripts/kconfig/.tmp_qtcheck] エラー 1 make: *** [xconfig] エラー 2
4.2.2 カーネルコンパイル
カーネルコンパイルは、make ARCH=sh CROSS_COMPILE=sh4-linux- と実行することで行います。
kitty:/usr/src/cpz-2.6/linux-2.6.11.12# make ARCH=sh CROSS_COMPILE=sh4-linux -
・ ・ ・
kitty:/usr/src/linux-2.6.11.12# mkdir mod-dir
kitty:/usr/src/linux-2.6.11.12# make ARCH=sh CROSS_COMPILE=sh4-linux- INST ALL_MOD_PATH=/usr/src/linux-2.6.11.12/mod-dir/ modules_install
ここでは、コンパイルした後、./mod-dir/にモジュールをインストールしています。
4.2.3 割り込み応答性能のチューニング
kernel 2.6の特長として、カーネルレベルプリエンプションの導入によって、優先順位の低いプロセ
スの実行中に発生した優先順位の高いプロセスを即座に切り替えて実行できるようになりました。これにより、kernel 2.4と比較して割り込み応答性の向上が期待できます。
この応答性向上の鍵となるのはCPUクロックの精度を決定するinclude/asm-sh/param.hに定義された
HZの値です。
この値が大きくなるほど、タスクスケジューリングの切り替え待ち時間が短くなるため、応答性が 向上します。
但し、この値を大きくすると、割り込み応答性が向上する替わりに、システム全体の負荷が上昇す るため、SH-4のような処理能力の低いCPUでは、影響を考慮する必要があります。
この値は、i386用kernel 2.6(2.6.13以前)では1000になっていますが、kernel 2.6.13以降では250に変更 され、カーネルバージョンで値が異なっています。
SH-Linuxでは100がデフォルトに設定されています。
この値は、必要に応じて適宜変更してご使用ください。
■HZの値と割り込み応答性の関係
HZを変更することで、割り込み応答性がどの位変化するかを、以下の環境で測定した結果を示しま
す。1.
環境項 目 内 容
CPU CPZ-SH03(SH4:240MHz) kernel 2.4 SHLinux2.4
(カーネルバージョン2.4.17 OSタイマ周期=10ms) kernel 2.6 SHLinux2.6
HZ=100 (カーネルバージョン2.6.11 OSタイマ周期=10ms)
kernel 2.6
HZ=200 SHLinux2.6改良バージョン
(カーネルバージョン2.6.11 OSタイマ周期=5ms)
kernel 2.6
HZ=400 SHLinux2.6改良バージョン
(カーネルバージョン2.6.11 OSタイマ周期=2.5ms)
kernel 2.6
HZ=1000 SHLinux2.6改良バージョン
(カーネルバージョン2.6.11 OSタイマ周期=1ms)
RTLinux SHRTLinux(RTLinux-3.2-pre1) OS
(カーネルバージョン2.4.17)
ペリフェラルボード CPZ-4141(RS-232C×2チャンネル)
通信設定 ボーレート115200bpsその他条件 シリアルプログラムの優先度を-20(最優先)に設定
2.
測定内容シリアルポートでデータの送受信を繰り返し行い、データ受信完了からデータ送信までの時間を、
1万回測定した際の時間のバラつきと平均,標準偏差を求めます。
データ受信 受信完了
アプリケーション通知 データ送信開始
この時間を測定
データ送信
3.
測定結果グラフ3−1 遅延時間分布グラフ
Linux2.6
データ区間(μs)
HZ= 1000 HZ= 400 HZ= 200 HZ= 100 Linux2.4 RTLinux
0〜1000 3694 1485 713 376 379 10000
1000〜2000 6306 4014 2025 1007 1003 0
2000〜3000 0 3995 1987 997 998 0
3000〜4000 0 507 1989 997 991 0
4000〜5000 0 0 2030 991 1008 0
5000〜6000 0 0 1257 1003 997 0
6000〜7000 0 0 0 1009 1005 0
7000〜8000 0 0 0 998 994 0
8000〜9000 0 0 0 1012 1012 0
9000〜10000 0 0 0 981 996 0
10000〜 0 0 0 629 617 0
平均値
1131.31 1876.85 3135.91 5620.85 5621.63 582.15
最大値
1690 3128 5737 10735 10621 681
最小値
637 630 634 630 625 576
標準偏差
288.33 722.51 1443.42 2886.89 2885.91 4.43
4.
考察上記の結果から、デフォルトのLinux2.6(HZ= 100)では、Linux 2.4と変化が無いことが判ります。
HZの値を大きくするほど、遅延時間のバラつきが減少します。
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
~1000 ~2000 ~3000 ~4000 ~5000 ~6000 ~7000 ~8000 ~9000 ~10000 遅延時間[µsec]
RTLinux
Linux2.6(HZ=1000) Linux2.6(HZ=400) Linux2.6(HZ=200) Linux2.6(HZ=100) Linux2.4
発生回数
■HZの変更方法
HZを変更するには、Linuxカーネルのヘッダーファイルを書き換えて、カーネルの再コンパイルが
必要になります。1.
ヘッダーファイルの変更/usr/src/cpz-2.6/linux-2.6.11.12/include/asm-sh/param.hをテキストエディターで開いて、斜線の箇所を 100〜1000の間で変更します。
#ifndef __ASM_SH_PARAM_H
#define __ASM_SH_PARAM_H
#ifdef __KERNEL__
# ifdef CONFIG_SH_WDT
# define HZ 1000 /* Needed for high-res WOVF */
# else
# define HZ 100
# endif
# define USER_HZ 100 /* User interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */
#endif
2.
カーネルコンパイルまず、make ARCH=sh CROSS_COMPILE=sh4-linux- cleanを実行して、予め中間ファイルを削除しま す。その後、make ARCH=sh CROSS_COMPILE=sh4-linux- と実行することで行います。
kitty:/usr/src/cpz-2.6/linux-2.6.11.12# make ARCH=sh CROSS_COMPILE=sh4-linux - clean
:
kitty:/usr/src/cpz-2.6/linux-2.6.11.12# make ARCH=sh CROSS_COMPILE=sh4-linux -
:
kitty:/usr/src/linux-2.6.11.12# mkdir mod-dir
kitty:/usr/src/linux-2.6.11.12# make ARCH=sh CROSS_COMPILE=sh4-linux- INST ALL_MOD_PATH=/usr/src/linux-2.6.11.12/mod-dir/ modules_install
ここでは、コンパイルした後、./mod-dir/にモジュールをインストールしています。