Установка заголовков Linux-2.4.22

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске: 186 MB

Описание Linux

Ядро Linux - это основа любой Linux системы. Это то, что делает Linux собой. Когда компьютер включается и загружает систему Linux, самым первым загружается ядро. Ядро инициализирует аппаратные компоненты: последовательные и параллельные порты, звуковые карты, сетевые карты, контролеры IDE, контролеры SCSI и много чего еще. Собственно, ядро делает доступным аппаратные элементы cbcntvs и позволяет запускаться программам.

Устанавливаемые файлы: ядро и заголовки ядра

Зависимости установки Linux

Linux зависит от: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.

Установка заголовков ядра

На данном этапе мы не будем компилировать ядро -- мы сделаем это после установки всех пакетов. Однако, в связи с тем, что некоторые пакеты требуют заголовочных файлов ядра, мы распакуем ядро, настроим его и скопируем заголовки туда, где их будут искать пакеты при компиляции.

Важно отметить. что файлы в директории с исходниками ядра не являются файлами с владельцем root. Когда вы распакуете пакет как пользователь root (как это происходит здесь, в среде chroot), конечные файлы будут иметь  ID владельца и группы как на компьютере, где создавался пакет. Это обычно не создает проблемы для любых других пакетов потому, что вы обычно удаляете директорию с исходниками после установки. Но директории с исходниками ядра Linux будут еще нужны очень долго, и может получиться, что какой-либо пользователь вашей системы получит доступ к исходникам ядра.

Чтобы исправить это, запустите команду chown -R 0:0 в директории linux-2.4.22 чтобы убедиться, что владельцем всех файлов оттуда будет root.

Подготовим заголовки к установке:

make mrproper

Это гарантирует нам, что дерево с исходниками ядра будет абсолютно "чистым". Команда разработчиков ядра рекомендует выполнять эту команду перед каждой компиляцией ядра. Вы не можете быть абсолютно уверены в чистоте дерева исходников ядра даже после распаковки.

Создадим файл include/linux/version.h:

make include/linux/version.h

Создадим платформо-зависимую ссылку include/asm:

make symlinks

Установим платформо-зависимые файлы заголовков:

cp -HR include/asm /usr/include
cp -R include/asm-generic /usr/include

Установим кросс-платформенные файлы заголовков:

cp -R include/linux /usr/include

Некоторые из заголовков ядра используют файл заголовков autoconf.h. Поскольку мы пока не сконфигурировали ядро, нам надо создать этот файл для того, чтобы компиляция следующих пакетов не закончилась ошибкой. Создадим пустой файл autoconf.h:

touch /usr/include/linux/autoconf.h

Почему мы копируем заголовки ядра, а не создаем для них символические ссылки?

Раньше было принято создавать символические ссылки директорий /usr/include/{linux,asm} на /usr/src/linux/include/{linux,asm}. Однако, это была плохая идея, как объясняет Линус Торвальдс в списке рассылки ядра Linux (Linux Kernel Mailing List, отрывок):

Тем, кто компилирует новые ядра, настоятельно рекомендую: 

- не создавать символических ссылок (кроме той, которую создает
само ядро, "linux/include/asm", символическая ссылка, которая
используется при внутренней компиляции ядра.)

Да, именно так делаю я. В моем каталоге /usr/src/linux есть заголовки
старого ядра 2.2.13, несмотря на то, что я не использовал ядро 2.2.13
уже очень давно. Однако именно с этими заголовками компилировался
пакет glibc, соответственно именно эти заголовки соответствуют
файлам объектов библиотеки.

Также именно такое положение вещей являлось рекомендуемым
на протяжении последних пяти лет. Я не могу понять, почему вся эта
заморочка с символическими ссылками все еще существует, как зомби.
Практически во всех дистрибутивах есть эта неработающая символическая
ссылка, и люди до сих пор помнят, что исходники ядра Linux должны
находится в "/usr/src/linux", несмотря на то, что это уже давно не так.

Наиболее важная часть сообщения Линуса заключается в том, что файлы заголовков должны быть именно теми, с которыми компилировался пакет glibc. Это те заголовки, которые следует использовать в будущем при компиляции других пакетов, т.к. именно они соответствуют файлам библиотек объектного кода. Копируя заголовки, мы удостоверяемся, что они останутся доступными, если позже мы решим обновить ядро.

Заметьте, что не страшно если исходники ядра находятся в /usr/src/linux, главное, чтобы у вас не было ссылок на /usr/include/{linux,asm}.