Files
LFS_Book/chapter08/kernel.xml
Anton Maisak 93a00a50e0 SYNC
Revision: 11574
Author: pierre
Date: 10 апреля 2019 г. 23:20:22
Message:
Change <productname> tags so that they reflect the dbhtml processing
instruction
----
Modified : /trunk/BOOK/chapter05/binutils-pass1.xml
Modified : /trunk/BOOK/chapter05/binutils-pass2.xml
Modified : /trunk/BOOK/chapter05/gcc-pass1.xml
Modified : /trunk/BOOK/chapter05/gcc-pass2.xml
Modified : /trunk/BOOK/chapter05/libstdc++.xml
Modified : /trunk/BOOK/chapter05/linux-headers.xml
Modified : /trunk/BOOK/chapter06/linux-headers.xml
Modified : /trunk/BOOK/chapter06/pkgconfig.xml
Modified : /trunk/BOOK/chapter07/bootscripts.xml
Modified : /trunk/BOOK/chapter08/kernel.xml
2019-08-10 11:02:46 +03:00

301 lines
24 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-bootable-kernel" role="wrap">
<?dbhtml filename="kernel.html"?>
<sect1info condition="script">
<productname>kernel</productname>
<productnumber>&linux-version;</productnumber>
<address>&linux-url;</address>
</sect1info>
<title>Linux-&linux-version;</title>
<indexterm zone="ch-bootable-kernel">
<primary sortas="a-Linux">Linux</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Ядро операционной системы.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&linux-ch8-sbu;</seg>
<seg>&linux-ch8-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка ядра</title>
<para>Процесс сборки ядра состоит из нескольких этапов: настройка, компиляция и установка. Ознакомьтесь с файлом
<filename>README</filename> в дереве исходных кодов пакета чтобы узнать о других способах настройки ядра.</para>
<para>Подготовьте пакет к компиляции выполнив следующую команду:</para>
<screen><userinput remap="pre">make mrproper</userinput></screen>
<para>Выполнение этой команды гарантирует, что дерево исходных кодов ядра абсолютно чистое. Разработчики ядра рекомендуют, чтобы эта команда выполнялась перед каждым процессом компиляции. Обратите внимание что после распаковки пакета с исходным кодом не следует полагаться на его "чистоту".</para>
<!-- Support for compiling a keymap into the kernel is deliberately removed -->
<para>Настройте ядро с помощью псевдографического интерфейса. Для получения общей информации перейдите по ссылке <ulink url="&hints-root;kernel-configuration.txt"/>. В книге BLFS есть информация по поводу некоторых требований к конфигурации ядра для поддержки пакетов, которые отсутствуют в книге LFS. Эта информация доступна по ссылке <ulink url="&blfs-book;longindex.html#kernel-config-index"/>. Дополнительная информация о настройке и сборке ядра расположена по ссылке <ulink url="http://www.kroah.com/lkn/"/></para>
<note>
<para>Хорошей отправной точкой для настройки ядра, может стать запуск команды <command>make defconfig</command>. В результате её выполнения будет создана базовая конфигурация с учётом архитектуры машины.</para>
<para>Убедитесь в том, что вы включили/отключили/указали указанные ниже параметры настройки, в ином случае, система может работать не правильно, или вовсе не загрузится:</para>
<screen role="nodump" revision="sysv">
Device Drivers ---&gt;
Generic Driver Options ---&gt;
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
Kernel hacking ---&gt;
Choose kernel unwinder (Frame pointer unwinder) ---&gt; [CONFIG_UNWINDER_FRAME_POINTER]</screen>
<screen role="nodump" revision="systemd">
General setup -->
[ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
[ ] Enable deprecated sysfs features by default [CONFIG_SYSFS_DEPRECATED_V2]
[*] open by fhandle syscalls [CONFIG_FHANDLE]
[ ] Auditing support [CONFIG_AUDIT]
[*] Control Group support [CONFIG_CGROUPS]
Processor type and features ---&gt;
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Networking support ---&gt;
Networking options ---&gt;
&lt;*&gt; The IPv6 protocol [CONFIG_IPV6]
Device Drivers ---&gt;
Generic Driver Options ---&gt;
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers ---&gt;
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
File systems ---&gt;
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
&lt;*&gt; Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]
Pseudo filesystems ---&gt;
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
[*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]
Kernel hacking ---&gt;
Choose kernel unwinder (Frame pointer unwinder) ---&gt; [CONFIG_UNWINDER_FRAME_POINTER]</screen>
</note>
<note revision="systemd">
<para>Параметр "The IPv6 Protocol" строго не обязателен, однако разработчиками пакета systemd настоятельно рекомендуется его включить.</para>
</note>
<para revision="sysv">Также, есть некоторые опции, которые могут понадобиться в зависимости от конфигурации системы. Список параметров, необходимых для пакетов в книге BLFS - <ulink url="&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index">BLFS</ulink>.</para>
<note>
<para>Если на хост системе используется UEFI, то после выполнения команды 'make defconfig' должны автоматически примениться параметры ядра, связанные с EFI.</para>
<para>Для того, чтобы ядро LFS могло загружаться из среды UEFI, необходимо включить соответствующий параметр:</para>
<screen role="nodump">Processor type and features ---&gt;
[*] EFI stub support [CONFIG_EFI_STUB]</screen>
<para>Более полное описание управления UEFI из LFS доступно по ссылке:
<ulink
url="http://www.linuxfromscratch.org/hints/downloads/files/lfs-uefi.txt"/>.
</para>
</note>
<variablelist>
<title>Разъяснение указанных параметров конфигурации:</title>
<varlistentry>
<term><parameter>Support for uevent helper</parameter></term>
<listitem>
<para>Наличие этого параметра может вызвать конфликт при управление устройствами через Udev / Eudev.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>Maintain a devtmpfs</parameter></term>
<listitem>
<para>При использовании этого параметра, будет осуществлена поддержка узлов устройств, заполняемых самим ядром, даже без запуска Udev. Udev будет работать поверх, управляя разрешениями и добавляя необходимые символические ссылки. Этот элемент конфигурации необходим всем пользователям Udev / Eudev.</para>
</listitem>
</varlistentry>
</variablelist>
<screen role="nodump"><userinput>make menuconfig</userinput></screen>
<variablelist>
<title>Значение необязательных переменных окружения программы make:</title>
<varlistentry>
<term><parameter>LANG=&lt;host_LANG_value&gt; LC_ALL=</parameter></term>
<listitem>
<para>Задаёт настройку локали на ту, которая используется в хост системе для корректного отображения menuconfig при использовании интерфейса ncurses при генерации строк на текстовой консоли Linux с кодировкой UTF-8.</para>
<para>Если используете, то убедитесь что заменили переменную <replaceable>&lt;host_LANG_value&gt;</replaceable> на значение переменной окружения <envar>$LANG</envar> их хост системы. Или можно использовать значение переменной окружения хос системы <envar>$LC_ALL</envar> или <envar>$LC_CTYPE</envar>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Кроме того, команда <command>make oldconfig</command> может быть более уместна в некоторых случаях. Дополнительную информацию см. В файле <filename>README</filename>.</para>
<para>При желании, можно пропустить этап настройки, скопировав файл конфигурации ядра <filename>.config</filename> с вашей хост системы (в том случае, если такой файл присутствует) в предварительно распакованный каталог ядра <filename class="directory">linux-&linux-version;</filename>. Мы не рекомендуем такой подход. Гораздо полезнее изучить все параметры настройки и создать файл конфигурации ядра самостоятельно.</para>
<para>Скомпилируйте образ ядра и модули:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>При использовании модулей, могут потребоваться файлы конфигурации, которые должны находиться в каталоге <filename class="directory">/etc/modprobe.d</filename>. Информация о модулях и конфигурации ядра
     находится в <xref linkend="ch-scripts-udev"/> и в каталоге с документацией ядра <filename
