Лабораторная работа "Сборка ядра Linux" - efanov/mephi GitHub Wiki
Цель
Изучить процедуру сборки ядра Linux.
Задачи
- Изучить структуру и состав исходного кода ядра Linux.
- Изучить способы получения исходного кода ядра Linux.
- Изучить систему сборки kbuild.
- Изучить систему настройки ядра Linux.
- Собрать и установить собственный вариант ядра Linux.
Обзор
Расположение файлов:
- Конфигурационные файлы:
/boot/config-*
. - Расположение модулей:
/lib/modules/
.
Задание
Определить текущую стабильную версию ядра.
-
Получить исходный код ядра.
$ uname -r 3.10.0-514.16.1.el7.x86_64 $ rpmdev-setuptree $ yumdownloader --source kernel $ rpm -i kernel-3.10.0-514.16.1.el7.centos.plus.src.rpm $ ls rpmbuild/SPECS/ kernel.spec $ ls rpmbuild/SOURCES/ $ rpmbuild -bs ~/rpmbuild/SPECS/kernel.spec Wrote: /home/defanov/rpmbuild/SRPMS/kernel-3.10.0-514.16.1.el7.centos.plus.src.rpm
Здесь -bs означает “build source” — собрать пакет с исходным кодом. Готовый src.rpm-пакет будет записан в каталог ~/rpmbuild/SRPMS.
$ ls ~/rpmbuild/SRPMS/
kernel-3.10.0-514.16.1.el7.centos.plus.src.rpm
# yum-builddep /home/defanov/rpmbuild/SRPMS/kernel-3.10.0-514.16.1.el7.centos.plus.src.rpm
...
Getting requirements for kernel-3.10.0-514.16.1.el7.centos.plus.src
--> Already installed : kmod-20-9.el7.x86_64
--> Already installed : patch-2.7.1-8.el7.x86_64
...
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
asciidoc noarch 8.6.8-5.el7 base 251 k
newt-devel x86_64 0.52.15-4.el7 base 51 k
pciutils-devel x86_64 3.5.1-1.el7 base 35 k
pesign x86_64 0.109-10.el7 base 89 k
Installing for dependencies:
coolkey x86_64 1.1.0-36.el7_3 updates 114 k
graphviz x86_64 2.30.1-19.el7 base 1.3 M
...
Complete!
$ rpmbuild -bp --target=$(uname -m) rpmbuild/SPECS/kernel.spec
Здесь -bp означает “build prepare” — подготовка к сборке. Исходные тексты будут распакованы в каталоге rpmbuild/BUILD/kernel*/linux*. Перейдите в этот каталог:
$ cd rpmbuild/BUILD/kernel*/linux*
Используйте команду ls, чтобы изучить структуру каталогов верхнего уровня исходных текстов ядра. Выполните команду:
$ ls ~/rpmbuild/BUILD/kernel-3.10.0-514.16.1.el7/linux-3.10.0-514.16.1.el7.centos.plus.efanov.x86_64/
$
Основные каталоги в исходных текстах ядра:
- Documentation — документация (в текстовом формате разметки asciidoc)
- include — заголовочные файлы для разработчиков модулей ядра
- kernel — непосредственно ядро
- mm — управление памятью
- fs — файловые системы
- net — поддержка сети (включая беспроводные сети)
- security — средства защиты ядра (например, SELinux)
- crypto — криптосистема
- lib — различные библиотеки, общие для всех компонентов ядра
- arch — поддержка микропроцессоров (архитектурно-зависимый код, для каждой архитектуры компилируется только соотвествующая часть кода)
- drivers — драйвера устройств
- sound — драйвера звуковых карт
- firmware — для работы многих устройств недостаточно иметь только драйвер в операционной системе — требуется специализированный объектный код (прошивка), который загружается непосредственно в устройство и взаимодействует с драйвером в операционной системе