Что такое ядро? Ядро — это основная часть операционной системы FreeBSD. Оно ответственно за управление памятью, параметры безопасности, работу с сетью, доступ к дискам и многое другое. Официальная документация доступна тут.
Для пересборки ядра необходимы исходники, которые находятся в папке /usr/src/. Если папка пуста, значит исходников у вас нет. Придется либо брать их с установочного диска, либо скачивать (с помощью csup, например). С диска брать проще и быстрее. Опять же, есть два способа — sysinstall или через скрипт установки исходников. Первый метод интуитивно понятный, второй делается следующим образом (установочный диск надо вставить в привод):
# mount /cdrom/ # cd /cdrom/7.2-RELEASE/src/ # ./install.sh all # cd /usr/src # umount /cdrom/
Когда все компоненты распакуются, то можно приступать к конфигурированию ядра. Конфиги ядра лежат в папке /usr/src/sys/i386/conf/. Идем туда, копируем файл GENERIC и переименовываем копию в любое имя (я переименовал в vcore, далее буду использовать это имя). Это наше будущее ядро. Открываем его любымым редактором и приступаем к редактированию. Цель статьи не описывать каждый параметр, который уже по сто раз описан другими, а привести пример готового ядра. Вот мой конфиг:
machine i386 cpu I686_CPU ident vcore # если в будущем будет использовать PacketFilter (PF), то оставить эти строчки device pf device pflog device pfsync options SCHED_ULE # ULE scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking options SCTP # Stream Control Transmission Protocol options FFS # Berkeley Fast Filesystem options SOFTUPDATES # Enable FFS soft updates support options UFS_ACL # Support for access control lists options UFS_DIRHASH # Improve performance on big directories options UFS_GJOURNAL # Enable gjournal-based UFS journaling options CD9660 # ISO 9660 Filesystem options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization options COMPAT_43TTY # BSD 4.3 TTY compat [KEEP THIS!] options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 options STACK # stack(9) support options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions options ADAPTIVE_GIANT # Giant mutex is adaptive. options STOP_NMI # Stop CPUS using NMI instead of IPI options AUDIT # Security event auditing # моя система на двух ядрах, оставляем options SMP # Symmetric MultiProcessor Kernel device apic # I/O APIC # CPU frequency control device cpufreq # Bus support. device pci # ATA and ATAPI devices device ata device atadisk # ATA disk drives device atapicd # ATAPI CDROM drives options ATA_STATIC_ID # Static device numbering # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller device atkbd # AT keyboard device vga # VGA video card driver device splash # Splash screen and screen saver support # syscons is the default console driver, resembling an SCO console device sc # Add suspend/resume support for the i8254. device pmtimer # Serial (COM) ports device sio # 8250, 16[45]50 based serial ports device uart # Generic UART driver # 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 re # RealTek 8139C+/8169/8169S/8110S # Pseudo devices. device loop # Network loopback device random # Entropy device device ether # Ethernet support device pty # Pseudo-ttys (telnet etc) 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 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 ugen # Generic device uhid # "Human Interface Devices" device ukbd # Keyboard device umass # Disks/Mass storage - Requires scbus and da device scbus device da device ums # Mouse
Теперь, когда с конфигом разобрались, надо бы это ядро собрать:
# cd /usr/src/ # make buildkernel KERNCONF=vcore # make installkernel KERNCONF=vcore