Нотатки про freebsd - Перезбірка ядра

Просцесс пересборки ядра полягає в редагуванні конфігураційного файлу і подальшої компіляції ядра з опціями зазначеними в файлі конфігурації. Для збірки ядра нам знадобляться вихідні ядра, якщо вони не встановлені то встановити їх можна двома способами:

Установка початкових кодів ядра допомоги sysinstall
Входимо в систему в якості root, ставимо інсталяційний диск в привід і запускаємо sysinstall, в ньому вибираємо такі опції: Configure-> Distributions-> src-> sys:

Нотатки про freebsd - Перезбірка ядра


Установка початкових кодів ядра за допомогою інсталяційного скрипта

Для установки початкових кодів нам доведеться змонтувати інсталяційний диск і виконати скрипт, який встановить зазначені вихідні коди в каталог / usr / src. Логіном як root, встановлюємо інсталяційний диск в привід і виконуємо:

# Mount / cdrom
# Cd /cdrom/7.2-RELEASE/src
# Mkdir / usr / src
# Sh install.sh sys

Першою командою монтуємо привід в каталог / cdrom, другою командою переходимо в каталог /cdrom/7.2-RELEASE/src, третин командою створюємо каталог src в каталозі / usr, четвертою командою запускаємо на виконання скрипт з аргументом sys, який помістить в / usr / src каталог sys з вихідними кодами. Якщо інсталяція відбудеться успішно то на дисплеї з'явиться повідомлення:

Extracting sources into / usr / src.
Extracting source component: sys
Done extracting sources.

Редагування конфіга ядра

Після того як вихідні тексти ядра знаходяться в / usr / src / sys можна приступати власне до процесу пересборки ядра. В якості мети пересборки оберемо можливість включення в ядро ​​опцій для відображення консолі в графічному режимі. За замовчуванням консоль відображається в текстовому режимі. Для того щоб створити свій конфіг ядра зробимо наступне:

# Cd / usr / src / sys / i386 / conf /
# Cp GENERIC MYKERN
# Ee MYKERN

Першою командою ми переходимо в каталог / usr / src / sys / i386 / conf / (зверніть увагу на каталог i386, якби я використовував би дистрибутив системи іншої архітектури, припустимо amd64 то мені б треба було б переходити в соотв. Моєї архітектурі каталог) , потім копіюємо файл GENERIC в файл з назвою MYKERN, після чого редагуємо файл MYKERN. Фактично ми скопіювали конфиг стандартного ядра в файл MYKERN і виправляти будемо його а не GENERIC. Конфиг ядра складається з рядків із заданими параметрами:

Знаходимо в конфіги рядки:

cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident GENERIC

І міняємо їх наступним чином:

cpu I686_CPU
ident MYKERN

Тобто рядки описують 486 і 586 типи процесорів видаляємо за непотрібністю, а в рядок ident вписуємо назву нашого ядра. Це потрібно для того щоб відрізняти наше ядро ​​від GENERIC.
Потім слід блок описує які опції і пристрої будуть включені в ядро. Опції позначаються як options а пристрої як device. Нам буде потрібно додати в ядро ​​дві опції - VESA і SC_PIXEL_MODE, помістимо їх в кінці першого блоку опцій:


options STOP_NMI # Stop CPUS using NMI instead of IPI
options AUDIT # Security event auditing
#options KDTRACE_HOOKS # Kernel DTrace hooks

Після додавання:
.
options STOP_NMI # Stop CPUS using NMI instead of IPI
options AUDIT # Security event auditing
#options KDTRACE_HOOKS # Kernel DTrace hooks
options VESA
options SC_PIXEL_MODE

На дисплеї з'явиться повідомлення:

Kernel build directory is. / Compile / MYKERN
Do not forget to do `` make cleandepend make depend ''

Після чого виконуємо:

# Cd. / Compile / MYKERN
# Make depend all install clean

Першою командою ми переходимо в каталог рівнем вище compile / MYKERN створений командою configure MYKERN і потім виконуємо збірку ядра, після складання відбувається чистка тимчасових файлів, що залишилися від збірки ядра. Після закінчення складання виконуємо перезавантаження системи і дивимося висновок команди uname -a:

Фактично це означає що ядро ​​пересобран. І якщо виконати команди vidcontrol -i mode то ми побачимо додаткові VESA режими, які раніше були недоступні, до пересборки ядра.

У разі, якщо після перезапуску системи виникла проблема - не вантажиться зібране ядро, то завантажити дефолтний ядро ​​GENERIC можна, використовуючи командний рядок завантажувача loader promt. Для цього в стартовому меню з вибором Виріанти завантаження вибираємо "Escape to loader promt" (пункт 6), після цього на дисплеї з'явиться пріглашніе до введення:

Щоб повністю вичистити з пам'яті завантажене ядро ​​з усіма модулями слід ввести команду unload:

Ніякого підтвердження після введення на екрані не з'явиться, після цього вантажимо попереднє робоче ядро. Вводимо load /boot/kernel.old/kernel:

OK load /boot/kernel.old/kernel

Через кілька секунд ядро ​​завантажиться і вводимо команду boot:

Ми завантажилися з робочим ядром :)

Щоб постійно вручну не завантажувати GENERIC, то перебуваючи в системі робимо наступне:

# Cd / boot /
# Mv kernel kernel.back
# Mv kernel.old kernel

Першою командою переходимо в каталог / boot, потім перейменовуємо каталог kernel в kernel.back (про всяк випадок), потім перейменовуємо kernel.old (в цьому каталозі і знаходиться попереднє робоче ядро ​​GENERIC) в kernel (система за замовчуванням завантажує ядро ​​з каталогу / boot / kernel).

P.S. Ознайомитися зі списком команд завантажувача можна запровадивши "?". Отримати інформацію по тій чи іншій команді потрібно ввести help імя_команди, наприклад: