FreeBSD: как пересобрать ядро

Во FreeBSD для оптимизации использования ресурсов есть возможность пересобрать ядро (или перекомпилировать ядро).

Ядро - это программа, в которую включен код операционной системы, работающий с периферийными устройствами.

Можно отключить в ядре поддержку устройств, которые в вашей машине не используются. FreeBSD Handbook достаточно подробно описывает процесс переконфигурирования и сборки ядра в разделе 8.
- папка /usr/src/sys/i386/conf содержит шаблон конфигурации ядра GENERIC, который надо скопировать в свой собственный конфигурационный файл, например, MYKERNEL:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
- теперь нужно в файле MYKERNEL закомментировать символом # все строки, которые включают поддержку отсутствующего у вас оборудования. Каждая строка шаблона и её назначение подробно описана в той же FreeBSD Handbook. Я закомментировал следующие строки (получил из результата команды diff -a GENERIC MYKERNEL):
#cpu I486_CPU
#cpu I586_CPU
#options INET6 # IPv6 communications protocols
#options SCSI_DELAY=15000 # Delay (in ms) before probing SCSI
#device eisa

#device ataraid # ATA RAID drives
#device atapist # ATAPI tape drives
#device ahb # EISA AHA1742 family
#device ahc # AHA2940 and onboard AIC7xxx devices
#device ahd # AHA39320/29320 and onboard AIC79xx devices
#device amd # AMD 53C974 (Tekram DC-390(T))
#device isp # Qlogic family
#device mpt # LSI-Logic MPT-Fusion
#device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device trm # Tekram DC395U/UW/F DC315U adapters
#device adv # Advansys SCSI adapters
#device adw # Advansys wide SCSI adapters
#device aha # Adaptec 154x SCSI adapters
#device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device bt # Buslogic/Mylex MultiMaster SCSI adapters
#device ncv # NCR 53C500
#device nsp # Workbit Ninja SCSI-3
#device stg # TMC 18C30/18C50

#device scbus # SCSI bus (required for SCSI)
#device ch # SCSI media changers
#device da # Direct Access (disks)
#device sa # Sequential Access (tape etc)
#device cd # CD
#device pass # Passthrough device (direct SCSI access)
#device ses # SCSI Environmental Services (and SAF-TE)
#device amr # AMI MegaRAID
#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 iir # Intel Integrated RAID
#device ips # IBM (Adaptec) ServeRAID
#device mly # Mylex AcceleRAID/eXtremeRAID
#device twa # 3ware 9000 series PATA/SATA RAID
#device aac # Adaptec FSA RAID
#device aacp # SCSI passthrough for aac (requires CAM)
#device ida # Compaq Smart RAID
#device mlx # Mylex DAC960 family
#device pst # Promise Supertrak SX6000
#device twe # 3ware ATA RAID

#device agp # support several AGP chipsets

#device cbb # cardbus (yenta) bridge
#device pccard # PC Card (16-bit) bus
#device cardbus # CardBus (32-bit) bus

#device wlan # 802.11 support
#device an # Aironet 4500/4800 802.11 wireless NICs.
#device awi # BayStack 660 and others
#device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.

#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 urio # Diamond Rio 500 MP3 player
#device uscanner # Scanners
#device aue # ADMtek USB Ethernet
#device axe # ASIX Electronics USB Ethernet
#device cue # CATC USB Ethernet
#device kue # Kawasaki LSI USB Ethernet
#device rue # RealTek RTL8150 USB Ethernet
#device firewire # FireWire bus code
#device sbp # SCSI over FireWire (Requires scbus and da)
#device fwe # Ethernet over FireWire (non-standard!)

- не забудьте в файле MYKERNEL исправить ''метку'' ядра
ident GENERIC
на
ident MYKERNEL
- кроме этого шаблона, описывающие устройства, есть дополнительный файл /usr/src/sys/conf/NOTES. Оттуда можно методом copy/paste брать строки для включения в основной шаблон MYKERNEL. Я этого делать не стал.
- сборка ядра "традиционным" способом:
# cd /usr/src/sys/i386/conf
# /usr/sbin/config MYKERNEL
- Перейдите в каталог, в котором будет собираться ядро. Запущенный как показано выше config(8) выведет имя этого каталога.
# cd ../compile/MYKERNEL
- Соберите ядро.
# make depend
# make
- Установите новое ядро.
# make install
- после перезагрузки система должна нормально заработать уже с новыми установками. Я сравнивал использование памяти и ресурсов у оригинальной системы и перекомпилированной, и разницы не заметил. Вслучае ошибок и проблем в загрузке перекомпилированной системы смотрите советы раздела 8.6. Решение проблем из FreeBSD Handbook.

Обновлено: 12.03.2015