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

UnixForum






Книги по Linux (с отзывами читателей)

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

Заметки пользователя Linux. О компиляции ядра 2.6.0. Часть 1. Файл README

(C) В.А.Костромин, kos @ rus-linux dot net

19-20 декабря 2003 г.

Всего несколько дней назад я закончил писать заметку о компиляции ядра, а тут вчера (18.12.2003 г.) Линусом Торвальдсом было выпущено ядро 2.6.0 и появился повод вернуться к этому вопросу еще раз (это даже не первый возврат к данной теме, учитывая, что о компиляции ядра я уже рассказывал в книге [1]).

Архив с исходными кодами ядра я скачал в тот же день, как увидел в Интернет объявление о выходе новой версии ядра. Архив это "весит" 32 475 Килобайт. Между прочим, объем исходных кодов ядра неуклонно растет, о чем свидетельствует следующая табличка:

Таблица 1.

Версия ядраОбъем tar-bz2-архиваОбъем исходных кодов после разархивации
2.2.010 345 Kbнет данных
2.4.220 019 Kb108 000 Kb
2.4.1829 402 Kb 147 516 Kb
2.4.2329 133 Kb 186 500 Kb
2.6.032 474 Kb 211 996 Kb

Скопировал я архив в тот же каталог /usr/src и разархивировал командой

[root]# tar xvfj kernel-2.6.0.tar.bz2

