Инструменты пользователя

Инструменты сайта


linux_device

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

linux_device [2016/01/20 02:49] (текущий)
sander создано
Строка 1: Строка 1:
 +====== Устройства ======
 +===== Файлы устройств =====
 +  * **Блочное устройство.** Программы получают доступ к данным на блочном устройстве в виде фиксированных порций. В приведенном примере sda1 является дисковым устройством — одним из типов блочных устройств. Диски можно легко разделить на блоки данных. Поскольку общий объем блочного устройства фиксирован и легко поддается индексации,​ процессы с помощью ядра получают случайный доступ к любому блоку устройства.
 +  * **Символьное устройство.** Символьные устройства работают с потоками данных. Вы можете лишь считывать символы с таких устройств или записывать символы на них, как было показано в примере с /dev/null. Символьные устройства не обладают размером. Когда выполняется чтение или запись,​ ядро обычно осуществляет операцию чтения или записи на устройство. Принтеры,​ напрямую подключенные к компьютеру,​ представлены символьными устройствами. Важно отметить следующее:​ при взаимодействии с символьным устройством ядро не может выполнить откат данных и повторную их проверку после того, как данные переданы устройству или процессу.
 +  * **Канал.** Именованные каналы подобны символьным устройствам,​ но у них на другом конце потока ввода-вывода располагается другой процесс,​ а не драйвер ядра.
 +  * **Сокет.** Сокеты являются специализированными интерфейсами,​ которые часто используются для взаимодействия между процессами. Часто они располагаются вне каталога /dev. Файлы сокетов представляют сокеты домена Unix.
  
 +===== Путь устройств sysfs =====
 +
 +<WRAP center round info 80%>
 +Традиционный каталог **/dev** в системе Unix является удобным способом,​ с помощью которого пользовательские процессы могут обращаться к устройствам,​ поддерживаемым ядром, а также предоставлять интерфейс для них. Однако такая схема также и слишком упрощена. Название устройства в каталоге /dev даст вам некоторую информацию об устройстве,​ но далеко не всю. Кроме того, ядро назначает устройства в порядке их обнаружения,​ поэтому они могут получать различные имена после перезагрузки.
 +
 +Чтобы обеспечить унифицированный обзор присоединенных устройств,​ взяв за основу их действительные аппаратные характеристики,​ ядро системы Linux предлагает интерфейс **sysfs** для обозначения файлов и каталогов. Основным путем для устройств является **/​sys/​devices**. Например,​ жесткий диск SATA в файле **/​dev/​sda** мог бы получить следующий путь в интерфейсе **sysfs**:
 +
 +**/​sys/​devices/​pci0000:​00/​0000:​00:​1f.2/​host0/​target0:​0:​0/​0:​0:​0:​0/​block/​sda**
 +</​WRAP>​
 +
 +===== Менеджер устройств udev =====
 +==== Файловая система devtmpfs ====
 +Файловая система **devtmpfs** была разработана для решения проблемы с доступностью устройств во время загрузки. Эта файловая система подобна старой **devfs**, но является упрощенной. Ядро создает файлы устройств по мере надобности,​ а также уведомляет менеджер udevd о том, что доступно новое устройство. После получения такого сигнала менеджер udevd не создает файлы устройств,​ а выполняет инициализацию устройства и отправляет уведомление процессу. Кроме того, он создает несколько символических ссылок в каталоге ///dev// для дальнейшей идентификации устройств. Примеры вы можете отыскать в каталоге ///​dev/​disk/​by-id//,​ в котором каждому присоединенному диску соответствует одна или несколько записей.
 +
 +==== Работа и настройка менеджера udevd ====
 +
 +Демон udevd работает следующим образом.
 +  - Ядро отправляет демону udevd событие-уведомление,​ называемое uevent, через внутреннюю сетевую ссылку.
 +  - Демон udevd загружает все атрибуты,​ содержащиеся в уведомлении uevent.
 +  - Демон udevd проводит разбор правил,​ а затем предпринимает действия или устанавливает дополнительные атрибуты на основе правил.
 +
 +<WRAP center round info 80%>
 +Файлы правил расположены в каталогах **/​lib/​udev/​rules.d** и **/​etc/​udev/​rules.d**. Правила из каталога /lib являются правилами по умолчанию,​ а правила из каталога /etc переопределяют их.
 +</​WRAP>​
 +
 +==== Команда udevadm ====
 +
 +Команда **udevadm** является инструментом администрирования менеджера **udevd**. С ее помощью можно перезагрузить правила для **udevd**, а также события-триггеры. Однако,​ вероятно,​ самыми мощными функциями команды **udevadm** являются возможность поиска и обнаружения системных устройств,​ а также способность отслеживать уведомления **uevents**,​ когда демон **udevd** получает их от ядра.
 +
 +<code bash>
 +root@uba64:/​dev#​ udevadm info --query=all ​ --name=sda1
 +P: /​devices/​pci0000:​00/​0000:​00:​0d.0/​ata3/​host2/​target2:​0:​0/​2:​0:​0:​0/​block/​sda/​sda1
 +N: sda1
 +S: disk/​by-id/​ata-VBOX_HARDDISK_VBfc1c9566-5d5a3e62-part1
 +S: disk/​by-uuid/​e80ff622-9c30-4a17-ac23-780a6e37bdd8
 +E: DEVLINKS=/​dev/​disk/​by-id/​ata-VBOX_HARDDISK_VBfc1c9566-5d5a3e62-part1 /​dev/​disk/​by-uuid/​e80ff622-9c30-4a17-ac23-780a6e37bdd8
 +E: DEVNAME=/​dev/​sda1
 +E: DEVPATH=/​devices/​pci0000:​00/​0000:​00:​0d.0/​ata3/​host2/​target2:​0:​0/​2:​0:​0:​0/​block/​sda/​sda1
 +E: DEVTYPE=partition
 +E: ID_ATA=1
 +E: ID_ATA_FEATURE_SET_PM=1
 +E: ID_ATA_FEATURE_SET_PM_ENABLED=1
 +E: ID_ATA_ROTATION_RATE_RPM=0
 +E: ID_ATA_SATA=1
 +E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
 +E: ID_ATA_WRITE_CACHE=1
 +E: ID_ATA_WRITE_CACHE_ENABLED=1
 +E: ID_BUS=ata
 +E: ID_FS_TYPE=ext4
 +E: ID_FS_USAGE=filesystem
 +E: ID_FS_UUID=e80ff622-9c30-4a17-ac23-780a6e37bdd8
 +E: ID_FS_UUID_ENC=e80ff622-9c30-4a17-ac23-780a6e37bdd8
 +E: ID_FS_VERSION=1.0
 +E: ID_MODEL=VBOX_HARDDISK
 +E: ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
 +E: ID_PART_ENTRY_DISK=8:​0
 +E: ID_PART_ENTRY_FLAGS=0x80
 +E: ID_PART_ENTRY_NUMBER=1
 +E: ID_PART_ENTRY_OFFSET=2048
 +E: ID_PART_ENTRY_SCHEME=dos
 +E: ID_PART_ENTRY_SIZE=15726592
 +E: ID_PART_ENTRY_TYPE=0x83
 +E: ID_PART_TABLE_TYPE=dos
 +E: ID_REVISION=1.0
 +E: ID_SERIAL=VBOX_HARDDISK_VBfc1c9566-5d5a3e62
 +E: ID_SERIAL_SHORT=VBfc1c9566-5d5a3e62
 +E: ID_TYPE=disk
 +E: MAJOR=8
 +E: MINOR=1
 +E: SUBSYSTEM=block
 +E: USEC_INITIALIZED=8648
 +</​code>​
 +
 +Префикс в каждой строке указывает на атрибут или другую характеристику устройства.
 +  * **P**: содержит путь устройства в файловой системе sysfs
 +  * **N**: является узлом устройства (то есть именем,​ которое присвоено файлу /dev)
 +  * **S**: указывает символическую ссылку на узел устройства,​ которую демон udevd поместил в каталог /dev в соответствии со своими правилами
 +  * **E**: содержит дополнительную информацию об устройстве,​ извлеченную из правил udevd
 +
 +==== Отслеживание устройств ====
 +
 +Чтобы отслеживать уведомления uevents с помощью инструмента udevadm, используйте команду monitor:
 +
 +<code bash>
 +root@uba64:​~#​ udevadm monitor
 +monitor will print the received events for:
 +UDEV - the event which udev sends out after rule processing
 +KERNEL - the kernel uevent
 +
 +KERNEL[687954.872907] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2 (usb)
 +KERNEL[687954.879597] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0 (usb)
 +KERNEL[687954.894422] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002 (hid)
 +KERNEL[687954.894456] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7 (input)
 +KERNEL[687954.948304] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7/​event6 (input)
 +KERNEL[687954.948506] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​hidraw/​hidraw1 (hidraw)
 +KERNEL[687954.948690] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1 (usb)
 +KERNEL[687954.968290] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003 (hid)
 +KERNEL[687954.975258] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8 (input)
 +KERNEL[687955.028367] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8/​event7 (input)
 +KERNEL[687955.028396] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​hidraw/​hidraw2 (hidraw)
 +UDEV  [687955.162011] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2 (usb)
 +UDEV  [687955.270187] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1 (usb)
 +UDEV  [687955.270897] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0 (usb)
 +UDEV  [687955.309541] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002 (hid)
 +UDEV  [687955.309583] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003 (hid)
 +UDEV  [687955.310787] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8 (input)
 +UDEV  [687955.311205] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​hidraw/​hidraw2 (hidraw)
 +UDEV  [687955.311749] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7 (input)
 +UDEV  [687955.312694] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​hidraw/​hidraw1 (hidraw)
 +UDEV  [687955.441358] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7/​event6 (input)
 +UDEV  [687955.441382] add      /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8/​event7 (input)
 +KERNEL[687974.324411] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7/​event6 (input)
 +UDEV  [687974.325118] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7/​event6 (input)
 +KERNEL[687974.328277] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7 (input)
 +KERNEL[687974.328291] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​hidraw/​hidraw1 (hidraw)
 +KERNEL[687974.328299] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002 (hid)
 +KERNEL[687974.328305] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0 (usb)
 +UDEV  [687974.328817] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​input/​input7 (input)
 +UDEV  [687974.329307] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002/​hidraw/​hidraw1 (hidraw)
 +UDEV  [687974.329765] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0/​0003:​04D9:​1702.0002 (hid)
 +UDEV  [687974.330375] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.0 (usb)
 +KERNEL[687974.337418] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8/​event7 (input)
 +UDEV  [687974.337628] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8/​event7 (input)
 +KERNEL[687974.356324] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8 (input)
 +KERNEL[687974.356344] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​hidraw/​hidraw2 (hidraw)
 +KERNEL[687974.356352] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003 (hid)
 +KERNEL[687974.356358] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1 (usb)
 +UDEV  [687974.356856] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​hidraw/​hidraw2 (hidraw)
 +UDEV  [687974.356876] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003/​input/​input8 (input)
 +UDEV  [687974.357189] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1/​0003:​04D9:​1702.0003 (hid)
 +UDEV  [687974.357709] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2/​1-2:​1.1 (usb)
 +KERNEL[687974.364291] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2 (usb)
 +UDEV  [687974.364570] remove ​  /​devices/​pci0000:​00/​0000:​00:​06.0/​usb1/​1-2 (usb)
 +</​code>​
 +//​*Подключение и отключение USB клавиатуры//​
linux_device.txt · Последние изменения: 2016/01/20 02:49 — sander