Linux Kernel HOWTO Brian Ward, bri@blah.math.tu-graz.ac.at, перевод Alex Ott ott@phtd.tpu.edu.ru v0.80, 26 Мая 1997 Это детальное руководство по настройке ядра, его компиляции, обновлениям и разрешению проблем на системах построенных на базе ix86. ______________________________________________________________________ Table of Contents 1. Введение 1.1 Прочитайте это сначала! (Я это подразумеваю) 1.2 Одно слово о стиле 2. Важные вопросы и ответы на них 2.1 Что вообще делает ядро? 2.2 Почему я должен обновлять мое ядро? 2.3 Какие типы оборудования поддерживают новые ядра? 2.4 Какие версии gcc и libc мне нужны? 2.5 Что такое загружаемый модуль? 2.6 Сколько места на диске мне надо? 2.7 Как долго этот процесс идет? 3. Как настраивать ядро 3.1 Получение исходных текстов 3.2 Распаковка исходных текстов 3.3 Настройка ядра 3.3.1 Эмуляция математических функций ядром 3.3.2 Поддержка обычных (MFM/RLL) дисков и дисков/cdrom IDE 3.3.3 Поддержка сети 3.3.4 Ограничить память до менее 16MB 3.3.5 System V IPC 3.3.6 Тип процессора (386, 486, Pentium, PPro) 3.3.7 Поддержка SCSI 3.3.8 Поддержка сетевых устройств 3.3.9 Файловые системы 3.3.9.1 Но я не знаю какие файловые системы мне нужны! 3.3.10 Символьные устройства 3.3.11 Звуковые карты 3.3.12 Другие опции настройки 3.3.13 Работа над ядром (Kernel hacking) 3.4 Что теперь? (Makefile) 4. Компиляция ядра 4.1 Очистка и создание зависимостей 4.2 Время компиляции 4.3 Другие вещи, можно сделать с помощью ``make'' 4.4 Установка ядра 5. Исправление ядра с помощью заплаток 5.1 Наложение заплаток 5.2 Если что-то неправильно 5.3 Избавляемся от файлов .orig 5.4 Другие заплатки 6. Дополнительные пакеты 6.1 kbd 6.2 util-linux 6.3 hdparm 6.4 gpm 7. Некоторые ловушки 7.1 make clean 7.2 Большие или медленные ядра 7.3 Ядро не компилируется 7.4 Не видно чтобы новая версия ядра грузилась 7.5 Вы забыли запустить LILO, или система просто не грузится 7.6 Ядро сообщает `warning: bdflush not running (предупреждение bdflush не запущен)' 7.7 Выводятся сообщения о неопределенных символах и не компилируется 7.8 Я не могу заставить работать мой привод IDE/ATAPI CD-ROM 7.9 Ядро сообщает странные вещи об устаревших запросах маршрутизации 7.10 Firewalling не работает в 1.2.0 7.11 ``Not a compressed kernel Image file (Не является файлом сжатого образа ядра)'' 7.12 Проблемы с консолью после обновления до 1.3.x 7.13 Не могу скомпилировать некоторые вещи после обновления ядра 7.14 Увеличение предельных значений 8. Замечание для обновления до версии 2.0.x 9. Модули 9.1 Установка утилит для работы с модулями 9.2 Модули распространяемые с ядром 10. Другие опции настройки 10.1 Общая настройка 10.2 Сетевые опции 11. Советы и приемы 11.1 Перенаправление вывода команд make или patch 11.2 Условная установка ядра 11.3 Обновления ядра 12. Другие HOWTO, которые могут быть полезными 13. Разное 13.1 Автор 13.2 Что сделать 13.3 Сотрудничество 13.4 Уведомление об авторских правах, Лицензия и все такие вещи ______________________________________________________________________ ППррииммееччааннииее ппееррееввооддччииккаа:: Шлите мне любый комментарии и замечания, даже небольшие. 11.. ВВввееддееннииее Должны ли вы читать этот документ? Да, если у вас один из следующих симптомов: ╥ ``Вах! Этот пакет wizzo-46.5.6 говорит, что ему нужно ядро 1.8.193, а я все еще пользуюсь версией 1.0.9!'' ╥ В одном из более новых ядер существует драйвер необходимого вам устройства. ╥ Вы не знаете как компилировать ядро ╥ ``В действительности ли в файле README находится все описание?'' ╥ Вы старались, вы пытались, а это не работает ╥ Вам нужно что-то дать людям, которые просят вас установить ядра для них 11..11.. ППррооччииттааййттее ээттоо ссннааччааллаа!! ((ЯЯ ээттоо ппооддррааззууммееввааюю)) Некоторые из примеров в этом документе предполагают, что у вас есть GNU tar, find, и xargs. Эти программы довольно стандартны; это не должно вызвать проблем. Так же предполагается, что вы знаете структуру вашей файловой системы; если вы не знаете эьлгл, то вы должны сохранить копию вывода команды mount при обычных системных операциях (или содержимое файла /etc/fstab, если вы можете читать его). Эта информация является важной, и не изменяется до переразбивки вашего диска, добавления нового, перестановки вашей системы или чего-то подобного. Последней ``стабильной (production)'' версией ядра во время написания этого документа была версия 2.0.30, это означает, что все ссылки и примеры относятся к этой версии. Даже хотя я пытался сделать этот документ как не зависящий от версии насколько это возможно, все равно ядра постоянно находятся в развитии, так что если вы получили новую версию, то она неизбежно будет иметь некоторые отличия. Вообще это не должно вызвать больших проблем, но может создать некоторые осложнения. Существует две версии исходного кода ядра linux, ``стабильная (production)'' и ``разрабатываемая (development)''. Стабильные версии начались с 1.0.x и в настоящее время они идут с четными номерами; 1.0.x являются стабильными, 1.2.x являются стабильными, так же как и 2.0.x. Эти ядра считаются более стабильными и свободными от ошибок версиями во время их выпуска. Разрабатываемые ядра (1.1.x, 1.3.x, и т.п.) являются ядрами для тестирования, для людей желающих протестировать новые, возможно с ошибками, ядра. Я вас предупредил! 11..22.. ООдднноо ссллооввоо оо ссттииллее Текст, который выглядит вот так -- это либо то, что появится на вашем экране, либо имя файла, либо то, что может быть прямо набрано, например команда, или опции команды (если вы читаете это как простой текст, то это различие не видно). Команды и другой ввод часто взяты в кавычки (с помощью ` '), что вызывает классическую проблему пунктуации: Если такой пункт появляется в конце предложения в кавычках, то люди часто набирают `.' вместе с командой, потому-что Американский стиль цитирования заставляет помещать точку внутри кавычек. Даже если здравый смысл (и к сожалению, это предполагает, что люди со ``здравым смыслом)'' будут использовать американский стиль цитирования) говорит кому-то, что надо отбросить сначала знаки пунктуации, много людей просто этого не помнят, так что я буду в таких случаях помещать знаки пунктуации вне кавычек. Другими словами, когда надо показать, что вы должны набрать ``make config'', то я буду писать `make config', а не `make config.' 22.. ВВаажжнныыее ввооппррооссыы ии ооттввееттыы ннаа нниихх 22..11.. ЧЧттоо ввооооббщщее ддееллааеетт яяддрроо?? Ядро Unix выступает как посредник между вашей программой и вашим оборудованием. Сначала оно делает (или подготавливается к) обслуживанию/распределению памяти компьютера для всех запущенных программ (процессов), и убеждается, что все они честно (или нечестно, если вы этого желаете) разделяют время процессора. В добавление к этому оно обеспечивает великолепный, довольно переносимый интерфейс для общения программ с оборудованием. Конечно у ядро выполняет больше действий, чем мы здесь перечислили, но эти основные функции необходимо знать. 22..22.. ППооччееммуу яя ддооллжжеенн ооббннооввлляяттьь ммооее яяддрроо?? Более новые ядра в общем поддерживают большее количество типов оборудования (они имеют больше драйверов устройств), они могут иметь улучшенное управление процессами, они могут выполняться быстрее, чем более старые версии, они могут быть более стабильными, чем старые версии, и они исправляют глупые ошибки в более старых версиях. Большинство людей обновляют ядро, потому-что они хотят использовать новые драйвера устройств и исправить ошибки. 22..33.. ККааккииее ттииппыы ооббооррууддоовваанниияя ппооддддеерржжииввааюютт ннооввыыее яяддрраа?? Смотрите Hardware-HOWTO. В качестве альтернативы вы можете посмотреть файл `config.in' в исходных текстах ядра linux source, или просто найти нужное устройство запустив `make config'. Они показывают все оборудование поддерживаемое дистрибутивом ядра, но не все, которое поддерживает linux; много драйверов общих устройств (таких как драйвера PCMCIA и некоторые драйвера ленточных устройств) являются загружаемыми модулями сопровождаются и распространяются отдельно. 22..44.. ККааккииее ввееррссииии ggcccc ии lliibbcc ммннее ннуужжнныы?? Рекомендации Linus по версии gcc находятся в файле README, включенном в исходные тексты linux. Если у вас нет этой версии, то документация по рекомендуемой версии gcc должна сообщить вам все сведения, если вам необходимо обновить вашу версию libc. Это не трудная процедура, но важно следовать инструкциям. 22..55.. ЧЧттоо ттааккооее ззааггрруужжааееммыыйй ммооддуулльь?? Это кусочки кода ядра, которые не включены прямо в ядро. Они компилируются отдельно и затем могут вставлять и удалять их в запущенное ядро почти в любое время. Вследствии их гибкости, сейчас это предпочтительный способ кодирования некоторых средств ядра. Много популярных драйверов устройств, таких как драйвера PCMCIA и драйвера ленточных устройств QIC-80/40, являются загружаемыми модулями. 22..66.. ССккооллььккоо ммеессттаа ннаа ддииссккее ммннее ннааддоо?? Это зависит от конфигурации вашей системы. Первое, это сжатые исходные тексты ядра, примерно 6 мегабайт для версии 2.0.10. На многих машинах этот файл хранят даже после распаковки. В расжатом виде исходные тексты занимают до 24 мегабайт. Но это не конец -- вам нужно больше для компиляции ядра. Требуемый размер зависит от того, как вы настроили ваше ядро. Например, на одной машине у меня настроена работа сети, драйвер 3Com 3C509, и три файловые системы, это все занимает примерно 30 мегабайт дискового пространства. Добавив сжатые исходные тексты, вам понадобиться около 26 Мб для такой конфигурации. На другой системе, без поддержки драйвера сетевой карты (но все равно с поддержкой сети) и звуковой картой, все занимает больше пространства. Также, более новые ядра имеют более большое дерево исходных текстов, так что в общем, если если у вас довольно много устройств, то убедитесь, что у вас достаточно большой жесткий диск (при сегодняшних ценах, я не могу помочь вам, но я рекомендую взять другой диск как ответ на вашу проблему отсутствия свободного пространства). 22..77.. ККаакк ддооллггоо ээттоотт ппррооццеесссс ииддеетт?? Для большинства людей ответ будет такой: ``довольно долго''. Скорость вашей машины и количество имеющейся памяти определяют это время, но некоторая часть определяется, тем как вы включили в ядро. На машине 486DX4/100 с 16 МБ ОЗУ, на ядре версии 1.2 с пятью файловыми файловыми системами, поддержкой сети и драйвером звуковой карты, компиляция займет примерно 20 минут. На 386DX/40 (8 MБ ОЗУ) с примерно такой же конфигурацией, компиляция продолжается около 1.5 часов. В общем рекомендуем выпить кофе, посмотреть телевизор, повязать или поделать что-нибудь подобное пока ваша машина компилирует ядро. 33.. ККаакк ннаассттррааииввааттьь яяддрроо 33..11.. ППооллууччееннииее ииссххоодднныыхх ттееккссттоовв Вы можете получить исходные тексты с помощью анонимного ftp с ftp.funet.fi в директории /pub/Linux/PEOPLE/Linus, с его зеркала, или с другого сервера. Они обычно обозначены как linux-x.y.z.tar.gz, где x.y.z номер версии. Более новые (лучшие?) версии и заплатки (patches) обычно находятся в поддиректориях, таких как `v1.1' и `v1.2'. Самый большой номер имеет последняя версия и обычно является ``тестовой версией'', это значит, что если вы нелегко плохо чувствуете себя с альфа или бета версиями, то вы должны использовать стабильную версию. Я _н_а_с_т_о_я_т_е_л_ь_н_о рекомендую вам использовать сервера-зеркала вместо использования ftp.funet.fi. Здесь приведен короткий список серверов-зеркал и других серверов: USA: sunsite.unc.edu:/pub/Linux/kernel USA: tsx-11.mit.edu:/pub/linux/sources/system UK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernel Austria: ftp.univie.ac.at:/systems/linux/sunsite/kernel Germany: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus Germany: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus France: ftp.ibp.fr:/pub/linux/sources/system/patches Australia: sunsite.anu.edu.au:/pub/linux/kernel В общем зеркало сервера sunsite.unc.edu является хорошим местом, где можно взять исходные тексты ядра. Файл /pub/Linux/MIRRORS содержит список известных серверов-зеркал. Если у вас нет доступа к ftp, то список систем BBS, которые распространяют linux периодически посылается в группу comp.os.linux.announce; постарайтесь получить его. Если вы ищете общую информацию о Linux и его дистрибутивах, то посмотрите на http://www.linux.org. 33..22.. РРаассппааккооввккаа ииссххоодднныыхх ттееккссттоовв Войдите в систему как администратор или выполните команду su, и перейдите в директорию /usr/src.Если вы устанавливали исходные тексты ядра при установке linux (как делает большинство), то том у вас уже есть директория названная `linux', которая содержит полное дерево устаревших исходных текстов. Если у вас есть свободное дисковое пространство, то вы можете сохранить эту директорию. Хорошая идея -- определить какая версия ядра запущена и соответственно переименовать директорию. Команда `uname -r' выдает номер текущей версии ядра. Поэтому, если команда `uname -r' выдала `1.0.9', то вы должны переименовать (с помощью `mv') `linux' в `linux-1.0.9'. Если вы не чувствуете, что поступаете опрометчиво, то просто сотрите всю директорию. В любом случае убедитесь, что никакой директории `linux' в /usr/src до распаковки полного исходного кода ядра. Теперь распакуйте в /usr/src исходные тексты, пользуясь командой `tar zxpvf linux-x.y.z.tar.gz' (если вы получили просто файл .tar без расширения .gz на конце, то работает команда `tar xpvf linux- x.y.z.tar'). Содержимое архива будет распаковано. После окончания процесса, будет существовать новая директория `linux' в /usr/src. Перейдите linux и посмотрите файл README. Там будет раздел с заголовком `INSTALLING the kernel (Установка ядра)'. Выполните соответствующие инструкции -- символические ссылки должны быть на своем месте, удалите старые .o файлы, и т.п. 33..33.. ННаассттррооййккаа яяддрраа ЗЗааммееччааннииее: Некоторое из этого являются повторенниями/пояснениями подобного раздела файла README поставляемого Linus. Команда `make config' выполненная в /usr/src/linux запускает скрипт настройки, которая задает вам много вопросов. Она требует наличия bash, так что проверьте что bash находятся в /bin/bash, /bin/sh, или $BASH. Существуют некоторые альтернативы команде `make config' и вы можете найти их более удобными и легкими для использования. Те, кто работает в X могут попробовать `make xconfig', если у вас установлен Tk (`click-o-rama' - Nat). `make menuconfig' -- это для тех, у кого установлен (n)curses и предпочитает текстовые меню. Эти интерфейсы имеют одно явное преимущество: если вы сделали неправильный выбор в течении настройки, то очень легко вернуться и исправить ее. Теперь вы готовы отвечать на вопросы, обычно ответы выглядят как `y' (да) или `n' (нет). Драйвера устройств обычно имеют опцию `m'. Это означает ``module (модуль)'', обозначая, что система будет компилировать этот драйвер, но не вставит его прямо в ядро, а сделает загружаемым модулем. Более комично эта опция описывается как ``maybe (может быть)''. Некоторые более ясные и некритичные опции здесь не описаны; смотрите раздел ``Другие опции настройки'' для их краткого описания. В версиях 2.0.x и более поздних, существует опция `?', которая обеспечивает краткое описание параметра настройки. Эта информация скорее всего наиболее свежая. 33..33..11.. ЭЭммуулляяцциияя ммааттееммааттииччеессккиихх ффууннккцциийй яяддрроомм Если у вас нет математического сопроцессора (у вас голый 386 или 486SX), то вы должны ответить `y' на этот вопрос. Если у вас есть сопроцессор и вы все равно ответили `y', то не беспокойтесь -- сопроцессор все рано будет использоваться, а эмуляция будет проигнорирована. Единственное следствие этого в том, что ядро будет больше (расход ОЗУ). Я упоминал о том, что эмуляция очень медлена; хотя это не очень часто влияет, но все равно вспомните это, если столкнетесь с малой производительностью системы X-windos. 33..33..22.. ППооддддеерржжккаа ооббыыччнныыхх ((MMFFMM//RRLLLL)) ддииссккоовв ии ддииссккоовв//ccddrroomm IIDDEE Вам вероятно необходима эта поддержка; это означает, что ядро будет поддерживать стандартные жесткие диски PC, которые имеет большинство людей. Этот драйвер не включает поддержку SCSI дисков; их выбор идет далее в настройке. Затем у вас спросят о драйверах ``old disk-only (только старых дисков)'' и ``new IDE (новых IDE)''. Вы захотите выбрать один из них; основное отличие в том, что старые диски поддерживают только два диска на одном интерфейсе, а новые поддерживают вторичный (secondary) интерфейс и накопители IDE/ATAPI cdrom. Новый драйвер на 4k больше старого и также предположительно ``улучшен'', убирая некоторое количество ошибок, он может улучшить производительность вашего диска, особенно если у вас новое оборудование (типа EIDE). 33..33..33.. ППооддддеерржжккаа ссееттии В принципе вы должны ответить `y', если ваша машина подключена к сети, такой как internet, или вы хотите использовать SLIP, PPP, term и т.п. для dial up доступа к internet. Однако много пакетов (таких как оконная система X) требует поддержку сети, даже если вы не подключены ни к какой сети, вы должны сказать `y'. Позже у вас спросят, хотите ли вы поддержку TCP/IP; далее скажите `y', если вы абсолютно уверены в своем выборе. 33..33..44.. ООггррааннииччииттьь ппааммяяттьь ддоо ммееннееее 1166MMBB Существуют работающие с ошибками контролеры DMA на машинах с процессором 386, которые имеют проблемы с адресацией больше 16 Мб ОЗУ; вы можете ответить `y' в случае (редком) если у вас такой контроллер. 33..33..55.. SSyysstteemm VV IIPPCC Одно из лучших определений IPC (Interprocess Communication, Межпроцессного сообщения) данов в глоссарии книги по Perl. Не удивительно, что некоторые программисты на Perl используют этот механизм чтобы позволить процессу общаться с другими процессами, так же как и другие пакеты (самый заметный из них это DOOM), так что ответ n не является хорошей идеей, пока вы не будете точно уверены в том, что вы делаете. 33..33..66.. ТТиипп ппррооццеессссоорраа ((338866,, 448866,, PPeennttiiuumm,, PPPPrroo)) (в старых ядрах: используйте флаг -m486 для оптимизации для процессора 486) Традиционно, это делает некоторую оптимизацию для выбранного процессора; ядра работают быстрее, но ядро может быть несколько больше. В новых ядрах, это однако больше не является правдой, так что вы должны ввести процессор для которого вы компилируете ядро. Ядро для ``386'' будет работать на всех машинах. 33..33..77.. ППооддддеерржжккаа SSCCSSII Если у вас есть устройства SCSI, то ответьте `y'. У вас запросят дополнительную информацию, такую как поддержку CD-ROM, дисков, и какой тип адаптера SCSI у вас имеется. Смотрите SCSI-HOWTO для дополнительной информации. 33..33..88.. ППооддддеерржжккаа ссееттееввыыхх ууссттррооййссттвв Если у вас есть сетевая карта, или вы хотите использовать SLIP, PPP, или адаптер параллельного порта для подключения к Internet, то ответьте `y'. Скрипт настройки запросит у вас тип карты и какие протоколы вы хотите использовать. 33..33..99.. ФФааййллооввыыее ссииссттееммыы Затем настроечный скрипт запросит у вас поддержку для каких файловых систем вы хотите иметь в своей системе: Стандартная (minix) - Более новые дистрибутивы не создают файловые системы minix, и много людей не используют ее, но все равно хорошая идея настроить ее. Некоторые программы с ``дисками для восстановления (rescue disk)'' используют ее и все еще много гибких дисков могут использовать файловую систему minix, поскольку файловая система minix менее мучительная для использования на гибких дисках. Extended fs - это была первая версия расширенной файловой системы, которая сейчас не является широко используемой. Если вы не знаете точно, что она вам нужна и сомневаетесь, то скорее всего она вам не нужна. Second extended - эта файловая система широко используется в новых дистрибутивах. У вас скорее всего она есть и вам нужно ответить `y'. файловая система xiafs - одно время она не была необычно, но во время написания этого документа я не знал никого использующего эту файловую систему. msdos - если вы хотите использовать разделы вашего жесткого диска с MS-DOS, или монтировать гибкие диски, отформатированные под MS-DOS, то ответьте `y'. umsdos - эта файловая система расширяет возможности файловой системы MS-DOS обычными Unix-подобными возможностями, такими как длинные имена. Это не является полезным для людей (таких как я), кто ``не работает в DOS.'' /proc - одна из величайших вещей со времен изобретения порошкового молока (я так предполагаю, идея была бесстыдно украдена у Bell Labs). Она не создает файловую систему proc на диске; она является интерфейсом в виде файловой системы к ядру и процессам. Много программ, выдающих список процессов (таких как `ps') используют ее. Как нибудь попробуйте выполнить `cat /proc/meminfo' или `cat /proc/devices'. Некоторые командные процессоры (в частности rc) используют /proc/self/fd (известный как /dev/fd в других системах) для ввода/вывода. Вы должны почти всегда ответить `y' на этот вопрос; много важных утилит для linux зависят от этого выбора. NFS - если ваша машина работает в сети и вы хотите использовать файловые системы находящиеся на других машинах с помощью NFS, то ответьте `y'. ISO9660 - имеется на большинстве CD-ROM. Если у вас есть привод CD-ROM и вы хотите использовать его в Linux, то ответьте `y'. OS/2 HPFS - во время написания работает как файловая система только для чтения для OS/2 HPFS. System V и Coherent - для разделов машин с System V и Coherent (это другие варианты Unix для PC). 33..33..99..11.. ННоо яя ннее ззннааюю ккааккииее ффааййллооввыыее ссииссттееммыы ммннее ннуужжнныы!! Хорошо, наберите команду `mount'. Ее вывод будет выглядеть примерно так: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) Посмотрите на каждую строку; слово идущее за словом `type (тип)' является типом файловой системы. В моем примере мои файловые системы / и /usr являются файловыми системами типа second extended, я использую /proc, и есть гибкий диск смонтированный используя файловую систему msdos. Вы можете попробовать выполнить `cat /proc/filesystems', если у вас в настоящее время разрешено использование /proc; эта команда перечислит файловые системы, поддержку которых имеет ваше ядро. Настройка редко используемых, не критических файловых систем может вызвать раздувание вашего ядра; смотрите раздел о модулях чтобы избежать этого и раздел ``Ловушки'' о том, почему раздувшееся ядро является нежелательным. 33..33..1100.. ССииммввооллььнныыее ууссттррооййссттвваа В этом разделе вы выбираете драйвера для вашего принтера (параллельного принтера), шинной мыши, мыши для PS/2 (многие notebook используют протокол мыши PS/2 для своих встроенных трекболов), некоторые ленточные накопители и другие такие же ``символьные'' устройства. Ответьте `y' где необходимо. Замечание: Selection это программа, которая позволяет вам использовать мышь вне системы X window для вырезания и вставки между виртуальными консолями. Она работает довольно хорошо, если у вас мышь для последовательного порта, потому-что она хорошо работает с X, но вам необходимо выполнить некоторые действия, для того чтобы работали другие типы мышей. Поддержка Selection одно время была опцией настройки, но сейчас она является стандартом. Замечание 2: Сейчас Selection считается устаревшей. Имя новой программы ``gpm''. Она может делать более фантастические вещи, такие как трансляцию протокола мыши, работать с несколькими мышами, .. 33..33..1111.. ЗЗввууккооввыыее ккааррттыы если вы чувствуете огромное желание слышать рявканье biff, то ответьте `y', и далее другая программа настройки будет скомпилирована и будет задавать вам вопросы о вашей звуковой карте. (Примечание о настройке звуковой карты: когда программа спросит у вас устанавливать ли полную версию драйвера, то ответьте `n' и сохраните некоторое количество памяти в ядре выбором только необходимых возможностей драйвера). Я сильно рекомендую вам посмотреть в Sound-HOWTO для более детальной информации о поддержке звука, если у вас есть звуковая карта. 33..33..1122.. ДДррууггииее ооппццииии ннаассттррооййккии Не все опции настройки перечислены здесь потому-что они слишком часто меняются или являются очевидными (например, поддержка 3Com 3C509 для компиляции драйвера для данной карты ethernet). Существует довольно полный список всех опций (плюс способ поместить их в скрипт Configure), который собран Axel Boldt (axel@uni-paderborn.de) по следующему адресу: http://math-www.uni-paderborn.de/~axel/config_help.html или через анонимный FTP по адресу: ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.yz.tgz где x.yz это номер версии. Для последних ядер (2.0.x и более поздних), этот список был интегрирован в дерево исходных текстов. 33..33..1133.. РРааббооттаа ннаадд яяддрроомм ((KKeerrnneell hhaacckkiinngg)) Из Linus README: действие опции настройки ``kernel hacking'' обычно проявляется в более большом или медленном ядре (или оба симптома), и может даже сделать ядро менее стабильным из-за настройки некоторых подпрограмм на попытку активно сломать плохой код, чтобы найти проблемы с ядром (kmalloc()). Таким образом вам скорее всего надо ответить `n' на этот вопрос для ``production'' ядер. 33..44.. ЧЧттоо ттееппееррьь?? ((MMaakkeeffiillee)) После того как make config выдаст сообщение о том, что ваше ядро было настроено, вы можете ``проверить (настроить) основной Makefile для дополнительных настроек'', и т.п. Теперь вы можете посмотреть в Makefile. Вам вероятно не понадобится изменять его, но вы не повредите его если посмотрите. Вы можете также изменить опции в нем с помощью команды `rdev' после того как поместите ядро на его место. 44.. ККооммппиилляяцциияя яяддрраа 44..11.. ООччииссттккаа ии ссооззддааннииее ззааввииссииммооссттеейй Когда настроечный скрипт закончит свою работу, он также скажет вам, чтобы вы выполнили `make dep' и (вероятно) `clean'. Так что выполните `make dep'. Он обеспечит, чтобы все зависимости, такие как файлы заголовков, находятся на месте. Эта процедура не длиться долго, если у вас не медленный компьютер. Для более старых версий ядер, при окончании вы должны выполнить `make clean'. Эта процедура удаляет все объектные файлы и некоторые другие вещи оставшиеся от предыдущей компиляции. В любом случае, _н_е забывайте выполнить этот шаг до начала перекомпиляции ядра. 44..22.. ВВррееммяя ккооммппиилляяццииии После выполнения dep и clean, вы можете выполнять `make zImage' или `make zdisk' (эта часть процесса занимает длительное время). `make zImage' скомпилирует ядро и оставит в директории arch/i386/boot файл названный `zImage' (среди других вещей). Это новое сжатое ядро. `make zdisk' делает тоже самое, но также помещает новый файл zImage на гибкий диск, который вы должны вставить в устройство ``A:''. `zdisk' является довольно удобным для тестирования новых ядер; если оно не загружается (или просто работает неправильно), то просто вытащите дискету из дисковода и загрузитесь со старым ядром. Это может быть также удобным в том случае, если вы случайно удалили ядро (или сделали что-нибудь подобное по своему разрушительному действию). Вы также можете использовать его для установки новых систем, в том случае когда вы просто делаете дамп с одного диска на другой(``это все и больше! Теперь, сколько вы могли бы купить?''). Все, даже сравнительно недавние ядра являются сжатыми, поэтому они имеют букву `z' в начале имени. Сжатое ядро автоматически разжимается при выполнении. 44..33.. ДДррууггииее ввеещщии,, ммоожжнноо ссддееллааттьь сс ппооммоощщььюю ````mmaakkee'''' `make mrproper' выполнит более интенсивную очистку дерева исходных текстов. Иногда она является необходимой; вы можете выполнять эту команду после каждого наложения заплаток. `make mrproper' также удалит ваши файлы конфигурации, так что вы можете захотеть сохранить резервную копию вашего файла (.config), если вы считаете его ценным. `make oldconfig' попытается настроить ваше ядро используя старый файл настроек; он проделает путь по процессу конфигурации `make config' вместо вас. Если у вас нет скомпилированного ядра или у вас нет старого файла настроек, то вам скорее всего не надо делать этой операции, поскольку вы вероятно захотите изменить настройки по умолчанию. Смотрите раздел о модулях для описания операции `make modules'. 44..44.. УУссттааннооввккаа яяддрраа После того как вы установили, что новое ядро работает так как вам надо, наступает время его установки. Большинство людей для этого использует LILO (Загрузчик Linux). Команда `make zlilo' установит новое ядро, запустит для него LILO, и все будет готово к перезагрузке, НО ТОЛЬКО если lilo настроено правильно в вашей системе: ядро располагается в файле /vmlinuz, lilo находится в директории /sbin, и ваш конфигурационный файл lilo (/etc/lilo.conf) отражает эти условия. Иначе вам придется использовать LILO непосредственно. Это довольно легкий в установке и в работе пакет, но он имеет тенденцию вводить в замешательство людей своим конфигурационным файлом. Посмотрите конфигурационный файл (либо /etc/lilo/config для старых версий либо /etc/lilo.conf для более новых версий), и посмотрите текущие настройки. Конфигурационный файл выглядит примерно так: image = /vmlinuz label = Linux root = /dev/hda1 ... `image =' указывает на установленное в настоящее время ядро. Большинство людей используют /vmlinuz. `label' используется для определения какое ядро или операционная система будет загружаться, и `root' это корневой раздел отдельной операционной системы. Сделайте резервную копию вашего ядра и скопируйте только что сделанное ядро на его место (вы должны выполнить команду `cp zImage /vmlinuz' если вы используете `/vmlinuz'). Затем перезапустите lilo -- на более новых системах вы можете просто запустить `lilo', но на старых вы должны выполнить /etc/lilo/install или даже /etc/lilo/lilo -C /etc/lilo/config. Если вы хотите знать больше о настройке LILO или у вас его нет, то возьмите самую новую его версию с вашего любимого сервера ftp и следуйте инструкциям. Для загрузки одного из ваших старых ядер на жестком диске (еще один способ обезопасить себя при использовании нового ядра), скопируйте нижеприведенные строки (и включите) `image = xxx' в файл конфигурации LILO в конце файла, и измените `image = xxx' на `image = yyy', где `yyy' это полный путь вашего старого ядра. Затем измените `label = zzz' на `label = linux-backup' и перезапустите lilo. Вам может быть будет необходимо поместить строку в конфигурационный файл, которая выглядит так `delay=x', где x это количество десятых долей секунды, на которое LILO задержится до загрузки, так что вы можете прервать его выполнение (например при помощи клавиши shift), и набрать метку имя сохраненного образа загрузки (в случае, если произойдут разные неприятные вещи). 55.. ИИссппррааввллееннииее яяддрраа сс ппооммоощщььюю ззааппллааттоокк 55..11.. ННааллоожжееннииее ззааппллааттоокк Накладывающиеся обновления ядра распространяются в виде заплаток. Например, если у вас версия 1.1.45, и вас оповестили, что выпущен `patch46.gz' для него, это означает, что вы можете обновить ядро до версии 1.1.46 приложив эту заплатку. Вы можете захотеть сначала сделать резервную копию дерева исходных текстов ядра (сначала `make clean' и затем `cd /usr/src; tar zcvf old-tree.tar.gz linux' создаст для сжатый архивный файл с резервной копией). Так, продолжая пример, приведенный выше, предположим, что у вас файл `patch46.gz' расположен в директории /usr/src. Выполним cd в /usr/src и выполним `zcat patch46.gz | patch -p0' (или `patch -p0 < patch46' если эта заплатка не является сжатой). Вы увидите некоторые вещи мелькающие на экране, которые сообщают вам, что программа пытается приложить куски заплатки на нужные файлы и информацию о том, удачна данная операция или нет. Обычно этот процесс идет слишком быстро, чтобы вы могли прочитать и вы можете не быть уверенными, удачна эта операция или нет, в этом случае вы можете использовать опцию -s для программы patch, которая заставляет patch выдавать только сообщение об ошибках (вы не получите сообщения ``эй, мой компьютер действительно что-то делает!'', но если вы это предпочитаете..). Для того, чтобы взглянуть на то какие разделы не прошли гладко, перейдите в директорию /usr/src/linux и посмотрите файлы с расширением .rej. Некоторые версии программы patch (старые версии, которые могли быть скомпилированы на более худших файловых системах) оставляют отклоненные файлы с расширением #. вы можете использовать команду `find' для того чтобы найти эти файлы: find . -name '*.rej' -print эта команда печатает список всех файлов, которые находятся в текущей директории и ее поддиректориях и имеют расширение .rej на стандартный вывод. если все прошло правильно, то выполните команды `make clean', `config', и `dep' как описано в разделах 3 и 4. Существует еще несколько опций для команды patch. Как было отмечено выше, patch -s запретит вывод всех сообщений за исключением сообщений об ошибках. Если вы храните ваше ядро где-то в другом месте, отличном от /usr/src/linux, то выполнение patch -p1 (в этой директории) правильно выставит заплатку. Другие опции команды patch хорошо описаны в ее справочной странице. 55..22.. ЕЕссллии ччттоо--ттоо ннееппррааввииллььнноо (Замечание: этот раздел относится к большинству старых ядер). Наиболее частая проблема возникает когда заплатка модифицирует файл, называемый `config.in' и он не выглядит достаточно правильно, потому-что вы изменили его опции для вашей машины. Это было исправлено, но эта проблема может возникнуть со старыми выпусками ядра. Для исправления этой проблемы посмотрите в файл config.in.rej, и посмотрите что осталось сделать оригинальной заплатке. Изменения обычно обозначаются символами `+' и `-' в начале строки. Посмотрите строки, которые окружают эти символы и запомните где установлено `y' или `n'. Теперь отредактируйте файл config.in, и измените `y' на `n' и `n' на `y' где это нужно. Выполните команду patch -p0 < config.in.rej и если она выдала, что операция проведена удачно (без ошибок), то вы можете продолжать работу выполняя настройку ядра и его компиляцию. Файл config.in.rej все равно останется, но вы можете удалить его. если у вас все равно существуют проблемы, то это значит, что вы могли установить заплатку не с тем номером. Если программа patch сообщает `previously applied patch detected: Assume -R? (обнаружена предыдущая заплатка: использовать опцию -R?', то вы скорее всего пытаетесь приложить заплатку с номером меньшим, чем номер версии вашего ядра; если вы ответите `y', то программа попытается вернуть ваши исходные тексты к предыдущей версии, и скорее всего это вызовет ошибку; поэтому вам понадобится установить заново все дерево исходных текстов (что может быть не такой уж плохой идеей). Для того чтобы убрать изменения внесенные заплаткой, используйте команду `patch -R' с оригинальной заплаткой. Лучше всего в случае, когда заплатки делают что-то неправильно, начать применять ее с новым деревом исходных текстов (например извлеченным из одного из файлов linux-x.y.z.tar.gz), и запустит процесс заново. 55..33.. ИИззббааввлляяееммссяя оотт ффааййллоовв ..oorriigg После всего нескольких заплаток у вас накопится куча файлов с расширением .orig. Например одно ядро 1.1.51, которое было последний раз почищено при версии 1.1.48. Удаление .orig файлов сохранило примерно половину мегабайта дисковой памяти. find . -name '*.orig' -exec rm -f {} ';' эта команда позаботится о вас. Версии программы patch, которые используют знак # для отклоненных файлов используют знак тильды ~ вместо .orig. Существует лучший способ избавится от .orig файлов, который зависит от GNU программы xargs: find . -name '*.orig' | xargs rm или ``довольно безопасный, но несколько более многословный'' метод: find . -name '*.orig' -print0 | xargs --null rm -- 55..44.. ДДррууггииее ззааппллааттккии Также существуют другие заплатки (я буду назвать их ``нестандартными''), кроме поставляемых Linus. Если вы накладываете такие заплатки, то заплатки от Linus могут работать неправильно и вы должны будете либо убрать их, изменить исходные тексты или заплатку, либо установить новое дерево исходных текстов, или выполнить комбинацию описанных действий. Это может быть очень расстраивающим, так что если вы не хотите изменять исходные тексты (с возможно плохим результатом), то удалите нестандартные заплатки до приложения заплаток полученных от Linus, или просто установите новое дерево исходных текстов. Затем вы можете посмотреть работают ли нестандартные заплатки. Если они не работают, то вы либо задержались с использованием старого ядра, поиграйтесь с исходными текстами или измените заплатку, либо просто дождитесь выхода новой версии нестандартной заплатки. Какие существуют заплатки не входящие в стандартный дистрибутив? Вы вероятно слышали о них. Я использую такую заплатку для того, чтобы курсор на моей консоли не мигал, я ненавижу мигающие курсоры (Эта заплатка часто обновляется (или по крайней мере обновлялась) по мере выпуска новых версий ядра. Для большинства новых устройств драйвера разрабатываются как загружаемые модули и частота использования нестандартных заплаток значительно уменьшается. 66.. ДДооппооллннииттееллььнныыее ппааккееттыы Ваше ядро имеет много возможностей, которые не объясняются в исходных текстах ядра; эти возможности обычно используются через использование внешних пакетов. Некоторые из наиболее общих пакетов перечислены здесь. 66..11.. kkbbdd Консоль linux вероятно имеет больше возможностей, чем она заслуживает. Среди них возможность переключения шрифтов, изменения раскладки клавиатуры, переключение видеорежимов (в более новых ядрах) и т.п. Пакет kbd имеет программы, которые позволяют сделать все это, и в дополнение много шрифтов и раскладок клавиатуры для большинства клавиатур и он доступен с тех же самых серверов, которые распространяют исходные тексты ядра. 66..22.. uuttiill--lliinnuuxx Rik Faith (faith@cs.unc.edu) собрал вместе большой набор утилит для linux, который по странному совпадению называется util-linux. В настоящее время этот набор сопровождается Nicolai Langfeldt (util- linux@math.uio.no). Он доступен по анонимному ftp с sunsite.unc.edu в директории /pub/Linux/system/misc, он содержит такие программы как setterm, rdev, и ctrlaltdel, которые имеют отношение к ядру. Как сказал Rik, _н_е _у_с_т_а_н_а_в_л_и_в_а_й_т_е _и_х _б_е_з _р_а_з_д_у_м_и_й_; вам не нужно устанавливать весь пакет, и у вас могут возникнуть серьезные проблемы, если вы сделаете это. 66..33.. hhddppaarrmm Как и много других пакетов, раньше это был пакет из заплатки на ядро и программ поддержки. Сейчас эти заплатки включены в официальное дерево исходных текстов ядра и программы для оптимизации и настройки вашего жесткого диска поставляются отдельно. 66..44.. ggppmm gpm это обозначение для мыши общего назначения (general purpose mouse). Эта программа позволяет вам вырезать и вставлять текст между виртуальными консолями, а также делать другие действия с большим количеством мышей разных типов. 77.. ННееккооттооррыыее ллооввуушшккии 77..11.. mmaakkee cclleeaann Если новое ядро делает какие-то странные вещи после текущего его обновления, то есть большая вероятность, что вы забыли выполнить make clean до компиляции нового ядра. Симптомы могут быть любыми от полного краха вашей системы, странных проблем с вводом/выводом до малой производительности. Убедитесь также, что вы сделали make dep. 77..22.. ББооллььшшииее ииллии ммееддллеенннныыее яяддрраа Если ваше ядро поглощает достаточное количество памяти, слишком большое и/или просто долго компилирует, даже когда вы заставили ваш новый 786DX6/440 работать с ним, то вы вероятно получили набор ненужных вам вещей (драйверов устройств, файловых систем и т.п.). Если вы не используете их, то не настраивайте их, потому, что это занимает память машины. Наиболее очевидный симптом раздутия ядра, это интенсивное свапирование памяти на диск и с диска; если ваш диск создает шум и он не один из старых винчестеров Fujitsu Eagles, чей звук напоминал звук выключаемого двигателя реактивного самолета, то посмотрите в конфигурацию ядра. Вы можете узнать сколько оперативной памяти занимает ядро взяв общее количество памяти на машине и вычтя из него количество ``общей памяти'' в файле /proc/meminfo или вывод команды `free'. Вы можете также определить это выполнив команду `dmesg' (или посмотрев в файл протокола ядра, если он есть в вашей системе). Там будет строка, которая выглядит примерно так: Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data) Моя машина с процессором 386 (которая была настроена с меньшим количество опций) выдает следующее: Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data) Если у вас просто получается большое ядро, но система не позволяет вам это, то вы можете попытаться выполнить `make bzimage'. Вам также может понадобиться установить новую версию LILO чтобы сделать это. 77..33.. ЯЯддрроо ннее ккооммппииллииррууееттссяя Если ядро не компилируется, то скорее всего произошел сбой при накладывании заплатки или ваши исходные тексты были повреждены каким-либо образом. У вас также может быть неправильная версия gcc или также может быть повреждена (например включаемые файлы могут быть с ошибками). Убедитесь, что символические ссылки, которые описывает Linus в файле README установлены правильно. В общем, если стандартное ядро не компилируется, то у час что-то серьезное с системой и вероятно необходима переустановка некоторых утилит. или возможно вы компилируете ядро 1.2.x при помощи ELF компилятора (gcc 2.6.3 и выше). Если вы получили набор ошибок типа so-and-so undefined в течении компиляции, то скорее всего у вас такая проблема. Исправление в большинстве случаев очень просто. Добавьте эти строки в начало файла arch/i386/Makefile: AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include Затем заново выполните make dep и zImage. В редких случаях gcc может не работать из-за аппаратных проблем. Сообщение об ошибке будет примерно такое ``xxx exited with signal 15'' и это в общем будет выглядеть очень загадочно. Я вероятно не должен был здесь это упоминать, за исключением того что это со мной однажды случилось -- у меня была испорченная кэш-память и компилятор время от времени не работал. Попробуйте сначала переставить gcc, если у вас есть такая проблема. ВЫ должны стать подозрительным только если ваше ядро нормально компилируется с отключенным внешним кэшем, с уменьшенным количество оперативной памяти и т.п. Это имеет склонность беспокоить людей, когда они предполагают, что их оборудование не в порядке. Хорошо, я не буду делать это. Об этом существует FAQ -- он находится на http://www.bitwizard.nl/sig11/. 77..44.. ННее ввиидднноо ччттооббыы ннооввааяя ввееррссиияя яяддрраа ггррууззииллаассьь Вы не запустили LILO, или он не настроен правильно. Одна вещь которая случилось однажды со мной это была проблема в файле конфигурации; там говорилось `boot=/dev/hda1' вместо `boot=/dev/hda' (Это может быть раздражающим в начале, но когда вы сделаете рабочий файл конфигурации, то вам не нужно будет его больше изменять). 77..55.. ВВыы ззааббыыллии ззааппууссттииттьь LLIILLOO,, ииллии ссииссттееммаа ппррооссттоо ннее ггррууззииттссяя Оххх! Лучшая вещь, которую вы можете сделать в этом случае это загрузиться с дискеты подготовить другой загрузочный диск (такой какой должна сделать команда `make zdisk'). Вам необходимо знать где находится ваша корневая файловая система (/) и какой тип она имеет (например second extended, minix). В нижеприведенном примере, вам также необходимо знать на какой файловой системе находится дерево исходных текстов /usr/src/linux, ее тип и где она обычно монтируется. В следующем примере, / находится на /dev/hda1, а файловая система, которая содержит /usr/src/linux находится на /dev/hda3, обычно смонтированной как /usr. Обе относятся к типу second extended файловых систем. Рабочее ядро находится в директории /usr/src/linux/arch/i386/boot и называется zImage. Идея заключается в том, что если есть работающее ядро, то можно использовать его для создания нового загрузочного гибкого диска. Другой вариант, который может работать лучше (а может и не работать, это зависит от конкретного метода которым вы сломали свою систему) обсуждается дальше после примера. С начала загрузимся с комбинации загрузочного/корневого дисков или спасательного (rescue) диска, и смонтируем файловую систему, которая содержит работающее ядро: mkdir /mnt mount -t ext2 /dev/hda3 /mnt Если mkdir сообщает вам, что директория уже существует, то просто проигнорируйте это сообщение. Затем перейдите в ту директорию, где находится работающее ядро. Заметим, что /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot Поместите отформатированную дискету в привод ``A:'' (только не загрузочную дискету и не дискету с корневой файловой системой!), и перебросьте ядро на дискету и настройте его на вашу корневую файловую систему: cd /mnt/src/linux/arch/i386/boot dd if=zImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1 перейдите в / и отмонтируйте обычную файловую систему /usr: cd / umount /mnt Теперь вы должны иметь возможность перезагрузить ваш компьютер как обычно с созданной дискеты. Не забудьте перезапустить lilo (или выполнить то, что вы сделали не правильно) после перезагрузки! Как было упомянуто выше, существует другая общая альтернатива. Если у вас к счастью имеется рабочее ядро находящееся на разделе / (например /vmlinuz), то вы можете использовать его для загрузочной дискеты. Предполагая все вышеприведенные условия, и что наше ядро находится в /vmlinuz, то просто сделайте изменения в вышеприведенном примере: измените /dev/hda3 на /dev/hda1 (корневая файловая система), /mnt/src/linux на /mnt, и if=zImage на if=vmlinuz. Замечание о том как получить доступ к /mnt/src/linux может быть проигнорировано. Используя LILO с большими дисками (больше чем 1024 цилиндра) может вызвать проблемы. Смотрите LILO mini-HOWTO или документацию для помощи в этом случае. 77..66.. ЯЯддрроо ссооооббщщааеетт ``wwaarrnniinngg:: bbddfflluusshh nnoott rruunnnniinngg ((ппррееддууппрреежжддееннииее bbddfflluusshh ннее ззааппуущщеенн))'' Это может быть серьезной проблемой. Начиная с ядер после 1.0 (примерно 20 апреля 1994), программа названная `update', которая периодически сохраняла буфера файловой системы была изменена/заменена. Возьмите исходные тексты программы `bdflush' (вы должны найти их там где вы брали исходные тексты ядра), и установите эту программу (вы вероятно захотите запустить старое ядро пока вы делаете это). Эта программа сама установится как `update' и после перезагрузки, новое ядро не будет больше выражать недовольство ее отсутствием. 77..77.. ВВыыввооддяяттссяя ссооооббщщеенниияя оо ннееооппррееддееллеенннныыхх ссииммввооллаахх ии ннее ккооммппииллииррууееттссяя У вас вероятнее всего ELF компилятор (gcc 2.6.3 и выше) и исходные тексты ядра 1.2.x (или более раннего). Обычное исправление заключается в добавлении этих трех строк в начало файла arch/i386/Makefile: AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include Это заставит выполнять компиляцию ядра 1.2.x с библиотеками a.out. 77..88.. ЯЯ ннее ммооггуу ззаассттааввииттьь ррааббооттааттьь ммоойй ппррииввоодд IIDDEE//AATTAAPPII CCDD--RROOMM Достаточно странно, но много людей не могут заставить работать свои устройства ATAPI, потому что существуют некоторые вещи, который могут быть сделаны неправильно. Если ваш CD-ROM единственное устройство на отдельном интерфейсе IDE, то оно должно быть выставлено как ``master'' или ``single''. Предположительно это наиболее общая ошибка. Creative Labs (для некоторых) поместил интерфейс IDE на свои звуковые карты. Однако это приводит к интересной проблеме, заключающейся в том, что некоторые люди имеют только один интерфейс, много имеют два IDE интерфейса, встроенных в материнские платы (обычно на IRQ15), так что общая практика в том, чтобы сделать интерфейс на soundblaster третим IDE портом (IRQ11). Это вызывает проблему с linux в том, что в версиях 1.2.x не поддерживается третий IDE интерфейс (эта поддержка началась где-то в серии 1.3.x, но это было для разработчиков, помните об этом, и не был автоматической пробы). Для того чтобы заставить это работать у вас есть несколько возможностей. Если вы уже имеете второй IDE порт, то существует вероятность, что вы не используете его или у вас не два устройства на нем. Уберите привод ATAPI со звуковой карты и поместите его на второй интерфейс. Затем вы можете запретить интерфейс на звуковой карте, что сохранит вам IRQ. Если у вас нет второго интерфейса, то переключите интерфейс на звуковой карте (только не часть работающую со звуком) на использование IRQ15, как второй интерфейс. Это должно работать. Если по некоторым причинам ваше устройство должно быть на так называемом ``третьем'' интерфейсе, или в случае других проблем возьмите ядро версии 1.3.x (например ядро 1.3.57 имеет такую поддержку), и прочитайте файл drivers/block/README.ide. Там существует гораздо больше информации. 77..99.. ЯЯддрроо ссооооббщщааеетт ссттрраанннныыее ввеещщии ообб ууссттааррееввшшиихх ззааппррооссаахх ммаарршшррууттииззааццииии Возьмите новую версию программы route и любую другую программу, которая выполняет манипуляцию маршрутизацией. /usr/include/linux/route.h (который является файлом в /usr/src/linux) был изменен. 77..1100.. FFiirreewwaalllliinngg ннее ррааббооттааеетт вв 11..22..00 Обновите ядро по крайней мере до версии 1.2.1. 77..1111.. ооббррааззаа яяддрраа))'''' ````NNoott aa ccoommpprreesssseedd kkeerrnneell IImmaaggee ffiillee ((ННее яяввлляяееттссяя ффааййллоомм ссжжааттооггоо Не используйте файл vmlinux, созданный в /usr/src/linux как образ загрузки; Правильным образом загрузки является [..]/arch/i386/boot/zImage. 77..1122.. ППррооббллееммыы сс ккооннссооллььюю ппооссллее ооббннооввллеенниияя ддоо 11..33..xx Измените слово dumb на linux в записи для консоли в файле /etc/termcap. Вам также может понадобиться создать запись в terminfo. 77..1133.. ННее ммооггуу ссккооммппииллииррооввааттьь ннееккооттооррыыее ввеещщии ппооссллее ооббннооввллеенниияя яяддрраа Исходные тексты ядра linux включают некоторое количество заголовочных файлов (файлов, чьи имена заканчиваются на .h), на которые ссылаются стандартные заголовочные файлы в /usr/include. На них обычно ссылаются примерно так (где xyzzy.h должен быть чем-то в /usr/include/linux): #include Обычно существует ссылка, названная linux в /usr/include на директорию include/linux в исходных текстах вашего ядра (/usr/src/linux/include/linux в обычной системе). Если эта ссылка находится не там, или указывает на неправильное место, то некоторые вещи вообще не будут компилироваться. Если вы посчитали, что исходные тексты ядра занимают слишком много места на диске и удалили их, то это скорее всего вызовет проблему. Другая проблема может возникнуть при неправильных правах доступа на файлы; если ваш администратор установил umask в такое значение, которое не позволяет другим пользователям видеть его файлы по умолчанию, и вы разархивировали исходные тексты без опции p (сохранение прав доступа), то эти пользователи не смогут пользоваться компилятором C. Хотя вы могли бы воспользоваться командой chmod для исправления этого, но вероятно более легко заново разархивировать заголовочные файлы. Вы можете сделать это также, как и со всеми исходными текстами, но только с дополнительным аргументом: blah# tar zxvpf linux.x.y.z.tar.gz linux/include Замечание: ``make config'' заново создаст ссылки в /usr/src/linux, если они отсутствуют. 77..1144.. УУввееллииччееннииее ппррееддееллььнныыхх ззннааччеенниийй Следующие несколько показательных команд могут быть полезны для тех кто не знает как увеличить некоторые программные предельные значения The following few _e_x_a_m_p_l_e commands may be helpful to those wondering how to increase certain soft limits imposed by the kernel: echo 4096 > /proc/sys/kernel/file-max echo 12288 > /proc/sys/kernel/inode-max echo 300 400 500 > /proc/sys/vm/freepages 88.. ЗЗааммееччааннииее ддлляя ооббннооввллеенниияя ддоо ввееррссииии 22..00..xx Ядра версии 2.0.x внесли довольно много изменений в установке ядра. Файл Documentation/Changes в дереве исходных текстов ядра 2.0.x содержит информацию, которую вы должны знать когда обновляете до версии 2.0.x. вам скорее всего надо обновить несколько ключевых пакетов, таких как gcc, libc, и SysVInit, и возможно изменить некоторые системные файлы, так что ожидайте этого. Хотя не паникуйте. 99.. ММооддууллии Загружаемые модули ядра могут сохранить память и упростить настройку. Область применения модулей включает файловые системы, драйвера карт ethernet, драйверы ленточных накопителей и т.п. 99..11.. УУссттааннооввккаа ууттииллиитт ддлляя ррааббооттыы сс ммооддуулляяммии Утилиты для работы с модулями доступны от туда же откуда вы получили свое ядро, они называются modules-x.y.z.tar.gz; выберите самый большой номер x.y.z, который равен или ниже чем номер вашего текущего ядра. Распакуйте их с помощью команды `tar zxvf modules-x.y.z.tar.gz', перейдите в директорию, которую эта команда создала (modules-x.y.z), посмотрите файл README, и выполните приведенные в нем инструкции по установке (которые обычно являются очень простыми, такими как make install). Вы должны теперь получить программы insmod, rmmod, ksyms, lsmod, genksyms, modprobe, и depmod в директории /sbin. Если вы хотите, протестируйте полученные программы с помощью демонстрационного драйвера ``hw'' в insmod; для более детальной информации смотрите файл INSTALL, который находится в директории с исходными текстами. Команда insmod вставляет модуль в работающее ядро. Модули обычно имеют расширение .o; пример драйвера, упомянутый выше называется drv_hello.o, так для того чтобы вставить его, вы должны выполнить `insmod drv_hello.o'. Для того чтобы увидеть список загруженных модулей используйте команду lsmod. Ее вывод выглядит примерно так: blah# lsmod Module: #pages: Used by: drv_hello 1 `drv_hello' это имя модуля, он использует 1 страницу оперативной памяти (4k), и ни какие модули ядра не зависят от него на текущий момент. Для удаления этого модуля используйте команду `rmmod drv_hello'. Заметим, что rmmod требует _и_м_я _м_о_д_у_л_я_, а не имя файла; вы можете получить его из списка выдаваемого lsmod. Назначение других утилит для работы с модулями описано в их справочных страницах. 99..22.. ММооддууллии рраассппррооссттрраанняяееммыыее сс яяддрроомм В версии 2.0.30, почти все доступно как загружаемые модули. Для их использования сначала сначала убедитесь, что вы не настроили их вкомпилированными в ядро; то есть вы не ответили y в процессе выполнения `make config'. Скомпилируйте новое ядро и загрузитесь с ним. Затем снова перейдите в /usr/src/linux, и выполните `make modules'. это скомпилирует все модули, которые вы не указали при настройке ядра, и поместит ссылки на них в /usr/src/linux/modules. ВЫ можете использовать их прямо из этой директории, или выполните команду `make modules_install', которая установит модули в директорию /lib/modules/x.y.z, где x.y.z это версия ядра. Это может быть особенно полезным в использовании файловых систем. Вы можете нечасто использовать файловые системы minix или msdos. Например, если я сталкиваюсь с гибким диском с msdos, я должен сделать insmod /usr/src/linux/modules/msdos.o, и затем rmmod msdos, когда все закончено. Эта процедура сохраняет примерно 50k ОЗУ в ядре в течении нормальной работы. Маленькое замечание для использования файловой системы minix: вы должны _в_с_е_г_д_а настроить его прямо в ядро для использования в ``восстановительных (rescue)'' дисках. 1100.. ДДррууггииее ооппццииии ннаассттррооййккии Этот раздел содержит описания избранных опций настройки ядра (в make config), которые не перечислены в разделе конфигурации. Большинство драйверов устройств не перечислены. 1100..11.. ООббщщааяя ннаассттррооййккаа Normal floppy disk support (Поддержка обычных гибких дисков) - что и написано. Вы можете прочитать файл drivers/block/README.fd; это особенно важно для пользователей IBM Thinkpad. XT harddisk support (поддержка жестких дисков XT) - если вы хотите использовать 8-битные контроллеры XT, пылящиеся в углу. PCI bios support поддержка PCI bios) - если у вас имеются PCI устройства, то вы можете попробовать использовать эту опцию; будьте осторожны, поскольку некоторые старые материнские платы с поддержкой PCI могут не работать с этой опцией. Более детальную информацию о использовании шины PCI под linux вы можете найти в PCI-HOWTO. Kernel support for ELF binaries (поддержка ядром исполняемых файлов в формате ELF) - ELF это попытка позволить исполняемым файлам охватывать разные архитектуры и операционные системы; linux по видимому идет в этом направлении, так что вы вероятно захотите использовать эту опцию. Set version information on all symbols for modules (установка информации о версии на все символы для модулей) - в прошлом, модули ядра перекомпилировались с каждым новым ядром. Если вы ответите y, то станет возможным использование модулей скомпилированных для других версий ядра. Прочитайте файл README.modules для более подробной информации. 1100..22.. ССееттееввыыее ооппццииии Сетевые опции хорошо описаны в NET-3-HOWTO (или NET-какой-то-номер-HOWTO). 1111.. ССооввееттыы ии ппррииееммыы 1111..11.. ППееррееннааппррааввллееннииее ввыыввооддаа ккооммаанндд mmaakkee ииллии ppaattcchh Если вы хотите протоколировать действия команд `make' или `patch', то вы можете перенаправить вывод в файл. Сначала определите какой интерпретатор команд вы используете выполнив команду: `grep root /etc/passwd' и ищите строку, которая выглядит примерно так `/bin/csh'. Если вы используете sh или bash, то команда (command) 2>&1 | tee (output file) поместит копию вывода команды (command) в файл `(output file)'. Для csh или tcsh, используйте следующую последовательность (command) |& tee (output file) Для rc (Замечание: вы скорее всего не используете rc) это выглядит так: (command) >[2=1] | tee (output file) 1111..22.. УУссллооввннааяя ууссттааннооввккаа яяддрраа Вместо использования гибкого диска существует другой метод тестирования нового ядра без удаления старого. В отличии от многих других Unix-систем, LILO имеет возможность загружать ядро с любого места на диске (если у вас большой диск (500 MB или больше), то пожалуйста прочитайте документацию на LILO о том как это может вызвать проблемы). Итак, если вы добавите что-то похожее на следующие строки image = /usr/src/linux/arch/i386/boot/zImage label = new_kernel в конец вашего файла настроек LILO, то вы сможете выбрать запуск свежескомпилированного ядра без удаления старого /vmlinuz (конечно после предварительного запуска lilo). Самый легкий способ заставить LILO загрузить новое ядро - это нажать клавишу shift во время загрузки (когда на экран выводится сообщение LILO), это заставит программу загрузки выдать приглашение. В этом месте вы можете ввести название `new_kernel' для загрузки нового ядра. Если вы хотите хранить несколько исходных тексты разных ядер на своем компьютере одновременно (это займет достаточно много места на диске, будьте осторожны) то наиболее удобный способ называть их /usr/src/linux-x.y.z, где дерево исходных x.y.z это номер версии ядра. Вы можете ``выбирать'' дерево исходных текстов с помощью символической ссылки. например, команда `ln -sf linux-1.2.2 /usr/src/linux' должна сделать текущим дерево исходных текстов ядра версии 1.2.2. До создания символической ссылки убедитесь, что последний аргумент команды ln не является настоящей директорией (старая символическая ссылка это нормально); результат будут не такой какой вы ожидали. 1111..33.. ООббннооввллеенниияя яяддрраа Russell Nelson (nelson@crynwr.com) подводит итоги сделанных изменений в новых выпусках ядер. Они являются короткими и вы можете захотеть взглянуть на них до начала обновления ядра. Эти данные доступны через анонимный ftp с ftp.emlist.com в директории pub/kchanges или со следующего URL http://www.crynwr.com/kchanges 1122.. ДДррууггииее HHOOWWTTOO,, ккооттооррыыее ммооггуутт ббыыттьь ппооллееззнныыммии ╥ Sound-HOWTO: звуковые карты и утилиты ╥ SCSI-HOWTO: все о контроллерах и устройствах SCSI ╥ NET-2-HOWTO: работа с сетями ╥ PPP-HOWTO: в отдельности работа с PPP ╥ PCMCIA-HOWTO: о драйверах для вашего переносного компьютера (notebook) ╥ ELF-HOWTO: что такое ELF, преобразование.. ╥ Hardware-HOWTO: обзор поддерживаемого оборудования ╥ Module-HOWTO: более детально о модулях ядра ╥ Kerneld mini-HOWTO: о kerneld ╥ BogoMips mini-HOWTO: в случае если вас что-то удивляет 1133.. РРааззннооее 1133..11.. ААввттоорр Автором и сопроводителем Linux Kernel-HOWTO является Brian Ward (bri@blah.math.tu-graz.ac.at). Пожалуйста посылайте мне любые комментарии, добавления, исправления (в частности исправления наиболее важны для меня). Вы можете взглянуть на мою домашнюю страницу по одному из этих URLs: http://www.math.psu.edu/ward/ http://blah.math.tu-graz.ac.at/~bri/ Даже хотя я стараюсь быть внимательным с почтой, пожалуйста помните, что я получаю _д_о_с_т_а_т_о_ч_н_о _м_н_о_г_о сообщений каждый день, так что ответ на ваше письмо может занять некоторое время. Особенно если вы задаете мне вопрос, пожалуйста постарайтесь изложить его ясно и детально в вашем сообщении. Если вы пишите о неработающем оборудовании (или о чем-нибудь подобном), то мне необходимо знать как оно настроено. Если вы сообщаете об ошибке, не сообщайте просто ``я пробую, а она выдает мне ошибку'', мне необходимо знать какая ошибка произошла. Я также буду рад знать какую версию ядра, gcc, и libc вы используете. Если вы просто скажете, что вы используете тот или иной дистрибутив, то это не скажет мне многого. Я не беспокоюсь, если вы зададите мне простые вопросы; помните, если вы не будете спрашивать, то вы никогда не получите ответ! Я хочу поблагодарить всех, кто связывался со мной. Если вы написали мне и не получили ответ за какое-то вполне достаточное количество времени (три недели или месяц), то вероятно, что я случайно удалил ваше сообщение (извините) Пожалуйста попробуйте еще раз. Я получаю довольно много писем о вещах, которые в действительности являются аппаратными проблемами или их последствиями. Это нормально, но пожалуйста постарайтесь запомнить, что я не знаю все аппаратное обеспечение мира и я не знаю как вам помочь; я сам использую машины с IDE и SCSI дисками, SCSI CD-ROM, сетевыми картами 3Com и WD, последовательными мышами, материнскими платами с шиной PCI, контроллерами SCSI NCR 810, процессорами AMD 386DX40 w/Cyrix, AMD 5x86, AMD 486DX4, и Intel 486DX4 (Это обзор того что я использую и с чем я хорошо знаком, это ни в коем случае не рекомендация, но если вы хотите этого, то пожалуйста спрашивайте :-)). Версия -0.1 была написана 3 октября 1994 года. Этот документ доступен в форматах SGML, PostScript, TeX, roff и простого текста. 1133..22.. ЧЧттоо ссддееллааттьь Раздел ``Советы и приемы'' очень маленький. Я надеюсь расширить его с помощью ваших пожеланий. То же самой для раздела ``Дополнительные пакеты.'' Требуется больше информации об отладке/восстановлении. 1133..33.. ССооттррууддннииччеессттввоо Включена небольшая часть файла README написанного Linus (kernel hacking options). (Спасибо, Linus!) uc@brian.lunetix.de (Ulrich Callmeier): patch -s и xargs. quinlan@yggdrasil.com (Daniel Quinlan): исправления и дополнения во многих разделах. nat@nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, много других вещей. boldt@math.ucsb.edu (Axel Boldt): собранные в сети описания опций настройки ядра; lembark@wrkhors.psyber.com (Steve Lembark): дополнение про множественную загрузку kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): некоторые исправления и пожелания rmcguire@freenet.columbus.oh.us (Ryan McGuire): дополнения к информации о возможных вариантах команды make. dumas@excalibur.ibp.fr (Eric Dumas): Французский перевод simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): Японский перевод jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): Испанский перевод mva@sbbs.se (Martin Wahlen): Шведский перевод jzp1218@stud.u-szeged.hu (Zoltan Vamosi): Венгерский перевод bart@mat.uni.torun.pl (Bartosz Maruszewski): Польский перевод donahue@tiber.nist.gov (Michael J Donahue): печатные ошибки, победитель ``sliced bread competition'' rms@gnu.ai.mit.edu (Richard Stallman): уведомление о концепции/распространении ``свободной'' документации dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): часть относящаяся к NFS esr@snark.thyrsus.com (Eric Raymond): различные пикантные новости Люди, кто посылал мне письма с вопросами и проблемами, которые были очень полезны. 1133..44.. УУввееддооммллееннииее ообб ааввттооррссккиихх ппрраавваахх,, ЛЛииццееннззиияя ии ввссее ттааккииее ввеещщии Авторские права ╘ Brian Ward, 1994-1997. Разрешено делать и распространять копии этого документа, сохранив уведомление об авторских правах и это замечание о разрешениях. Разрешено копировать и распространять измененную копию этого документа при условиях распространения, обеспечивающих то, что измененный текст распространяется с условиями идентичными этим условиям. Переводы подпадают под категорию ``измененные версии.'' Гарантии: Нет Рекомендации: Коммерческое распространение разрешено и поощряется; однако, распространителю рекомендуется связаться с автором до начала распространения, для того, чтобы использовать самую новую версию (вы можете выслать мне копию вашего продукта). Переводчикам рекомендуется связаться с автором до перевода. Печатная версия выглядит намного лучше.