デフォルトのカーネルには必要のないデバイスの定義等が含まれているのでメモリを占有して動作を遅くさせている場合がある。したがって、カーネルの再構築をすることによって自分の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が起動する。
注 : この内容は、小生がカーネルの再構築の時に行った方法である。従って、責任は負いかねるので了承いただきたい。
以上
コメント