2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

FreeBSDのカーネル再構築!

デフォルトのカーネルには必要のないデバイスの定義等が含まれているのでメモリを占有して動作を遅くさせている場合がある。したがって、カーネルの再構築をすることによって自分のPCのデバイス環境に合ったカーネルを作ることが出来る。ここでは、その方法について書いてみたい。これを行うことにより、メモリ常駐量が減り主記憶が少なくパフォーマンスが低いCPUのマシンでもなかなか軽快に動作するOSとなる。

テスト環境 : FreeBSD4.4R

注 : カーネルのコンフィグレーションを間違うと起動しないので注意すること。


まず、自分のFreeBSDマシンにカーネルのソースが有るか確認する。以下のフォルダにあるはず。

# cd /usr/src/sys/i386/conf

にGENERICというソースがあるかを確認する。

無ければ、

# /stand/sysinstall

から、

メニューから、Configure –>Distribution –> src –> DES以外のkernel srcでまずはソースをインストールする。

# cd /usr/src/sys/i386/conf

# cp GENERIC [自分でこれから作るカーネルの名前] ← ★ 例 : MYKERNEL

# vi MYKERNEL

基本的には、ソースMYKERNELの中の不要なデバイスをコメントする。

● カーネルリコンパイル対象マシン:Pentium100MHz富士通製ノートPCサーバ
● FreeBSD 4.6RのKernel Config準拠

##GENERIC — Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
# http://www.FreeBSD.org/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you’ve installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ./LINT configuration file. If you are
# in doubt as to the purpose or necessity of a line, check first in LINT.
#
# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.43 2002/05/23 17:04:01 obrien Exp $

machine     i386
#cpu       I386_CPU                                            ← ★ 自分のマシンで動いているCPUのみを選択して、その他はコメントする。
#cpu      I486_CPU                                         ← ★ ここでは、Pentium100MHzを使っているのでI586を選択。
cpu       I586_CPU
#cpu      I686_CPU                                          ← ★  これも不要なためコメント
ident      MYKERNEL                                        ← ★ 新しいカーネルの名前に置き換える(カーネル名をMYKERNELにしたとき)。
maxusers    32                  #Max Users32                   ← ★ MaxUser32位にする。

#makeoptions  DEBUG=-g               #Build kernel with gdb(1) debug symbols

#options    MATH_EMULATE      #Support for x87 emulation ← ★ 最近のCPUにはFEPが内蔵されているので必要ないからコメントする。
options     INET                        #InterNETworking
options     NET6                       #IPv6 communications protocols
options     FFS                         #Berkeley Fast Filesystem
options     FFS_ROOT                  #FFS usable as root device [keep this!]
options     SOFTUPDATES             #Enable FFS soft updates support
options     UFS_DIRHASH                #Improve performance on big directories
#options    MFS                 #Memory Filesystem       ← ★ MFSは使わないのでコメントする。
options     MD_ROOT                   #MD is a potential root device
#options    NFS                  #Network Filesystem        ← ★ NFSを使わなければ必要ないので2行コメントする。
#options    NFS_ROOT       #NFS usable as root device, NFS required ← ★ 同上
options     MSDOSFS                  #MSDOS Filesystem
options     CD9660                     #ISO 9660 Filesystem
options     CD9660_ROOT               #CD-ROM usable as root, CD9660 required
options     PROCFS                   #Process filesystem
options     COMPAT_43                 #Compatible with BSD 4.3 [KEEP THIS!]
#options    SCSI_DELAY=15000   #Delay (in ms) before probing SCSI  ← ★ これは、コメントした方が起動が早くなるようです。
options     UCONSOLE                #Allow users to grab the console
options     USERCONFIG               #boot -c editor
options     VISUAL_USERCONFIG        #visual boot -c editor
options     KTRACE                    #ktrace(1) support
options     SYSVSHM                   #SYSV-style shared memory
options     SYSVMSG                   #SYSV-style message queues
options     SYSVSEM                  #SYSV-style semaphores
options     P1003_1B                     #Posix P1003_1B real-time extensions
options     _KPOSIX_PRIORITY_SCHEDULING
options     ICMP_BANDLIM              #Rate limit bad replies
options     KBD_INSTALL_CDEV          # install a CDEV entry in /dev

options    IPFIREWALL          #natd               ← ★ IPFW natdを使うならコメントアウトもしくは追加
options    IPDIVERT            #natd                ← ★ IPFW natdを使うならコメントアウトもしくは追加

# To make an SMP kernel, the next two are needed
#options    SMP                        # Symmetric MultiProcessor Kernel
#options    APIC_IO                      # Symmetric (APIC) I/O

