DataLife Engine > Система > Сборка ядра FreeBSD

Сборка ядра FreeBSD


05-08-2010. Разместил: synergix Сегодня выдалось свободное время, которое я решил посвятить описанию процесса пересбора собственного ядра. В отличии от линукса, сборка ядра весьма легкий и обязательный процесс.
Для чего нужно пересобирать ядро, если с GENERIC все работает? А затем, что пересборка позволяет оптимизировать ядро, убрав ненужные вам опции, уменьшить потребление памяти, включить необходимые опции, к примеру файрволл или квотирование.
Для пересборки должны быть установлены исходники ядра. Если вы ставили систему с диска и выбрали установку исходных текстов, то они у вас есть.
#cd /usr/src/
#/usr/src/>ls
COPYRIGHT               etc                       sbin
Makefile                     games                 secure
Makefile.inc1              gnu                      share
Makefile.upgrade        include                 sys
README                    kerberos5             tools
UPDATING                 kerberosIV           usr.bin
bin                            lib                        usr.sbin
contrib                      libexec
crypto                      release
#/usr/src/>

Иначе - доставляем c установочного диска:
#/usr/src/>mount /cdrom
#/usr/src/>cd /cdrom
/cdrom/>ls
ERRATA.HTM          README.TXT       compat1x        dict                  kernel
ERRATA.TXT          RELNOTES.HTM    compat20        doc                  manpages
HARDWARE.HTM    RELNOTES.TXT     compat21        docbook.css     ports
HARDWARE.TXT     bin                      compat22        filename.txt    proflibs
INSTALL.HTM         boot                    compat3x        floppies        src
INSTALL.TXT          catpages             compat4x        games           tools
README.HTM          cdrom.inf            crypto          info
#/cdrom/>cd src/
#/cdrom/src/>./install.sh
You must specify which components of src to extract
possible subcomponents are:

base bin contrib etc games gnu include lib libexec
release sbin share sys tools ubin usbin

You may also specify all to extract all subcomponents.
/cdrom/src/>./install.sh all
Extracting sources into /usr/src...
  Extracting source component: base
  Extracting source component: bin
  Extracting source component: contrib
  Extracting source component: etc
  Extracting source component: games
  Extracting source component: gnu
  Extracting source component: include
  Extracting source component: lib
  Extracting source component: libexec
  Extracting source component: release
  Extracting source component: sbin
  Extracting source component: share
  Extracting source component: sys
  Extracting source component: tools
  Extracting source component: ubin
  Extracting source component: usbin
Done extracting sources.
#/cdrom/src/>cd /usr/src/
#/usr/src/>umount /cdrom
#/usr/src/>


Либо Вы можете скачать их с помощью CVSup, указав соотвествующий тег.

Или можно еще проще -
sysinstal -> Configure -> Distributions -> src


Следует отметить, что пример будет на базе архитектуры amd64, и тому есть несколько причин. Во-первых, процессор у меня Core2Quad имеет 64-х битную
архитектуру, во-вторых - установлено 8 Gb памяти. При использовании 32-х битной архитектуры нам будет доступно не более 3,25 Gb. Узнать, какой тип процессора можно командой
#grep -w CPU: /var/run/dmesg.boot

Продолжаем:
#cd /usr/src/sys/amd64/conf/
#/usr/src/sys/amd64/conf/>ls
GENERIC LINT

Править GENERIC не стоит, лучше скопировать конфиг и править уже новый под свои нужды.
#cp GENERIC MYKERNEL

Листинг конфига я приведу полностью, с частью коментариев для более понятного описания.
Итак, вникаем =)

cpu        HAMMER      #тип процессора
ident        MYKERNEL    #идентификатор ядра
#makeoptions    DEBUG=-g        # Опции отладки ядра, если вы не разработчик, скорее всего вам никогда не пригодится.

