Настройка ядра Linux

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:AMD64/Installation/Kernel and the translation is 100% complete.

Other languages:
čeština • ‎Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎português do Brasil • ‎русский • ‎українська • ‎中文(中国大陆)‎
AMD64 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Установка исходного кода

Все дистрибутивы строятся вокруг ядра Linux. Ядро является прослойкой между пользовательским программным обеспечением и физическим оборудованием. Gentoo предоставляет несколько вариантов исходного кода ядра. Полный список с описанием доступен в статье общие сведения о ядре.

Для систем, основанных на amd64 архитектуре, рекомендуется пакет sys-kernel/gentoo-sources.

Выберем подходящий исходный код ядра и установим с помощью emerge:

root #emerge --ask sys-kernel/gentoo-sources

Данная команда установит исходный код ядра Linux в /usr/src/, в котором символьная ссылка linux будет указывать на установленную версию:

root #ls -l /usr/src/linux
lrwxrwxrwx    1 root   root    12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo

Теперь следует настроить и собрать ядро. Здесь существует два основных подхода:

  1. Ядро настраивается и собирается вручную.
  2. Утилита genkernel собирает и устанавливает его автоматически.

В данной инструкции мы расскажем, как провести настройку вручную, поскольку это лучший способ оптимизировать окружение.

Основной вариант: Ручная настройка

Введение

Согласно расхожему мнению, настройка ядра- наиболее сложная процедура, с которой сталкивается пользователь Линукса. Это сильное преувеличение и собрав пару-тройку ядер никто и не вспомнит, что это было сложно.

Но один факт учитывать стоит. Для ручной настройки ядра необходимо иметь представление о том, из чего собран компьютер. Большую часть можно узнать, установив sys-apps/pciutils и выполнив команду lspci:

root #emerge --ask sys-apps/pciutils
Заметка
Если находитесь внутри chroot, то можете спокойно игнорировать предупреждения о pcilib (навроде pcilib: cannot open /sys/bus/pci/devices), которая может появляться в выводе lspci.

Другой источник информации о системе можно получить, выполнив lsmod и посмотрев, какие модули ядра подгрузились на установочном носителе.

Остаётся перейти в директорию с ядром и выполнить make menuconfig. Нас поприветствует экран конфигурации.

root #cd /usr/src/linux
root #make menuconfig

В конфигурации ядра Linux есть много-много секций. Сначала пройдёмся по опциям, которые должны быть включены (иначе Gentoo будет работать неправильно или же вовсе не запустится). Для более глубокого ознакомления стоит посетить гайд по настройке ядра Gentoo.

Включаем обязательные опции

Убедитесь, что драйверы, необходимые для загрузки системы (например, контроллер SCSI и так далее) собраны прямо в ядре, а не как модуль. В противном случае, система может не загрузиться.

Следует выбрать тип процессора, а так же рекомендуется включить опции MCE, чтобы получать информацию о проблемах с "железом". На некоторых архитектурах (например, x86_64) подобные ошибки выводятся не в dmesg, а /dev/mcelog. Так что понадобится пакет app-admin/mcelog.

Активируйте опцию Maintain a devtmpfs file system to mount at /dev, тогда критичные для устройств файлы будут подгружаться как можно раньше (CONFIG_DEVTMPFS и CONFIG_DEVTMPFS_MOUNT):

Ядро Включение поддержки devtmpfs
Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [ ]   Automount devtmpfs at /dev, after the kernel mounted the rootfs

Удостоверьтесь, что поддержка SCSI-дисков была включена (CONFIG_BLK_DEV_SD):

Ядро Включение поддержки SCSI-дисков
Device Drivers --->
   SCSI device support  --->
      <*> SCSI disk support

Дальше стоит включить поддержку используемых Вами файловых систем. Рутовая ФС должна быть включена в ядро, а не подгружена в качестве модуля, иначе Gentoo не сможет примонтировать данный раздел. Не забудьте также включить Virtual memory и /proc file system. По необходимости выберете один или несколько параметров из списка (CONFIG_EXT2_FS, CONFIG_EXT3_FS, CONFIG_EXT4_FS, CONFIG_MSDOS_FS, CONFIG_VFAT_FS, CONFIG_PROC_FS и CONFIG_TMPFS):