class="directory">linux-&linux-version;/Documentation</filename>. Также будет интересным изучение информации <filename>modprobe.d(5)</filename>.</para>
<para>Установите модули, если ядро их использует:</para>
<screen><userinput remap="install">make modules_install</userinput></screen>
<para>После завершения компиляции, необходимо выполнить еще несколько шагов. Некоторые файлы должны быть скопированы в каталог <filename class="directory">/boot</filename>.</para>
<caution>
<para>Если хост система содержит отдельный раздел для каталога /boot, файлы скопированные ниже, должны находится в нём. Самый простой способ это сделать - выполнить привязку (bind) каталога /boot хост системы (за пределами выполнения в среде chroot) к каталогу /mnt/lfs/boot перед тем, как продолжить. Из-под пользователя root в <emphasis>хост системе</emphasis> выполните команду:</para>
<screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen>
</caution>
<para>Путь к образу ядра зависит от используемой платформы. Имя файла, указанное ниже, может иметь произвольное наименование, на ваш вкус, но имя файла должно начинаться с <emphasis>vmlinuz</emphasis> для обеспечения совместимости автоматической настройки процесса загрузки, описанного в следующей главе. При выполнении следующей команды, будет считать что используется архитектура x86:</para>
<screen revision="sysv"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
<screen revision="systemd"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&versiond;</userinput></screen>
<para><filename>System.map</filename> файл, внутри которого находится символьная таблица адресов функций и процедур, используемых ядром операционной системы Linux. В этой таблице перечислены имена переменных и функций и их адреса в памяти компьютера. Эта таблица весьма полезна при отладке ядра в случае Kernel panic или Linux oops. System.map генерируется при компиляции ядра. Выполните следующщую команду для установки файла <filename>System.map</filename>:</para>
<screen><userinput remap="install">cp -iv System.map /boot/System.map-&linux-version;</userinput></screen>
<para>Файл конфигурации ядра <filename>.config</filename> полученный в результате настройки <command>make menuconfig</command> содержит в себе все опции конфигурации скомпилированного ядра. Хорошей идеей будет оставить этот файл для будующей работы:</para>
<screen><userinput remap="install">cp -iv .config /boot/config-&linux-version;</userinput></screen>
<para>Установите документацию ядра:</para>
<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version;
cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen>
<para>Важно отметить, что файлы в каталоге исходных кодов ядра не принадлежат пользователю <emphasis>root</emphasis>. Всякий раз, когда пакет распаковывается от пользователя <emphasis>root</emphasis> (как это и выполнялось внутри среды chroot), файлы имеют те идентификаторы пользователя и группы, которые были назначены при распаковке. Обычно это не вызывает проблем для других устанавливаемых пакетов, так как каталог с исходными кодами удаляется после установки пакета. Однако исходный код ядра Linux часто сохраняется в течение длительного времени. Из-за этого существует вероятность того, что идентификатор пользователя, используемый при распаковке, будет назначен другому пользователю. В таком случае, этот пользователь будет иметь доступ на запись в этот каталог.</para>
<note>
<para>Во многих случаях конфигурация ядра должна быть
обновлена для пакетов, которые будут установлены позже в BLFS. В отличие от
других пакетов удалять дерево исходного кода ядра не требуется
после компиляции и установки.</para>
<para>Если вы планируете оставить каталог с исходным кодом ядра, выполните команду:
<command>chown -R 0:0</command> для каталога <filename
class="directory">linux-&linux-version;</filename> чтобы указать права для пользователя <emphasis>root</emphasis>.</para>
</note>
<warning>
<para>В документации ядра рекомендуется создать символическую ссылку <filename class="symlink">/usr/src/linux</filename> для указания местоположения каталога с исходными кодами ядра. Это рекомендация относится к ядрам до версии 2.6 и не должна выполняться в системе LFS, так как это может вызвать проблемы с пакетами, которые вы, возможно, захотите создать, когда ваша базовая система LFS будет готова.</para>
</warning>
<warning>
<para>Заголовочные файлы в системном каталоге <filename class="directory">include</filename> (<filename class="directory">/usr/include</filename>) должны <emphasis>всегда</emphasis> быть те, которые использовались при компиляции Glibc в главе <xref linkend="ch-system-linux-headers"/>. Поэтому их <emphasis>никогда</emphasis> не следует заменять на чистые заголовочные файлы ядра или любые другие подготовленные заголовочные файлы.</para>
</warning>
</sect2>
<sect2 id="conf-modprobe" role="configuration">
<title>Настройка порядка загрузки модулей Linux</title>
<indexterm zone="conf-modprobe">
<primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary>
</indexterm>
<para>Обычно модули Linux загружаются автоматически, но иногда требуется определенный порядок. Программа, которая загружает модули, <command>modprobe</command> или <command>insmod</command>, использует файл <filename>/etc/modprobe.d/usb.conf</filename> как раз для этой цели. Этот файл должен быть создан так, что если USB-драйверы (ehci_hcd, ohci_hcd и uhci_hcd) были созданы в виде модулей, то они будут загружены в требуемом порядке; ehci_hcd должен быть загружен до ohci_hcd и uhci_hcd для того, чтобы избежать предупреждений во время загрузки.</para>
<para>Создайте новый файл<filename>/etc/modprobe.d/usb.conf</filename> выполнив следующую команду:</para>
<screen><userinput>install -v -m755 -d /etc/modprobe.d
cat &gt; /etc/modprobe.d/usb.conf &lt;&lt; "EOF"
<literal># Begin /etc/modprobe.d/usb.conf
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
# End /etc/modprobe.d/usb.conf</literal>
EOF</userinput></screen>
</sect2>
<sect2 id="contents-kernel" role="content">
<title>Содержимое пакета Linux</title>
<segmentedlist>
<segtitle>Установленные файлы</segtitle>
<segtitle>Установленные каталоги</segtitle>
<seglistitem>
<seg>config-&linux-version;,
<phrase revision="sysv">vmlinuz-&linux-version;-lfs-&version;,</phrase>
<phrase revision="systemd">vmlinuz-&linux-version;-lfs-&versiond;,</phrase>
and System.map-&linux-version;</seg>
<seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="config">
<term><filename>config-&linux-version;</filename></term>
<listitem>
<para>Файл конфигурации ядра <filename>.config</filename> содержит в себе все опции конфигурации скомпилированного ядра.</para>
<indexterm zone="ch-bootable-kernel config">
<primary sortas="e-/boot/config">/boot/config-&linux-version;</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="lfskernel">
<term revision="sysv"><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term>
<term revision="systemd"><filename>vmlinuz-&linux-version;-lfs-&versiond;</filename></term>
<listitem>
<para>Ядро системы Linux. При включении компьютера ядро - первая часть операционной системы, которая будет загружена. Она обнаруживает и инициализирует все компоненты оборудования компьютера, делает их доступными в виде дерева каталогов с файлами для доступа к ним программам и превращает один процессор в мультизадачную машину, способную выполнять множество программ как будто одновременно.</para>
<indexterm zone="ch-bootable-kernel lfskernel">
<primary sortas="b-lfskernel">lfskernel-&linux-version;</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="System.map">
<term><filename>System.map-&linux-version;</filename></term>
<listitem>
<para>файл, внутри которого находится символьная таблица адресов функций и процедур, используемых ядром операционной системы Linux. В этой таблице перечислены имена переменных и функций и их адреса в памяти компьютера. Эта таблица весьма полезна при отладке ядра в случае Kernel panic или Linux oops. System.map генерируется при компиляции ядра.</para>
<indexterm zone="ch-bootable-kernel System.map">
<primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>