Как в Linux работать с аппаратурой

("Им, по-видимому, невдомек, что диван-транслятор является излучателем не М-поля, а мю-поля; что термин "живая вода" вышел из употребления еще в позапрошлом веке; что таинственного прибора, под названием аквавитометр, и электронной машины, под названием "Алдан", в природе не существует; что заведующий вычислительной лабораторией крайне редко занимается проверкой программ -- для этого существуют математики-программисты, которых в нашей лаборатории двое и которых авторы упорно называют девочками.")

спасибо esyr@ за подробный конспект

Зачем собирать ядро?

Новая аппаратура -- надо собирать не ядро, а "драйвер".

Миф о "драйвере"

Сюжет мифа: в некоторой ОС не поддерживается некотрорый прибор (устройство), но к нему прилагается "дискета с драйвером". Дискету надо вставить в компьютер, драйвер "установится" и устройство "распознается".

Тёмные места (в обратном порядке):

Виды устройств и их разпознавание

Принцип "всё -- файл" породил два термина "устройство":

Степень "распознаваемости" прибора:

  1. Нераспознаваемые устройства.
  2. Определяется факт подключения: SP-DIF, COM-порт, ...
  3. Распознаётся "идентификатор": PS/2, "идентификатор", "производитель", "категория": произвольное устройство на шине USB
  4. Распознаются характеристики прибора: DDC, специфический USB, PCI и пр.

Ядро 2.6: каталог /sys, отражает представление ядра о том, какие устройства к нему подключены. Если после подключения прибора /sys не изменился -- неисправность или нет поддержни на более низком уровне (например, нет USB)

  1. Нераспознаваемые устройста могут вообще не имеют соответствия в /sys

  2. Устройства могут появляться в /sys, но не создаваться в /dev (например, управляться с помощью in/out)

  3. Созданием устройства в /dev/ и подгрузкой модулей ядра занимается демон udevd, его можно настраивать

  4. В /dev/ может создаваться только "базовое" устройство (например, USB HID или AGP gart), а работает с ним прогармма (IRiver iFP, X-сервер, GPM)

Что такое "драйвер"?

На разных уравнях распознаваемости, "драйвер" -- это настройки программы (например, драйвер модема), сама программа, библиотека, модуль программного продукта, модуль ядра, ... Нет единого класса объктов "драйвер", общего понятия "установка" и т. п. Выполнять "драйвер" в виде модуля ядра часто неудобно.

Одновременное использование нескольких "драйверов" на разных уровнях: USB шина -> USB HUB -> USB HID -> ifp-command.

Драйвер это то, после чего можно пользоваться прибором.

Кто виноват и что делать

Предположим, что устройство воткнули, а оно не заработало, как вы ожидаете

  1. Определитесь со своими ожиданиями: как именно должно распознаваться устройство?
  2. Загляните в /sys до подключения к устройству и после
  3. Что-то есть на 12-й консоли
  4. Может не подгрузиться соответствующий модуль, потому что оно новое для udev
  5. Может быть не установлен пакет с модулем ядра
  6. Возможно, понадобится собирать (хуже: скачивать) новый модуль
  7. Сверхновое оборудование: самому написать или подождать 1-2 месяца
  8. Неподдерживаемое оборудование: сверхдешёвое (winmodem, winprinter, usb-junk), сверхдорогое

Ссылки

LecturesDistro2007/04_Drivers (last edited 2008-06-04 08:20:46 by localhost)