|
||||||||||||||||||||||||||||||||||||||||||||||||
|
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
В моем случае ядро было оптимизировано под 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 setupBIGMEMПоддержка памяти более 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 binariesLinux-программы используют 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 devicesNormal 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
Опции, отмеченные звездочкой (*), требуются в случае конфигурирования сервера. При создании сервера также потребуется включение ряда дополнительных опций в зависимости от его назначения. Из соображений безопасности включение поддержки 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 | Прислать материал | Нашёл ошибку | Наверх |
||||||||||||||||||||||||||||||||||||||||||||||||
|