Сегодня выдалось свободное время, которое я решил посвятить описанию процесса пересбора собственного ядра. В отличии от линукса, сборка ядра весьма легкий и обязательный процесс.
Для чего нужно пересобирать ядро, если с GENERIC все работает? А затем, что пересборка позволяет оптимизировать ядро, убрав ненужные вам опции, уменьшить потребление памяти, включить необходимые опции, к примеру файрволл или квотирование.
Для пересборки должны быть установлены исходники ядра. Если вы ставили систему с диска и выбрали установку исходных текстов, то они у вас есть.
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
Иначе - доставляем c установочного диска:
/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
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.
Либо Вы можете скачать их с помощью CVSup, указав соотвествующий тег.
Или можно еще проще -
sysinstal -> Configure -> Distributions -> src
Следует отметить, что пример будет на базе архитектуры amd64, и тому есть несколько причин. Во-первых, процессор у меня Core2Quad имеет 64-х битную
архитектуру, во-вторых - установлено 8 Gb памяти. При использовании 32-х битной архитектуры нам будет доступно не более 3,25 Gb. Узнать, какой тип процессора можно командой
#grep -w CPU: /var/run/dmesg.boot
Продолжаем:
GENERIC LINT
Править GENERIC не стоит, лучше скопировать конфиг и править уже новый под свои нужды.
#cp GENERIC MYKERNEL
Листинг конфига я приведу полностью, с частью коментариев для более понятного описания.
Итак, вникаем =)
cpu HAMMER
ident MYKERNEL
options SCHED_ULE
options PREEMPTION
options INET
options INET6
options SCTP
options FFS
options SOFTUPDATES
options UFS_ACL
options UFS_DIRHASH
options UFS_GJOURNAL
options NFSLOCKD
options CD9660
options PROCFS
options PSEUDOFS
options GEOM_PART_GPT
options GEOM_LABEL
options COMPAT_43TTY
options COMPAT_FREEBSD32
options COMPAT_FREEBSD4
options COMPAT_FREEBSD5
options COMPAT_FREEBSD6
options COMPAT_FREEBSD7
options KTRACE
options STACK
options SYSVSHM
options SYSVMSG
options SYSVSEM
options P1003_1B_SEMAPHORES
options _KPOSIX_PRIORITY_SCHEDULING
options PRINTF_BUFR_SIZE=128
options KBD_INSTALL_CDEV
options HWPMC_HOOKS
options AUDIT
options MAC
options FLOWTABLE
options INCLUDE_CONFIG_FILE
options SMP
device cpufreq
device acpi
device pci
device ata
device atadisk
device atapicd
options ATA_STATIC_ID
device scbus
device da
device cd
device pass
device atkbdc
device atkbd
device psm
device kbdmux
device vga
device splash
device sc
device agp
device em
device loop
device random
device ether
device vlan
device tun
device pty
device md
device gif
device faith
device firmware
device bpf
device uhci
device ohci
device ehci
device usb
device ulpt
device ums
Не забудьте в конце поставить символ перевода строки, иначе сборка прервется с сообщение об ошибке.
После правки конфига компилируем ядро.
Здесь стоит обратить внимание на ход компиляции ядра, если оно прервалось с ошибкой, имеет смысл изучить последние пару десятков строк, чтобы понять на каком этапе произошла ошибка.
Далее устанавливаем ядро
и перезагружаемся
#reboot
или
#shutdown -r now
Если Вы все сделали правильно и не поотключали жизненно важные Вам функции - ядро и система успешно загрузятся. Но даже если ошиблись и ядро грузится, но не работает, например, сеть - можно загрузится со старого ядра. Делается это путем нажатия клавиши Esc в приглашении загрузчика. Он открывает командую строку, в которой вы пишите
>boot kernel.old
и у вас загрузится предыдущее ядро.
Удачной Вам пересборки.