Как в Linux работать с аппаратурой
спасибо esyr@ за подробный конспект
Зачем собирать ядро?
- Just for fun
- Отладка ошибок в неподдерживаемом ядре
- Болезнь новых версий / необходимость сверхнового ядра (например, поддержка KVM)
Вы -- сопровождающий пакета "ядро"
Новая аппаратура -- надо собирать не ядро, а "драйвер".
Миф о "драйвере"
Сюжет мифа: в некоторой ОС не поддерживается некотрорый прибор (устройство), но к нему прилагается "дискета с драйвером". Дискету надо вставить в компьютер, драйвер "установится" и устройство "распознается".
Тёмные места (в обратном порядке):
- Что такое драйвер?
- Что такое "устройство распозналось"?
- Что такое устройство?
Виды устройств и их разпознавание
Принцип "всё -- файл" породил два термина "устройство":
Прибор: аппаратура компьютера (мышь, звуковая карта, контроллер PCI и т. п.)
Файл-дырка: объект Ф.С. в /dev/, обеспечивающий обмен данными с прибором и управление им
Степень "распознаваемости" прибора:
- Нераспознаваемые устройства.
- Определяется факт подключения: SP-DIF, COM-порт, ...
- Распознаётся "идентификатор": PS/2, "идентификатор", "производитель", "категория": произвольное устройство на шине USB
Распознаются характеристики прибора: DDC, специфический USB, PCI и пр.
Ядро 2.6: каталог /sys, отражает представление ядра о том, какие устройства к нему подключены. Если после подключения прибора /sys не изменился -- неисправность или нет поддержни на более низком уровне (например, нет USB)
Нераспознаваемые устройста могут вообще не имеют соответствия в /sys
Устройства могут появляться в /sys, но не создаваться в /dev (например, управляться с помощью in/out)
Созданием устройства в /dev/ и подгрузкой модулей ядра занимается демон udevd, его можно настраивать
В /dev/ может создаваться только "базовое" устройство (например, USB HID или AGP gart), а работает с ним прогармма (IRiver iFP, X-сервер, GPM)
Что такое "драйвер"?
На разных уравнях распознаваемости, "драйвер" -- это настройки программы (например, драйвер модема), сама программа, библиотека, модуль программного продукта, модуль ядра, ... Нет единого класса объктов "драйвер", общего понятия "установка" и т. п. Выполнять "драйвер" в виде модуля ядра часто неудобно.
Одновременное использование нескольких "драйверов" на разных уровнях: USB шина -> USB HUB -> USB HID -> ifp-command.
Драйвер это то, после чего можно пользоваться прибором.
Кто виноват и что делать
Предположим, что устройство воткнули, а оно не заработало, как вы ожидаете
- Определитесь со своими ожиданиями: как именно должно распознаваться устройство?
- Загляните в /sys до подключения к устройству и после
- Что-то есть на 12-й консоли
- Может не подгрузиться соответствующий модуль, потому что оно новое для udev
- Может быть не установлен пакет с модулем ядра
- Возможно, понадобится собирать (хуже: скачивать) новый модуль
- Сверхновое оборудование: самому написать или подождать 1-2 месяца
- Неподдерживаемое оборудование: сверхдешёвое (winmodem, winprinter, usb-junk), сверхдорогое