- Pci ������� ��� linux
- Устройства на шине PCI
- 16 команд для проверки аппаратной части компьютера в Linux
- Информация о комплектации компьютера
- 1. lscpu
- 2. lshw – список аппаратных устройств
- 3. hwinfo – информация об аппаратуре компьютера
- 4. lspci – список устройств PCI
- 5. lsscsi — список устройств scsi
- 6. lsusb – подробный список шин и устройств usb
- 7. Inxi
- 8. lsblk — список блочных устройств
- 9. df – дисковое пространство файловых систем
- 10. Pydf – команда df, написанная на языке Python
- 11. fdisk
- 12. mount
- 13. free – проверка оперативной памяти
- 14. dmidecode
- 15. Файлы /proc
- 16. hdparm
- Заключение
- О команде lspci в Linux
- Что такое PCI?
- Скорость и использование PCI
- Изучение команды lspci
- Вывод
Pci ������� ��� linux
Библиотека сайта rus-linux.net
На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux | ||
Назад | Обслуживание периферийных устройств | Вперед |
Устройства на шине PCI
Архитектура PCI была разработана в качестве замены стандарту ISA с тремя основными целями: получить лучшую производительность при передаче данных между компьютером и его периферией, быть независимой от платформы, насколько это возможно, и упростить добавление и удаление периферийных устройств в системе. В настоящее время PCI широко используется в разных архитектурах: IA-32 / IA-64, Alpha, PowerPC, SPARC64 . Самой актуальной для автора драйвера является поддержка PCI автоопределения интерфейса плат: PCI устройства настраивается автоматически во время загрузки. Затем драйвер устройства получает доступ к информации о конфигурации устройства, и производит инициализацию. Это происходит без необходимости совершать какое-либо тестирование.
Каждое периферийное устройство PCI идентифицируется по подключению такими физическими параметрами, как: номер шины, номер устройства и номер функции. Linux дополнительно вводит и поддерживает такое логическое понятие как домен PCI. Каждый домен PCI может содержать до 256 шин. Каждая шина содержит до 32 устройств, каждое устройство может быть многофункциональным и поддерживать до 8 функций. В конечном итоге, каждая функция может быть однозначно идентифицирована на аппаратном уровне 16-ти разрядным ключом. Однако, драйверам устройств в Linux, не требуется иметь дело с этими двоичными ключами, потому что они используют для работы с устройствами специальную структуру данных pci_dev .
Примечание: Часто то, что мы житейски и физически (плата PCI) понимаем как устройство, в этой системе терминологически правильно называется: функция, устройство же может содержать до 8-ми эквивалентных (по своим возможностям) функций.
Адресацию PCI устройств в своей Linux системе смотрим:
Другое представление той же информации (тот же хост) можем получить так:
Здесь отчётливо видно (слева) поля, например для контроллера VGA: 0000:00:02.0 — выделены домен (16 бит), шина (8 бит), устройство (5 бит) и функция (3 бита). Поэтому, когда мы говорим об устройстве (далее), мы имеем в виду набор: номера домена + номер шины + номер устройства + номер функции.
С другой стороны, каждое устройство по типу идентифицируется двумя индексами: индекс производителя (Vendor ID) и индекс типа устройства (Device ID). Эта пара однозначно идентифицирует тип устройства. Использование 2-х основных идентификаторов устройств PCI (Vendor ID + Device ID) глобально регламентировано, и их актуальный перечень поддерживается в файле pci.ids , последнюю по времени копию которого можно найти в нескольких местах интернет, например по URL: http://pciids.sourceforge.net/ . Эти два параметра являются уникальным (среди всех устройств в мире) ключом поиска устройств, установленных на шине PCI. Для поиска (перебора устройств, установленных на шине PCI) в программном коде модуля в цикле используется итератор:
— где from — это NULL при начале поиска (или возобновлении поиска с начала), или указатель устройства, найденного на предыдущем шаге поиска. Если в качестве Vendor ID и/или Device ID указана константа PCI_ANY_ID=-1 , то предполагается выбор всех доступных устройств с таким идентификатором. Если искомое устройство не найдено (или больше таких устройств не находится в цикле), то очередной вызов возвратит NULL . Если возвращаемое значение не NULL , то возвращается указатель структуры описывающей устройство, и счётчик использования для устройства инкрементируется. Когда устройство удаляется (модуль выгружается) для декремента этого счётчика использования необходимо вызвать:
После нахождения устройства, но прежде начала его использования необходимо разрешить использование устройства вызовом: pci_enable_device( struct pci_dev *dev) , часто это выполняется в функции инициализации устройства: поле probe структуры struct pci_driver (см. далее), но может выполняться и автономно в коде драйвера.
Каждое найденное устройство имеет своё пространство конфигурации, значения которого заполнены программами BIOS (или PnP OS, или BSP) — важно, что на момент загрузки модуля эта конфигурационное пространство всегда заполнено, и может только читаться (не записываться). Пространство конфигурации PCI устройства состоит из 256 байт для каждой функции устройства (для устройств PCI Express расширено до 4 Кб конфигурационного пространства для каждой функции) и стандартизированную схему регистров конфигурации. Четыре начальных байта конфигурационного пространства должны содержать уникальный ID функции (байты 0-1 — Vendor ID, байты 2-3 — Device ID), по которому драйвер идентифицирует своё устройство. Вот для сравнения начальные строки вывода команды для того же хоста (видно, через двоеточие, пары: Vendor ID — Device ID):
Первые 64 байт конфигурационной области стандартизованы, остальные зависят от устройства. Самыми актуальными для нас являются (кроме ID описанного выше) поля по смещению:
Вся регистрация устройства PCI и связывание его параметров с кодом модуля происходит исключительно через значения, считанные из конфигурационного пространства устройства. Обработку конфигурационной информации (уже сформированной при установке PCI устройства) показывает модуль (архив pci.tgz ) lab2_pci.ko (заимствовано из [6]):
Небольшой фрагмент результата выполнения этого модуля:
$ sudo insmod lab2_pci.ko
$ lsmod | grep lab
$ dmesg | tail -n221 | head -n30
$ sudo rmmod lab2_pci
$ lsmod | grep lab2
Для использования некоторой группы устройства PCI, код модуля определяет массив описания устройств, обслуживаемых этим модулем. Каждому новому устройству в этом списке соответствует новый элемент. Последний элемент массива всегда нулевой, это и есть признак завершения списка устройств. Строки такого массива заполняются макросом PCI_DEVICE :
Созданная структура pci_device_id должна быть экспортирована в пользовательское пространство, чтобы позволить системам горячего подключения и загрузки модулей знать, с какими устройствами работает данный модуль. Эту задачу решает макрос MODULE_DEVICE_TABLE :
Кроме доступа к области конфигурационных параметров, программный код может получить доступ к областям ввода-вывода и регионов памяти, ассоциированных с PCI устройством. Таких областей ввода-вывода может быть до 6-ти (см. формат области конфигурационных параметров выше), они индексируются значением от 0 до 5. Параметры этих регионов получаются функциями:
— где bar во всех вызовах — это индекс региона: 0 . 5. Первые 2 вызова возвращают начальный и конечный адрес региона ввода-вывода ( pci_resource_end() возвращает последний используемый регионом адрес, а не первый адрес, следующий после этого региона.), следующий вызов — его размер, и последний — флаги. Полученные таким образом адреса областей ввода/вывода от устройства — это адреса на шине обмена (адреса шины, для некоторых архитектур — x86 из числа таких — они совпадают с физическими адресами памяти). Для использования в коде модуля они должны быть отображены в виртуальные адреса (логические), в которые отображаются страницы RAM посредством устройства управления памятью (MMU). Кроме того, в отличие от обычной памяти, часто эти области ввода/вывода не должны кэшироваться процессором и доступ не может быть оптимизирован. Доступ к памяти таких областей должен быть отмечен как «без упреждающей выборки». Всё, что относится к отображению памяти будет рассмотрено отдельно далее, в следующем разделе. Флаги PCI региона ( pci_resource_flags() ) определены в
; некоторые из них:
IORESOURCE_IO, IORESOURCE_MEM — только один из этих флагов может быть установлен.
IORESOURCE_PREFETCH — определяет, допустима ли для региона упреждающая выборка.
IORESOURCE_READONLY — определяет, является ли регион памяти защищённым от записи.
Основной структурой, которую должны создать все драйверы PCI для того, чтобы быть правильно зарегистрированными в ядре, является структура (
):
- name — имя драйвера, оно должно быть уникальным среди всех PCI драйверов в ядре, обычно устанавливается таким же, как и имя модуля драйвера, когда драйвер загружен в ядре, это имя появляется в /sys/bus/pci/drivers/ ;
- id_table — только что описанный массив записей pci_device_id ;
- probe — функция обратного вызова инициализации устройства; в функции probe драйвера PCI, прежде чем драйвер сможет получить доступ к любому ресурсу устройства (область ввода/вывода или прерывание) данного PCI устройства, драйвер должен, как минимум, вызвать функцию :
- remove — функция обратного вызова удаления устройства;
- . и другие функции обратного вызова.
Обычно для создания правильную структуру struct pci_driver достаточно бывает определить, как минимум, поля :
Теперь устройство может быть зарегистрировано в ядре:
— вызов возвращает 0 если регистрация устройства прошла успешно.
При завершении (выгрузке) модуля выполняется обратная операция:
Источник
16 команд для проверки аппаратной части компьютера в Linux
Информация о комплектации компьютера
Точно также, как для всего прочего, в вашей системе Linux есть много команд для получения информацию об аппаратной части вашего компьютера. Некоторые команды сообщают информацию только о конкретных компонентах оборудования, например, процессоре или памяти, а другие — выдают информацию сразу о нескольких устройствах.
В данной статье кратко рассказывается о нескольких наиболее часто используемых командах, предназначенных для получения информации и особенностях настройки различных периферийных устройств и компонентах компьютера. Среди рассматриваемых — команды lscpu, hwinfo, lshw, dmidecode, lspci и другие.
1. lscpu
Команда lscpu выдает информацию о процессоре и его составляющих. В ней нет каких-либо дополнительных параметров или функциональных возможностей.
2. lshw – список аппаратных устройств
Утилита общего назначения, которая сообщает подробную и краткую информацию о нескольких различных аппаратных устройствах, таких как процессор, память, диск, контроллеры usb, сетевые адаптеры и т.д. Команда lscpu извлекает информацию из различных файлов /proc.
Если вы хотите больше узнать о команде lshw, то обратите внимание на пост Получаем интфомацию в Linux об аппаратных частях компьютера с помощью команды lshw .
3. hwinfo – информация об аппаратуре компьютера
Утилита hwinfo является еще одной универсальной утилитой зондирования аппаратуры, которая может сообщить подробную и краткую информацию о многих различных аппаратных компонентах, причем может сообщить больше, чем утилита lshw.
4. lspci – список устройств PCI
Команда lspci выдает список всех шин PCI, а также подробную информация об устройствах, которые к ним подключены. Под эту категорию подпадают следующие устройства — адаптер vga, графическая карта, сетевой адаптер, порты usb, контроллеры sata и т.д.
Отфильтруйте информацию о конкретном устройстве с помощью команды grep.
5. lsscsi — список устройств scsi
Выдается список устройств scsi/sata, например, жестких дисков и оптических приводов.
6. lsusb – подробный список шин и устройств usb
Эта команда показывает информацию о контроллерах usb и подробные сведения о подключенных к ним устройствах. По умолчанию выдается краткая информация. Для того, чтобы о каждом порте usb получить подробную информацию, используйте параметр «-v».
В системе, информация о которой приведена выше, один порт usb используется для подключения мыши.
7. Inxi
Inxi является мега скриптом bash, состоящим из 10000 строк кода, с помощью которого из разных источников и команд системы будет получена подробная информация об аппаратном обеспечении и будет создан отчет в виде, позволяющим его читать пользователям, которые не являются техническими специалистами.
8. lsblk — список блочных устройств
Перечисляется информация о всех блочных устройствах, которыми являются разделы жестких дисков и других устройств хранения данных, например, оптических приводов и флэш-накопителей
9. df – дисковое пространство файловых систем
Отчеты о различных разделах, об их точках монтирования и о том, сколько в каждом разделе есть свободного места.
10. Pydf – команда df, написанная на языке Python
Улучшенный вариант команды df , написанной на языке python, который выдает информацию в цвете, что выглядит лучше, чем информация, выдаваемая командой df
11. fdisk
Fdisk является утилитой, предназначенной для изменения разделов жестких дисков, и ей также можно пользоваться для получения информации о списке имеющихся разделов.
12. mount
Команда mount используется для монтирования/демонтирования, а также для просмотра смонтированных файловых систем.
Опять же, используйте команду grep для отфильтровывания информации только о тех файловых системах, которые вам интересны
13. free – проверка оперативной памяти
С помощью команды free проверьте объем используемой, свободной и общий объема оперативной памяти, имеющейся в системе.
14. dmidecode
Команда dmidecode отличается от всех других команд. Она извлекает информацию об оборудовании, читая для этого данные из структур данных SMBOIS (которые также называются таблицами DMI).
Подробности смотрите на странице man.
15. Файлы /proc
Во многих виртуальных файлах каталога /proc содержится информация об аппаратном обеспечении и о конфигурациях. Ниже приведены некоторые из них.
Информация о процессоре/памяти
Информация о Linux/ядре
16. hdparm
Команда hdparm получает информацию об устройствах sata, например, жестких дисков.
Заключение
В каждой из команд используется чуть-чуть иной способ извлечения информации, и вам для, чтобы получить определенную информацию об оборудовании, возможно, потребуется попробовать более одной команды. Но все они есть в большинстве дистрибутивов Linux и их легко можно установить из репозиториев, используемых по умолчанию.
Для тех, кто не хочет запоминать и вводить команды, на рабочем столе есть графические инструментальные средства. Hardinfo и I-nex — некоторые из популярных инструментальных средств, с помощью которых можно получить подробную информацию о большом количестве различных аппаратных компонентов.
Источник
О команде lspci в Linux
Главное меню » Linux » О команде lspci в Linux
В этой статье мы объясним основы PCI, PCIe и команды lspci для отображения информации в вашей системе.
Что такое PCI?
PCI или Peripheral Component Interconnect – это интерфейс для добавления дополнительных аппаратных компонентов в компьютерную систему. PCIe или PCI Express – это обновленный стандарт, который используется сегодня. Например, предположим, что вы хотите добавить карту Ethernet к своему компьютеру, чтобы он мог получать доступ к Интернету и обмениваться данными. Карта нуждается в протоколе для связи с остальной частью внутренней системы, PCI может быть стандартным интерфейсом, используемым для добавления этой карты в вашу систему. Вам по-прежнему нужен драйвер для этой карты, чтобы ядро могло его использовать, однако PCI – это слот, а также шина и интерфейс, которые будут использоваться для добавления оборудования в систему со стандартным интерфейсом. Создание драйвера PCI linux будет следовать некоторым стандартным интерфейсам. Вы можете увидеть из структуры ниже стандартные методы, которые необходимо реализовать. Такие методы, как зондирование, удаление, приостановка, возобновление и т. д.
Скорость и использование PCI
PCI 3.0 может передавать данные со скоростью до 1 ГБ/сек на полосу. Различные устройства могут иметь более одной полосы, поэтому возможно, что отдельные устройства могут иметь скорость передачи данных в несколько гигабайт. Эти цифры всегда улучшаются по мере выхода новых версий спецификации и нового оборудования, поэтому всегда проверяйте наличие новейших и наиболее быстрых из возможных. Типы компонентов и гаджетов, которые вы можете купить с подключением к интерфейсу PCI, включают: адаптеры WIFI, Bluetooth, карты твердотельного хранилища NVME, видеокарты и многое другое.
Изучение команды lspci
Мы создали экземпляр Ubuntu 19.04 в облаке Google и теперь запущу команду lspci и посмотрю, что произойдет.
Вы видите по одной строке на устройство с числовым кодом и словесным описанием устройства. Фактически в этом выводе отображается 5 полей в каждой строке: слот, класс, поставщик, устройство и версия.
Итак, разбив первую строку, что у нас есть:
SLOT: 00: 00.0
Класс: Хост-мост
Производитель: Intel Corporation
Устройство: 440FX – 82441FX PMC
Revision: 02
И если посмотреть на слот 00: 04.0, это наш контроллер Ethernet, который выглядит как виртуальное устройство как часть виртуальной магии облачного развертывания Google.
Чтобы получить более подробную и подробную информацию о каждом слоте PCI, выполните следующую команду:
Эта команда разбивает каждую строку на поля компонентов и позволяет анализировать каждое устройство с помощью более описательных меток.
Вы также можете попробовать опцию -v для более подробного вывода
И используйте double v или tripple v для подробного вывода:
Или попробуйте параметр -mm для формата вывода, читаемого сценарием.
Чтобы узнать, какой драйвер ядра используется для каждого устройства, запустите параметр -k.
Многие из моих устройств используют драйвер virtio-pci.
Наконец, вы даже можете увидеть шестнадцатеричный дамп «стандартной части конфигурационного пространства» для каждого устройства PCI. Вы должны быть настоящим хакером ядра, чтобы понять, как использовать эту информацию. -x – это то, что дает вам вывод дампа.
Вывод
Команда lspci – это стандартная команда Linux, которую можно использовать для вывода информации об устройствах, подключенных к PCI в вашей системе. Это может быть полезно, чтобы узнать, какое у вас периферийное оборудование. Он также очень полезен для разработчиков, создателей драйверов устройств и системных специалистов низкого уровня для запроса информации об устройствах, драйверах и системе. Наслаждайтесь использованием lspci.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник