「カーネルの再構築」の編集履歴(バックアップ)一覧はこちら
「カーネルの再構築」(2015/05/25 (月) 06:46:42) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
ここでは、Linuxカーネルの再構築について説明します。
カーネルは、Slackware 14 の バージョン3.2.29を使用します。
バージョンが多少異なっても、ほとんど問題はないとおもいます。
#contents()
**なぜ、カーネルを再構築するのか。
あなたが現在の環境に満足している場合、カーネルの再構築はする必要はないでしょう。
しかし、現在のカーネルに何らかのパッチを当てたい場合や、無駄なモジュールを消したいとき、モジュールをカーネルに取り込むため、
もしくは、設定を変更したい場合など、自分用にチューニングしたい場合にカーネルの再構築が必要になります。
なお、カーネルの再構築をする場合に、新しいカーネルで問題が発生し、起動出来なくなる可能性があるので、再構築する前のカーネルを残しておくことをおすすめします。
**設定をする前に…
カーネルの設定を行う場合に、自分の使用してるコンピュータのシステムについて理解しなければいけません。
ほとんどの情報はlspciによって収集することが可能のようです。
# lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 02)
00:1c.2 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 3 (rev 02)
00:1d.0 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 02)
00:1d.1 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 02)
00:1d.2 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 02)
00:1d.3 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 02)
00:1d.7 USB controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7-M Family) SATA Controller [IDE mode] (rev 02)
00:1f.3 SMBus: Intel Corporation N10/ICH 7 Family SMBus Controller (rev 02)
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
05:01.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller
05:01.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)
05:01.2 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev 01)
05:01.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 0a)
05:07.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
また、現在使用してるモジュールを確認したい場合は、lsmodを使用すれば確認できます。
# lsmod
Module Size Used by
下に、モジュール一覧が表示される。
**設定しよう
必要な情報を入手したら、カーネルの設定をします。
作業は/usr/src/linux 内で行います。
作業を行う前に、必要に応じて、Makefileを編集します。
重要なところは前半です。
VERSION = 3
PATCHLEVEL = 2
SUBLEVEL = 29
EXTRAVERSION =
NAME = Saber-toothed Squirrel
通常は変更する必要はありませんが、あなたが新しく作成したカーネルということでEXTRAVERSIONをつけておくことをおすすめします。
例
EXTRAVERSION = MyKernel
古い設定を消去します
#make mrproper
上記のコマンドによって、古い設定ファイル(.config)が削除されます。
次に、設定を行うにはターミナル等で、以下のコマンドを使用します。
# make menuconfg
#image(kernel.png, width=640, height=400)
設定後、新しい設定ファイルが作成されているとおもいます。
もしも、Xが起動しているのであれば、
# make xconfig
でGUIで設定も可能です。
もしも、あなたがデフォルトの設定ファイルを使用したいときには、
/boot 内にある config-* を /usr/src/linux/.config にコピーしてから設定してください。
例
[/usr/src/linux] # cp /boot/onfig-huge-smp-3.2.29-smp ./.config
[/usr/src/linux] # make menuconfig
設定は先ほど入手した情報などを元に設定してください。
TODO: 設定について詳しく書く。
**コンパイル、そしてインストール
設定が完了したら、いよいよカーネルをコンパイルしましょう。
# make
オプションに -j番号 を入力することによって、複数のプロセスを使用してコンパイルされます。(CPUの数 + 1 がいいらしい?)
コンパイルが完了したらモジュールをビルドします。
# make modules_install
次に、カーネルイメージを/boot にコピーします。
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-3.2.29-MyKernel
.config もとっておきましょう
# cp /usr/src/linux/.config /boot/config-3.2.29-MyKernel
以上で再構築は終了です。ブートローダの設定で、再構築したカーネルを読み込めるように設定し、起動してみましょう!
**参考
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=7
ここでは、Linuxカーネルの再構築について説明します。
カーネルは、Slackware 14 の バージョン3.2.29を使用します。
バージョンが多少異なっても、ほとんど問題はないとおもいます。
#contents()
**なぜ、カーネルを再構築するのか。
あなたが現在の環境に満足している場合、カーネルの再構築はする必要はないでしょう。
しかし、現在のカーネルに何らかのパッチを当てたい場合や、無駄なモジュールを消したいとき、モジュールをカーネルに取り込むため、
もしくは、設定を変更したい場合など、自分用にチューニングしたい場合にカーネルの再構築が必要になります。
なお、カーネルの再構築をする場合に、新しいカーネルで問題が発生し、起動出来なくなる可能性があるので、再構築する前のカーネルを残しておくことをおすすめします。
**設定をする前に…
カーネルの設定を行う場合に、自分の使用してるコンピュータのシステムについて理解しなければいけません。
ほとんどの情報はlspciによって収集することが可能のようです。
# lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 02)
00:1c.2 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 3 (rev 02)
00:1d.0 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 02)
00:1d.1 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 02)
00:1d.2 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 02)
00:1d.3 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 02)
00:1d.7 USB controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7-M Family) SATA Controller [IDE mode] (rev 02)
00:1f.3 SMBus: Intel Corporation N10/ICH 7 Family SMBus Controller (rev 02)
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
05:01.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller
05:01.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)
05:01.2 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev 01)
05:01.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 0a)
05:07.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
また、現在使用してるモジュールを確認したい場合は、lsmodを使用すれば確認できます。
# lsmod
Module Size Used by
下に、モジュール一覧が表示される。
**設定しよう
必要な情報を入手したら、カーネルの設定をします。
作業は/usr/src/linux 内で行います。
作業を行う前に、必要に応じて、Makefileを編集します。
重要なところは前半です。
VERSION = 3
PATCHLEVEL = 2
SUBLEVEL = 29
EXTRAVERSION =
NAME = Saber-toothed Squirrel
通常は変更する必要はありませんが、あなたが新しく作成したカーネルということでEXTRAVERSIONをつけておくことをおすすめします。
例
EXTRAVERSION = MyKernel
古い設定を消去します
#make mrproper
上記のコマンドによって、古い設定ファイル(.config)が削除されます。
次に、設定を行うにはターミナル等で、以下のコマンドを使用します。
# make menuconfg
#image(kernel.png, width=640, height=400)
// EXTRAVERSIONを設定しておけば大丈夫?
特に設定のテスト時は、General setupにある、Local versionを設定しておきましょう。でないと、/lib/modules/ にある、カーネル毎のフォルダが上書きされてしまいます。
/lib/modules/に置かれるフォルダ名は、カーネルバージョンの末尾にローカルバージョンを付加したものになります。(EXTRAVERSION も設定した場合は未検証)
とはいっても、同じものが置かれる(はず)なので、(作っていないはずのモジュールが残っているのを気にしなければ)設定しないのもありですが・・
設定後、新しい設定ファイルが作成されているとおもいます。
もしも、Xが起動しているのであれば、
# make xconfig
でGUIで設定も可能です。
もしも、あなたがデフォルトの設定ファイルを使用したいときには、
/boot 内にある config-* を /usr/src/linux/.config にコピーしてから設定してください。
例
[/usr/src/linux] # cp /boot/onfig-huge-smp-3.2.29-smp ./.config
[/usr/src/linux] # make menuconfig
設定は先ほど入手した情報などを元に設定してください。
バージョンをまたいで設定ファイルを再利用したい時、あるいは設定を変更した別バージョンを作りたい時は、
/boot 内にある config-* を /usr/src/linux-new/.config にコピーしてから、make oldconfigなどを利用して設定をインポートしてください。
例 (ソースを/usr/src/linux-new/に置き、/usr/src/linux-new-custom/で作業する場合)
[/usr/src/linux-new] # cp /boot/onfig-huge-smp-3.2.29-smp ./.config
[/usr/src/linux-new] # make O=/usr/src/linux-new-custom oldconfig
[/usr/src/linux-new] # rm .config
[/usr/src/linux-new] # cd /usr/src/linux-new-custom/
[/usr/src/linux-new-custom] # make menuconfig
oldconfig: コピー元にない設定項目は、設定値をどうするか質問されます
olddefconfig: コピー元にない設定項目は、デフォルトの設定値になります (「ない」の判断が微妙なのか、設定の依存関係の影響か不明ですが、設定値がnだらけになる場合があるので、利用時は注意して下さい)
どちらも、/usr/src/linux-new/.configをテンプレートとして、/usr/src/linux-new-custom/.configを作成します。
※ (/usr/src/linux-new/にある)コピー元の.configを消しておかないと、ビルド時(make bzImage modulesなど)で"make mrproper"が必要というエラーが発生します
※ O=(出力先) は、出力先の指定オプションです。
TODO: 設定について詳しく書く。
**コンパイル、そしてインストール
設定が完了したら、いよいよカーネルをコンパイルしましょう。
# make
オプションに -j番号 を入力することによって、複数のプロセスを使用してコンパイルされます。(CPUの数 + 1 がいいらしい?)
コンパイルが完了したらモジュールをビルドします。
# make modules_install
/lib/modules/(カーネルバージョン)(ローカルバージョン) にモジュールが配置され、depmod (バージョン)されます。
次に、カーネルイメージを/boot にコピーします。(arch/x86/boot/bzImageなどの場合もあります。)
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-3.2.29-MyKernel
.config もとっておきましょう
# cp /usr/src/linux/.config /boot/config-3.2.29-MyKernel
System.map もコピーしましょう
# cp /usr/src/linux/System.map /boot/System.map-3.2.29-MyKernel
(必要に応じて、/boot/System.mapのリンクも修正しましょう)
必要に応じて、initrdも作成しましょう。(make menuconfigで、必要なモジュールを全て選択した場合は、initrdがなくても起動するはずです)
# cd /boot
# mkinitrd -c -k 3.2.29 -o initrd-3.2.29-MyKernel.gz
-c オプションは、作業用フォルダ(/boot/initrd-tree)をクリアするオプションです。
-k オプションで指定するのは、(カーネルバージョン)(ローカルバージョン) です。modules_installの際にdepmod の後ろに表示された、(カーネルバージョン)(ローカルバージョン)と同じです。(分からなくなった場合は、ls /lib/modules/ してみましょう)
-o (出力先) オプションを指定しない場合は、/boot/initrd.gzに出力されます。特にinitrd.gzがリンクでなくファイルの実体の場合は、上書きに注意しましょう。
以上で再構築は終了です。ブートローダの設定で、再構築したカーネルを読み込めるように設定し、起動してみましょう!
補足:うっかり起動できない設定のまま再起動してしまった場合は、あわてず、インストール用DVDで起動してみましょう。(Setupは実行しないで)
ファイルの編集などもできるので、/etc/lilo.confなども修正できるはず!
ちなみに、shutdownコマンドが無くてあわてると思いますが、確かrebootコマンドがあったと思います。これで、shutdown(物理)しなくても大丈夫っ!
**参考
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=7
[[Slackware docs「ソースからカーネルをビルドする方法(英語版)」>http://docs.slackware.com/howtos:slackware_admin:kernelbuilding]] 「Building your kernel」あたりから下を眺めるといいと思います。