[ インストール | FreeBSDトップ | 環境構築 ]


カーネル再構築

daemon


Introduction


インストールが終了したらカーネルの再構築を行う。
インストールの際にインストールされるカーネルは GENERIC カーネルと呼ばれ、 もっとも一般的で汎用性の高い構成となっている。 システムを運用していく上で問題が発生しなければ、 このままGENERICカーネルを使用しても差し支えないのだが、 汎用性を高くするために不要な設定やドライバがカーネルに含まれているので、 メモリを圧迫してしまうし必要な機能が有効になっていな場合もあるので 不要な機能を削除したオリジナルのカーネルを構築する。

Copy


FreeBSD-5.0 から、デバイスの設定は hints file と呼ぶファイルに設定するので、 オリジナルのカーネルコンフィグレーションファイルと hints file をコピーして、 自分の環境用のカーネルコンフィグレーションファイルと hints file を用意する。
FreeBSDをインストールするとカーネルのソースは/usr/src/sys以下に展開され、 コンフィグレーションファイルは/usr/src/sys/i386/conf以下に置かれる。 GENERICというファイルが GENERICカーネルのコンフィグレーションファイルで、 GENERIC.hintsというファイルがGENERICカーネルの hints file なので、 任意の名称のファイルにコピーする。
ホスト名を全て大文字にしたファイル名とするのが一般的。

LINT


現在のカーネルで指定できるデバイス名やオプション等を全て網羅した カーネルの設定ファイルを LINT と呼ぶ。
LINT ファイルを参照するとカーネルの構築時に設定ファイルで定義できる項目を 容易に調べられるので作成しておく。
LINT はカーネルのコンフィグレーションディレクトリで make LINT を実行すると、 カーネルのリリースノート(/usr/src/sys/conf/NOTES)から 自動的に作成される。
カーネルの設定は相反する指定があるので LINT に記述されている項目を 全て指定してカーネルを構築しようとしても失敗する(と思う)。

Edit


コピーしたコンフィグレーションファイルと hints file を編集する。
カーネルのコンフィグレーションファイルを任意のエディタで編集して カーネルの構成を定義する。 基本的には不要なオプションやドライバを削除し、 必要なオプションやドライバを追加する。 場合によっては、各ドライバの使用する割り込みや I/Oバッファのアドレスを指定する等のオプションを変更したりする必要もあるが、 ThinkPad s30の場合は不要だった。 ただし、suspend 後に usb デバイスが使用できなくなる不具合を修正するために、 optionを指定する必要はある。
以下に現在使用中のカーネルコンフィグレーション概要を示す。

cpu I486_CPU 古いタイプの CPU 指定は不要なので削除
I586_CPU
ident コンフィグレーションファイル名 コンフィグレーション名を指定
hints ヒントファイル名 ヒントファイル名を指定
options INET6 IPv6 は現状では使用しないので削除
options NFSSERVER NFSサーバの機能は使用しないので削除
options NFS_ROOT ルートディレクトリを NFS でシェアしないので削除
device eisa eisa デバイスは装備していないので削除
device fdc USB 接続のフロッピードライブは SCSI として認識され、 通常接続のフロッピードライブは装備していないので削除
device ataraid
device atapifd
device atapist
IDE 接続の RAID/FD/TAPEは使用しないので削除
device ahb
device ahc
  :
device stg
SCSIデバイスは使用しないので削除
device amr
device arcmsr
  :
device twe
SCSI 接続の RAID コントローラは使用しないので削除
device lpt
device plip
device ppi
パラレルポートは装備していないので削除
device de
device rm
  :
device wl
s30 の場合は内蔵に Intel EtherExpress を使用しているので miibus、fxp を残してネットワークカードのデバイスは全て削除
device gif
IPv6 は使用しないので削除
device faith
device uhid
device ukbd
  :
device rue
常用する USB 周辺機器以外も削除
device fwe
FireWire 接続のネットワークインタフェースも削除
device sound 音を鳴らしたいので追加
device snd_ich
option PSM_HOOKRESUME suspend/resume 後の USB リセット指定
option PSM_RESETAFTERSUSPEND
option SMBFS Windows の共有をmount (8) したいので追加
option NETSMB
option NETSMBCRYPTO
option LIBMCHAIN
option LIBICONV Shift Jis のファイルシステムを mount (8) した際に 日本語のファイル名を表示させるために追加

hints file を任意のエディタで編集してカーネルの構成を定義する。 シリアルポート、パラレルポートは装備していないので削除する。
以下に現在使用中のヒントファイル概要を示す。

hint.fdc.0.disabled="1" FDD は使用しない
hint.sio.0.disabled="1" シリアルポートは使用しない
hint.sio.1.disabled="1"
hint.ppc.0.disabled="1" パラレルポートは使用しない

Configure


新しいカーネルのコンフィグレーションを有効にする。
コンフィグレーションを有効にするためには、 コンフィグレーションファイルのあるディレクトリで、 カーネルコンフィグレーションファイル名を引数として configコマンドを実行する。

# config ファイル名
Kernel build directory is ../compile/ファイル名
Don't forget to do a ``make depend''

configコマンドを実行する事によりコンパイル環境が構築される。

Compile


新しいカーネルのコンパイルを行う。
コンパイルディレクトリは 5.0 以降で変更になったので注意する。 /usr/src/sys/i386/compile/コンフィグレーションファイル名に移動して コンパイルを行う。 make dependを忘れずに。

# cd ../compile/ファイル名
# make depend
# make

Install


新しいカーネルとドライバモジュールをインストールする。
古いカーネルは/boot/kernel.oldディレクトリ以下にセーブされるが、 カーネルを再構築(make install)すると /boot/kernel.old以下のファイルは現在のカーネルで上書きされてしまう。 インストール時のGENERICカーネルなど、 確実に起動できるカーネルとカーネルモジュールをバックアップしておくと良い。

# make install

Reboot


万が一新しいカーネルが起動できない場合は、起動時の

Welcome to FreeBSD!

1. Boot FreeBSD [default]
2. Boot FreeBSD with ACPI disabled
3. Boot FreeBSD in Safe Mode
4. Boot FreeBSD in single user mode
5. Boot FreeBSD with verbose logging
6. Escape to loader prompt
7. Reboot

Select option, [Enter] for default
or [Space] to pause timer 5

のメッセージが表示されている時に6を入力すると、 loader の画面が表示されるので、更に Enter 以外の任意のキーを入力する。
そうするとloaderのプロンプトokが表示されるので、 unloadコマンドで現在のカーネルをアンロードした後、 loadコマンドで確実に起動できるカーネルを選択して bootコマンドにより起動させカーネルを再度構築する。
カーネルの名称が不明な場合はlsコマンドを実行すると、 ファイルの一覧が表示される。
5.0 からカーネルを格納するディレクトリが /boot/kernelに変更になったので注意する。

Hit [Enter] to boot immediately, or any other key for command prompt
Booting [kernel] in 9 second...

Type '?' for a list of commands, 'help' for more detailed help.
ok unload
ok ls boot/kernel
boot/kernel
    kernel
    accf_data.ko
    accf_http.ko
      :
ok load boot/kernel/kernel
boot/kernel/kernel text=0x... data=0x... syms=[0x4+0x...]
ok boot


Last Update: Nov. 29 2005 Copyright © Mitzyuki IMAIZUMI 2002,2004,2005 All Rights Reserved,