Удачи!
Глава 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
— это основной сборочный файл ядра.
Читать дальше