カーネルの再構築

「カーネルの再構築」の編集履歴(バックアップ)一覧はこちら

カーネルの再構築」(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」あたりから下を眺めるといいと思います。

表示オプション

横に並べて表示:
変化行の前後のみ表示: