Skip to content

Лабораторная работа "Сборка ядра Linux"

Dmitry Efanov edited this page Jan 21, 2019 · 5 revisions

Цель

Изучить процедуру сборки ядра Linux.

Задачи

  • Изучить структуру и состав исходного кода ядра Linux.
  • Изучить способы получения исходного кода ядра Linux.
  • Изучить систему сборки kbuild.
  • Изучить систему настройки ядра Linux.
  • Собрать и установить собственный вариант ядра Linux.

Обзор

Расположение файлов:

  • Конфигурационные файлы: /boot/config-*.
  • Расположение модулей: /lib/modules/.

Задание

Определить текущую стабильную версию ядра.

  1. Получить исходный код ядра.

     $ 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 — для работы многих устройств недостаточно иметь только драйвер в операционной системе — требуется специализированный объектный код (прошивка), который загружается непосредственно в устройство и взаимодействует с драйвером в операционной системе

Литература

  1. Официальный сайт ядра Linux
Clone this wiki locally