5. カーネルの再構築

 
 FreeBSD をインストールした時点で動いているカーネルは、「GENERIC」というカーネルです。  カーネルとはメモリ管理やタスク管理デバイスの管理など、OS の基本機能を実現しています。  自分のマシンに合わせたカーネルを作成することにより、以下のような利点があります。
 素早く起動するようになります  カーネルは定義してあるハードウェアしか検出を行わないので、システムの起動にかかる時間が短くなります。  メモリの消費量が減少します  システムに合わせたカーネルは、大抵 GENERIC カーネルより少ないメモリしか消費しません。カーネルは常にメモリ上に存在するプロセスなので、このことは重要になります。したがって、RAM が少ないシステムでは、カーネルの再構築は大変重要です。  追加のハードウェアをサポートします  システムに合わせたカーネルは、サウンドカードなど GENERIC カーネルに存在しないデバイスのサポートを追加することができます。
5.1 カーネルのコピー 5.2 カーネルの編集 5.3 コンパイルとインストール

5.1 カーネルのコピー

 デフォルトのカーネルは、「GENERIC」という名前で、/usr/src/sys/i386/conf/ にあります。そこで、 > cd /usr/src/sys/i386/conf/ > cp GENERIC 仮名 と入力してカーネルのコピーを作ります。仮名の部分にはあなたがつくるシステムのわかりやすいカーネル名をいれてください。例えば「MYKERNEL」など英数字であればなんでも結構です。  慣習として、カーネル名はすべて大文字で記述するようです。

5.2 カーネルの編集

 さて、コピーしたカーネルを 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 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行を最後に追加しておいてください。後になって意味を持ってきます。

5.3 コンパイルとインストール

 以上で、編集が終わったら、以下のようにコンパイルとインストールを行います。 > 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 と打ち込んでください。  そうすれば一回前のカーネルで起動できます。