Библиотека сайта rus-linux.net
О компиляции и установке ядра 2.6.0
Метляев Евгений, jackill at hotbox dot ruПочти два месяца назад увидело свет стабильное ядро 2.6.0. И теперь уже выходят дистрибутивы на основе нового ядра. Естественно, многие хотят установить себе это ядро или же пересобрать под себя то, что идет в составе новых дистрибутивов.
Выпущено довольно много статей о переходе на 2.6, тем не менее в форумах продолжают звучать вопросы об одних и тех же проблемах. Цель данной статьи облегчить переход на ядро 2.6 людям, недавно установившим Linux или же тем, кто не владеет английским и испытывает сложности с прочтением документации.
Подготовка
Начнем с простого. У меня установлен fedora core 1. До этого был установлен дистрибутив redhat 9 и ядра тестовой серии я собирал на нем. Владельцы других дистрибутивов могут сделать все по аналогии.
Более старые дистрибутивы я не буду рассматривать - они собраны без ntpl и, соответственно, особой выгоды от использования нового ядра они не получат.
Для rh 9 мы должны обновить rpm и glibc. Дистрибутив fedora core 1 уже по большей части готова для установки нового ядра, хотя если у вас она установлена и не обновлялась, следовало бы обновить glibc в целях ликвидации уязвимостей.
После выполнения данного обновления найдите себе подходящее зеркало репозитария fedora core 1 и зайдите в раздел development этого репозитария. Отсюда нам нужно взять modutils версии не ниже 2.4.26-2 и желательно обновить e2fsprogs (и все остальные ~progs, если вы используете файловые системы, отличные от ext2/ext3), а также util-linux. Что касается остальных пакетов, читаем файл CHANGES и проверяем соответствие версий. Насколько я помню, больше я ничего не обновлял.
Ядро лучше тоже забрать из репозитория, т.к. оно содержит патчи, стабилизирующие работу ядра.
Зачем нужно обновлять modutils? Дело в том, что в новом ядре используются иные модули. И старые module-init-tools (или, как они называются в redhat, modutils) не могут загрузить новые модули. Так что если вы видите надпись со словом QM_MODULES и дальше ничего не грузится, значит у вас нет поддержки модулей. В случае mandrake пакет называется modul-init-tools.
Если в вашем дистрибутиве ничего подобного нет, а ядро поставить все же хочется, давайте ставить новые module-init-tools из исходников (исходники можно скачать отсюда http://www.kernel.org/pub/linux/kernel/people/rusty/modules). Делается это так:
1. Находим где лежат старые утилиты (insmod, rmmod и т.п.). У меня, например, в /sbin
2. Дальше все просто
./configure --prefix=/ make moveold make make check make install
Строчка make moveold нужна для того, чтобы переименовать старые утилиты (в конец названия будет добавлено расширение "old"). Они будут вызываться новыми в случае, если вы будете загружать ядра серии 2.4.x
У redhat module-init-tools сильно переделаны и поэтому вся эта чехарда им не нужна - одни и те же утилиты работают с обеими версиями ядер.
Теперь, когда мы все поставили, давайте собирать ядро.
Распаковываем исходники в /usr/src, ставим симлинк linux. Дальше делаем то, что нельзя, но если хочется, то можно - копируем из исходников ядра 2.4 файл .config и запускаем make menuconfig (или make xconfig, make qtconfig - по настроению).
А на втором терминале то же самое делаем для ядра 2.4. Как бы в этом нет необходимости, но названия ряда функций изменилось и вам придется сравнить две конфигурации и включить назад недостающие функции (поэтому, кстати, нельзя делать make menuconfig).
Некоторые особенности
Поговорим немного о параметрах ядра и некоторых особенностях.
1. В первый раз в Processor type and features не собираем поддержку Preemptive Kernel - на многих системах это может вызвать замедление работы компьютера.
2. Чтобы при загрузке нас встречал не черный экран без всего, а консоль, в menuconfig должно быть так:
Device drivers -> Charecter devices [*] Virtual Terminal [*] Support for console on virtual terminal и в Device drivers -> Graphics support -> Console display driver support: [*] VGA text console)
Потом проверьте конфиг. Должно быть так:
CONFIG_VGA_CONSOLE=y CONFIG_VT=y CONFIG_VT_CONSOLE=y
3. Чтобы работала мышка PS/2:
Device drivers -> INput device support: [*] Mice <*> PS/2 mouse
Если у вас logitech, то включаем эту опцию:
<M> Logitech busmouse
4. Мышка USB:
Для USB мышей читаем http://thomer.com/linux/migrate-to-2.6.html (русский перевод находится здесь http://www.polachok.narod.ru/articles/migrate26.html)
Должны быть собраны следующие модули:
usbmouse (или hid, но не оба сразу), mousedev (это можно включить жестко),
usbcore, usb-uhci, input.
Если мышь так и не появилась, передайте в ядро параметр
append="psmouse_noext"http://thomer.com/linux/migrate-to-2.6.html
5. Клавиатуру тоже не стоит собирать модулем. Проверяем конфиг:
CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y
6. Если вы используете initrd, не забудьте включить поддержку в Device drivers -> block device.
7. Пишущий привод (CD-RW).
Как известно, в 2.4 поддержка пишущих приводов осуществлялась посредством эмуляции scsi. В новом ядре модуль ide-scsi поломали, посему он может не работать вовсе или работать неправильно (хотя есть сообщения о том, что те же флэшки у некоторых работают). Тем не менее поддержка CDRW теперь нормально сделана с помощью ATAPI. При записи ваш привод будет использовать DMA и более-менее свежие cdrtools - на всякий случай их стоит обновить. Строчку вида append="hdc=ide-scsi" (вместо hdc у вас может быть что-то другое - в зависимости от того, на каком шлейфе находится привод) из lilo.conf или grub.conf нужно убрать, симлинк cdrom, указывающий на scd0 или sr0 нужно перенаправить на реальное устройство.
8. Немного о звуке. Многие задают вопрос - ALSA или OSS. Все просто. ALSA будет поддерживаться и дальше, а поддержка OSS сворачивается. К тому же со многими картами ALSA работает корректней. Собирайте ALSA. В конфигурации для ALSA не забудьте включить эмуляцию OSS (иначе не сможете поиграть в свой любимый quake или вывести звук программами, приученным к OSS).
Все, кто использовал ALSA ранее, может спокойно перенести свою конфигурацию из /etc/modutils.conf в /etc/modules.conf. Все, кто не использовал, могут воспользоваться документацией, расположенной на сайте www.alsa-project.org. Кроме того, придется скачать alsa-libs, alsa-utils, alsa-oss, alsa-tools и, возможно, alsa-firmware.
9. Если собираете поддержку ACPI, не собирайте поддержку APM.
10. procfs - не волнуйтесь, она есть. Можете так же использовать ее, как и раньше.
11. Поддержка NTFS на запись. Если вы обрадовались, радость придется поумерить. Запись возможна только при изменении существующего файла. Но читать вы сможете любую NTFS.
12. Поддержка пульта от вашего любимого тюнера на чипсете btv878 добавляется с помощью патча, который можно взять здесь: http://www.ussg.iu.edu/hypermail/linux/kernel/0308.0/0243.html.
Внимательно смотрите на то, что говорит патч о своей работе - он достаточно старый, хотя и рабочий. Мне, например, пришлось исправить строчку патча
-obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.oна
-obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o
Как видите, смысл тот же, но в первом случае строчка не находится и, соответственно, lirc/ в конец строки не допишется.
13. Драйверы для карт nvidia можно найти на www.nvidia.com. Последняя версия драйверов для x86 (1.0-5336-pkg1) поддерживает ядро 2.6. Для драйверов более ранних версий можно найти патчи на www.minion.de (и в том числе неофициальные инсталляторы).
14. Чтобы заставить работать vmware, нужно посетить сайт http://kerneltrap.org/node/view/1804 и прочитать об этом. Патч к vmware находится здесь http://ftp.cvut.cz/vmware/
15. Новое ядро на некоторых приложениях работает медленнее. Можно попробовать восстановить производительность, передав ядру параметр append="elevator=deadline"
Сборка
gcc 3.2.2, которым сейчас собираются все ядра в redhat 9 или fedora core 1 вполне подходит для сборки данного ядра. После того, как вы все отконфигурируете, выполните
make bzImage make modules make modules_install make install
После чего пропишите новое ядро в свой grub.conf или lilo.conf соответствующим образом, проверьте, создался ли initrd (он нужен вам только если у вас поддержка корневой файловой системы и жестких дисков собрана модулями). Если не создался, а он вам нужен, выполните такую команду
mkinitrd /boot/2.6.1 2.6.1где 2.6.1 - название вашего нового ядра (посмотрите в папочке /lib/modules, если вдруг не знаете)
После чего в случае, если у вас установлено lilo, выполняете lilo.
Посколько драйверы для видеокарты у нас еще не стоят, загружаться нам нужно в текстовом режиме. Поэтому если раньше у вас загрузка была графическая, открываем на редактирование /etc/inittab, находим строку id:5:initdefault: и вместо 5 ставим 3. В /etc/sysconfig/init находим строчку CRAPHICAL=yes и вместо "yes" ставим "no".
Нам нужно сформировать новый файл под названием /etc/modprobe.conf. Для ядер серии 2.6 он выполняет ту же роль, что и modules.conf для 2.4.
Есть программа для генерирования файла modprobe.conf из существующего modules.conf.
Назвается generate_modprobe.conf. Поэтому выполните ее
/sbin/generate_modprobe.conf /etc/modprobe.conf
Полученный файл придется подправлять, т.к. синтаксис упростился и немного изменился, поэтому некоторые вещи могут быть пропущены.
Теперь мы готовы перегружаться.
После перезагрузки
После перезагрузки как обычно собираете модуль для видеокарты. И все, что необходимо для ALSA (alsa-lib и т.п.). Что касается звука, для emu10k1, например, строчки в /modprobe.conf выглядят так (абсолютно так же, как и в /etc/modules.conf):
# ALSA native device support alias char-major-116 snd alias snd-card-0 snd-emu10k1 options snd major=116 cards_limit=1 # OSS/Free setup alias char-major-14 soundcore alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss
У пользователей модемов на COM-порте может возникнуть проблема, когда программы дозвона не могут найти ttySx. По всей видимости, не загрузился модуль COM-порта 8250.
В документации дана рекомендация как его грузить, пока не исправлена автозагрузка. Вы должны добавить в /etc/modprobe.conf строчку
install serial /sbin/modprobe 8250_pci
Так же есть совет добавить модули, загрузка которых необходима на стадии загрузки ядра, в файл /etc/modprobe.preload.
Если честно, у меня ни один метод не заработал (а модуль 8250_pci у меня называется 8250), поэтому я просто вставил строчку modprobe 8250 в /etc/rd.d/rc.local, что неправильно, но зато избавляет набирать то же каждый раз после загрузки.
Вот, вроде, и все.
Для написания статьи помимо личного опыта использовались статьи