Ядро Выбираем необходимые файловые системы
File systems --->
  <*> Second extended fs support
  <*> The Extended 3 (ext3) filesystem
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  <*> Btrfs filesystem support
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support
 
Pseudo Filesystems --->
    [*] /proc file system support
    [*] Tmpfs virtual memory file system support (former shm fs)

Если для подключения к сети интернет используется PPPoE или dial-up модем, то тогда включите следующие параметры (CONFIG_PPP, CONFIG_PPP_ASYNC и CONFIG_PPP_SYNC_TTY):

Ядро Выбираем необходимые драйвера для PPPoE
Device Drivers --->
  Network device support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

Опции сжатия не повредят, но и не являются обязательными, как и PPP over Ethernet. Фактически, последний используется только когда ppp сконфигурирован на использование PPPoE режима ядра.

Не забудьте настроить поддержку сетевых карт (кабельных и беспроводных).

Поскольку большинство современных систем являются многоядерными, нам понадобится Symmetric multi-processing support (CONFIG_SMP):

Ядро Включаем поддержку SMP
Processor type and features  --->
  [*] Symmetric multi-processing support
Заметка
Во многоядерных системах каждое ядро считается за один процессор.

Если используются USB-устройства ввода (например клавиатуру и мышь) или другие USB-устройства, то не забудьте включить и эти параметры (CONFIG_HID_GENERIC, CONFIG_USB_HID, CONFIG_USB_SUPPORT, CONFIG_USB_XHCI_HCD, CONFIG_USB_EHCI_HCD, CONFIG_USB_OHCI_HCD):

Ядро Включаем поддержку USB для устройств ввода
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    <*>     OHCI HCD (USB 1.1) support


Настройка ядра, специфичная для архитектуры

Если необходимо поддерживать 32-битные программы, убедитесь, что выбран пункт IA32 Emulation (CONFIG_IA32_EMULATION). Gentoo устанавливает систему multilib (смешанные 32/64 битные вычисления) по умолчанию, поэтому данная опция необходима, если конечно не выбран профиль no-multilib.

Ядро Выбор типа процессора и возможностей
Processor type and features  --->
   [ ] Machine Check / overheating reporting 
   [ ]   Intel MCE Features
   [ ]   AMD MCE Features
   Processor family (AMD-Opteron/Athlon64)  --->
      ( ) Opteron/Athlon64/Hammer/K8
      ( ) Intel P4 / older Netburst based Xeon
      ( ) Core 2/newer Xeon
      ( ) Intel Atom
      ( ) Generic-x86-64
Executable file formats / Emulations  --->
   [*] IA32 Emulation

Включите поддержку меток GPT, если использовали их ранее при разбиении диска (CONFIG_PARTITION_ADVANCED и CONFIG_EFI_PARTITION):

Ядро Включение поддержки GPT
-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support

Включите поддержку EFI stub и EFI variables в ядре Linux, если для загрузки системы используется UEFI (CONFIG_EFI, CONFIG_EFI_STUB, CONFIG_EFI_MIXED и CONFIG_EFI_VARS):

Ядро Включение поддержки UEFI
Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    [*]     EFI mixed-mode support
 
Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs

Компиляция и установка

Когда настройка закончена, настало время скомпилировать и установить ядро. Выйдите из настройки и запустите процесс компиляции:

root #make && make modules_install
Заметка
Можно включить параллельную сборку, используя make -jX, где X это число параллельных задач, которые может запустить процесс сборки. Это похоже на инструкции, которые были даны ранее относительно файла /etc/portage/make.conf в части переменной MAKEOPTS

По завершении компиляции, скопируйте образ ядра в каталог /boot/. Это делается командой make install:

root #make install

Данная команда скопирует образ ядра в каталог /boot/ вместе с файлом System.map и файлом настройки ядра.


Опционально: Собираем initramfs

