Определение и настройка аппаратной части
Основные понятие
- HAL (сокр. от англ. Hardware Abstraction Layer) – более не разрабатываемый демон, представлявший слой аппаратных абстракций для Linux и некоторых других Unix-образных систем. Благодаря ему ОС может обращаться к устройствам через их абстрактные представления (конкретную инструкцию устройству будет передавать драйвер).
- D-Bus – Представляет информацию о железе софту
- udev –Управление устройствами для новых версий ядра Linux, являющийся преемником devfs, hotplug и HAL. Его основная задача — обслуживание файлов устройств (англ. device nodes) в каталоге /dev и обработка всех действий, выполняемых в пространстве пользователя при добавлении/отключении внешних устройств, включая загрузку firmware.
udev
Менеджер устройств, пришедший на смену HAL.
- работает на уровне пользователя (больше свободы действий)
- Управляется событиями (а не опрашивает ядро по расписанию как HAL)
- удобные файлы конфигурации (а не xml как у HAL)
- содержит в системе только файлы активных устройств (а не всех устройств как HAL)
- сохраняет имена устройств при переподключение
Инструменты для работы с udev – udevadm, в арсенале которого имеется большое количество различных опций:
Опция | Описание опции |
---|---|
info | получение информации из БД |
trigger | запросить события для устройства |
settle | дождаться завершения обработки |
control | управление демоном |
monitor | следить за событиями |
test | симулировать запуск события |
Примеры использования udevadm:
Получим информацию о сетевой карте
- ключ
-a
– вывод атрибутов - ключ
-a
– путь
udevadm info -a -p /sys/class/net/ens160
Включаем мониторинг событий происходящих на уровне ядра (в данном случае наблюдалось включение-отключение флешки)
udevadm monitor --property --kernel
Протестируем события, которые могут произойти с блочным устройством
udevadm test /sys/block/sda/
sysfs
sysfs – виртуальная файловая система. Экспортирует информацию о драйверах и устройствах на уровень пользователя. Монтируется в /sys
devices/
– все устройства ядраbus/
– перечень шинdrivers/
– каталоги драйверовblock/
– каталоги блочных устройствclass/
– группировка устройств по классам
директория /proc
procfs — специальная файловая система, используемая в UNIX-подобных операционных системах. Позволяет получить доступ к информации из ядра о системных процессах. Необходима для выполнения таких команд как ps, w, top. Обычно её монтируют на /proc
Содержит информация о всех запущенных процессах
- Создается в оперативной памяти при загрузке
- Количество файлов зависит от конфигурации данной системы
- Для работы нужны права суперпользователя
- Внесения изменений сохраняются только до конца сеанса
Примеры использования
Получаем информацию о процессоре
cat /proc/cpuinfo
Посмотрит информацию обо всех смонтированных файловых системах
cat /proc/mounts
Покажет сколько одновременно открытых файлов может использовать пользователь
cat /proc/sys/fs/file-max
Изменим значение file-max
echo 1000000 > /proc/sys/fs/file-max
Посмотрим разрешена ли пересылка пакетов межу сетевыми картами
cat /proc/sys/net/ipv4/ip_forward
Интерфейсы работы с драйверами ядра
/dev/sd буква
– жесткий диск в системах на ядре Linux/dev/sd буква номер
– раздел диска/dev/sr номер
– CD-ROM/dev/eth номер
– Сетевой интерфейс Ethernet/dev/wlan номер
– Сетевой интерфейс Wireless/dev/lp номер
– Принтеры/dev/video номер
– Устройство изображений, камеры, фотоаппараты и т.д./dev/bus/usb/000/номер
– Устройство номер на шине USB первого контролера (000)/dev/dsp
– звуковой вывод
Команды вывода перечня устройств
- lsmod – информация о модулях ядра
- lspci – информация об устройствах PCI
- lspcmcia – информация об устройствах PCMCIA (для ноутбуков)
- lsusb – информация о шине USB
- lshal – база устройств HAL
- lshw – детальная информация о комплектующих
Утилиты для работы с модулями ядра
- lsmod – информация о модулях ядра
- modinfo – информация о конкретном модуле
- rmmod – удаление модуля ядра
- insmod – установка модуля ядра
- modprobe – деликатное удаление или добавление модулей
Для того чтобы устройство работало, ему нужен модуль ядра, т.е. драйвер.
Пример работы
Посмотрим какие у нас есть модули ядра
lsmod ... sysimgblt 16384 1 drm_kms_helper psmouse 155648 0 fb_sys_fops 16384 1 drm_kms_helper ...
Среди прочих модулей был замечен такой – psmouse
, получим информацию о данном модуле
modinfo psmouse filename: /lib/modules/5.4.0-42-generic/kernel/drivers/input/mouse/psmouse.ko license: GPL description: PS/2 mouse driver ...
Видим что это драйвер PS/2. Удалим его
rmmod psmouse
проверим, действительно устройство отсутствует
lsmod | grep psmouse
Теперь попробуем его установить используя утилиту insmod
insmod psmouse insmod: ERROR: could not load module psmouse: No such file or directory
Так как insmod не умеет работать с зависимостями. Для аккуратной установки используем утилиту modprobe, которая проверит все зависимости и установит модуль
modprobe psmouse
Проверяем, устройство появилось!
Взаимодействие с CPU
Основные понятия:
- IRQ – Механизм прерываний. Сигнал от программного или аппаратного обеспечения, сообщающий процессору о наступлении какого-либо события, требующего немедленного внимания. Прерывание извещает процессор о наступлении высокоприоритетного события, требующего прерывания текущего кода, выполняемого процессором.
- IO адреса – обмен информацией между устройствами и CPU
- DMA – Прямой доступ к памяти (англ. direct memory access, DMA) Обращение к памяти минуя ОЗУ. Так как данные не пересылаются в ЦП и обратно, скорость передачи увеличивается
Все перечисленные выше технологи настраиваются автоматически, контроллером материнской платы.
Получим информацию о прерываниях
cat /proc/interrupts
Получить информацию об адресации IO по портам
cat /proc/ioports
Получить информацию об адресации IO в памяти
cat /proc/iomem
Получить информацию о DMA
cat /proc/dma 4: cascade
Устройства хранения информации
- PATA – (англ. Advanced Technology Attachment) или IDE (англ. Integrated Drive Electronics) — параллельный интерфейс подключения накопителей (гибких дисков, жёстких дисков и оптических дисководов) к компьютеру. В 1990-е годы был стандартом на платформе IBM PC; в настоящее время вытеснен своим последователем — SATA — и с его появлением получил название PATA (Parallel ATA).
- SATA – (англ. Serial ATA) Последовательный интерфейс обмена данными с накопителями информации. SATA является развитием параллельного интерфейса ATA (IDE), который после появления SATA был переименован в PATA (Parallel ATA).
- SCSI – Стандарт передачи данных. SCSI (англ. Small Computer System Interface, произносится «скази») — представляет собой набор стандартов для физического подключения и передачи данных между компьютерами и периферийными устройствами.
- SAS – Serial Attached SCSI, Замена SCSI
Смотрим, что куда смонтировано
blkid /dev/sr0: UUID="2020-04-23-08-02-07-00" LABEL="Ubuntu-Server 20.04 LTS amd64" TYPE="iso9660" PTUUID="36b64baf" PTTYPE="dos" /dev/sda2: UUID="ecf92244-9c11-4633-8fc1-ee48a7a905a7" TYPE="ext4" PARTUUID="e5d3495a-106d-49a0-b285-557eed8d28f7" /dev/sda3: UUID="IuZpdo-8Lk9-Z7yd-7WdX-AEqc-oncR-rQnvqT" TYPE="LVM2_member" PARTUUID="04f32575-3552-447b-b1e4-d905f89a838a" ...