Удачи!
Глава 2
Начальные сведения о ядре Linux
В этой главе будут рассмотрены основные вопросы, связанные с ядром Linux: где получить исходный код, как его компилировать и как инсталлировать новое ядро. После этого рассмотрим некоторые допущения, связанные с ядром Linux, отличия между ядром и пользовательскими программам, а также общие методы, которые используются в ядре.
Ядро имеет интересные особенности, которые отличают его от других программ, но нет таких вещей, в которых нельзя разобраться. Давайте этим займемся.
Получение исходного кода ядра
Исходный программный код последней версии ядра всегда доступен как в виде полного архива в формате tar (tarball), так и виде инкрементной заплаты по адресу http://www.kernel.org.
Если нет необходимости по той или другой причине работать со старыми версиями ядра, то всегда нужно использовать самую последнюю версию. Архив kernel.org— это то место, где можно найти как само ядро, так и заплаты к нему от ведущих разработчиков.
Инсталляция исходного кода ядра
Архив исходного кода ядра в формате tar распространяется в сжатых форматах GNU zip (gzip) и bzip2. Формат bzip2 наиболее предпочтителен, так как обеспечивает больший коэффициент сжатия по сравнению с форматом gzip. Архив ядра в формате bzip2 имеет имя linux-x.y.z.tar.bz2, где x, y, z— это номер соответствующей версии исходного кода ядра. После загрузки исходного кода его можно декомпрессировать очень просто. Если tar-архив сжат с помощью GNU zip, то необходимо выполнить следующую команду.
$ tar xvzf linux-x.y.z.tar.gz
Если сжатие выполнено с помощью bzip2, то команда должна иметь следующий вид.
$ tar xvjf linux-x.y.z.tar.bz2
Обе эти команды позволяют декомпрессировать и развернуть дерево исходных кодов ядра в каталог с именем linux-x.y.z.
Где лучше инсталлировать и изменять исходный код
Исходный код ядра обычно инсталлируется в каталог /usr/src/linux. Заметим, что это дерево исходного кода нельзя использовать для разработок. Версия ядра, с которой была скомпилирована ваша библиотека С , часто связывается с этим деревом каталогов. Кроме того, чтобы вносить изменения в ядро, не обязательно иметь права пользователя root, вместо этого лучше работать в вашем домашнем каталоге и использовать права пользователя root только для инсталляции ядра. Даже при инсталляции нового ядра каталог /usr/src/linuxлучше оставлять без изменений.
В сообществе разработчиков ядра Linux заплаты (patch) — это основной язык общения . Вы будете распространять ваши изменения исходного кода ядра в виде заплат и получать изменения кода от других разработчиков тоже в виде заплат. При данном рассмотрении наиболее важными являются инкрементные заплаты (incremental patch), которые позволяют перейти от одной версии ядра к другой. Вместо того чтобы загружать большой архив ядра, можно просто применить инкрементную заплату и перейти от имеющейся версии к следующей. Это позволяет сэкономить время и пропускную способность каналов связи. Для того чтобы применить инкрементную заплату, находясь в каталоге дерева исходных кодов ядра, нужно просто выполнить следующую команду.
$ patch -p1 < ../patch-x.y.z
Обычно заплата для перехода на некоторую версию ядра должна применяться к предыдущей версии ядра.
В следующих главах использование заплат рассматривается более подробно.
Дерево исходных кодов ядра
Дерево исходных кодов ядра содержит ряд каталогов, большинство из которых также содержит подкаталоги. Каталоги, которые находятся в корне дерева исходных кодов, и их описание приведены в табл. 2.1.
Таблица 2.1. Каталоги в корне дерева исходных кодов ядра
| Каталог |
Описание |
arch |
Специфичный для аппаратной платформы исходный код |
crypto |
Криптографический API |
Documentation |
Документация исходного кода ядра |
drivers |
Драйверы устройств |
fs |
Подсистема VFS и отдельные файловые системы |
include |
Заголовочные файлы ядра |
init |
Загрузка и инициализация ядра |
ipc |
Код межпроцессного взаимодействия |
kernel |
Основные подсистемы, такие как планировщик |
lib |
Вспомогательные подпрограммы |
mm |
Подсистема управления памятью и поддержка виртуальной памяти |
net |
Сетевая подсистема |
scripts |
Сценарии компиляции ядра |
security |
Модуль безопасности Linux |
sound |
Звуковая подсистема |
usr |
Начальный код пространства пользователя (initramfs) |
Некоторые файлы, которые находятся в корне дерева исходных кодов, также заслуживают внимания. Файл COPYING— это лицензия ядра (GNU GPL v2). Файл CREDITS— это список разработчиков, которые внесли большой вклад в разработку ядра. Файл MAINTAINERS— список людей, которые занимаются поддержкой подсистем и драйверов ядра. И наконец, Makefile— это основной сборочный файл ядра.
Читать дальше