В данной главе подробно рассказано о настройке ядра из исходного кода.
## Подготовка
Подготовьте пакет к компиляции выполнив следующую команду:
```bash
make mrproper
```
Выполнение этой команды гарантирует, что дерево исходных кодов ядра абсолютно чистое.
Разработчики ядра рекомендуют, чтобы эта команда выполнялась перед каждым процессом
компиляции.
!> Обратите внимание что после распаковки пакета с исходным кодом не следует
полагаться на его "чистоту".
## Инструменты настройки параметров ядра
Конфигурация ядра хранится в файле ``.config``. Именно этот файл следует отредактировать, указав необходимые опции, в соответствии с вашим оборудованием и предпочтениями.
Для наглядности и облегчения вопсприятия, настройку ядра можно произвести при помощий утилит предоставляющих графический или псевдографический интерфейс:
-`make xconfig`– при использовании графической среды KDE
-`make gconfig`– при использовании графической среды GNOME
-`make config`– вариант настройки, выводящий запросы на задание значений каждого параметра ядра. (Не позволяет изменить уже заданные параметры)
Практически все варианты (за исключением последнего) позволяют получать краткую справку по каждому параметру, производить поиск нужного параметра (или раздела), добавлять в конфигурацию дополнительные компоненты, драйверы, а также показывают, каким образом конкретный компонент может быть сконфигурирован — как компонент, встроенный в ядро или как загружаемый модуль, а также поддерживает ли он вообще вариант компиляции в качестве загружаемого модуля.
## Создание конфигурации
Хорошей отправной точкой для настройки ядра, может стать запуск команды ``make defconfig``.
Выполните команду:
```bash
make defconfig
```
Будет создана базовая конфигурация с настройками по умолчанию, с учётом архитектуры машины. Параметры берутся из архитектурно-зависимых ``defconfig`` файлов.
[ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
[*] Configure standard kernel features (expert users) [CONFIG_EXPERT] --->
[*] open by fhandle syscalls [CONFIG_FHANDLE]
Processor type and features --->
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Firmware Drivers --->
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
Networking support ---> [CONFIG_NET]
Networking options --->
<*> Packet socket [CONFIG_PACKET]
<*> The IPv6 Protocol ---> [CONFIG_IPV6]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
Firmware Loader --->
[ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER]
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
```
?> указанные ниже параметры используйте на своё усмотрение.
### Поддержка файловых систем
Обратите внимание на раздел `File systems`. Включите поддержку требуемых файловых систем. Обязательно включите The Extended 4 (ext4) filesystem для её поддержки.
### EFI
Если вы будете использовать EFI, необходимо обеспечить его поддержку:
LVM — это метод распределения пространства жёсткого диска по логическим томам, размер которых можно легко менять, в отличие от разделов.
С LVM пространство жёсткого диска или набора дисков распределяется по физическим томам. Физический том не может располагаться более чем на одном диске.
Физические тома собираются в группы логических томов, за исключением раздела /boot/. Раздел /boot/ не может находиться в группе логических томов, так как в этом случае загрузчику не удастся его прочитать. Если корневой раздел (/) находится на логическом томе, создайте отдельный раздел /boot/ вне группы томов.
В разделе `Device Drivers` - нужно пройтись по разделам и включить драйвера для своего оборудования -нестандартные жесткие диски, мышки, USB устройства, веб-камеры, Bluetooth, WIFI адаптеры, принтеры и т д.
Когда все параметры настроены, можно приступать к сборке.
Выполните комадну:
```bash
make
```
?> Обратите внимание что процесс сборки ядра может проходить длительное время (от 4.4 до 66.0 SBU) . Это во многом зависит от установленных параметров конфигурации.
Установите модули ядра:
```bash
make modules_install
```
## Установка
После завершения сборки, необходимо выполнить еще несколько шагов. Некоторые
файлы должны быть скопированы в каталог ``/boot``.
Путь к образу ядра зависит от используемой платформы. Имя файла, указанное ниже, может
иметь произвольное наименование, на ваш вкус, но имя файла должно начинаться с ``vmlinuz``
для обеспечения совместимости автоматической настройки процесса загрузки. При выполнении следующей команды, будет считаться что используется
Важно отметить, что файлы в каталоге исходных кодов ядра не принадлежат пользователю
``root``. Всякий раз, когда пакет распаковывается от пользователя ``root`` (как это и выполнялось
внутри среды ``chroot``), файлы имеют те идентификаторы пользователя и группы, которые были
назначены при распаковке. Обычно это не вызывает проблем для других устанавливаемых
пакетов, так как каталог с исходными кодами удаляется после установки пакета. Однако
исходный код ядра Linux часто сохраняется в течение длительного времени. Из-за этого существует вероятность того, что идентификатор пользователя, используемый при распаковке,
будет назначен другому пользователю. В таком случае, этот пользователь будет иметь доступ на
запись в этот каталог.
?> Во многих случаях конфигурация ядра должна быть обновлена для пакетов, которые
будут установлены вами позднее. В отличие от других пакетов удалять дерево исходного
кода ядра не требуется после компиляции и установки.
Если вы планируете оставить каталог с исходным кодом ядра, выполните команду:
<preclass="pre">
chown -R 0:0 /usr/src/linux-{{ package.version }}
</pre>
!> Заголовочные файлы расположенные в системном каталоге ``/usr/include`` должны
всегда быть те, которые использовались при компиляции ``Glibc``. Их никогда не следует заменять на чистые
заголовочные файлы ядра или любые другие подготовленные заголовочные файлы.
## Настройка порядка загрузки модулей Linux
Обычно модули Linux загружаются автоматически, но иногда требуется определенный порядок.
Программа, которая загружает модули, ``modprobe`` или ``insmod``, использует файл ``/etc/
modprobe.d/usb.conf`` как раз для этой цели. Этот файл должен быть создан так, что
если USB-драйверы (``ehci_hcd``, ``ohci_hcd`` и ``uhci_hcd``) были созданы в виде модулей, то они будут
загружены в требуемом порядке: ``ehci_hcd`` должен быть загружен до ``ohci_hcd`` и ``uhci_hcd`` для того,
чтобы избежать предупреждений во время загрузки.
Создайте новый файл ``/etc/modprobe.d/usb.conf`` выполнив следующую команду: