LINUX.ORG.RU

Связка /dev/file с /proc/devices/file

 ,


0

1

Ковыряю связку driver + tool не могу кое что понять.

Драйвер создает символьное устройство (создается соответствующий файл в /proc/devices), а тулза создает файл в /dev с таким же название и таким же номером через mknod. В последствии тулза взаимодействует (считывает/записывает параметры) с устройством через ioctl файла в /dev

Получается, файл в /dev как то связывается с устройством (тоже по сути файлом) в /proc/devices. Я ошибаюсь, если думаю, что ОС сама как то осуществляет эту связку? Как тогда это работает?

Вот я может глупость напишу, но как мне кажется в proc только справочная информация, не стоит думать что это некий реальный файл. /proc/devices это виртуальный файл в VFS.

Там ты можешь подсмотреть, на какой major у тебя село устройство, этот номер выбирается вроде как динамически. И вот используя его, ты делаешь вызов mknod, причем minor покажет тебе экземпляр устройства. Например, у тебя два ком порта тогда /dev/ttyS0 и /dev/ttyS1. Вот и тут, один общий major, а у экземпляров 0 1 2 и т.д., например /dev/k0008580 и /dev/k0008581

В общем, для доступа к символьному устройству, выполни mknod. И через этот файл и работай, шли ему ioctl и прочее.

Я считаю что это тупая система доступа к устройствам. Проще, если бы сама система создавала в /dev/char/k0008580 и через это можно было бы работать. Почему сделано так, с этим mknod костылем - мне не очень понятно. Наверное я не понял сокровенную тайну. Может чтоб жизнь медом не казалась? Чтобы все страдали?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Спасибо за разъяснение, получается я был прав, предполагая, что тулза взаимодействует с символьным устройством (по факту сервисом) через создание файла в /dev с аналогичным названием. Любопытный момент. Но оцень адекватность способа такого взаимодействия в системе пока не могу, слишком зелен пока ))

k000858 ()