Edit
Linuxカーネルについて

Linuxカーネルは、いろいろなOSの基本思想の中で、その誕生の流れからSystem VやBSD,MinixなどのUnixの流れを汲んでいることから、カーネルが担う部分が多々ある。しかしながら、MachやWindowsNTなどの、マイクロカーネル思想からの影響を受け、ver2.xからはカーネル機能を最低限にし、多くの機能をカーネルモジュールとして分割は行ったものの、いまだにリコンパイルの呪縛から逃れ切れていないようだ。

Edit
カーネルのコンパイル準備

ncursesのインストール(詳細は下記参照)

# yum install ncurses ncurses-devel

現在のCentOSのカーネルソースをインストール

# yum install kernel-devel

カーネルソースのインストール

# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.6.tar.gz
# tar zxvf linux-2.6.28.6.tar.gz
# make mrproper                            <- configファイルすら消すClean

現在の設定ファイルをコピー

# cp /boot/config-2.6.18-92.el5 /usr/src/linux-2.6.28.6/.config

※ncursesとは、端末に依存しない形式でテキストユーザインタフェース(TUI)を作成するためのAPIを提供するライブラリ。画面切り替えを最適化し、リモートシェルで使ってもレイテンシを最小に抑えるようになっている。

Edit
RPMファイルの作成とインストール

# make rpm
# cp /usr/src/redhat/RPMS/i386/kernel-2.6.28.3-1.i386.rpm /usr/local/src
# rpm -ivh /usr/src/redhat/RPMS/x86_64/kernel-2.6.28.3-1.x86_64.rpm

Edit
カーネルの設定

カーネルの設定プログラムはいろいろ準備されていますが、menuconfigがお勧めである。

# cd /usr/src/linux-2.6.28.6
# make menuconfig

操作方法は、<Y>で指定モジュールを組み込み(表示は*)、<N>で除外、<M>でモジュール化(表示はM)、<ESC>2回押しで、前画面に戻る、</>で検索。設定するべき内容については下記を参照のこと。推奨については通常利用を想定(保証しません!)

Edit
General設定

設定項目説明推奨
Prompt for development and/or incomplete code/drivers開発中もしくは実験的に実装されている機能を表示させるかどうかを選択する項目
Local version - append to kernel releaseバージョン番号に付加する文字列を設定(例:Project-001等)
Automatically append version information to the version stringバージョン管理システムで使うリビジョン番号をバージョン文字列に付加*
Support for paging of anonymous memory (swap)・メモリー・ページを2次記憶装置に退避させるメモリー・スワッピング機能を有効にする*
System V IPCSystem V方式のプロセス間通信をサポートする
POSIX Message QueuesPOSIXで定義されたメッセージ・キューをサポートする*
BSD Process Accountingプロセスの実行ログ生成機能を有効にする*
BSD Process Accounting version 3 file format新しい形式(バージョン3形式)のログを生成する
Export task/process statistics through netlink (EXPERIMENTAL)稼働中のタスクやプロセスの情報をnetlink経由で公開*
Enable per-task delay accounting (EXPERIMENTAL)*
Enable extended accounting over taskstats (EXPERIMENTAL)
Auditing supportシステム監査用フレームワークを有効にする*
Enable system-call auditing support*
Kernel .config supportカーネル設定ファイル(.config)をカーネル内部に保存する
Kernel log buffer size (16 => 64KB, 17 => 128KB)カーネルのログバッファーのサイズ指定17
Control Group supportCPUやメモリー・ノードをグループ化して分割する
Group CPU scheduler
Create deprecated sysfs files重複したsysfsファイルを作成可能にする*
Kernel->user space relay support (formerly relayfs)debugfsなどのファイル・システムのリレー・インタフェースをサポートする*
Namespaces support*
UTS namespace
IPC namespace
User namespace (EXPERIMENTAL)
PID Namespaces (EXPERIMENTAL)
Initial RAM filesystem and RAM disk (initramfs/initrd) support初期RAMディスクをサポート*
Initramfs source file(s)ファイル名の指定、初期値=initrd.img
Optimize for sizeサイズ優先の最適化をしてカーネルをコンパイルする*
Configure standard kernel features (for small systems)標準カーネル機能のカスタマイズ(小規模システム用に機能を削る場合に指定)
Enable 16-bit UID system calls (NEW)古い16ビットUIDシステム・コール用のラッパーを有効にする*
Sysctl syscall support (NEW)カーネル稼働中に設定を参照・変更できるsysctlシステム・コールを有効にする*
Load all symbols for debugging/ksymoops (NEW)デバッグ/トレース用のシンボル情報をカーネルに組み込む*
+ Include all symbols in kallsyms
+ Do an extra kallsyms pass*
Support for hot-pluggable devices (NEW)Hotswap可能な機器をサポートする*
Enable support for printk (NEW)カーネル・メッセージを出力するprintk関数を有効にする*
BUG() support (NEW)カーネルの不具合情報を出力するBUG()関数を有効にする*
Enable ELF core dumps (NEW)ELF形式のコア・ダンプを作成する機能を提供する*
Enable PC-Speaker support (NEW)PCのスピーカーを利用する*
Disable heap randomization*
Choose SLAB allocator (SLAB)2択 SLAB(一般的なスラブ・アロケータ) or SLUB(メモリーを効率良く使用できるアロケータ)SLAB
Profiling support (EXPERIMENTAL)*
Activate markers
Profile system profiling (EXPERIMENTAL)M
Profile AMD IBS support (EXPERIMENTAL)
Kprobesユーザーがあらかじめ指定したアドレス(プローブポイント)をカーネルが実行した際に、登録されているコールバック関数を呼び出す機能を提供する機構です。特定区間の実行速度の計測や障害発生時の動作解析などに有効です。×