device     isa
#device     eisa                                 ← ★ eisaは今となっては不要なのでコメント。
device     pci

# Floppy drives
device     fdc0  at isa? port IO_FD1 irq 6 drq 2
device     fd0   at fdc0 drive 0
#device     fd1   at fdc0 drive 1                      ← ★ 通常フロッピーディスクは1個しかついてないのでコメント。
#
# If you have a Toshiba Libretto with its Y-E Data PCMCIA floppy,
# don’t use the above line for fdc0 but the following one:
#device     fdc0

# ATA and ATAPI devices
device     ata0  at isa? port IO_WD1 irq 14
device     ata1  at isa? port IO_WD2 irq 15
device     ata
device     atadisk                     # ATA disk drives
device     atapicd                    # ATAPI CDROM drives
#device     atapifd              # ATAPI floppy drives        ← ★ IDE Floppyは殆ど無いと思うのでコメント。
#device     atapist              # ATAPI tape drives          ← ★ TAPEドライブを使わなければコメント。
options     ATA_STATIC_ID             #Static device numbering

# SCSI Controllers                                  ← ★ SCSI I/Fが無い場合は、以降コメント。
#device     ahb                    # EISA AHA1742 family            ← ★
#device     ahc                    # AHA2940 and onboard AIC7xxx devices   ← ★
#device     amd                    # AMD 53C974 (Tekram DC-390(T))    ← ★
#device     isp                     # Qlogic family                   ← ★
#device     ncr                    # NCR/Symbios Logic             ← ★
#device     sym                   # NCR/Symbios Logic (newer chipsets)  ← ★
#options    SYM_SETUP_LP_PROBE_MAP=0x40

                                 # Allow ncr to attach legacy NCR devices when
                                 # both sym and ncr are configured

#device     adv0  at isa?                        ← ★
#device     adw                                ← ★
#device     bt0   at isa?                                      ← ★
#device     aha0  at isa?                                      ← ★
#device     aic0  at isa?                                       ← ★

#device     ncv                   # NCR 53C500               ← ★
#device     nsp                   # Workbit Ninja SCSI-3         ← ★
#device     stg                    # TMC 18C30/18C50           ← ★

# SCSI peripherals
#device     scbus                 # SCSI bus (required)          ← ★
#device     da                   # Direct Access (disks)         ← ★
#device     sa                   # Sequential Access (tape etc)    ← ★
#device     cd                   # CD                          ← ★
#device     pass                 # Passthrough device (direct SCSI access)    ← ★

# RAID controllers interfaced to the SCSI subsystem                       ← ★ SCSI RAIDを使ってなければ以降コメント。
#device     asr       # DPT SmartRAID V, VI and Adaptec SCSI RAID  ← ★
#device     dpt       # DPT Smartcache – See LINT for options! ← ★
#device     iir         # Intel Integrated RAID              ← ★
#device     mly       # Mylex AcceleRAID/eXtremeRAID      ← ★
#device     ciss      # Compaq SmartRAID 5* series        ← ★

# RAID controllers
#device     aac       # Adaptec FSA RAID, Dell PERC2/PERC3   ← ★
#device     aacp      # SCSI passthrough for aac (requires CAM)  ← ★
#device     ida        # Compaq Smart RAID                 ← ★
#device     amr       # AMI MegaRAID                    ← ★
#device     mlx       # Mylex DAC960 family                ← ★
#device     twe       # 3ware Escalade                    ← ★

# atkbdc0 controls both the keyboard and the PS/2 mouse
device     atkbdc0 at isa? port IO_KBD
device     atkbd0 at atkbdc? irq 1 flags 0x1
device     psm0  at atkbdc? irq 12

device     vga0  at isa?

# splash screen/screen saver
#pseudo-device splash                                ← ★ Xを使わなければ不要なのでコメント。

# syscons is the default console driver, resembling an SCO console
device     sc0   at isa? flags 0x100

# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device     vt0   at isa?
#options    XSERVER         # support for X server on a vt console
#options    FAT_CURSOR       # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options    PCVT_SCANSET=2     # IBM keyboards are non-std

# Floating point support – do not disable.
device     npx0  at nexus? port IO_NPX irq 13

# Power management support (see LINT for more options)
#device     apm0  at nexus? disable flags 0x20 # Advanced Power Management ← ★ APMを使わなければコメント。

# PCCARD (PCMCIA) support
device     card
device     pcic0  at isa? irq 0 port 0x3e0 iomem 0xd0000
device     pcic1  at isa? irq 0 port 0x3e2 iomem 0xd4000 disable

