Отказ от обязательств:
Данный документ по
конфигурированию, сборке, обновлению ядра для ix86-based систем, ни в коей мере не является полноценным руководством
к действию. Также не является авторизованным переводом, что непозволительно, учитывая
уровень языковых знаний автора. Все
ниже сказанное основано на личном опыте и базируется на The
Linux Kernel HOWTO версии v6.3, 4 July
2003 от Al Dev
(Alavoor Vasudevan).
1.
Введение:
1.1.
Версия ядра.
Номер версии ядра состоит из
трех компонентов - старшего (major),
младшего (middle) и
версии номера исправления (patch-level или minor). Старший номер увеличивается при
внесении существенных изменений в ядро. Младший позволяет судить о устойчивости
(стабильности) ядра. Четные номера зарезервированы для стабильных версий, а
нечетные присваиваются версиям, которые
находятся в стадии разработки и могут изменяться. Ядра, находящиеся в стадии
разработки могут неоднократно подвергаться модернизации. Рассмотрим три примера
: первый 2.4.19-трех компонентный номер стабильного ядра 19 версия исправления
(patch-level или minor); второй 2.5.70 -70-я стадия
модернизации нестабильного ядра (5); третий - 2.4.18-14 -
четырехкомпонентный номер ядра 4 -ый
компонент - номер дополнения (EXTRAVERSION)-наиболее часто встречается в
системах Red Hat,
ASPLinux.
Примечание.
Посмотреть свою версию ядра
можно командой # cat /proc/version
1.2.
Причины.
Существует
несколько причин, по которым вы можете принять решение, что вам необходима
сборка ядра вместе с тем достаточно и
одной из них:
·
Вы занимаетесь разработкой и тестированием ядра.
·
Вы установили новое оборудование, не поддерживаемое
текущей версией.
·
Вы решили собрать ядро, оптимизированное только под ваше оборудование.
·
У Вас устаревшее/несовременное ядро.
·
Разрабатываемое вами программное обеспечение требует
специальной настройки ядра.
·
Вы решили пересобрать ядро для ускорения работы вашей
машины или для минимизации ядра.
2.
Первые шаги.
Перед тем как
осуществлять конфигурирование и перекомпиляцию ядра, было бы хорошей идеей
сделать резервную копию действующей версии и желательно системы в целом.
Резервная копия системы избавит Вас от многих проблем, которые могут возникнуть
как результат допущенных ошибок в процессе конфигурирования и сборки ядра.
2.1. Если вы
решили оптимизировать или переконфигурировать текущую версию ядра, то для
начала проверьте наличие исходных кодов, обычно они располагаются в каталоге /usr/src/linux-X.X.X, где X.X.X номер
версии ядра. Если таковых не оказалось вам необходимо установить их с
дистрибутивного диска или взять с ftp://ftp.kernel.org/pub/linux/kernel/.
2.2. Если у вас установлено действующее ядро, и вы просто
решили произвести обновление до последней новейшей версии, т.е. другими словами
произвести minor-update (к примеру, у вас установлено скомпилированное (build) 2.4.19 вырешили произвести обновление до 2.4.20). В таком
случае вам необходимо сохранить конфигурационный файл вашего ядра для
дальнейшего использования и с целью минимизировать затраты времени в
дальнейшем, так как выполнение команды make mrproper удалит имеющийся у вас конфигурационных файл.
bash# mkdir /usr/src/kernelconfigs
bash# mv /usr/src/linux/.config /usr/src/kernelconfigs/.config.save
Еще один метод это копирование старого конфигурационного файла из дерева старого ядра
в дерево нового а также специфично для некоторых версий linux (например, Red Hat).
bash# rm /usr/src/linux-2.4
bash# ls -l /usr/src/linux-2.4 /usr/src/linux-2.4.X, где X ваше ядро
bash# cd /usr/src/linux-2.4
bash# cp /usr/src/linux-2.4.19/.config .
Есть и еще один метод make oldconfig в данном случае конфигуратор самостоятельно
ответит на большинство вопросов обращенных обычно к вам.
Замечание:
Если у вас недостаточно места в каталоге /usr/src/ для выполнения операций вы мжете осуществить
эти операции в любом каталоге единственное что симлинк в /usr/src должен указывать на местоположение нового ядра.
3.
Шаг второй - Make.
1.
Распакуйте исходные коды ядра, например командой
tar xzvf
linux-2.4.20.tar.gz
2. Далее комментариев не
требуется.
cd
/usr/src/linux;
mkdir
/usr/src/kernelconfigs;
cp /usr/src/linux/.config /usr/src/kernelconfigs/.config.save; #при условии если вы хотите сохранить конфигурацию.
make
clean;
make
mrproper;
make
clean;
cp
/usr/src/kernelconfigs/.config.save .config
2. Далее
в зависимости от ваших желаний:
make config #
выполнить конфигурирование в консоли
make menuconfig
# выполнить конфигурирование с помощью меню (не меня)
в консоли (требует наличие библиотеки ncurses)
make oldconfig
# выполнить конфигурирование с учетом старой конфигурации
(вам придется ответить на вопросы
связанные только с устанавливаемым ядром
все остальное самостоятельно)
make xconfig
# для предпочитающих графический интерфейс настройки
(только с Х терминала)
make dep
3. Теперь
Вы можете указать на версию сборки, т.е. установить EXTRAVERSION. Поправьте соответствующую строку
/usr/src/linux-2.4/Makefile, обычно эта строка пустая.
4.
make
bzImage
5.
make
modules
6.
make modules_install
7.
make install
#не рекомендуется верно работает только в Red Hat и то только благодаря скрипту kernel_install от Red Hat. Лучше сделать так:
cp /usr/src/linux/arch/i386/boot/bzImage
/boot/wmlinux-2.4.X
8.
Сконфигурируйте загрузчик lilo или grub (это
не тема для обсуждения здесь)
9.
Подготовьтесь к самому страшному - запаситесь загрузочной
дискетой
bash #mkbootdisk
10.
Перезагружайте машину и с богом!
11.
Если все нормально у вас есть еще дела make rpm (только если у вас rpm-based linux и вам нет желания при каждой
установке повторять сборку заново)
12.
make clear
(если нет желания захламлять жесткий диск)
4. Установка заплат.
Одновременно с появлением новой версии ядра могут появиться веские
причины для его обновления. Сберегите свое время, нервы и здоровье,
своевременно устанавливая заплаты для исправления ошибок.
В первую очередь загрузите заплату ядра. Если версия текущего ядра имеет
номер 2.4.19, то в этом случае используется файл заплаты patch-2.4.20. bz2. При каждом исправлении можно подняться
только на один уровень. Чтобы перейти на два уровня, нужно установить две
заплаты.
Поместите файл заплаты в каталог /usr/src.
В том случае, если существует символиче-ская связь с ядром linux-2 .4.19, которая называется linux (или же исходные файлы ядра расположены
в каталоге linux), продолжите процесс, введя следующую команду:
# bzcat patch-2.4.20.bz2 | patch -p0 --dry-run
Если предшествующая команда будет выполнена без появления сообщения со
строками FAILED, параметры --dry-run
можно удалить и безбоязненно установить заплату.
В том случае, если каталог linux отсутствует (или отсутствует
символическая связь), вос-пользуйтесь командой cd и перейдите в дерево исходных кодов ядра
linux. После этого введи-те следующую команду:
bzcat ../patch-2-4.20.bz2 | patch -p1 --dry-run
В случае необходимости предыдущая команда может быть дополнена следующим
выражением:
# error.log | grep FAIL > error.log
Отсутствие
сообщения FAIL, выводимого командой grep, говорит о том, что заплата бу-дет
установлена корректно.
Одно из преимуществ подобного метода установки заплат состоит в том, что
он позволяет вам пропустить этапы make mrproper и make [x| menu]config и
перейти непосредст-венно к сборке ядра (предполагая, что заплата не
обеспечивает новых функциональных воз-можностей, которые вы хотите ввести. В
противном случае вам придется снова воспользо-ваться командой make config, выполнить изменение и сохранить
конфигурацию).
5. Сборка единичного модуля.
Часто
возникает необходимость добавить один два модуля к готовому ядру. При этом
естественно нет никакого желания производить полную перекомпиляцию ядра в целом
или всех модулей. Для примера рассмотрим вопрос добавления поддержки файловой
системы ntfs. Например,
RedHat 7.2 и 8.0 не умеют читать разделы ntfs.
Что бы произвести
добавление этого модуля вам необходимо произвести изменение конфигурационного
файла. Выполните по вашему желанию make [x|
menu]config. В разделе filesystems включите поддержку ntfs
- модулем и сохраните конфигурацию.
Далее:
cd /usr/src/linux
cp Makefile Makefile.original
cp Makefile.original Makefile.my
vi Makefile.my
# Закомментируйте имеющуюся переменную 'SUBDIRS' а добавьте свою
# директорию, для примера, fs/ntfs:
#SUBDIRS =kernel drivers mm fs net ipc lib abi crypto
SUBDIRS =fs/ntfs
# Сохраните Makefile.my и выполните команду -
make -f Makefile.my modules
# таким образом мы получим модуль ntfs.o
# теперь скопируйте полученный модуль в директорию
#действующего ядра /lib/modules
# ВНИМАНИЕ: Не выполняйте - "make -f Makefile.my modules_install"
# Это может привести к стиранию иных модулей системы
cp ntfs.o /lib/modules/2.4.20/kernel/fs/autofs
Источники:
3.1.1.
The
Linux Kernel HOWTO версии v6.3, 4 July 2003 от Al Dev (Alavoor Vasudevan).
3.1.2.
"Использование Linux" Дэвид
Бендел, Роберт Нейпир.
Благодарности:
Пивоваренным компания - за задание тонуса в работе.
San Андреев - за наставления на путь истинный.
freeman73 freeman73@mail.ru - за помощь в написании пункта 4 - рекомендации
Linux - за то что он есть.
Red Hat Inc - за то что я неустанно что-то привожу в надлежавший вид.
понедельник, 4 августа 2003 г.
Andrew E. Kuznetsoff ака Разгильдяй на обкуренной кошке