Edit
ローダブルモジュール

設定項目説明推奨
Enable loadable module support動的に組み込み可能なカーネル・モジュールに関する設定*
Forced module loadingカーネルが危険と判断していても,強制的にカーネル・モジュールをロードする
Module unloadingカーネル・モジュールの取り外しに対応する*
+ Forced module unloadingカーネルが危険と判断していても,強制的にカーネル・モジュールを取り外し可能にする
Module versioning supportカーネル・モジュールにカーネルのバージョン番号を組み込み,バージョンが異なるモジュールを利用不可にする*
Source checksum for all modulesビルドに使ったソース・コードのチェック・サム情報をカーネル・モジュールに組み込む*

Edit
ブロックレイヤー

設定項目説明推奨
Enable the block layerブロック・デバイス層を有効にする*
Support for Large Block Devices2Tバイトを超えるブロック・デバイスを取り扱るようにする*
Support for tracing block io actionsキューに蓄えられた入出力処理を追跡可能にする*
Support for Large Single Files2Tバイトを超えるファイルを取り扱えるようにする*
Block layer SG support v4 (EXPERIMENTAL)SCSI規格のバージョン4をサポートする
Block layer data integrity support
IO Schedulersブロック入出力に利用するスケジューリング・アルゴリズムに関する設定*
Anticipatory I/O scheduler汎用性の高いスケジューラ(Anticipatory)をサポートする*
Deadline I/O schedulerデータベースのような単一プロセスの入出力性能向上に向いた(Deadline)スケジューラをサポートする*
CFQ I/O schedulerデスクトップ環境向き(CFQ)のスケジューラをサポートする*
Default I/O scheduler初期設定スケジュールの設定 Anticipatory,Deadline,CFQ,No-op(スケジューラを使用しない=I/O要求順に処理する)のどれかを選択CFQ

Edit
プロセッサのタイプと機能の設定