# Serial (COM) ports
device     sio0  at isa? port IO_COM1 flags 0x10 irq 4
device     sio1  at isa? port IO_COM2 irq 3
#device     sio2  at isa? disable port IO_COM3 irq 5              ← ★ シリアルポートは、通常COM2までなのでコメント。
#device     sio3  at isa? disable port IO_COM4 irq 9              ← ★ 同上

# Parallel port
device     ppc0  at isa? irq 7
device     ppbus      # Parallel port bus (required)
device     lpt       # Printer
#device     plip      # TCP/IP over parallel                  ← ★ 不要なデバイスなのでコメント
#device     ppi       # Parallel port interface device             ← ★ 同上
#device     vpo      # Requires scbus and da                 ← ★ 同上


# PCI Ethernet NICs.
device     de       # DEC/Intel DC21x4x (“Tulip”)
device     em       # Intel PRO/1000 adapter Gigabit Ethernet Card (“Wiseman”)
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!   ← ★ 以降では、本来このホストで使うNIC以外はコメントしてかまわない。しかし、わからない人はこのままにしておく方が間違いは無い。
device     miibus     # MII bus support
device     dc       # DEC/Intel 21143 and various workalikes
device     fxp       # Intel EtherExpress PRO/100B (82557, 82558)
device     pcn       # AMD Am79C97x PCI 10/100 NICs
device     rl        # RealTek 8129/8139
device     sf       # Adaptec AIC-6915 (“Starfire”)
device     sis        # Silicon Integrated Systems SiS 900/SiS 7016
device     ste       # Sundance ST201 (D-Link DFE-550TX)
device     tl        # Texas Instruments ThunderLAN
device     tx       # SMC EtherPower II (83c170 “EPIC”)
device     vr       # VIA Rhine, Rhine II
device     wb       # Winbond W89C840F
device     xl       # 3Com 3c90x (“Boomerang”, “Cyclone”)
device     bge       # Broadcom BCM570x (“Tigon III”)

# ISA Ethernet NICs.
# ‘device ed’ requires ‘device miibus’
device     ed0   at isa? port 0x280 irq 10 iomem 0xd8000
device     ex
device     ep
device     fe0   at isa? port 0x300
# Xircom Ethernet
device     xe
# PRISM I IEEE 802.11b wireless NIC.
device     awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device     wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device     an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device     ie0   at isa? port 0x300 irq 10 iomem 0xd0000
#device     le0   at isa? port 0x300 irq 5 iomem 0xd0000
device     lnc0  at isa? port 0x280 irq 10 drq 0
device     cs0   at isa? port 0x300
device     sn0   at isa? port 0x300 irq 10

# Pseudo devices – the number indicates how many units to allocate.
pseudo-device  loop      # Network loopback
pseudo-device  ether      # Ethernet support
#pseudo-device sl   1    # Kernel SLIP                    ← ★ シリアルラインは使わないのでコメント
#pseudo-device ppp   1    # Kernel PPP                   ← ★ 必要ないデバイス
pseudo-device  tun       # Packet tunnel.
pseudo-device  pty       # Pseudo-ttys (telnet etc)
pseudo-device  md       # Memory “disks”
pseudo-device  gif       # NEED IPv6 and IPv4 tunneling
pseudo-device  faith  1    # IPv6-to-IPv4 relaying (translation)

# The `bpf’ pseudo-device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
pseudo-device bpf #Berkeley packet filter

# USB support                                       ← ★ USBを使ってない場合は全てコメント!
#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          ← ★

最終的に、不要なデバイスはコメントしますが、危ないと思ったものはコメントしないこと。後悔します(笑)。

以上、MYKERNELの編集が終わったら、

# config MYKERNEL

# cd ../../compile/MYKERNEL

# make depend

# make

# make install

以下、もう一つめちゃ簡単な方法を説明する。

# cd /usr/src
# make KERNCONF=MYKERNEL kernel

でコンパイル完了!

# vi /etc/make.conf

KERNCONF=MYKERNEL

を追加。

次回から、

# cd /usr/src
# make kernel

だけでkernelの再構築が始まる。


以上で終わりである。rebootして立ち上がるかどうか確認する。

■ くしくもboot出来なかった場合 :

loaderがkernelをloadして、カウントダウンしてるときにspace keyをたたいて

unload

load kernel.old

boot

で古いkernelが起動する。

注 : この内容は、小生がカーネルの再構築の時に行った方法である。従って、責任は負いかねるので了承いただきたい。

以上

コメント