Category:

2.6

Апгрейднул свой Gentoo Linux к 2.6-му ядру. Прошло относительно спокойно, если не считать двух проблем.

1. По глупости, строя ядро, выбрал неправильные опции USB. Там есть три разных controller drivers: EHCI, OHCI и UHCI (very informative, guys — way to go!). Я включил в конфиг EHCI, а OHCI не включил. Оказывается, EHCI — драйвер для стандарта USB 2.0, а устройства USB 1.x он переправляет к драйверу OHCI, если тот скомпилирован, естественно. У меня его не было. В результате мою USB-мышку не нашёл модуль USB HID (Human Interface Devices). Вместо этого её нашёл позже модуль, отвечающий за обычные PS/2 mice (что, USB-мышка одновременно видна на хардверном уровне как PS/2-мышка, без софтверной эмуляции? Я этого не знал), и опознал как Generic Wheel Mouse. Несмотря на это, когда я вошёл в X, обнаружилось, что колесо мышки не работает. А без колеса читать ленту френдов совершенно невозможно! Это я сейчас такой умный, что всё рассказал по порядку, как случилось, а ночью мне, чтобы это понять, пришлось изрядно позовиться с конфигом, и по-переключаться обратно в 2.4 и опять в 2.6, сравнивая вывод dmesg и отыскивая, что именно у меня есть и чего не хватает. Мне сильно всё запутал драйвер mousedev, который отвечает за /dev/input/mice (с которым по поводу мышки и общается X, в частности) и называет себя тоже Generic PS/2 mouse support, но на самом деле оказалось, что это такой промежуточный драйвер, который пользуется настоящим девайсом мышки, какой бы она ни была, и эмулирует PS/2-поддержку на /dev/input/mice. В общем, теперь я обо всём этом знаю больше, чем мне нужно.

2. Не запускался автоматически модуль сетевой карточки (sis900 в моём случае). Если я вручную запускал modprobe sis900, а потом /etc/init.d/net.eth0 start, сетка поднималась как миленькая, а сама во время загрузки — нет. Тоже провозился порядочно, разбираясь, как именно это происходило в 2.4 (и должно происходить в 2.6), что ядро подгружает нужный модуль, когда видит сетевую карточку. Оказалось, что всё это происходит довольно поздно, и по инициативе скриптов загрузки, а не самого ядра, в процессе hotplugging. Узнал о /sbin/hotplug, /etc/hotplug.d/*, /etc/hotplug/* итп. опять же в пять раз больше, чем мне хотелось бы (удивительно запутанная система там), и обнаружил, что в 2.4 скрипты пользуются программой pcimodules, которая смотрит в /proc/pci, читает там номера обнаруженных устройств, и сравнивает их с теми, что сгенерированы из исходников и записаны в /lib/modules/2.6.0/modules.pcimap во время постройки модулей ядра, а затем выдаёт список всех модулей, которые можно загрузить, и скрипты их сами подгружают с помощью modprobe. Оказалось, что в скриптах записано специально не пользоваться pcimodules начиная с 2.5, так как чтение информации из /proc должно уступить место чтению информации из новой /sys, но вот этого пока ещё и нет (по крайней мере в Gentoo, или я не нашёл, где сгрузить). Сам я это писать не стал; после того, как убрал проверку версии ядра, чтобы скрипты пользовались pcimodules, они почему-то стали пытаться всё загружать по пять раз; в конце концов я плюнул и добавил sis900 в /etc/modules.autoload, чтобы всё заработало.

С ALSA всё прошло нормально, за исключением того, что ей теперь при запуске не удаётса установить кодек AC97, ругается "AC'97 0:0 analog subsections not ready". Но все плейеры и так работают нормально (через эмуляцию старого интерфейса OSS, полагаю, хоть я и не проверял).

Сегодня или завтра хочу поиграться с UML.