57.4. Опять «устройство»?
В документации Linux термин «устройство» (device) часто используется не в значении «прибор», а в значении «элемент каталога /dev
». Что это такое?
Прибор подключается к машине, как правило, для того чтобы передавать на него какие-то данные и/или получать их оттуда. Если задача компьютера — управлять внешним устройством, это всё равно можно рассматривать как передачу управляющих данных и приём диагностических. Во многих случаях передачу данных проще всего вести в синхронном (поточном) режиме, точно так же, как это делается при работе с файлом: открыть файл — записать данные — закрыть файл или открыть — прочитать — закрыть. Если бы можно было представить внутренность прибора в виде файла, работа с ним пошла бы легче. Это означало бы, что система знает, как и куда передавать данные, а дело пользовательской программы — эти данные понимать.
В большинстве случаев именно так и устроено в Linux. После того, как система распознала внешнее устройство, а служба hotplug, при необходимости, загрузила соответствующий модуль ядра, в каталоге /dev
заводится новый «файл», содержимое которого отражает содержимое подключённого устройства, не занимая при этом места на жёстком диске. Такой файл называется файлом-дыркой, его можно представить как отверстие в файловой системе, через которое видно не содержимое жёсткого диска, а данные, попадающие туда с «другой стороны» — со стороны подключённого внешнего устройства. Например, гибкий диск в дисководе представляется в виде файла-дырки /dev/fd0
, (от floppy disk 0), а мышь — в виде /dev/mouse
(строго говоря /dev/mouse
— это обычно символьная ссылка на актуальный файл- дырку — скажем /dev/psaux
, порт PS/2).
В документации вместо «файл-дырка» чаще всего пишут просто «устройство» (device), а устройство-прибор — «внешним устройством». Если соответствующего устройства в каталоге /dev/
нет, значит, в цепочке его распознавания есть слабое звено.
Стоит напомнить, что файл-дырка, однако, не обязан существовать и непременно соответствовать одному внешнему устройству. Устройства, подключаемые ко второму последовательному порту, например, всегда видны как /dev/ttyS1
(а к первому — как ttyS0
). Фактически, ttyS
— это файл-дырка шины, настолько простой, что дальнейшее выяснение типа устройства перекладывается на программу пользователя.
Другой пример — это работа с аппаратурой по шине
USB. USB-шин в системе зарегистрировано несколько, и к каждому можно подключить одно или несколько устройств. Для них, независимо от типа устройства, заводятся файлы-дырки вида usbdev.шина.номер, где каждому новому подключённому устройству просто выдаётся очередной номер. Некоторые звуковые проигрыватели и цифровые фотокамеры распознаются как flash-диски; тогда в дополнение к нетипизированному файлу-дырке создаётся одна или даже несколько дисковых (допустим, само дисковое устройство /dev/sda и единственный раздел с файловой системой на нём
/dev/sda1
, который и монтируется в
/media/usbdisk
). Другие фотокамеры умеют больше, чем обычный диск: например, транслировать изображение и/или звук. И для них существуют специальные утилиты, например, gphoto2. В этом случае никакого дополнительного файла-дырки, за исключением
/dev/usbdev.шина.номер
, не создаётся, и о типе подключённого аппарата догадывается сама
gphoto2.