options     SCHED_ULE        # Планировщик ULE
options     PREEMPTION        # Enable kernel thread preemption
options     INET            # Поддрежка сетевого стека TCP/IP
options     INET6            # поддержка стека IPv6
options     SCTP            # Stream Control Transmission Protocol
options     FFS            # Файловая система FreeBSD
options     SOFTUPDATES        # Включает асинхронный режим работы файловый системы, что дает ускорение работы FS
options     UFS_ACL            # Влючает управление правами доступа
options     UFS_DIRHASH        # Увеличивает производительность на больших директориях
options     UFS_GJOURNAL        # Включает журналирование данных на UFS
#options     MD_ROOT            # Корневая ФС может быть и в памяти, актуально для бездисковых станций
#options     NFSCLIENT        # Клиент сетевой ФС
#options     NFSSERVER        # Сервер сетевой ФС
options     NFSLOCKD        # Network Lock Manager
#options     NFS_ROOT        # Корневым разделом может быть система находящаяся на другом компе.
#options     MSDOSFS            # Поддержка ФС MSDOS - неактуально
options     CD9660            # Поддержка CD
options     PROCFS            # Process filesystem (requires PSEUDOFS)
options     PSEUDOFS        # Pseudo-filesystem framework
options     GEOM_PART_GPT        # GUID Partition Tables.
options     GEOM_LABEL        # Provides labelization
options     COMPAT_43TTY        # BSD 4.3 TTY compat (sgtty)
options     COMPAT_FREEBSD32    # Совместимость с i386
options     COMPAT_FREEBSD4        # Совместимость с FreeBSD4
options     COMPAT_FREEBSD5        # Совместимость с FreeBSD5
options     COMPAT_FREEBSD6        # Совместимость с FreeBSD6
options     COMPAT_FREEBSD7        # Совместимость с FreeBSD7
#options     SCSI_DELAY=5000        # Если у вас есть SCSI-устройства, то это задержка на их инициализацию.
options     KTRACE            # ktrace(1) support
options     STACK            # stack(9) support
options     SYSVSHM            # SYSV-style shared memory
options     SYSVMSG            # SYSV-style message queues
options     SYSVSEM            # SYSV-style semaphores
options     P1003_1B_SEMAPHORES    # POSIX-style semaphores
options     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options     PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
options     KBD_INSTALL_CDEV    # install a CDEV entry in /dev
options     HWPMC_HOOKS        # Necessary kernel hooks for hwpmc(4)
options     AUDIT            # Security event auditing
options     MAC            # TrustedBSD MAC Framework
options        FLOWTABLE        # per-cpu routing cache
#options     KDTRACE_FRAME        # Ensure frames are compiled in
#options     KDTRACE_HOOKS        # Kernel DTrace hooks
options     INCLUDE_CONFIG_FILE     # Include this file in kernel

# Make an SMP-capable kernel by default
options     SMP            # Поддержка мульти-процессорных и многоядерных процессоров.

# CPU frequency control
device        cpufreq            #Управление частотой процессора

# Bus support.
device        acpi            #поддержка шины ACPI
device        pci            #поддержка шины PCI

# Floppy drives
#device        fdc            #Контроллер флоппи-дисковода - не пользую.

# ATA and ATAPI devices
device        ata
device        atadisk        # Поддержка ATA дисков
#device        ataraid        # Поддержка ATA RAID массивов
device        atapicd        # Поддержка ATAPI CDROM
#device        atapifd        # Поддержка ATAPI флоппиков
#device        atapist        # Поддержка ATAPI накопителей на магнитной ленте
options     ATA_STATIC_ID    # Статическая нумерация ATA устройств

# SCSI Контроллеры. Ну тут все понятно, если вы обладатель какого-либо скази-контроллера - раскоментируйте нужные строки.
#device        ahc        # AHA2940 and onboard AIC7xxx devices
#options     AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                    # output.  Adds ~128k to driver.
#device        ahd        # AHA39320/29320 and onboard AIC79xx devices
#options     AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                    # output.  Adds ~215k to driver.
#device        amd        # AMD 53C974 (Tekram DC-390(T))
#device        hptiop        # Highpoint RocketRaid 3xxx series
#device        isp        # Qlogic family
#device        ispfw        # Firmware for QLogic HBAs- normally a module
#device        mpt        # LSI-Logic MPT-Fusion
#device        ncr        # NCR/Symbios Logic
#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        aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device        bt        # Buslogic/Mylex MultiMaster SCSI adapters

# SCSI переферия. Даже если у вас и нет SCSI-контроллера, это не означает что он не используется =)
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)

# А тут уже RAID-контроллеры на SCSI-интерфейсе. Завидую обладателям =) также раскомментируйте нужное вам устройство.
#device        amr        # AMI MegaRAID
#device        arcmsr        # Areca SATA II RAID
#XXX it is not 64-bit clean, -scottl
#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 контроллеры. Обычные. Выбирайте нужный вам.
#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
#XXX pointer/int warnings
#device        pst        # Promise Supertrak SX6000
#device        twe        # 3ware ATA RAID

# atkbdc0 controls both the keyboard and the PS/2 mouse
device        atkbdc        # Контроллер клавиатуры
device        atkbd        # Клавиатура
device        psm        # Мышь PS/2 

device        kbdmux        # keyboard multiplexer

device        vga        # VGA драйвер

device        splash        # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console
device        sc        #Драйвер консоли

device        agp        #Поддержка шины AGP

#Поддержка PCMCIA. Актуально для обладателей ноутбуков, да и то, если есть соотвествующая карта. Если таких карт нет - выключаем.
#device        cbb        # cardbus (yenta) bridge
#device        pccard        # PC Card (16-bit) bus
#device        cardbus        # CardBus (32-bit) bus

# Serial (COM) ports
#device        uart        # Поддержка COM-портов

# Parallel port
#device        ppc
#device        ppbus        # Поддержка паралельного порта.
#device        lpt        # Принтер
#device        plip        # Паралельный порт через TCP/IP
#device        ppi        # Parallel port interface device
#device        vpo        # Requires scbus and da

# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to sio, uart and/or ppc drivers):
#device        puc

# PCI Ethernet NICs. То бишь PCI сетевые карточки. Оставляем нужную вам. Какую - набираете в консоли ifconfig и смотрите.
#device        de        # DEC/Intel DC21x4x (``Tulip'')
device        em        # Intel PRO/1000 Gigabit Ethernet Family
#device        igb        # Intel PRO/1000 PCIE Server Gigabit Family
#device        ixgbe        # Intel PRO/10GbE PCIE Ethernet Family
#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.
#А тут карточки, которым обязательно нужна шина MII для работы. Если ваша карточка в этом списке - не забудьте расскоментировать miibus
#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.
#НУ тут уже совсем неинтересно. Старые сетеввые карты на ISA-шине. 
#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        sn        # SMC's 9000 series of Ethernet chips
#device        xe        # Xircom pccard Ethernet

# Wireless NIC cards
#Беспроводные сетевые карточки, то бишь Wi-Fi.
#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        loop        # Сетевая петля
device        random        # генератор псевдослучайных чисел.
device        ether        # Поддержка Ethernet
device        vlan        # Поддержка 802.1Q VLAN
device        tun        # Пакетное туннелирование.
device        pty        # Псевдо-консоли (ssh, ttys И т.д.)
device        md        # Диски в RAM
device        gif        # туннелирование IPv6 и IPv4
device        faith        # пересылка IPv6-to-IPv4 
device        firmware    # firmware assist module

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
#Это устройство используется в основном для подсчета траффика, снифферами...
device        bpf        # Berkeley packet filter

# USB support. Поддержка USB. Кто не пользуется - может смело отключить.
#options     USB_DEBUG    # enable debug msgs
device        uhci        # UHCI PCI->USB interface
device        ohci        # OHCI PCI->USB interface
device        ehci        # EHCI PCI->USB interface (USB 2.0)
device        usb        # USB Bus (required)
#device        udbp        # USB Double Bulk Pipe devices
#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
# USB Serial devices
#device        uark        # Technologies ARK3116 based serial adapters
#device        ubsa        # Belkin F5U103 and compatible serial adapters
#device        uftdi        # For FTDI usb serial adapters
#device        uipaq        # Some WinCE based devices
#device        uplcom        # Prolific PL-2303 serial adapters
#device        uslcom        # SI Labs CP2101/CP2102 serial adapters
#device        uvisor        # Visor and Palm devices
#device        uvscom        # USB serial support for DDI pocket's PHS
# USB Ethernet, requires miibus. USB сетевые карты. Имхо изврат, проще поставить нормальную.
#device        aue        # ADMtek USB Ethernet
#device        axe        # ASIX Electronics USB Ethernet
#device        cdce        # Generic USB over Ethernet
#device        cue        # CATC USB Ethernet
#device        kue        # Kawasaki LSI USB Ethernet
#device        rue        # RealTek RTL8150 USB Ethernet
#device        udav        # Davicom DM9601E USB
# USB Wireless. Всякие беспроводные брелки =)
#device        rum        # Ralink Technology RT2501USB wireless NICs
#device        uath        # Atheros AR5523 wireless NICs
#device        ural        # Ralink Technology RT2500USB wireless NICs
#device        zyd        # ZyDAS zb1211/zb1211b wireless NICs

# FireWire support. Если у вас есть видеокамера или сканер с FireWire - оставляйте, иначе - отключаем.
#device        firewire    # FireWire bus code
#device        sbp        # SCSI over FireWire (Requires scbus and da)
#device        fwe        # Ethernet over FireWire (non-standard!)
#device        fwip        # IP over FireWire (RFC 2734,3146)
#device        dcons        # Dumb console driver
#device        dcons_crom    # Configuration ROM for dcons


Не забудьте в конце поставить символ перевода строки, иначе сборка прервется с сообщение об ошибке.
После правки конфига компилируем ядро.
#cd /usr/src
#make buildkernel KERNCONF=MYKERNEL

Здесь стоит обратить внимание на ход компиляции ядра, если оно прервалось с ошибкой, имеет смысл изучить последние пару десятков строк, чтобы понять на каком этапе произошла ошибка.

Далее устанавливаем ядро
#make installkernel KERNCONF=MYKERNEL

и перезагружаемся
#reboot
или
#shutdown -r now


Если Вы все сделали правильно и не поотключали жизненно важные Вам функции - ядро и система успешно загрузятся. Но даже если ошиблись и ядро грузится, но не работает, например, сеть - можно загрузится со старого ядра. Делается это путем нажатия клавиши Esc в приглашении загрузчика. Он открывает командую строку, в которой вы пишите
>boot kernel.old

и у вас загрузится предыдущее ядро.


Удачной Вам пересборки.
Вернуться назад