русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Файлы устройств и udev


Дата добавления: 2015-07-09; просмотров: 942; Нарушение авторских прав


GNU/Linux предоставляет доступ к устройствам посредством файлов уст- ройств. В главе 11 было рассказано о файлах устройств. Вы уже знаете, что они бывают двух типов: символьные и блочные. Также вам известно, что вместо размера файлов устройств команда ls -l выводит два значения: мажор и минор. Мажор — это номер драйвера для данного устройства в ядре, минор — дополнительный параметр, чаще всего нумерующий экземпляр устройства.

Традиционно файлы устройств создавались с помощью команды mknod и размещались в каталоге /dev. Причем из соображений универсальности создавались файлы устройств для аппаратуры, не установленной в компью- тере. Однако разнообразных файлов устройств становится все больше и боль- ше, поэтому при использовании статически созданных файлов устройств возникают три проблемы:

r нехватка мажоров и миноров для адресации файлов устройств;

r загромождение /dev файлами отсутствующих реально устройств (напри-

мер, в Fedora 1 в каталоге /dev имелось порядка 1800 файлов устройств);

r неудобство в работе подключаемых на лету устройств (hot-pluggable de- vices), например, USB.

Проблема нехватки мажоров и миноров решается относительно просто, но проблема загромождения /dev не так проста. Для ее решения во многих UNIX-системах используют динамически создаваемые файлы устройств с помощью файловой системы devfs. Идея такова: в ядре имеется информа- ция, какие устройства установлены в системе (при наличии соответствующих драйверов). Если в системе появляется новое устройство, для него динамиче- ски создается новый файл устройства.

Есть еще одна проблема: поскольку имена файлов устройств, создаваемых devfs, не являются жестко связанными с конкретными аппаратными средст- вами, это очень затрудняет работу множества средств автоматизации. Например, если для USB-флэш один раз создается файл устройства /dev/sdb, а другой — /dev/sdc, то как определить точку монтирования?




 

Для решения этих проблем в ядрах 2.6.13 и выше используется udev — даль- нейшее развитие devfs, предоставляющее возможность "стабилизации" име- нования динамически создаваемых файлов устройств с помощью специаль- ных правил (rules).

Ядро Linux предоставляет файловую систему sysfs, монтируемую в каталог

/sys. В этой файловой системе хранится служебная информация, с помощью которой udev создает и удаляет файлы устройств в /dev.

В udev входят:

r udevd — демон, отслеживающий сообщения ядра и передающий их udev;

r udevcontrol — программа для управления udev;

r udevinfo — программа для получения информации об устройствах (см.

пример 19.13);

r ata_id, edd_id, scsi_id и vold_id — программы для идентификации уст- ройств;

r udevmonitor — отладочная программа для отслеживания сообщений ядра;

r udevtest — симулятор udev.

Содержимое каталога /dev находится на временной файловой системе, и файлы устройств создаются там динамически. Статические файлы устройств копируются в /dev при старте системы из /lib/udev/devices (пример 19.11).

 

Пример 19.11. Статические файлы устройств в /lib/udev/devices

 

$ ls /lib/udev/devices/

console core fd kmsg lp0 net null ppp ptmx pts shm stderr stdin stdout tty tty0 tty1 zero

 

Конфигурационные файлы для udev размещаются в /etc/udev. Прежде всего это правила (rules), с помощью которых определяются имена для создавае- мых файлов устройств. Всякий раз, когда устройство добавляется или удаля- ется из системы, ядро генерирует событие uevent для информирования демо- на udevd, который в соответствии с правилами в /etc/udev/rules.d/*.rules создает или удаляет файлы устройств.

Каждому устройству сопоставляется специальный идентификатор MODALIAS. Список поддерживаемых устройств конкретным драйвером находится в со- ответствующем этому драйверу модуле ядра. Программа depmod читает эти идентификаторы и записывает их в файл modules.alias в каталоге с модулями ядра (пример 19.12).


 

Пример 19.12. Файл modules.alias

 

# modinfo –a kingsun_sir

alias: usb:v07C0p4200d*dc*dsc*dp*ic*isc*ip*

 

# grep -i kingsun /lib/modules/`uname -r`/modules.alias alias usb:v07C0p4200d*dc*dsc*dp*ic*isc*ip* kingsun_sir

 

В примере получен идентификатор модуля для IrDA-USB KingSun с по- мощью команды modinfo –a. Этот же MODALIAS имеется в файле modules.alias.

Наличие файла modules.alias обеспечивает автоматическое подключение тре- буемых модулей ядра для устройств, опознанных udev. Причем на ранних стадиях загрузки полная инициализация /dev невозможна, т. к. при этом мо- жет быть еще не готова инфраструктура udev. Поэтому после полной ини- циализации udev производит сбор информации в специальных триггерах для устройств в каталоге /sys о событиях uevent, которые были отложены для по- следующей обработки udev.

Получить информацию об устройстве, опознанном udev, можно с помощью команды udevinfo (пример 19.13).

 

Пример 19.13. Получение информации udev об устройстве

 

$ udevinfo -n /dev/sdb -q all P: /block/sdb

N: sdb

S: disk/by-id/usb-Myson_Century Inc._USB_Mass_Storage_Device_100 S: disk/by-path/usb-100:0:0:0

E: ID_VENDOR=Myson_Century,_Inc.

E: ID_MODEL=USB_Mass_Storage_Device E: ID_REVISION=b007

E: ID_SERIAL=Myson_Century,_Inc._USB_Mass_Storage_Device_100 E: ID_TYPE=floppy

E: ID_BUS=usb

E: ID_PATH=usb-100:0:0:0

 

Опция -n команды udevinfo позволяет указать требуемое устройство соот- ветствующим ему файлом, а опция –q all выводит всю доступную udev ин- формацию об устройстве. Обратите внимание на строку P: /block/sdb — это путь для поиска информации об устройстве в sysfs (пример 19.14).


 

Пример 19.14. Информация об устройстве в sysfs

 

$ find /sys -name '*block*sdb'

/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-7/1-7:1.0/host2/target2

:0:0/2:0:0:0/block:sdb

 

Найденный в примере 19.14 файл — это символическая ссылка на подкаталог в /sys, содержащий файлы с информацией об устройстве.

Можно проследить события uevent, происходящие в системе при добавлении или удалении устройства. Это делается с помощью udevadm monitor (при- мер 19.15).

 

Пример 19.15. Мониторинг событий uevent

 

# udevadm monitor --env

monitor will print the received events for:

UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent

 

KERNEL[1263115065.575286] add

/devices/pci0000:00/0000:00:1d.7/usb2/2-2 (usb) UDEV_LOG=3

ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-2

 

В примере 19.15 приведен фрагмент вывода информации о работе udev при подключении USB-носителя.

Если подключенное устройство не опознается системой, первое, что имеет смысл сделать — изучить сообщения ядра с помощью команды dmesg (при- мер 19.16).

 

Пример 19.16. Команда dmesg

 

# dmesg

[137937.482077] usb 2-2: new high speed USB device using ehci_hcd and address 5

...

[137939.043375] sd 8:0:0:0: [sdb] Attached SCSI removable disk

 

В примере 19.16 приведен укороченный фрагмент вывода сообщений ядра, выполненный командой dmesg при подключении USB-носителя.


 



<== предыдущая лекция | следующая лекция ==>
Работа с модулями ядра | Устройства PCI


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.848 сек.