?

Log in

2.6 - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

2.6 [дек. 22, 2003|01:52 am]
Anatoly Vorobey
Апгрейднул свой 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.
СсылкаОтветить

Comments:
From: dmpogo
2003-12-21 04:39 pm
Да hotplugging весьма запутан, особенно если используется совместно с pcmcia (в частности, сетевые PCMCIA карточки реально инициализируются хотплаговскими а не PCMCIA скриптами)

OHCI - UHCI зависит от вашего контроллера (+ для UHCI есть два альтернативных драйвера). OHCI лучше, кстати. И достаточно редки в наши дни

многие USB мыши продаются с USB-PS2 адаптером, и работают как PS2.
Но вы говорите что ядра распознало как PS2 мышь, воткнутую в USB порт ??

(Ответить) (Thread)
[User Picture]From: avva
2003-12-21 08:32 pm
Но вы говорите что ядра распознало как PS2 мышь, воткнутую в USB порт ??

Именно так, да. Не понимаю, как это.

(Ответить) (Parent) (Thread)
From: dmpogo
2003-12-21 08:45 pm
Более того - без драйвера для host controllera !
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2003-12-21 09:09 pm
Да. И признал её в качестве мышки PS/2 другой модуль совершенно, не имеющий к USB никакого отношения. Кто-то там в drivers/input/mouse, кажерся, psmouse-base.c . Если я не ошибаюсь, с его точки зрения он просто нашёл её на серийном порту (при помощи модуля serio). Но как она там оказалась? :)
(Ответить) (Parent) (Thread)
[User Picture]From: bugabuga
2003-12-21 09:32 pm
Legacy USB Mouse support в BIOSе? :) или как оно там называется.
Оно небось и клавиатуру USBшную так же бы опознало
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2003-12-21 09:48 pm
А как там вообще BIOS бежит-то? Что, серийные/USBшные IRQs завязаны на него, и только потом попадают к линуксу? Что-то я не очень понимаю, как это устроено ;)
(Ответить) (Parent) (Thread)
[User Picture]From: bugabuga
2003-12-21 10:01 pm
А вот так :) "USB Legacy Support allows the BIOS to interact with a USB keyboard, and in limited cases, a USB mouse."
А именно:
http://www.microsoft.com/whdc/hwdev/bus/usb/usbcompat_Print.mspx#USBcompat1.gif
:)
В данном случае BIOS отловил наличие USB Mouse, и представил её в MS-DOS PS/2 Compatible варианте, что отловил стандартный драйвер PS/2 мыши :) То же самое скорее всего сработало бы и для USB клавиатуры. Так что даже без USB драйвера можно работать с ними, как "обычными" устройствами
(Ответить) (Parent) (Thread)
From: dmpogo
2003-12-21 10:38 pm
Век живи, век учись
(Ответить) (Parent) (Thread)
[User Picture]From: braindancer
2003-12-22 01:02 am
Скорее всего, так и есть. Ведь под ДОСом обычного драйвера мышки вполне хватает, чтобы забегал мой USB Logitech...
(Ответить) (Parent) (Thread)
[User Picture]From: ush
2003-12-27 05:30 pm
А чипсет какой? Такая эмуляция должна делаться на железном уровне.
(Ответить) (Parent) (Thread)
[User Picture]From: alexcohn
2003-12-23 12:11 am
Разломав как-то раз USB-PS2 адаптер, я с удивлением обнаружил, что в нем есть только проводки, чтобы поменять геометрию разъема.
(Ответить) (Parent) (Thread)
[User Picture]From: msh
2003-12-21 05:10 pm

Битва авторов Linux с PCI hotplugging не оставит меня без кусочка хлеба
(Ответить) (Thread)
From: ex_the_zoi290
2003-12-24 12:18 am
Сочетание довольно знакомое... Чипсет, случайно, не nForce?
(Ответить) (Thread)
[User Picture]From: avva
2003-12-24 12:25 am
Нет, SiS чего-то там, лень вспоминать чего ;)
(Ответить) (Parent) (Thread)
From: (Anonymous)
2003-12-24 06:12 am

Атвет!

Привет.
Маюсь с gs-sources-2.4.23_pre8-gss
Трабла такая - у меня стоит УСБ-клава с УСБ-хабом на два порта внутре.
Все xHCI собрал модулями.
Если пишу "insmod ehci-hcd", то клава находится и печатает, НО! Не работают светодиоды всех Локов, хотя режимы переключает исправно.
Если пишу "insmod uhci-hcd" (или ohci), то ситуация строго инверсная - Локи работают на ура, но система встаёт колом, ни с PS ни с УСБ-клав ничего нельзя ввести - помогает только ресет.
Таже фигня при запуске hotplug'а - секунд 5-7 система работает, и сразу виснет.
Если собираю все xHCI внутре ядра - система так же встает при загрузке примерно на установке часов или чистке темпов.
Сборка ядра genkernel'ом дает такие же результаты - виснет при загрузке.
Если выдергиваю клаву и гружусь с PS'ной - все работает.

Как завести УСБ-клаву правильно?
2.6 ядро поможет?
Заранее спасибо.
Отвечать можно мылом: pomozoff (dog) mail.ru
(Ответить) (Thread)
[User Picture]From: avva
2003-12-24 10:46 pm

Re: Атвет!

Увы, никак не могу помочь. Я бы посоветовал попробовать 2.6, но чёрт его знает, поможет ли.
(Ответить) (Parent) (Thread)