Ядро Linux — сердце каждого дистрибутива. В этой главе описывается, как его настроить. 5.1 2007-05-15
Часовой пояс

Сначала необходимо выбрать часовой пояс (time zone), чтобы система знала, где вы находитесь. Найдите подходящий пояс в /usr/share/zoneinfo, затем скопируйте его в /etc/localtime. Постарайтесь, пожалуйста, избегать использования часовых поясов /usr/share/zoneinfo/Etc/GMT*, т. к. их названия не соответствуют ожидаемым поясам. Например, GMT-8 фактически является поясом GMT+8.

# ls /usr/share/zoneinfo
(допустим, вы хотите использовать GMT)
# cp /usr/share/zoneinfo/GMT /etc/localtime
Установка исходных кодов ядра Выбор ядра

Ядро Linux — это то, вокруг чего формируются все дистрибутивы. Это слой между пользовательскими программами и вашим оборудованием. Пользователи Gentoo могут выбирать из нескольких типов ядра. Их полный список и описание находится в руководстве по выбору ядра Gentoo (англ.).

Для x86 систем, помимо прочих, есть ядро gentoo-sources (ядро с заплатками, улучшающими производительность).

Для AMD64 систем есть ядро gentoo-sources (ядро с заплатками, улучшающими стабильность, производительность и поддержку оборудования).

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

# emerge gentoo-sources

Просмотрев содержимое каталога /usr/src, вы увидите символьную ссылку linux, которая указывает на каталог с исходными кодами ядра. В данном случае, установленный исходный код ядра указывает на gentoo-sources-. Имейте в виду, что ваша версия может отличаться.

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

Теперь настало время настройки и компиляции ядра. Можно использовать сценарий genkernel, который сформирует стандартное ядро, аналогичное используемому на установочном компакт-диске. Однако сначала мы расскажем о «ручной» настройке ядра, так как это лучший из способов оптимизации системы.

Если вы собираетесь настроить ядро вручную, то переходите к разделу по умолчанию: ручная настройка. Если вы хотите использовать genkernel, то читайте альтернатива: использование genkernel.

По умолчанию: ручная настройка Введение

Ручная настройка ядра считается одним из самых сложных вопросов для пользователей Linux. Зато после настройки нескольких вариантов ядра вы и не вспомните, что это когда-то было трудно ;)

Однако есть одна непреложная истина: запуская ручную настройку ядра, следует знать состав аппаратуры своего компьютера. Большую часть информации можно собрать, установив пакет pciutils (emerge pciutils), в который входит lspci. lspci можно использовать, находясь в среде с временным корневым каталогом. Можно не обращать внимания на предупреждения, касающиеся pcilib (например: pcilib: cannot open /sys/bus/pci/devices [pcilib: не могу открыть /sys/bus/pci/devices]), которые выводит на экран lspci. Можно запустить lspci и вне временной среды установки. Результат тот же. Вы также можете запустить lsmod для просмотра модулей ядра, используемых установочным компакт-диском (это даст хорошую подсказку, какие параметры включать).

Теперь войдите в каталог с исходными кодами ядра и введите команду make menuconfig. Этой командой вы вызовете меню настройки, использующее ncurses.

# cd /usr/src/linux
# make menuconfig

Перед вами появятся несколько разделов настройки. Сначала перечислим пункты, включение которых обязательно (иначе Gentoo не заработает, или для его работы потребуются дополнительные ухищрения).

Включение обязательных пунктов

Прежде всего, разрешите использование разрабатываемого и экспериментального кода и драйверов. Без этого не появятся некоторые важные пункты:

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers

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

Далее необходимо указать тип процессора. Куратор ядра x86_64 настоятельно рекомендует пользователям включать поддержку MCE, чтобы получать уведомления о любых аппаратных проблемах. В x86_64 ошибки выводятся не в dmesg, как в других архитектурах, а в /dev/mcelog. Для этого необходим пакет app-admin/mcelog.

Processor type and features  --->
   [ ] Intel MCE Features
   [ ] AMD MCE Features
  Processor family (AMD-Opteron/Athlon64)  --->
    ( ) AMD-Opteron/Athlon64
    ( ) Intel EM64T
    ( ) Generic-x86-64

Далее выберите нужное семейство процессоров:

Processor type and features --->
  (измените в соответствии со своей системой)
  (Athlon/Duron/K7) Processor family

Теперь войдите в File Systems и выберите поддержку всех нужных файловых систем. Не компилируйте их как модули, иначе система Gentoo не сможет смонтировать дисковые разделы. Также выберите Virtual memory и /proc file system.

File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)

(включите поддержку всех нужных вам файловых систем)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support
  <*> XFS filesystem support
File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)

(включите поддержку всех нужных вам файловых систем)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support
  <*> XFS filesystem support

Не забудьте включить поддержку режима DMA для ваших дисков:

