Перекомпиляция ядра.

Аватар пользователя mironn

"Компилировать ядро - не орехи щелкать", - часто вздыхают те, у кого перекомпилированное ядро не хочет загружаться. Хотя орешек этот довольно крепок, однако перекомпиляция остается неизбежным делом, с которым каждый системный администратор Линукс рано или поздно столкнется.
Я тоже не избежала этой участи. В этой статье я собираюсь пройти с вами все фазы компиляции ядра. Я верю, что это придаст вам уверенности и компиляция перестанет быть для вас "невыполнимой миссией".

Что есть ядро?

Говоря по-простому, ядро - это центральная часть большинства операционных систем. В число основных функций ядра входят: управление процессами, управление ресурсами и прочее. Ядро первым загружается в оперативную память, когда компьютер включается, и остается в памяти до момента выключения машины. Именно потому, что ядро постоянно присутствует в оперативной памяти, оно должно быть минимально возможного размера.

В Линукс ядро представляет собой единственный файл, носящий имя 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?

1.Загрузите исходный код http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-in... на сервер, используя wget, и распакуйте его:

# 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:

# make moveold

4. Создайте и установите:

# make
# make install

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

# ./generate-modprobe.conf /etc/modprobe.conf

6. Проверьте версию имеющегося в наличии module-init-tools

# depmod -V

2. Получение исходного кода ядра

Скачайте исходники с сайта http://www.kernel.org/pub/linux/kernel/v2.6/. Вы можете поместить их в директорию /usr/src/kernels на вашем сервере. Если вы планируете обновление ядра до версии 2.6.19.2, то шаги будут таковы:

[root]# cd /usr/src/kernels
[root]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.2.tar.gz
[root]# tar zxf linux-2.6.19.2.tar.gz
[root]# cd linux-2.6.19.2

3. Получение информации о компьютерном "железе"

Информация об аппаратной конфигурации вашего компьютера помогут получить следующие команды:

lspci

Эта утилита выдаст информацию о сетевой карте и всех устройствах, подключенных к машине. Если в ответ на ввод команды 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)

cat /proc/cpuinfo

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

[root]# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 35
model name : Dual Core AMD Opteron(tm) Processor 170
stepping : 2
cpu MHz : 1996.107
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 clflush mmx fxsr sse sse2 ht pni syscall nx mmxext fxsr_opt
lm 3dnowext 3dnow pni
bogomips : 3992.34
[root]#

modinfo

Полезная программа для получения информации о "железе". Она выдает детальное описание модулей. Прежде чем применять команду 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]#

No votes yet
RSS-материал