Перекомпіляція ядра, клуб любителів asplinux

"Компілювати ядро ​​- НЕ горіхи клацати", - часто зітхають ті, у кого перекомпіліровать ядро ​​не хоче завантажуватися. Хоча горішок цей досить міцний, проте перекомпіляція залишається неминучою справою, з яким кожен системний адміністратор Лінукс рано чи пізно зіткнеться.
Я теж не уникла цієї долі. У цій статті я збираюся пройти з вами все фази компіляції ядра. Я вірю, що це додасть вам впевненості і компіляція перестане бути для вас "нездійсненною місією".

Говорячи по-простому, ядро ​​- це центральна частина більшості операційних систем. У число основних функцій ядра входять: управління процесами, управління ресурсами та інше. Ядро першим завантажується в оперативну пам'ять, коли комп'ютер включається, і залишається в пам'яті до моменту виключення машини. Саме тому, що ядро ​​постійно присутній в оперативній пам'яті, воно повинно бути мінімально можливого розміру.

У Лінукс ядро ​​являє собою єдиний файл, який називався іменем vmlinuz. Початкові букви vm позначають віртуальну пам'ять (virtual memory), а остання буква z говорить про те, що файл є стислим. Файл vmlinuz знаходиться в директорії / boot.

В яких випадках вдаються до перекомпіляції ядра?

Щоб додати або прибрати підтримку тих чи інших пристроїв:
Для взаємодії будь-якого пристрою з операційною системою необхідний відповідний драйвер пристрою. Наприклад, під'єднуючи USB пристрій до комп'ютера, ми повинні забезпечити відповідний драйвер для його роботи. Говорячи технічною мовою, в ядрі необхідно активувати підтримку USB драйвера.

Щоб змінити параметри системи:
Системні параметри включають: підтримку "верхньої" пам'яті, управління лімітами виділяється ресурсу тощо. Для управління фізичної пам'яттю понад 4 Гб, необхідна підтримка "верхньої" пам'яті (до 64 Гб).

Які етапи рекомпіляції ядра?

1.Проверіть і поновити необхідні пакети
2.Получіть вихідний код ядра
3.Получіть інформацію про комп'ютерному "залізі"
4.Сконфігуріровать ядро
5.Создать ядро
6.Сконфігуріровать завантажувач
7.Перезагрузіть сервер

1. Перевірити і відновити необхідні пакети

Цей етап потрібен тільки при підвищенні версії ядра з 2.4 до 2.6. Якщо робиться оновлення версії 2.6.х до 2.6.х, то перший етап можна пропустити.

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

Основні пакети для перевірки та оновлення:
binutils, e2fsprogs, procps, gcc і module-init-tools.

При оновленні module-init-tools необхідно бути дуже уважним. Модулем називається програма, яка може бути включена в ядро ​​на вимогу (в разі необхідності). Module-init-tools містять утиліти для управління модулями ядра Лінукс - для завантаження, вивантаження, перерахування та видалення модулів. Основні доступні утиліти суть:

* insmod
* rmmod
* modprobe
* depmod
* lsmod

Як modprobe, так і insmod використовуються для підключення модулів. Єдина відмінність між ними полягає в тому, що insmod "не знає" місце розташування модулів і не попереджає про залежності. Modprobe "знає" про це, переглядаючи файл / lib / modules /<версия ядра>/modules.dep

Як встановлювати module-init-tools?

# Tar -zxf module-init-tools-3.2.2.tar.gz

2. Налаштуйте його:

# Cd module-init-tools-3.2.2 # ./configure --prefix = /

3. Перейменуйте існуючу 2.4 версію утиліти в utility.old:

4. Створіть і встановіть:

# make
# Make install

5. Запустіть скрипт generate-modprobe.conf для перекладу даних з файлу конфігурації модулів версії ядра 2.4 (/etc/modules.conf) в файл, що застосовується версією ядра 2.6 (/etc/modprobe.conf)

6. Перевірте версію наявного module-init-tools

2. Отримання вихідного коду ядра

3. Отримання інформації про комп'ютерному "залізі"

Інформація про апаратну конфігурацію комп'ютера допоможуть отримати наступні команди:

Ця утиліта видасть інформацію про мережевої карти і всіх пристроях, підключених до машини. Якщо у відповідь на введення команди lspci ви отримуєте помилку "lscpi: command not found" (команда не знайдена), вам доведеться встановити пакет pciutils-2.1.99.test8-3.4 rpm на ваш сервер.

Типовий висновок команди lspci виглядає приблизно так:

[Root] # lspci
00: 01.0 PCI bridge: Broadcom BCM5785 [HT1000] PCI / PCI-X Bridge
00: 02.0 Host bridge: Broadcom BCM5785 [HT1000] Legacy South Bridge
00: 02.1 IDE interface: Broadcom BCM5785 [HT1000] IDE
00: 02.2 ISA bridge: Broadcom BCM5785 [HT1000] LPC
00: 03.0 USB Controller: Broadcom BCM5785 [HT1000] USB (rev 01)
00: 03.1 USB Controller: Broadcom BCM5785 [HT1000] USB (rev 01)
00: 03.2 USB Controller: Broadcom BCM5785 [HT1000] USB (rev 01)
00: 05.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27)
00: 18.0 Host bridge: Advanced Micro Devices [AMD]
K8 [Athlon64 / Opteron] HyperTransport Technology Configuration
00: 18.1 Host bridge: Advanced Micro Devices [AMD]
K8 [Athlon64 / Opteron] Address Map
00: 18.2 Host bridge: Advanced Micro Devices [AMD]
K8 [Athlon64 / Opteron] DRAM Controller
00: 18.3 Host bridge: Advanced Micro Devices [AMD]
K8 [Athlon64 / Opteron] Miscellaneous Control
01: 0d.0 PCI bridge: Broadcom BCM5785 [HT1000]
PCI / PCI-X Bridge (rev b2)
01: 0e.0 RAID bus controller: Broadcom BCM5785 [HT1000]
SATA (Native SATA Mode)
02: 03.0 Ethernet controller: Broadcom Corporation
NetXtreme BCM5704 Gigabit Ethernet (rev 10)
02: 03.1 Ethernet controller: Broadcom Corporation
NetXtreme BCM5704 Gigabit Ethernet (rev 10)

Інформацію про процесор можна отримати з файлу / proc / cpuinfo

Корисна програма для отримання інформації про "залозі". Вона видає детальний опис модулів. Перш ніж застосовувати команду modinfo, потрібно попередньо з'ясувати, які модулі завантажені. Для цього служить команда lsmod - вона видає список завантажених модулів.

[Root] # lsmod
libata 105757 1 sata_svw
[Root] #

lsmod видала модуль sata_svw, а детальну інформацію про цей модуль можна отримати за допомогою команди modinfo.

[Root] # modinfo sata_svw
filename: /lib/modules/2.6.9-55.ELsmp/kernel/drivers/ata/sata_svw.ko
author: Benjamin Herrenschmidt
description: low-level driver for K2 SATA controller
license: GPL
version: 2.0 9FF8518CB6CD3CB4AE61E35
vermagic: 2.6.9-55.ELsmp SMP 686 REGPARM 4KSTACKS gcc-3.4
depends: libata
alias: pci: v00001166d00000240sv * sd * bc * sc * i *
alias: pci: v00001166d00000241sv * sd * bc * sc * i *
alias: pci: v00001166d00000242sv * sd * bc * sc * i *
alias: pci: v00001166d0000024Asv * sd * bc * sc * i *
alias: pci: v00001166d0000024Bsv * sd * bc * sc * i *
[Root] #

Схожі статті