Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Окружение и инструменты Вперед

Нужно ли перекомпилировать ядро?

Для сборки и отработки модулей ядра перекомпиляция самого ядра (и загружаемого образа системы), в обязательном порядке, - не нужна. Для работы с модулями достаточно наличия заголовочных файлов ядра (в точности соответствующих загруженной версии ядра!). Обычно заголовочные файлы, необходимые для разработки модулей, присутствуют в вашей системе (это определяется предпочтениями дистрибьюторов вашей Linux системы). Но может оказаться, что это и не так, в этом случае символьная ссылка /lib/modules/`uname -r`/build окажется неразрешённой, а каталог кодов ядра пустой:

$ ls /usr/src/kernels

$

В этом случае нужно доустановить пакет вида:

# yum install kernel-devel.x86_64

	... 
	Установка: 
	 kernel-devel         x86_64        2.6.35.13-92.fc14         updates         6.6 M 
	...
	Объем загрузки: 6.6 M 
	Будет установлено: 24 M 
	... 
	Установлено: 
	  kernel-devel.x86_64 0:2.6.35.13-92.fc14 

- показана установка в 64-разрядной системе , в 32-разрядной, естественно, это будет kernel-devel.i686.

В любом случае, мы должны убедиться, что заголовочные файлы, соответствующие версии исполняющейся системы, у нас установлены:

$ ls /lib/modules/`uname -r`/build

	arch    drivers   include  kernel   mm              samples   sound       usr 
	block   firmware  init     lib      Module.symvers  scripts   System.map  virt 
	crypto  fs        ipc     Makefile  net             security  tools       vmlinux.id 

Но и сборка ядра Linux, с чего мы начали обсуждение, может оказаться полезной и нужной для сборки ядра с некоторыми специальными качествами, например, с повышенными отладочными уровнями. Для сложных комплексных и долгосрочных проектов сборка рабочей версии ядра желательна.

Сборка (и установка) нового ядра в новых версиях Linux может быть сопряжена с некоторыми сложностями, связанными не с самой сборкой (сборка ядра в более ранних версиях производилась вообще без проблем), а с некоторыми сопутствующими обстоятельствами взаимодействия ядра с другими частями заружаемой системы, из которых можно назвать: необходимость начального загрузочного образа, установка системы в виртуальную файловую систему...

Если же вы решите пересобрать ядро, то первое, что нужно сделать — выяснить: какое и откуда грузится ваше текущее ядро (все последующие примеры — с реального компьютера!):

$ uname -r

2.6.18-92.el5

$ sudo cat /boot/grub/grub.conf

	...
	title CentOS (2.6.18-92.el5)
	    root (hd1,5)
	    kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet
	    initrd /boot/initrd-2.6.18-92.el5.img
	...

Здесь нужно соблюдать величайшую осторожность:

$ ls /dev/hd*

/dev/hda /dev/hde /dev/hde1 /dev/hde2 /dev/hde5 /dev/hdf

/dev/hdf1 /dev/hdf2 /dev/hdf4 /dev/hdf5 /dev/hdf6

$ ls -l /dev/cdrom

lrwxrwxrwx 1 root root 3 Мар 12 10:15 /dev/cdrom -> hda

$ sudo /sbin/fdisk /dev/hdf

	...
	Команда (m для справки): p
	Устр-во Загр     Начало      Конец       Блоки   Id  Система
	/dev/hdf1   *           1        501     4024251   4f  QNX4.x 3-я часть
	/dev/hdf2            1394       2438     8393962+   f  W95 расшир. (LBA)
	/dev/hdf4             502       1393     7164990    c  W95 FAT32 (LBA)
	/dev/hdf5            1394       1456      506016   82  Linux своп / Solaris
	/dev/hdf6            1457       2438     7887883+  83  Linux

На данном компьютере (возможно, вопреки тому, что могло ожидаться на первый взгляд):

а). два HDD,

б). устройство /dev/hda — это CD-ROM,

в). 2-м HDD соответствуют /dev/hde и /dev/hdf (аппаратный EIDE контроллер ... но это не принципиально важно — диски при инсталляции могут быть «расставлены» самым замысловатым образом);

г). диску (hd1,5), указанному как загрузочный в меню загрузчика grub, соответствует /dev/hdf (т. е. 2-й диск) grub «считает» диски, начиная с 0;

д). по той же причине, загрузочному разделу диска (hd1,5) соответствует /dev/hdf6 (т. е. 6-й раздел);

е). это верно только для старых версий загрузчиков lilo и grub :

$ sudo /sbin/grub

GNU GRUB version 0.97

grub> help

	blocklist FILE                        boot
	cat FILE                              chainloader [--force] FILE
	clear                                 color NORMAL [HIGHLIGHT]
	...

grub> quit

ж). Загрузчик grub версий 1.X, только идущий на смену версиям 0.Х - «ведёт счёт» начиная с 1!

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

Вся дальнейшая детальная информация по сборке и установке ядра вынесены отдельным приложением в конце текста.


Предыдущий раздел: Оглавление Следующий раздел:
Инсталляция модуля   Обсуждение итогов раздела 4