В некоторых случаях необходимо включить поддержку initramfs - an initial ram-based file system (файловая система, основанная на оперативной памяти). Наиболее распространённая причина это нахождение различных системных путей (вроде /usr/ или /var/) на различных разделах. При наличии initramfs эти разделы могут быть подгружены средствами initramfs.

Без initramfs существует вероятность неправильной загрузки, так как для запуска некоторых ФС может потребоваться информация на этих самых разделах. Initramfs подгружает всю информацию в небольшой архив, который читается сразу после загрузки ядра, но до передачи управления службам инициализации. Таким образом набор скриптов initramfs проследит, чтобы все разделы были примонтированы верно перед продолжением процесса загрузки.

Для установки initramfs, сперва нужен sys-kernel/genkernel, который его сгенерирует:

root #emerge --ask sys-kernel/genkernel
root #genkernel --install initramfs

Если необходима поддержка LVM или RAID, то следует указать это как опцию genkernel. Для более подробной информации взгляните на genkernel --help. В следующем примере включена поддержка LVM и программного RAID (mdadm):

root #genkernel --lvm --mdadm --install initramfs

Initramfs будет расположен в /boot/. Можно посмотреть файлы, начинающиеся с "initramfs":

root #ls /boot/initramfs*

Продолжим в Модули ядра.

Альтернативно: Используя genkernel

Если ручная установка кажется слишком сложной, то следует воспользоваться утилитой genkernel, которая настроит и соберёт ядро автоматически.

genkernel конфигурирует ядро примерно так же, как в установочном носителе. Таким образом, ядро, сконфигурированное genkernel постарается определить всё оборудование в процессе загрузки. Поскольку genkernel не требует самостоятельной настройки ядра, он рекомендован для тех, кто не готов собирать собственное ядро.

Приступим. Сперва, нужно установить sys-kernel/genkernel:

root #emerge --ask sys-kernel/genkernel

Затем отредактируйте файл /etc/fstab, где следует указать в строке /boot/ правильное устройство во втором поле. Если следовали примеру из данной инструкции, то, скорее всего, это устройство /dev/sda2 с файловой системой ext2 и строка должна выглядеть следующим образом:

root #nano -w /etc/fstab
Файл /etc/fstabНастраиваем точку монтирования /boot
/dev/sda2	/boot	ext2	defaults	0 2
Заметка
В процессе настройки Gentoo /etc/fstab еще будет изменён. На данный момент мы правим лишь /boot, так как genkernel использует эту настройку.

Осталось скомпилировать ядро, выполнив genkernel all. Учтите, что поскольку genkernel включает поддержку как можно большего диапазона оборудования, процесс сборки может занять некоторое время!

Заметка
Если для загрузочного раздела не используется ext2 или ext3, то возможно придётся вручную настроить ядро, выполнив genkernel --menuconfig all и добавив поддержку нужной ФС (не как модуля). Пользователям LVM2 следует также добавить --lvm в качестве аргумента.
root #genkernel all

По завершению мы получим полный набор модулей и initramfs. Ядро и initrd нам ещё понадобятся при настройке загрузчика. Запишите название файлов ядра и initrd, так как они нам ещё понадобятся. Initrd запускается сразу после ядра для определения оборудования, перед запуском самой системы.

root #ls /boot/kernel* /boot/initramfs*

Модули ядра

Настройка модулей

Укажите модули, которые должны подгружаться автоматически в /etc/conf.d/modules. При необходимости можно добавить модулям дополнительные опции.

Чтобы посмотреть доступные модули, выполните команду find, не забыв заменить "<kernel version>" на собранную в предыдущем шаге версию:

root #find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less

Например, чтобы автоматически подгрузить модуль 3c59x.ko (драйвер для определённой семьи интернет-карт от 3Com), добавте его в /etc/conf.d/modules.

root #nano -w /etc/conf.d/modules
modules="3c59x"

Продолжим установку в Настройка системы.

Опционально: Установка файлов прошивки

Для корректной работы некоторых драйверов требуется установка дополнительных файлов прошивки. Часто подобное требуется для сетевых интерфейсов, особенно беспроводных. Большинство файлов прошивки поставляется в sys-kernel/linux-firmware:

root #emerge --ask sys-kernel/linux-firmware