Появился подкаталог linux-2.6.0, в который я и перешел. Уже было ринулся компилировать новое ядро, руководствуясь своей книгой [1] и сделанными недавно заметками [2], но прочитал файлы README и ./Documentation/Changes и понял, что процедура компиляции этой версии ядра будет существенно отличаться от компиляции предыдущих версий. Пришлось заниматься переводом и внимательным изучением этих двух файлов. С изложения результатов этого изучения я и начну свои заметки. В этой части я расскажу что нашел полезного в файле README.

  1. В подкаталоге Documentation содержится масса документации по ядру и смежным вопросам. В файле ./Documentation/00-INDEX вы можете найти краткую справку о том, что содержится в каждом файле. В файлах и подкаталогах каталога Documentation/ обычно содержатся замечания по установке различных драйверов для данного конкретного варианта ядра. Обязательно прочитайте файл Changes, поскольку он содержит информацию о проблемах, которые могут возникнуть в процессе перехода на новую версию ядра.
  2. В подкаталоге Documentation/DocBook содержится несколько руководств для пользователей и разработчиков. Эти руководства можно преобразовать в форматы Postscript (.ps), PDF или HTML, для чего надо дать, соответственно, команды "make psdocs", "make pdfdocs" или "make htmldocs". Я решил получить эту документацию в формате html и выбрал последний вариант команды, однако в результате увидел следующее сообщение об ошибке:
    *** You need to install DocBook stylesheets ***
    make[1]: *** [Documentation/DocBook/wanbook.html] Ошибка 1
    make: *** [htmldocs] Ошибка 2
    
  3. Для того, чтобы скомпилировать и запустить ядро версии 2.6.xx, необходимо, чтобы в вашей системе были установлены достаточно актуальные версии нескольких программных пакетов. В файле ./Documentation/Changes приведены сведения о том, какие версии и каких именно пакетов необходимо иметь. Имейте в виду, что использование более старых версий может привести к появлению в ядре неявных ошибок, которые будет трудно выявить в последующем, но которые могут породить большие проблемы в процессе компиляции и эксплуатации нового ядра.
  4. Перед началом компиляции необходимо удостовериться, что не осталось старых вариантов объектных файлов (.o-файлы) и зависимостей, для чего выполнить команды:
    		cd linux
    		make mrproper
    
  5. НЕЛЬЗЯ использовать каталог /usr/src/linux для компиляции ядра! Этот каталог содержит (обычно неполный) набор заголовочных файлов ядра, которые используются библиотекой заголовочных файлов (by the library header files). Они должны соответствовать используемой в работающей системе библиотеке, поэтому не стоит вносить путаницу. Я сделал для себя вывод, что предпочтительнее создать символическую ссылку с именем linux, указывающую на каталог, соответствующий работающему ядру. На время компиляции эту ссылку следует перенаправить на каталог с исходными кодами ядра (например, linux-2.6.0, чтобы ... как бы чего не вышло!)
  6. По умолчанию файлы нового ядра при компиляции создаются в каталоге с исходными кодами. Но можно с помощью опции "make O=output/dir" указать другой каталог, куда будут размещаться все вновь создаваемые файлы (включая .config). Но имейте в виду: если опция 'O=output/dir' используется, она должна указываться при каждом вызове команды make.
  7. Этап конфигурации ядра является обязательным, даже если вы внесли самые малые изменения в исходные коды ядра! В каждый релиз ядра включаются новые опции конфигурации и если пропустить этап конфигурирования, в дальнейшем могут возникнуть самые разные проблемы. Если вы хотите уменьшить продолжительность этого этапа, вы можете использовать команду "make oldconfig", которая будет задавать вам только те вопросы, которые вновь появились. Следствие: если вы проводите повторную конфигурацию ядра с целью изменить значения только некоторых опций, нужно просто удалить соответствующие строки из файла .config, оставшегося от прошлой компиляции, и выполнить команду "make oldconfig".
  8. Замечания по выполнению конфигурирования ядра командой "make config":
    - включение в ядро драйверов, которые не являются необходимыми делает ядро больше и в некоторых случаях может порождать проблемы: опрос несуществующего контроллера может вызвать конфликты в работе других контроллеров;
    - компилируя ядро для типа процессора, более высокого, чем 386, может привести к тому, что ядро не будет работать на 386-ом процессоре. Ядро обнаружит это при загрузке и откажется работать.
    - ядро, скомпилированное с эмуляцией математического сопроцессора будет использовать этот сопроцессор, если обнаружит его: в этом случае режим эмуляции сопроцессора никогда не будет использован. Ядро в этом случае становится чуть больше, но зато будет работать на любых машинах, независимо от того, имеют они сопроцессор или нет.
    - включение опций, находящихся в стадии разработки и тестирования, обычно приводит к созданию ядра большего по размеру и более медленного (или того и другого вместе), а также может дать менее стабильное ядро. Так что вам, вероятно, лучше отвечать 'n' на те вопросы, которые имеют пометку "development", "experimental" или "debugging".
  9. Для конфигурирования ядра можно использовать альтернативные варианты команд:
    "make menuconfig" конфигурирование с помощью цветного текстового меню, списков выбора и диалогов.
    "make xconfig" конфигурирование в графическом режиме с использованием библиотеки Qt.
    "make gconfig" конфигурирование в графическом режиме с использованием библиотеки Gtk.
    "make oldconfig" используются ответы, записанные в существующем файле ./.config.
  10. Загляните в файл Makefile для того, чтобы задать некоторые опции, специфичные для вашего конкретного компьютера (например, режим SVGA и т.д.).
  11. Убедитесь, что у вас установлен компилятор gcc 2.95.3. Известно, что gcc 2.91.66 (egcs-1.1.2) и gcc 2.7.2.3 неправильно компилируют некоторые части ядра и *более не поддерживаются*. Не забудьте также обновить пакет binutils. Дополнительную информацию смотрите в файле ./Documentation/Changes.
  12. Для того, чтобы создать сжатый образ ядра, используйте команду "make bzImage". Если вы хотите создать загрузочный диск (без корневой файловой системы или LILO), вставьте гибкий диск в дисковод A: и выполните команду "make bzdisk".
  13. Чтобы выполнить инсталляцию ядра, вы должны иметь права суперпользователя, хотя все предыдущие операции можно выполнять от имени простого пользователя. Не используйте права бога всуе!
  14. Если вы сконфигурировали какие-либо части ядра в виде модулей, вы должны будете выполнить команду "make modules", а сразу вслед за ней - команду "make modules_install".
  15. Сохраните резервную копию старого ядра на случай, если что-либо пойдет не так. Не забудьте также сделать резервные копии модулей, соответствующих старому ядру. Если вы ставите ядро с тем же самым номером версии, что и у вашего работающего ядра, создайте резервную копию каталога модулей перед тем, как выполнять команду "make modules_install".
  16. Для того, чтобы загрузить новое ядро, вы должны скопировать образ ядра (после компиляции он находится в файле .../linux/arch/i386/boot/bzImage) туда, где располагаются другие загружаемые ядра.
    В некоторых случаях они размещаются на гибком диске, и в таком случае вы должны скопировать файл bzImage на (в) /dev/fd0, чтобы создать загрузочный диск.
  17. Если вы используете загрузчик LILO, то указание на образ загружаемого ядра должно быть прописано в файле /etc/lilo.conf. Образ ядра обычно располагается в одном из файлов /vmlinuz, /boot/vmlinuz, /bzImage или /boot/bzImage. Для того, чтобы использовать новое ядро, сохраните копию старого образа ядра и скопируйте новый образ поверх старого. Затем вы должны переустановить LILO, чтобы обновить карту загрузки (to update the loading map)!! Если вы этого не сделаете, вы не сможете загрузить новое ядро.
    Переустановка LILO выполняется путем запуска команды /sbin/lilo. Возможно, вы захотите предварительно откорректировать /etc/lilo.conf, для того, чтобы обеспечить возможность загрузки старого образа ядра (скажем, /vmlinux.old) на тот случай, если новое не будет работать. Подробнее смотрите документацию по LILO. После переустановки LILO все должно быть нормально. Перезагружайте систему и наслаждайтесь!
  18. Если вам вдруг потребуется поменять загрузочное устройство, видео-режим, размер виртуального диска и так далее в образе ядра, используйте программу 'rdev' или соответствующую опцию загрузчика LILO. Не требуется перекомпилировать ядро для изменения этих параметров.

Это все, что я нашел полезного в файле README. Постараюсь учесть все эти рекомендации в дальнейшем, а пока давайте почитаем еще файл Documentation/Changes. Результаты его изучения - в следующей части моих заметок.

Список литературы и ссылки.

  1. В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.
  2. "Второй этюд о компиляции ядра из исходных кодов."