next up previous contents
Next: Добавление в ядро драйвера Up: Модернизация и установка нового Previous: Модернизация и установка нового

Модернизация ядра системы

  Модернизация ядра заключается в получении новых исходных текстов ядра и их компилировании. Обычно это процедура проходит гладко, однако если модернизация производится до версии, находящейся в разработке, или до новой версии, то могут возникнуть проблемы. Номер версии ядра имеет две составных части: собственно номер версии и порядковый номер версии, или номер выпуска (patchlevel). На момент написания этого текста последняя стабильная версия ядра имеет номер 2.0.33 (см. сноску на стр. gif). Здесь 2.0 -- версия ядра, а 33 -- порядковый номер. Версии с нечетными номерами, например, 2.1, являются версиями в разработке. Их следует избегать, если, разумеется, не искать опасностей намеренно. Общая закономерность такова, что модернизация к новому порядковому номеру ядра системы происходит легко, а модернизация до новой версии требует модернизации системных утилит, которые тесно взаимодействуют с ядром.

  Исходные тексты ядра системы Linux могут быть получены копированием с любого FTP-сайта системы Linux (список дан в приложении B). Например, на сайте sunsite.unc.edu исходные тексты ядра системы Linux находятся в подкаталогах каталога /pub/Linux/kernel, упорядоченных номерами версий.

Исходные тексты ядер содержатся в виде сжатых архивов. Например, файл с исходными текстами ядра версии 2.0.33 называется linux-2.0.33.tar.gz.

Исходные тексты ядра системы Linux надо распаковывать в каталоге /usr/src, при этом получится каталог /usr/src/linux. Установился обычай, что каталог /usr/src/linux является мягкой ссылкой (soft link) на другой каталог, в имени которой содержится номер версии, например, /usr/src/linux-2.0.33. Таким образом, можно устанавливать и испытывать новые исходные тексты ядра системы прежде, чем удалять старые. Команды для создания ссылки на каталог, содержащий исходные тексты ядра, выглядят так:

\# \tinput{cd /usr/src} \\
\# \tinput{mkdir linux-2.0.33} \\
\# \tinput{rm -r linux} \\
\# \tinput{ln -s linux-2.0.33 linux} \\
\# \tinput{tar xzf linux-2.0.33.tar.gz}

При модернизации до нового выпуска ядра прежней версии можно сократить объем копируемых файлов, если копировать только изменения (patch files), поскольку после сжатия объем архива исходных текстов ядра составляет около 7 MB. Для модернизации с ядра 2.0.31 до ядра 2.0.33 надо будет скопировать файлы patch-2.0.32.gz и patch-2.0.33.gz, которые находятся на том же FTP-сайте, что и исходные тексты ядра. После того, как файлы изменений помещены в каталог /usr/src, изменения нужно последовательно внести в ядро. Один из возможных способов сделать это:

\# \tinput{cd /usr/src} \\
\# \tinput{gzip -cd patch-2.0.32.gz $\mid$ patch -p0} \\
\# \tinput{gzip -cd patch-2.0.33.gz $\mid$ patch -p0}
После того, как исходные тексты разархивированы, распакованы, и изменения внесены, надо убедиться в том, что три символические ссылки (symbolic links) в каталоге /usr/include соответствуют дистрибутиву ядра. Для создания этих ссылок надо воспользоваться командами
\# \tinput{cd /usr/include} \\
\# \tinput{rm -rf asm linux scsi} \\
\# \tinput{ln -s /usr/src/linux/include/asm-i386 asm} \\
\# \tinput{ln -s /usr/src/linux/include/linux linux} \\
\# \tinput{ln -s /usr/src/linux/include/scsi scsi}
После того, как ссылки созданы, нет смысла создавать их опять при установке нового выпуска или новой версии ядра системы (более подробно о символических ссылках говорится в разд. 3.11).

  Для компилирования ядра системы надо иметь установленный компилятор gcc для языка C. Для компилирования ядра версии 2.0 требуется компилятор версии 2.6.3 или выше.

Сначала нужно перейти (командой cd) в каталог /usr/src/linux. Команда make configgif вызывает диалог, в котором указываются некоторые опции конфигурации. На этом шаге выбирается, какие устройства будут поддерживаться данным ядром. Самая большая ошибка, которую можно здесь сделать -- это забыть про поддержку контроллера жесткого диска, поскольку без нее (или при ошибке в ее конфигурации) система даже не будет загружаться. Если есть сомнения в том, что означает та или иная опция ядра, можно получить краткую подсказку нажатием клавиш ? и Enter.

Дальше надо исполнить команду make dep для того, чтобы обновить все зависимости исходного текста. Этот шаг важен. Далее команда make clean удаляет старые исполняемые файлы из участка дерева каталогов, содержащего ядро системы.

  Команда make zImage компилирует ядро и записывает его в файл /usr/src/linux/arch/i386/boot/zImage. Ядро системы Linux на компьютерах с архитектурой Intel всегда находится в сжатом виде. Иногда компилируемое ядро оказывается слишком большим, чтобы его можно было сжать по тому принципу, который использует команда make zImage. В этом случае компилирование завершится с сообщением об ошибке: Kernel Image Too Large (слишком большой образ ядра). В этом случае можно попробовать команду make bzImage, в которой применен метод сжатия, подходящий для больших размеров ядра. В этом случае ядро записывается в файл /usr/src/linux/arch/i386/boot/bzImage.

Когда ядро откомпилировано, его нужно либо скопировать на загрузочную дискету командой типа "cp zImage /dev/fd0") или установить ядро так, что загрузчик LILO будет загружать его с жесткого диска. Подробнее об этом говорится в разд. 4.2.2.


next up previous contents
Next: Добавление в ядро драйвера Up: Модернизация и установка нового Previous: Модернизация и установка нового

root
Sun Aug 29 12:01:30 MSD 1999