設定項目説明推奨
Tickless System (Dynamic Ticks)カーネル内の処理を定期的なタイマー割り込みに依存しないようにする
High Resolution Timer Support高精度タイマーをサポートする
Symmetric multi-processing support対称型マルチプロセッサに対応する*
Enable MPS table*
Subarchitecture Typeプロセッサ以外のシステム・アーキテクチャを設定。PC-compatible,AMD Elan,Generic architectureの3択PC-compatible
<Generic時のみ>NUMAQ (IBM/Sequent) : Non-Uniform Memory Accessアーキテクチャ「NUMA-Q」
<Generic時のみ>Summit/EXA (IBM x440) : 米IBM社のx440に採用されている分散共有メモリーのアーキテクチャ
<Generic時のみ>Support for Unisys ES7000 IA32 series : 米Unisys社のES7000で採用されているCMP(Cellular Multi Processing)アーキテクチャ
<Generic時のみ>Support for big SMP systems with more than 8 CPUs : 8個以上のCPUを搭載するサブシステムのアーキテクチャ
RDC R-321x SoC
Single-depth WCHAN output*
Paravirtualized guest support準仮想化環境でカーネルを稼働させるための機構を有効にする
VMI Guest support
KVM paravirtualized clock
KVM Guest support
Lguest guest support
Enable paravirtualization code
Memtest
Processor family386,486,586/K5/5x86/6x86,Pentium-Classic,Pentium-MMX,Pentium-Proの6択から選択Pentium-Pro
Generic x86 supportx86互換プロセッサ汎用の最適化をする。選択したプロセッサ以外のx86環境でも稼働可能になる*
Pentiumpro memory ordering errata workaround*
HPET Timer Support高性能なハードウエア・タイマー「HPET」をサポートする*
Maximum number of CPUs (2-512)最大プロセッサ数を設定する32
SMT (Hyperthreading) scheduler supportHyperthreadingのような「SMT」(Simultaneous Multithreading)機構をサポートする*
Multi-core scheduler supportマルチコア・プロセッサ向けのプロセッサ・スケジューラをサポートする*
Preemption Modelプロセス実行中にCPUを横取りして,ほかのプロセスに割り当てるか否かの設定。3択。No Force Preemption (Server) CPUの横取りをしない, Voluntary Kernel Preemption (Desktop)特定ポイントだけCPUの横取りを可能にする, Preemptible Kernel (Low-Latency Desktop)すべての処理でCPUの横取りを可能にするVoluntary Kernel Preemption
Machine Check Exceptionプロセッサの自己診断機能による例外を受け取り可能にする*
Check for non-fatal errors on AMD Athlon/Duron / Intel PentiumAthlon/Duron,Pentium 4プロセッサの致命的でないエラーを検知可能にする
check for P4 thermal throttling interrupt発熱に応じて動作クロックや電圧を調整するPentium 4の「Thermal Throttling」機能の動作を検知可能にする*
Toshiba Laptop support東芝製ノートPCのシステム管理モードにアクセスするドライバを有効にするM
Dell laptop supportDell Inspiron 8000のシステム管理モードにアクセスするドライバを有効にするM
Enable X86 board specific fixups for reboot一部のハードウエアで再起動がうまく行かない問題を回避する
/dev/cpu/microcode - microcode supportIA32プロセッサのマイクロコード更新用のデバイス・ファイル(/dev/cpu/microcode)を有効にするM
Intel microcode patch loading support*
AMD microcode patch loading support
/dev/cpu/*/msr - Model-specific register supportModel-specificレジスタにアクセスするためのデバイス・ファイル(/dev/cpu/*msr)を有効にするM
/dev/cpu/*/cpuid - CPU information supportプロセッサ情報(CPUID)参照用のデバイス・ファイル(/dev/cpu/*/cpuid)を有効にするM
High Memory Support最大メモリの設定, off(1GB), 4GB, 64GB の三択4GB
Memory modelメモリー・モデルの選択、flat memory=一般的なメモリー・モデル,Sparse memory=活線挿抜に対応したメモリーFlat Memory
64 bit Memory and IO resources (EXPERIMENTAL)64ビット長のメモリー・アドレスやI/Oアドレスをサポートする*
Add LRU list to track non-evictable pages*
Allocate 3rd-level pagetables from highmemHIGHMEM領域のページのアドレス解決に3段ページ・テーブルを使用する*
Check for low memory corruption
Reserve low 64K of RAM on AMI/Phoenix BIOSen*
Math emulation数値演算プロセッサをソフトウエアでエミュレートする
MTRR (Memory Type Range Register) supportプロセッサのメモリー・アクセス方法を制御するレジスタを/proc/mtrr経由で操作可能にする*
MTRR cleanup support*
MTRR cleanup enable value (0-1)0
MTRR cleanup spare reg num (0-7)1
x86 PAT support
EFI runtime service support*
Enable seccomp to safely compute untrusted bytecode
Timer frequencyタイマー割り込みの頻度を設定する1000 HZ
kexec system callマシンを再起動せずに他のシステムを起動するkexecシステム・コールを有効にする*
kernel crash dumpskexecによる起動後、クラッシュ・ダンプを生成する*
Physical address where the kernel is loadedカーネルをロードする物理アドレスを指定する0x100000
Build a relocatable kernel (EXPERIMENTAL)再配置可能なカーネルをビルドする*
Alignment value to which kernel should be alignedカーネルをロードするアドレスのアライメントを指定する0x400000
Support for hot-pluggable CPUsCPUの活線挿抜をサポートする*
Compat VDSO support(2.3.3より前のGNU Cライブラリが採用していた)従来の形式のVDSO(Virtual Dynamic Shared Object)をサポートする
Built-in kernel command line

Edit
パワー制御とACPIのオプション設定

設定項目説明推奨
Power Management supportACPIやAPMなどの電源管理機構に関する設定*
Power Management Debug Support電源管理コードのデバッグ機能を有効にする
Verbose Power Management debugging電源管理コードの冗長化デバッグ機能を有効にする
Suspend/resume event tracingサスペンド/レジューム中に発生したイベントを追跡可能にする
Suspend to RAM and standbyメイン・メモリーが通電状態でシステムのスリープを許可する*
Hibernation (aka 'suspend to disk')ハイバネーション機能を有効にする
Default resume partitionシステム状態を保存するディスク区画を設定する
ACPI (Advanced Configuration and Power Interface) SupportACPIを有効にする*
APM (Advanced Power Management) BIOS supportAPM BIOSに関する設定*
CPU Frequency scalingCPUの動作周波数を動的に変更できるようにする*
Enable CPUfreq debugging*
CPU frequency translation statisticsM
CPU frequency translation statistics details*
Default CPUFreq governorCPUの動作周波数調整ポリシーを設定するperformance(性能を重視する),userspace(ユーザー・アプリケーションで調節),ondemand,conservativeの4択userspace
'performance' governor性能重視の「performance」ポリシーを有効にする*
'powersave' governor省電力重視の「powersave」ポリシーを有効にするM
'userspace' governor for userspace frequency scalingユーザー・アプリケーションで調整する「userspace」ポリシーを有効にする*
'ondemand' cpufreq policy governorCPU負荷に応じて動的に周波数を調整する「ondemand」ポリシーを有効にするM
'conservative' cpufreq governorondemandポリシーよりも緩やかに周波数を調整する「conservative」ポリシーを有効にするM
ACPI Processor P-States driverCPUのP-Stateを制御するACPIドライバを有効にするM
AMD Mobile K6-2/K6-3 PowerNow!AMD Mobile K6-2/K6-3の「PowerNow!」機能をサポートする
AMD Mobile Athlon/Duron PowerNow!AMD Mobile Athlon/Duronの「PowerNow!」機能をサポートする*
AMD Opteron/Athlon64 PowerNow!Opteron/Athlon64の「PowerNow!」機能をサポートする*
CPUFreq processor drivers
ACPI SupportACPI機能を有効にする*
Cyrix MediaGX/NatSemi Geode Suspend ModulationCyrix MediaGX/NatSemi Geodeのサスペンド機能をサポートする
Intel Enhanced SpeedStep(deprecated)Intelプロセッサの拡張SpeedStepをサポートする*
+ Built-in tables for Banias CPUsBaniasコアのCPUの内部テーブルを使用する*
Intel Speedstep on ICH-M chipsets (ioport interface)ICH-MチップセットのSpeedStepをサポートする*
Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)440BX/ZX/MXチップセットのSpeedStepをサポートする*
Intel Pentium 4 clock modulationPentium 4のクロック調整機能をサポートするM
nVidia nForce2 FSB changingNVIDIA nForce2のFSB(Front Side Bus)動作周波数調整機能をサポートする
Transmeta LongRunTransmeta社のプロセッサのLongRun機能をサポートする*
VIA Cyrix III LonghaulVIA Cyrix IIIのLonghaul機能をサポートする
VIA C7 Enhanced PowerSaverVIA C7の拡張PowerSaver機能をサポートする
shared options
/proc/acpi/processor/../performance interface (deprecated)主にデバッグ目的に使うprocfsインタフェースを有効にする
Relaxed speedstep capability checksSpeedStepの機能チェックを一部省略する
CPU idle PM support*

Edit
バスのオプション指定(PCI etc)

設定項目説明推奨

Edit
実行可能ファイルのフォーマット関係

設定項目説明推奨

Edit
ネットワークの設定

設定項目説明推奨

Edit
デバイスドライバの設定

設定項目説明推奨

Edit
ファームウェア(機器に内臓されるコントロールドライバ)の設定

設定項目説明推奨

Edit
ファイルシステム関係

設定項目説明推奨

Edit
カーネルデバッグ関係(Hackingと言っている)

設定項目説明推奨

Edit
セキュリティオプション

設定項目説明推奨

Edit
暗号機能に関する設定

設定項目説明推奨

Edit
仮想化に関する設定

設定項目説明推奨
Kernel-based Virtual Machine (KVM) support
KVM for Intel processors support
KVM for AMD processors support
Linux hypervisor example code
PCI driver for virtio devices (EXPERIMENTAL)
Virtio balloon driver (EXPERIMENTAL)

Edit
ライブラリ・モジュール

設定項目説明推奨
CRC-CCITT functionsM
CRC16 functionsM
CRC calculation for the T10 Data Integrity Field
CRC ITU-T V.41 functionsM
CRC32 functions*
CRC7 functions
CRC32c (Castagnoli, et al) Cyclic Redundancy-Check*

Edit
起動設定

# emacs /etc/grub.conf
  title CentOS (2.6.28.6)
       root (hd0,0)
       kernel /vmlinuz-2.6.28.6 ro root=/dev/VolGroup00/LogVol00
       initrd /initrd-2.6.28.6.img

Edit
Kernelモジュールの作成

# make bzImage
# cp /usr/src/linux-2.6.28.6/arch/i386/boot/bzImage /boot/vmlinuz-2.6.28.6

Edit
initrd.img ファイルの作成

# make modules
# make modules_install
# mkinitrd /boot/initrd-2.6.28.6.img 2.6.28.6

Edit
GRUBの起動画像の変更

/boot/grubにある、splash.xpm.gzの画像を変更することで、起動時の画像を変更することができる。注意点は640x480ドットの14色で作成することである。そのためImagemagicが入っていれば以下の手順で画像を変換できる。

# convert -colors 14 gazo-source.gif splash.xpm
# gzip splash.xpm
# cp splash.xpm.gz /boot/grub/splash.xpm.gz

Edit
起動後のチェック

メモリ空間をチェックする。

# cat /proc/meminfo

ロードされたプログラムの確認

# dmesg

モジュールのロード状況

# lsmod                      <- 横に、Name サイズ 利用Page数(1page=4kB)の順

Edit
必要なモジュールのロードと解除

例:MSDOSのファイルシステムのモジュールロード

# insmod /usr/src/linux/modules/msdos.o

例:MSDOSのファイルシステムのモジュール解除

# rmmod msdos