Първо, нека хвърлим бърз поглед в директорията, в която се изгражда ядрото. Всички споменати директории ще бъдат относителни спрямо главната /usr/src/sys директория, която е достъпна също и чрез /sys. Има няколко поддиректории представляващи различни части на ядрото, но най-важните за нашата цел са arch/conf, където ще редактирате своята конфигурация на ядрото, и compile, в която ще бъде изградено вашето ядро. arch репрезентира i386, alpha или pc98 (алтернативен PC хардуер, популярен в Япония). Всичко, което стои в директорията на определена архитектура е свързано само с тази архитектура; останалият код е еднакъв за всички платформи, на които FreeBSD потенциално би бил портиран. Забележете логическата организация на директорийната структура, където всяко поддържано устройство, файлова система и опция има своя собствена поддиректория. FreeBSD 5.X и по-нови има поддръжка за sparc64, а няколко други архитектури са в процес на разработка.
Note: Ако във вашата система директория /usr/src/sys не съществува, значи изходния код на ядрото не е бил инсталиран. Най-лесният начин да направите това е като стартирате /stand/sysinstall като root, изберете Configure, после Distributions, после src, после sys. Ако изпитвате антипатия към sysinstall и имате достъп до ``официален'' FreeBSD CDROM, тогава можете да инсталирате изходния код от командния ред:
# mount /cdrom # mkdir -p /usr/src/sys # ln -s /usr/src/sys /sys # cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
Следва да влезте в директория arch/conf и да копирате конфигурационния файл GENERIC в името, което искате да дадете на своето ядро. На пример:
# cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL
По традиция това име се състои само от главни букви и ако поддържате няколко FreeBSD машини с различен хардуер, е добра идея да го именувате според името на хоста на машината. В нашия пример ще го наречем MYKERNEL.
Tip: Запазване на конфигурационния файл на ядрото директно в /usr/src е потенциално лоша идея. Ако изпитвате проблеми може да ви се стори примамливо просто да изтриете /usr/src и да започнете отново. Пет секунди по-късно ще осъзнаете, че сте изтрили и конфигурационния файл на вашето ядро. Не редактирайте GENERIC директно, тъй като може да бъде презаписан при следващото обновяване на дървото с изходния код и промените които сте направили ще бъдат загубени.
Можете да държите конфигурационния файл на ядрото някъде другаде и после да направите символична връзка до файла в директория i386.
На пример:
# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL
Note: Трябва да изпълните тези и всички следващи команди като root потребител. В противен случай ще получите грешки като permission denied.
Сега редактирайте MYKERNEL с любимия си текстов редактор. Ако тепърва започвате, може би единственият редактор под ръка ще е vi. Той е твърде сложен, за да бъдат дадени обяснения тук, но употребата му е покрита в множество книги споменати в библиографията . Въпреки това, FreeBSD предоставя лесен за използване редактор наречен ee, който би бил добър избор, ако сте начинаещи. Чувствайте се свободни да промените коментарите на първите редове, така че да съответстват на вашата конфигурация или промените, които направихте в сравнение с GENERIC.
Ако сте изграждали ядро под SunOS™ или някоя друга BSD операционна система, голяма част от съдържанието на този файл ще ви се стори позната. От друга страна, ако идвате от някоя операционна система като DOS, конфигурационният файл GENERIC може да ви се стори изумителен, така че следвайте бавно и внимателно напътствията от секцията за конфигурационния файл.
Note: Винаги преглеждайте файла /usr/src/UPDATING преди да пристъпите към изграждане на ядрото, в случай, че синхронизирате дървото с изходния код с последните разработки на проекта FreeBSD. Всички важни особености за обновяване на FreeBSD са отбелязани там. /usr/src/UPDATING винаги съвпада с версията на кода на FreeBSD който е при вас и заради това е по-точен отколкото информацията в наръчника.
Следва да компилирате изходния код на ядрото. Съществуват две процедури, които можете да използвате за да направите това и коя от двете ще използвате зависи от това защо изграждате ядрото и коя версия FreeBSD върви при вас.
If you have installed only the kernel source code, use procedure 1.
Ако сте инсталирали единствено изходния код на ядрото, използвайте процедура 1.
Ако използвате FreeBSD версия по-ранна от 4.0, и не обновявате до FreeBSD 4.0 или по-висока чрез make world, използвайте процедура 1.
Ако изграждате ново ядро без да обновявате изходния код (вероятно просто, за да добавите нова опция като IPFIREWALL), може да използвате която и да е процедура.
Ако преизграждате ядрото като част от make world процеса, използвайте процедура 2.
Процедура 1. Изграждане на ядрото по ``традиционния'' начин
Изпълнете config(8), за да генерирате кода на ядрото.
# /usr/sbin/config MYKERNEL
Влезте в директорията, където ще протече изграждането. Нейното име бива изписано, след като изпълните горепосочената команда.
# cd ../compile/MYKERNEL
Под FreeBSD версия по-ранна от 5.0, използвайте следното:
# cd ../../compile/MYKERNEL
Компилирайте на ядрото.
# make depend # make
Инсталирайте новото ядро.
# make install
Процедура 2. Изграждане на ядрото по ``новия'' начин
Влезте в директория /usr/src.
# cd /usr/src
Компилирайте ядрото.
# make buildkernel KERNCONF=MYKERNEL
Инсталирайте новото ядро.
# make installkernel KERNCONF=MYKERNEL
Note: Под FreeBSD 4.2 и по-стари версии трябва да замените KERNCONF= с KERNEL=. 4.2-STABLE изтеглен по-рано от 2-ри Февруари, 2001 не разпознава опцията KERNCONF=.
Ако по никакъв начин не сте обновили дървото с изходен код (не сте използвали CVSup, CTM или anoncvs), ще трябва да използвате поредицата от команди config, make depend, make, make install.
Новото ядро ще бъде копирано в главната директория под името /kernel, а старото ядро ще бъде преименувано на /kernel.old. Сега презаредете системата, за да използвате новото ядро. Ако нещо не върви както запланувано, погледнете инструкциите в секцията отстраняване на проблеми в края на тази глава. Уверете се, че сте прочели внимателно частта обясняваща как да възстановите системата в случай, че новото ядро не може да бъде заредено.
Note: От FreeBSD 5.0 нататък, ядрата се инсталират заедно с техните модули в /boot/kernel, а старите ядра се запазват в /boot/kernel.old. Други файлове свързани с процеса на зареждане, като зареждащата програма (loader(8)) и конфигурация също се запазват в /boot. Чужди модули също могат да бъдат поставени в /boot/modules, макар че потребителите трябва да са наясно колко важно е модулите да се поддържат в синхрон с компилираното ядро. Използването на модули, компилирани за друго ядро могат да доведат до нестабилност или неточност.
Note: Ако сте добавили някакви нови устройства (например звукова карта) и използвате FreeBSD 4.X или по-ранна версия, може да трябва да добавите някои специални файлове за устройства (device nodes) в директория /dev, преди да можете да ги използвате. За повече информация прегледайте секция създаване на файлове за устройства по-нататък в тази глава.
Този и други документи можете да намерите в ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
За въпроси относно FreeBSD, прочетете документацията преди да попитате в <questions@FreeBSD.org>.
За въпроси относно този документ, e-mail <doc@FreeBSD.org>.