mirror of
https://github.com/avmaisak/LFS_Book.git
synced 2026-01-14 02:00:45 +00:00
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
301 lines
24 KiB
XML
301 lines
24 KiB
XML
<?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 --->
|
||
Generic Driver Options --->
|
||
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
|
||
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
|
||
|
||
Kernel hacking --->
|
||
Choose kernel unwinder (Frame pointer unwinder) ---> [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 --->
|
||
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
|
||
Networking support --->
|
||
Networking options --->
|
||
<*> 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]
|
||
[ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER]
|
||
Firmware Drivers --->
|
||
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
|
||
File systems --->
|
||
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
|
||
<*> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]
|
||
Pseudo filesystems --->
|
||
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
|
||
[*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]
|
||
Kernel hacking --->
|
||
Choose kernel unwinder (Frame pointer unwinder) ---> [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 --->
|
||
[*] 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=<host_LANG_value> LC_ALL=</parameter></term>
|
||
<listitem>
|
||
<para>Задаёт настройку локали на ту, которая используется в хост системе для корректного отображения menuconfig при использовании интерфейса ncurses при генерации строк на текстовой консоли Linux с кодировкой UTF-8.</para>
|
||
|
||
<para>Если используете, то убедитесь что заменили переменную <replaceable><host_LANG_value></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 > /etc/modprobe.d/usb.conf << "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>
|