Device Drivers --->
  ATA/ATAPI/MFM/RLL support --->
    [*] Generic PCI bus-master DMA support
    [*]   Use PCI DMA by default when available

Если вы используете PPPoE или коммутируемого соединения для соединения с интернетом, потребуется включить в ядре следующие функции:

Device Drivers --->
  Networking Support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports
Device Drivers --->
  Networking support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

Два параметра сжатия данных не являются обязательными, но и не повредят. То же относится и к параметру PPP over Ethernet который нужен только для ppp, для поддержки PPPoE в режиме ядра.

При необходимости, не забудьте включить в ядре поддержку своей сетевой платы.

Если у вас процессор Intel с поддержкой HyperTreading или многопроцессорная система, то следует включить «симметричную многопроцессорную обработку»:

Если у вас многопроцессорная система на базе Opteron или многоядерного процессора (например, AMD64 X2), то следует включить поддержку «симметричной многопроцессорной обработки»:

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

Если вы пользуетесь устройствами ввода на шине USB, (например, мышью или клавиатурой), не забудьте включить их поддержку:

Device Drivers --->
  USB Support --->
    <*>   USB Human Interface Device (full HID) support

Если вам необходима поддержка работы карт расширения PCMCIA для своего ноутбука, не забудьте включить поддержку моста своей PCMCIA карты:

Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->
  PCCARD (PCMCIA/CardBus) support  --->
    <*> PCCard (PCMCIA/CardBus) support
(select 16 bit if you need support for older PCMCIA cards. Most people want this.)
    <*>   16-bit PCMCIA support
    [*]   32-bit CardBus support
(select the relevant bridges below)
    --- PC-card bridges
    <*> CardBus yenta-compatible bridge support (NEW)
    <*> Cirrus PD6729 compatible bridge support (NEW)
    <*> i82092 compatible bridge support (NEW)
    <*> i82365 compatible bridge support (NEW)
    <*> Databook TCIC host bridge support (NEW)

Закончив настройку ядра, приступайте к компиляции и установке.

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

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

# make && make modules_install

По завершении компиляции, скопируйте образ ядра в каталог /boot. Используйте любое имя, которое вам покажется подходящим для избранного ядра, и запомните его, так как позже при настройке начального загрузчика оно потребуется. Не забудьте заменить на имя и версию своего ядра.

# cp arch//boot/bzImage /boot/

Теперь переходите к модулям ядра.

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

Если вы читаете эти строки, значит, вы собираетесь использовать наш сценарий genkernel для настройки ядра за вас.

Теперь когда исходные коды ядра установлены, настало время скомпилировать ядро, собрав его автоматически при помощи сценария genkernel. genkernel выполняет настройку ядра практически так же, как настраивается ядро на установочном компакт-диске. То есть система, ядро которой собрано genkernel, как правило, будет выполнять определение всех устройств при загрузке. Поскольку genkernel не требует никакой ручной настройки ядра, это идеальное решение для тех, кому неуютно от одной мысли, что придется компилировать ядро.

Рассмотрим, как использовать genkernel. Сначала установите его:

# emerge genkernel

Теперь скопируйте настройку ядра, используемую установочным диском, в каталог, где genkernel ищет настройку по умолчанию:

# zcat /proc/config.gz > /usr/share/genkernel/x86/kernel-config-2.6

Теперь скомпилируйте исходный код ядра, запустив genkernel all. Имейте в виду, что компиляция займет приличное время, поскольку genkernel собирает ядро, поддерживающее практически любое оборудование!

Заметьте, если в загрузочном разделе не используется файловая система ext2 или ext3, то вам придется вручную настроить ядро, запустив genkernel --menuconfig all, добавив поддержку используемой файловой системы в ядро (т.е. не модулем). Пользователям EVMS2 или LVM2, вероятно, захочется также добавить параметр командной строки --evms2 или --lvm2.

# genkernel all

В итоге работы genkernel будет создано ядро, полный набор модулей и начальный корневой диск (initrd). Ядро и initrd будут использоваться в процессе настройки загрузчика системы, которая описана далее в руководстве. Запишите имена ядра и начального корневого диска, так как они понадобятся при составлении конфигурационного файла загрузчика. initrd запускается сразу при начальной загрузке, выполняя автоматическое определение устройств (точно так же, как при запуске установочного диска), до запуска «настоящей» системы.

# ls /boot/kernel* /boot/initramfs*
Модули ядра Настройка модулей

Модули, которые требуется загружать автоматически, нужно указать в /etc/modules.autoload.d/kernel-2.6.Также, при желании, модулям можно сообщить дополнительные параметры.

Для просмотра всех доступных модулей запустите команду find, заменив на версию только что собранного ядра:

# find /lib/modules// -type f -iname '*.o' -or -iname '*.ko'

Например, для автоматической загрузки модуля 3c59x.o измените файл kernel-2.6, указав в нем имя модуля.

# nano -w /etc/modules.autoload.d/kernel-2.6
3c59x

Теперь переходите к настройке параметров системы.