1. 能書き
FreeBSD をインストールした時点で動いているカーネルは、「GENERIC」というカーネルです。
カーネルとはメモリ管理やタスク管理デバイスの管理など、OS の基本機能を実現しています。
自分のマシンに合わせたカーネルを作成することにより、以下のような利点があります。
素早く起動するようになります
カーネルは定義してあるハードウェアしか検出を行わないので、システムの起動にかかる時間が短くなります。
メモリの消費量が減少します
システムに合わせたカーネルは、大抵 GENERIC カーネルより少ないメモリしか消費しません。カーネルは常にメモリ上に存在するプロセスなので、このことは重要になります。したがって、RAM が少ないシステムでは、カーネルの再構築は大変重要です。
追加のハードウェアをサポートします
システムに合わせたカーネルは、サウンドカードなど GENERIC カーネルに存在しないデバイスのサポートを追加することができます。
2. カーネルのコピー
デフォルトのカーネルは、「GENERIC」という名前で、/usr/src/sys/i386/conf/ にあります。そこで、
> cd /usr/src/sys/i386/conf/
> cp GENERIC 仮名
と入力してカーネルのコピーを作ります。仮名の部分にはあなたがつくるシステムのわかりやすいカーネル名をいれてください。例えば「MYKERNEL」など英数字であればなんでも結構です。
慣習として、カーネル名はすべて大文字で記述するようです。
3. カーネルの編集
さて、コピーしたカーネルを editor を用いて編集します。
編集に失敗すると最悪の場合システムが立ち上がらなくなるので慎重にやりましょう。
空白行は、読みやすくするためのものです。出来ればそのままのこしておきましょう。もし自分で読みやすくしたければ適当な行に空白行を挿入することも可能です。
"#" 以降は、コメントの意味を持ちます(これは、大抵の FreeBSD のコンフィグレーションファイルの記述に共通です)。もし、不必要な行を削除する場合は、出来れば行をそのまま完全に削除するよりは、先頭カラムに"#"を挿入しましょう。そうすれば、不幸な事故が起きたときにも容易にもとに戻せるはずです。
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
の部分は CPU タイプを示します。このまま残していても構いません(例: I586_CPU とすべきか I686_CPU とすべきかはっきり分からない場合)。が、カスタムカーネルを作る場合、使用している CPU だけを指定するのがベストです。使用している CPU がどのタイプか分からない場合、 /var/run/dmesg.boot ファイルを確認して起動メッセージを調べると CPU タイプが出力されているはずです。
ident GENERIC
の部分を
ident 仮名
と書き換えます。これが新しいカーネルの名前になります。ここで「仮名」のところは「GENERIC」からコピーしてつけた新しい名前です。
options CD9660 # ISO 9660 Filesystem
この行は、CD-ROM 用の ISO 9660 ファイルシステムをマウントするのに使用します。CD-ROM を使用するのは、データ CD を時々マウントするだけなら(いれっぱなしでなければ)この行をコメントアウトしても大丈夫です (データ CD を最初にマウントする時、自動的にロードされます)。
options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
この行は, カーネルがそれぞれの SCSI 機器を検出する前に 15 秒間待つようにします。IDE ドライブしか使用していない場合は、コメントアウトしましょう。SCSI 機器を使用している場合でも、起動時間を短くするため、秒数を小さくしてみてください。そうした場合に FreeBSD が SCSI 機器を認識しなくなった場合は時間を元に戻してください。
以下、デバイスのオプションであなたのマシンで使っていないものを削除していきます。よくわからないものはそのまま残しておいたほうが賢明です。
# Floppy drives
device fdc
フロッピーの定義です。フロッピーを使用していないマシンであれば、コメントアウトします。
# RAID controllers interfaced to the SCSI subsystem
device amr # AMI MegaRAID
device arcmsr # Areca SATA II RAID
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options
device hptmv # Highpoint RocketRAID 182x
device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
device iir # Intel Integrated RAID
device ips # IBM (Adaptec) ServeRAID
device mly # Mylex AcceleRAID/eXtremeRAID
device twa # 3ware 9000 series PATA/SATA RAID
# RAID controllers
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device mfi # LSI MegaRAID SAS
device mlx # Mylex DAC960 family
device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID
RAID コントローラです。RAID を使用していないならば、すべてコメントアウトしましょう。RAID を使用している場合でも、使用しているボード以外の行は、コメントアウトしましょう。
# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device cbb # cardbus (yenta) bridge
device pccard # PC Card (16-bit) bus
device cardbus # CardBus (32-bit) bus
PC カードデバイスです。PC カードを使用していなければ、すべてコメントアウトしましょう。
# PCI Ethernet NICs.
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 Gigabit Ethernet Family
device igb # Intel PRO/1000 PCIE Server Gigabit Family
device ixgb # Intel PRO/10GbE Ethernet Card
device le # AMD Am7900 LANCE and Am79C9xx PCnet
device ti # Alteon Networks Tigon I/II gigabit Ethernet
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device ae # Attansic/Atheros L2 FastEthernet
device age # Attansic/Atheros L1 Gigabit Ethernet
device alc # Atheros AR8131/AR8132 Ethernet
device ale # Atheros AR8121/AR8113/AR8114 Ethernet
device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device bfe # Broadcom BCM440x 10/100 Ethernet
device bge # Broadcom BCM570xx Gigabit Ethernet
device dc # DEC/Intel 21143 and various workalikes
device et # Agere ET1310 10/100/Gigabit Ethernet
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device jme # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
device lge # Level 1 LXT1001 gigabit Ethernet
device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet
device nfe # nVidia nForce MCP on-board Ethernet
device nge # NatSemi DP83820 gigabit Ethernet
#device nve # nVidia nForce MCP on-board Ethernet Networking
device pcn # AMD Am79C97x PCI 10/100 (precedence over 'le')
device re # RealTek 8139C+/8169/8169S/8110S
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sge # Silicon Integrated Systems SiS190/191
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
device ste # Sundance ST201 (D-Link DFE-550TX)
device stge # Sundance/Tamarack TC9021 gigabit Ethernet
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vge # VIA VT612x gigabit Ethernet
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs. pccard NICs included.
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet
# Wireless NIC cards
device wlan # 802.11 support
options IEEE80211_DEBUG # enable debug msgs
options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
options IEEE80211_SUPPORT_MESH # enable 802.11s draft support
device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
device an # Aironet 4500/4800 802.11 wireless NICs.
device ath # Atheros pci/cardbus NIC's
device ath_hal # pci/cardbus chip support
options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
device ath_rate_sample # SampleRate tx rate control for ath
device ral # Ralink Technology RT2500 wireless NICs.
device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.
ネットワークデバイスです。使用しているデバイス以外のものは、コメントアウトします。
ただし、miibus の行はコメントアウトしないでください。これは PCI 10/100 イーサネット NIC、すなわち MII に従うトランシーバや MII のようなトランシーバ制御インタフェースを実装するものに必要となります。
# USB support
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB Ethernet, requires mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
USB デバイスです。USB デバイスを使用していなければ、すべてコメントアウトしましょう。
もし、ユーザの領域を制限したいならば、
options QUOTA
という1行を最後に追加しておいてください。後になって意味を持ってきます。
4. コンパイルとインストール
以上で、編集が終わったら、以下のようにコンパイルとインストールを行います。
> config 仮名
Don't forget to do a ``make depend''
Kernel build directory is ../compile/仮名
> cd ../compile/仮名/
> make depend
・・・
> make
・・・
> make install
・・・
これでエラーがでなければ、以下のコマンドで再起動すれば新しいカーネルで動くはずです。
> shutdown -r now
編集する前のカーネルは「kernel.old」という名前で残っています。
もし新しいカーネルで起動できなくなったらブート時に、
boot kernel.old
と打ち込んでください。
そうすれば一回前のカーネルで起動できます。