Linux Каждое устройство в системе имеет свой собственный набор фиксированных правил работы, существует множество типов и моделей устройств. Записывать в ядро фиксированные правила для каждого устройства непрактично и не имеет смысла.
Каждое устройство имеет соответствующий драйвер, обеспечивающий правильную работу в системе. Для всех устройств, от небольшого светодиодного фонаря до большой сетевой карты, требуются соответствующие драйверы. Драйвер можно рассматривать как уровень программного обеспечения между прикладной программой и реальным устройством.
Прикладная программа управляет устройством, сначала отправляя сигнал драйверу. Затем драйвер получает сигнал и командует устройству выполнить соответствующее действие. Если прикладная программа хочет получить данные, собранные устройством, это также необходимо сделать через драйвер.
Классификация устройств в Linux
Системы Linux делят устройства на три основных типа, и каждый модуль обычно реализуется как один из этих классов.
01 Символьное устройство
Символьное устройство — это устройство, к которому можно получить доступ как к потоку байтов. Эта функция реализуется символьным драйвером устройства. Драйверы символьных устройств обычно реализуют как минимум системные вызовы открытия, закрытия, чтения и записи.
Символьное устройство имеет последовательный доступ, и соответствующая информация может быть прочитана только после того, как устройство ответит. Доступ к нему невозможен в произвольном порядке, и каждое символьное устройство имеет номер устройства, который состоит из основного номера устройства и младшего номера устройства. Общие символьные устройства, такие как последовательные порты и IIC.
Соответствующие файлы для символьных устройств находятся в каталоге /dev, и каждый файл соответствует одному аппаратному обеспечению. В каталоге /dev системы Linux используйте ls -l для просмотра подробностей, первая буква «c» — это идентификатор файла символьного устройства.
02 Блокирующее устройство
Как и символьные устройства, доступ к блочным устройствам осуществляется через узел файловой системы в каталоге /dev. Файловые системы могут размещаться на блочных устройствах. Общие блочные устройства, такие как диск, флэш-память EMMC, флэш-память NAND, SD-карта и т. д. Каждое блочное устройство также имеет r--+'/h vortex【5 фрагментов【номер устройства, который состоит из номера первичного устройства и вторичного устройства. число. Используйте команду ls -l для просмотра подробностей в каталоге /dev в системе Linux. Первая буква «b» идентифицирует файл блочного устройства. /dev Каждый файл блочного устройства в разделе dev соответствует разделу диска.
03 Сетевое оборудование
Любая сетевая транзакция проходит через сетевой интерфейс — устройство, которое может обмениваться данными с другими хостами. Обычно интерфейс представляет собой аппаратное устройство, но может быть и чисто программным устройством, например, в ifconfig есть lo для просмотра информации о сетевом интерфейсе, который является сетевым шлейфовым (loopback) интерфейсом.
Чтобы получить доступ к сетевым интерфейсам, нужно присвоить им уникальные имена, например eth0, eth1, lo и т. д. Однако в файловой системе не существует соответствующего узла для этого имени. Сетевые интерфейсы не имеют номера устройства, как символьные и блочные устройства, только уникальное имя, такое как eth0, eth1 и т. д., и это имя не обязательно должно соответствовать узлу файла устройства.
Ядро использует набор функций, связанных с передачей пакетов, для взаимодействия с драйверами сетевых устройств, которые отличаются от методов read() и write() символьных и блочных устройств.
Различные символьные и блочные устройства отражают идею дизайна Linux «все есть файл»; сетевые устройства — единственные устройства, которые не отражают эту идею.
Узел устройства, драйвер устройства и ассоциация устройства
Во всей системе установлено множество устройств. Когда мы получаем доступ к узлу устройства, как система узнает, какой драйвер устройства использовать и к какому устройству обращаться? Это достигается за счет номера устройства.
При создании узла устройства вам необходимо указать основной номер устройства и младший номер устройства. Для узлов устройств имя не важно, наиболее важным является номер устройства, который собственно и определяет соответствующий драйвер и соответствующее устройство.
Первичные номера устройств используются для различения разных типов устройств, а вторичные номера устройств используются для различения нескольких устройств одного и того же типа. Для часто используемых устройств в Linux предусмотрены согласованные номера, например, для жесткого диска — номер главного устройства 3.
Используйте команду ls -l plus name в каталоге /dev, чтобы просмотреть соответствующие номера основного и дополнительного устройств.
Основное устройство
Когда драйвер инициализируется, он регистрирует свой драйвер и соответствующий номер главного устройства в системе, чтобы, когда приложение обращается к узлу устройства, система знала, к какому драйверу оно обращается. Вбить главный номер системного устройства можно через файл /proc/devices.
Младший номер оборудования
Когда драйвер запускается, он создает объект устройства для каждого обнаруженного устройства, которым он может управлять, и присваивает ему второстепенный номер устройства, чтобы различать разные устройства. Таким образом, когда приложение обращается к узлу устройства, драйвер знает, к какому устройству оно обращается, на основе младшего номера.
Первоначально опубликовано на www.forlinx.net.