• 18.1. Параметры ядра
  • 18.1.1. Параметры корневой файловой системы
  • 18.1.2. Управление RAMDISK
  • 18.1.3. Управление памятью
  • 18.1.4. Другие параметры ядра
  • 18.2. Конфигурирование ядра
  • 18.2.1. Processor type and features
  • 18.2.2. Loadable module support
  • 18.2.3.General setup
  • 18.2.4. PnP support
  • 18.2.5. Block devices
  • 18.2.6. Networking options
  • 18.2.7. SCSI support
  • 18.2.8. Network device support
  • 18.2.9.IrDA, USB support
  • 18.2.10. Filesystems
  • 18.2.11. Sound
  • 18.3. Компилирование ядра
  • 18

    Компилирование ядра

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

    В показательных целях мною в примерах использовано ядро 2.2.17, но ниже написанное верно также и для более поздних версий ядер (2.3.x , 2.4.x).

    18.1. Параметры ядра

    Во время загрузки ядру ОС Linux могут быть переданы различные параметры. В этой главе будут рассмотрены не все параметры ядра (полное их описание занимает достаточно много места). За более подробным их описанием вам следует обратиться к BootPrompt-HOWTO. Передача параметров может быть осуществлена либо с помощью загрузчика LILO, либо с помощью любого другого загрузчика Linux (например, bootlin, bootact). В том случае, если вы решили использовать LILO, то в ответ на приглашение нужно ввести:

    linux строка_параметров.

    где: linux — метка, указанная в файле /etc/lilo.conf.

    Вторым способом указания ядру параметров является команда append, используемая в файле конфигурации LILO — /etc/lilo/conf. Параметры при этом следует указывать в следующем виде:

    параметр[=значение1][,значение2]…[,значением]

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

    Пример строки параметров:

    // правильное объявление параметров

    root=/dev/hda1 ether=9,0x300,0xd0000,0xd4000,eth0

    // неправильное объявление параметров

    root=/dev/hda1 ether=9, 0x300, 0xd0000, 0xd4000, eth0

    18.1.1. Параметры корневой файловой системы

    Итак, начнем описание параметров, с параметров корневой файловой системы:

    root=yстройство

    Устанавливает корневую файловую систему. Например, root=/dev/hda1. В качестве устройства допустимыми являются:

    1. /dev/hdaN…/dev/hddN — для IDE-дисков;

    2. /dev/sdaN…/dev/sdeN — для SCSI-дисков;

    3. /dev/xdaN…/dev/xdbN — для XT-совместимых дисков;

    4. /dav/fdN — дисковод для дискет. N=0 — диск А, N=1 — диск В;

    5. /dev/nfs — не является устройством, но указывает ядру, что нужно произвести загрузку по NFS.

    ro

    Этот параметр указывает монтирование корневой файловой системы в режиме «только чтение». Используется по умолчанию,

    rw

    Задает монтирование корневой файловой системы в режиме «чтение/ запись». При использовании этого параметра нельзя запускать программы типа fsck. Перед запуском программы fsck нужно перемонтировать корневую файловую систему в режиме ro.

    18.1.2. Управление RAMDISK

    При создании загрузочных дискет для ОС Linux необходимо, чтобы на эти дискеты было помещено нужное программное обеспечение и чтобы для этого программного обеспечения хватило места. Обычно поступают следующим образом: создают сжатый архив всего необходимого программного обеспечения и помещают его на загрузочный диск. При загрузке системы в памяти создается «электронный» диск, на который это программное обеспечение и записывается. Этот «электронный» диск называется RAM-диском. Описываемые далее параметры задают режимы работы с RAM-диском.

    ramdisk_start=<смещение>

    Разрешает ядру находиться на гибком диске вместе со сжатым образом RAM-диска.

    Ядро не может быть включено в сжатый образ файловой системы RAM-диска, так как оно должно быть записано начиная с нулевого сектора, чтобы BIOS могло загрузить загрузочный сектор и ядро могло бы продолжить загрузку.

    Если вы используете несжатый образ RAM-диска, то ядро может быть частью образа файловой системы. Такая дискета может быть загружена с помощью LILO.

    В том случае, если вы для загрузки используете две дискеты (первая содержит ядро — boot, на второй находится образ файловой системы — root), образ файловой системы должен начинаться на нулевом секторе и смещение = 0.

    load_ramdisk=

    Этот аргумент заставляет ядро использовать RAM-диск. Значение load_ramdisk=1 сообщает ядру, что нужно загрузить дискету в RAM-диск. Значение по умолчанию 0 (ядро не использует RAM-диск).

    prompt_ramdisk=

    Сообщает ядру, что нужно запросить дискету, которая содержит образ файловой системы (пример: promt_ramdisk=l).

    ramdisk_size=

    Устанавливает размер RAM-диска в Кб.

    ramdisk=

    Определяет размер (в Кб) устройства RAM-диска. Например, для загрузочной дискеты 1.44 Мб нужно указать ramdisk=1440. Этот аргумент поддерживается ядрами, начиная с версии 1.3.47.

    18.1.3. Управление памятью

    Управление памятью осуществляется с помощью параметра mem:

    mem=

    Определяет объем памяти, установленной в компьютере.

    Например: mem=16384K или mem=16M.

    Иногда нужно указать объем ОЗУ, отличный от того, который имеется на самом деле. Например, у вас чипсет Intel 810 с интегрированной видеоплатой, тогда вам нужно указать объем ОЗУ на 1 Мб меньше (а иногда даже на 2 Мб). Это связано с аппаратной особенностью чипсета. Более подробно об этом вы можете узнать на сайте компании Intel (http://www.intel.com).

    18.1.4. Другие параметры ядра

    debug

    Сообщения ядра (важные и не очень) передаются через функцию printk(). Если сообщение очень важно, то его копия будет передана на консоль, а также функции klogd() для его регистрации на жестком диске.

    Сообщения передаются на консоль, потому что иногда невозможно запротоколировать сообщение на жестком диске (например, отказ самого диска). Предел того, что будет отображаться на консоли, задается переменной console_loglevel. По умолчанию на консоли отображается все, что выше уровня DEBUG (7). Список уровней можно найти в файле kernel.h.

    init=

    По умолчанию ядро пытается запустить программу /sbin/init, которая продолжит загрузку согласно стартовым сценариям (rc). Если программа init повреждена, вы можете использовать параметр imt=/bin/sh. В оболочке вы сможете заменить поврежденную программу.

    no-hlt

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

    Существование этого параметра обусловлено тем, что некоторые чипы 486DX-100 имеют проблемы с этой инструкцией. Кроме того, параметр no-hlt позволяет использовать Linux на бракованных процессорах.

    no387

    Отключает использование математического сопроцессора.

    no-scroll

    Отключает функцию прокрутки экрана во время загрузки.

    reboot=

    Параметр, задающий режим перезагрузки. Возможные значения: cold и warm, то есть «холодная» или «горячая» перезагрузка. Поддерживается ядрами версии 2.0 и выше.

    single

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

    18.2. Конфигурирование ядра

    Итак, немного разобравшись в параметрах ядра, приступим к его конфигурированию. Однако перед тем как приступить, убедитесь, что у вас установлены исходники ядра и пакет заголовков:

    kernel-2.2.17-21mdk.i586.rpm

    kernel-headers-2.2.17-21mdk.i586.rpm

    Затем перейдите в каталог, который содержит исходные тексты ядра. Обычно это /usr/src/linux или /usr/src/linux-2.2.17. По сути linux — это ссылка на каталог linux-2.2.17. Все действия нужно выполнять от имени суперпользователя:

    # cd /usr/src/linux

    Затем введите одну из следующих команд:

    # make config

    # make menuconfig

    # make xconfig

    В первом случае вам будет задан ряд вопросов, кстати, очень длинный, на который вам предстоит ответить. Я рекомендую команду make menuconfig — это намного удобнее (рис. 18.1). В этом случае вы можете редактировать конфигурацию ядра с помощью меню. Параметр xconfig аналогичен menuconfig, только предназначен для запуска из-под системы X-Window (см. рис. 18.2).

    Рис. 18.1. Программа Menuconfig

    Рис. 18.2. Программа xconfig


    Перед внесением изменений в файл конфигурации ядра, сохраните его под другим именем — Save Configuration to an Alternative File. Во время конфигурирования ядра вы можете включать или исключать некоторые функции из состава ядра или же сделать нужную вам функцию модулем, то есть в состав ядра данная функция включена не будет, но она будет использоваться при необходимости. Например, если вы добавите в систему устройство, то будет подключен нужный модуль, при условии, что вы его откомпилировали. Главная задача — повышение производительности системы, этого можно достичь, если точно сконфигурировать ядро и исключить из его состава ненужный код.

    18.2.1. Processor type and features

    Здесь можно указать тип процессора и его функции, например, поддержка памяти более 1 Гб, MTRR, эмулирование математического сопроцессора.

    Рис. 18.3. Processor type and features


    Очень важно правильно указать тип процессора: после того, как я правильно указал тип своего процессора, производительность системы повысилась примерно в 1,5 раза, особенно это стало ощутимо при загрузке системы. Данная функция используется для оптимизации работы процессора. Если вы укажете тип процессора, например, 486, 586, Pentium, PPro, ядро не обязательно будет запускаться на более ранней архитектуре. Например, если вы укажете Pentium, ядро будет работать на PPro (хотя и медленнее), но нет никакой гарантии, что оно запустится на 486. В табл. 18.1 приведены типы процессоров, которые рекомендуются для получения наибольшей производительности.

    Типы процессоров Таблица 18.1 

    Тип Процессоры
    386 Процессоры производства AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix 486DLC/DLC2, UMC 486SX-S
    486/Сх486 AMD/Cyrix/Intel/IBM DX4, 486DX/DX2/SL/SX/SX2 AMD/Cyrix 5x86 NexGen Nx586, UMC USD или U5S
    586/К5/5х86/6х86 Обычные (самые первые) процессоры Pentium, AMD K5
    Pentium/K6/TSC Intel Pentium/Pentium MMX, AMD K6,K6-3D
    PPro/6х86МХ Intel Pentium II/Pro, Cyrix/IBM 6x86MX, MM

    В моем случае ядро было оптимизировано под 586/К5. После того, как я установил PPro, Linux заработал быстрее (для справки: я использую Intel Celeron 433А). Объем памяти — установите 1 Гб, если, конечно, у вас менее 1 Гб.

    Math emulation

    Включите эту опцию, если вы используете один из следующих процессоров: 386SX/DX/SL/SLC без 80387, 486SL/SX/SX2.

    SMP (Symmetric multi-processing support)

    Скорее всего, у вас установлен один процессор и эту опцию вам нужно будет отключить — зачем включать лишний код в ядро? Если же вы счастливый обладатель мультипроцессорной машины, включите данную опцию. При включении SMP укажите правильный тип процессора. Вы должны указать хотя бы 586. Ядро не запустится, если у вас выбран тип процессора 486. Также ядро не будет работать, если ваш компьютер оснащен процессором Pentium, а вы установили тип процессора PPro. Если у вас мультипроцессорная машина, вы должны также включить опцию Enhanced Real Time Clock Support. Опция Advanced Power Management у вас будет отключена при использовании SMP. 

    MTRR

    В семействе процессоров Intel P6 (Pentium Pro, Pentium II и выше) используются специальные регистры — Memory Type Range Registers (MTRR). Эти регистры используются для управления доступом процессора к различным диапазонам памяти. Включение этой опции может существенно повысить производительность системы, особенно если вы используете видеокарту PCI или AGP. Данную возможность поддерживают процессоры и посторонних производителей: Cyrix 6x86, 6х86МХ, MII, AMD K6-2 (stepping 8 и выше), К6-3, Centaur С6. Некоторые BIOS устанавливают MTRR для первого процессора, но отключают для второго. Активизация данной опции также решает и эту проблему. Если вы не уверены, поддерживает ли ваш процессор MTRR, все равно включите данную опцию. Поддержка MTRR увеличит объем ядра всего лишь на 3 Кб.

    18.2.2. Loadable module support

    Если вы планируете использовать загружаемые модули, включите все функции. Можно создать компактную версию ядра, которая вообще не использует модули, а поддержка всех необходимых устройств будет включена непосредственно в ядро. В этом случае можно отключить все функции в этой секции. 

    18.2.3.General setup

    BIGMEM

    Поддержка памяти более 1GB.

    Networking support

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

    PCI support

    Поддержка шины PCI.

    PCI quirks

    Эту опцию нужно использовать, если у вас неисправна BIOS. Некоторые BIOS содержат ошибки, которые могут привести к сбоям при работе с PCI. Данная опция должна исправить эту ошибку. Если вы неуверенны, включите ее. Позже можно будет поэкспериментировать. Если же BIOS исправна, эту функцию можно спокойно отключить и тем самым внести вклад в повышение производительности системы.

    PCI bridge optimization (experimental)

    Оптимизация моста PCI — для любителей экспериментов. Система может работать нестабильно. Попробовать можно, но я бы не стал жертвовать надежностью ради производительности.

    Backward-compatible /proc/pci

    Старые версии ядра поддерживали файл /proc/pci, который содержит перечень всех PCI-устройств. Некоторые программы используют этой файл, например, для сбора информации о системе. В новых ядрах используется файл /proc/bus/pci. Для поддержки обратной совместимости рекомендуется включить эту опцию. Если вы ее отключите, то у вас будет только один (новый) интерфейс /proc/bus/pci.

    MCA support

    Данная опция устанавливает поддержку шины MCA. MCA — шина передачи данных, разработанная IBM, — использовалась в системах PS1/PS2. Шина МСА снята с производства и не используется.

    Рис. 18.4. General setup


    System V IPC

    Просто включите эту опцию. Более подробно о ней вы можете прочитать на сайте metalab (ftp://metalab.unc.edu/pub/Linux/docs/LDP/programmers-guide).

    BSD Process accounting

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

    Sysctl support

    Включает поддержку Sysctl. Sysctl позволяет изменять параметры ядра без перекомпилирования во время загрузки. Поддержка sysctl увеличивает размер ядра на 8 Кб. Если ядро, которое вы компилируете, не предназначено для дисков загрузки/восстановления, включите эту опцию.

    Kernel support for a.out/ELF/MISC/JAVA binaries

    Linux-программы используют ELF-формат. Поэтому его нужно включить в состав ядра, а остальные использовать в качестве модулей.

    Parallel port support

    Поддержка параллельного порта.

    PC-style hardware

    Вы должны включить эту опцию (или хотя бы модулизировать ее), если вы используете параллельный порт типа PC. Все компьютеры, совместимые с IBM PC, и некоторые Alpha используют именно этот тип порта.

    Support foreign hardware

    Включите эту опцию, если вы используете другой (не PC) тип параллельного порта.

    Advanced Power Management (АРМ) BIOS support

    Поддержка расширенного управления питанием: АТХ, «green»-устройства (например, VESA-мониторы). Если вам нужно отключить эту функцию во время загрузки, введите в качестве параметра ядра apm=off. При возникновении проблем проверьте следующее:

    1. Наличие достаточного количества свопа (объема файла подкачки), а также убедитесь, что раздел подкачки включен.

    2. Передайте ядру инструкцию no-hlt.

    3. Попробуйте отключить поддержку сопроцессора (инструкция по387).

    4. Передайте ядру инструкцию floppy-nodma.

    5. Убедитесь, что процессор не «разогнан».

    6. Установите новый вентилятор для процессора.

    Support Enable PM at boot time

    Включает АРМ во время загрузки системы. Если эта опция отключена, BIOS не будет управлять питанием устройств, входить в режимы Standby и Suspend, а также не будет производить никаких действий в ответ на вызовы процессора CPU Idle. Если ваш компьютер зависает во время загрузки, выключите эту опцию. Make CPU Idle calls when idle

    Во время цикла простоя ядра разрешает вызовы к АРМ. Включение данной опции может привести к зависанию компьютера во время загрузки! Если компьютер использует несколько процессоров, эта опция игнорируется. Заметьте, сколько процессоров именно использует компьютер, а не сколько в нем установлено. Если у вас два процессора, а вы используете только один и поддержка SMP у вас отключена, данная опция игнорироваться не будет!

    Enable console blanking using АРМ

    Включает мерцание консоли при использовании АРМ. Некоторые лэптопы могут использовать эту опцию для того, чтобы отключить подсветку LCD-экрана, когда активизирован хранитель экрана на одной из виртуальных консолей Linux.

    Ignore multiple suspend/resume cycles

    Эта опция необходима для ноутбуков Dell Inspiron 3200 и некоторых других для нормальной работы АРМ. Прежде чем активизировать эту опцию, прочитайте документацию по вашему ноутбуку.

    RTC stores time in GMT

    Если ваш аппаратный таймер сохраняет время в формате GMT, включите эту опцию, иначе она должна быть отключена. Если опция выключена, сохраняется локальное время. Рекомендуется сохранять время в формате GMT. Allow interrupts during АРМ BIOS calls

    Обычно прерывания внешних устройств запрещены во время выполнения процедур АРМ. BIOS некоторых ноутбуков разрешает прерывания внешних устройств, например, IBM ThinkPad. По умолчанию данная опция выключена. Если вы не уверены, не включайте ее.

    18.2.4. PnP support

    В данной секции задается поддержка Plug and Play.

    18.2.5. Block devices

    Normal PC floppy disk support

    Если вы хотите использовать FDD в Linux, включите эту опцию.

    Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

    Выключите эту опцию, если ваша система оснащена только SCSI-устройствами.

    Use old disk-only driver on primary interface

    Данная опция устанавливает старый драйвер для управления Primary master интерфейсом IDE. Обычно ее нужно отключить, чтобы был использован новый драйвер для всех четырех дисков (Primary master, Primary slave, Secondary Master, Secondary slave). Ее также нужно отключить, если у вас на компьютере используются только SCSI-устройства.

    Include IDE/ATA-2 Disk support

    Поддержка IDE/ATA-2 дисков. Опцию можно отключить, только если вы не используете АТА-диски.

    Use multi-mode by default

    При возникновении ошибки вида:

    hda: set_multmode: status=0x51

    hda: set_multmode: error=0x04

    включите эту опцию.

    Include IDE/ATAPI CDROM support

    Поддержка привода CDROM. При отсутствии такового отключите ее для уменьшения размера ядра.

    Include IDE/ATAPI TAPE support

    Поддержка IDE/ATAPI-стримера.

    Include IDE/ATAPI FLOPPY support

    Поддержка IDE/ATAPI-флопии. Если вы используете LS-120 или lomega-ZIP, включите эту опцию.

    SCSI emulation support

    Позволяет использовать драйвер SCSI для устройств с интерфейсом ATAPI, для которых нет родного драйвера. Все остальные опции в данной секции предназначены для поддержки конкретных чипсетов. Рекомендую оставить поддержку только тех устройств, которые имеются в вашей системе.

    18.2.6. Networking options

    Рис. 18.5. Networking options


    Packet Socket

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

    Kernel/User netlink support

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

    Опции сети Таблица 18.2 

    Опция Описание
    Routing messages Сообщения маршрутизатора
    Netlink device emulation Опция обратной совместимости. Скоро будет удалена, но сейчас она нужна
    Network firewalls Поддержка firewall
    Socket Filtering Фильтр сокетов
    UNIX domain sockets Поддержка UNIX-сокетов. Не отключайте эту опцию
    TCP/IP networking Поддержка TCP/IP обязательно должна быть включена
    IP:firewalling (*) IpChains
    IP:firewall packet (*) IpChains
    IP: transparent proxy support (*) Прозрачный прокси
    IP: masquerading (*) IP-маскарадинг
    IP: ICMP masquerading (*) ICMP-маскарадинг
    IP: masquerading virtual server support (*) IP-маскарадинг для виртуальных серверов
    IP: broadcast GRE over IP (*) Поддержка broadcasting в WAN
    IP: aliasing support Поддержка псевдонимов
    IP: TCP syncookie support Рекомендуется включить из соображений безопасности. Противодействует SYN-атакам
    IP: allow large windows Позволяет повысить производительность при работе в сети. Не рекомендуется при объеме памяти менее 16 Мб

    Опции, отмеченные звездочкой (*), требуются в случае конфигурирования сервера. При создании сервера также потребуется включение ряда дополнительных опций в зависимости от его назначения. Из соображений безопасности включение поддержки firewall и на рабочей станции не будет лишним.

    18.2.7. SCSI support


    В данной секции можно установить параметры SCSI. При отсутствии в системе SCSI-устройств можно отключить все.


    18.2.8. Network device support

    Здесь можно указать поддерживаемые протоколы (например, РРР), а также типы поддерживаемых сетевых адаптеров. Отключите все, что не используете. Например, если у вас установлена PCI-сетевая плата, то особого смысла включения поддержки других ISA-сетевых плат я не вижу.

    18.2.9.IrDA, USB support

    Поддержка соответственно IrDA– и USB-устройств.

    Рис. 18.6. USB support

    18.2.10. Filesystems

    Здесь принцип такой: все, что нужно — встраивайте в ядро, остальное — или исключайте, или используйте в качестве модуля. При этом я рекомендую включить в ядро следующие файловые системы:

    Second ext fs (ext2), ISO 9660, MS Joliet CDROM extension, VFAT, /proc, /dev/pts

    В виде модулей следующие: MS DOS FAT, MINIX. Также неплохо было бы включить поддержку квотирования, если вы настраиваете сервер.

    18.2.11. Sound

    Включите поддержку звука, если у вас есть звуковая плата. Во всем остальном следует поступить так, как и в случае с сетевыми платами — включить в ядро только используемую звуковую плату, а все остальные отключить (даже не использовать в качестве модуля). Точнее включить код драйвера для вашей звуковой платы непосредственно в ядро вам, скорее всего, не удастся, но вы его можете использовать в качестве модуля, а все остальные модули даже не компилировать.

    18.3. Компилирование ядра

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

    # make dep

    После завершения ее работы необходимо ввести команду:

    # make bzImage

    Если исходники ядра и компилятор установлены корректно, то примерно минут через 20 (это зависит от версии ядра и от быстродействия вашей системы) вы получите откомпилированное ядро. Обычно оно помещается в каталог /usr/src/linux/arch/i386/boot.

    Теперь следует откомпилировать модули, которые будут использоваться ядром:

    # make modules

    и установить их:

    # make modules_install

    Перед установкой модулей сделайте резервную копию модулей старого ядра (каталог /lib/modules). Теперь можно ввести команду:

    # make install

    Однако для установки только что созданного ядра, я не рекомендую этого делать. Сначала нужно протестировать ваше ядро. С этой целью откройте в любом редакторе файл /etc/lilo.conf:

    # vi /etc/lilo.conf

    Добавьте в него следующие строки (более подробно файл /etc/lilo.conf обсуждался в гл. 4):

    image=/usr/src/linux/arch/i386/boot/bzImage

    label=my_linux

    root=/dev/hda5

    append=" mem=128M"

    read-only

    Потом введите команду:

    # lilo

    Теперь перезагрузите систему:

    # reboot

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








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх