Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция. |
Linux
Linux: работа с устройствами (физическими или виртуальными)
Обзор присутствующих устройств в системе (Device Inspection in Linux)
Возникают ситуации, когда требуется диагностика и проверка установленного или виртуализированного оборудования. Устройство может не определиться, либо определиться и не работать, либо определиться, но использовать неправильный драйвер. Все эти ситуации требует диагностики и настройки.
Применяются следующие команды для инспекции оборудования
- lsusb - показывает информацию об устройствах на шине USB.
- lspci - показывает информацию об устройствах на шине PCI.
В случае отсутствия исполняемых файлов, они могут находить в устанавливаемых пакетах pciutils и usbutils.
Вывод команд содержит список USB и PCI устройств идентифицированных системой. В линуксе драйвера называются модулями ядра которые можно подключать и отключать, как на этапе сборки ядра, так и динамически.
Синтаксис команд весьма схожий, поэтому теоретически рассматривать не имеет смысла обе, покажу на примере lspci, а демо сделаю для двух команд.
Итак, если ввести просто lspci, то мы получим список всех устройств подключенных по шинам PCI:
root@localhost:~# lspci 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller 00:01.0 VGA compatible controller: Device 1234:1111 (rev 02) 00:02.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 00:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 00:04.0 Ethernet controller: Red Hat, Inc. Virtio network device 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02) 00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
Вывод состоит из трёх частей: адрес устройства, тип устройства и название устройства. Адрес в свою очередь состоит из трёх частей: номер шины, номер устройства и номер функции устройства. Если с первыми двумя всё понятно, то номер поясню - это количество экземпляров устройства которые используют один и тот же слот в PCI-шине. К примеру двухпортовая сетевая карта будет отображать два устройства на одном слоте шины.
Для того чтобы посмотреть детальную информацию по какому-либо устройству можно использовать команду lspci с дополнительными ключами:
root@localhost:~# lspci -v -s 00:01.0 00:01.0 VGA compatible controller: Device 1234:1111 (rev 02) (prog-if 00 [VGA controller]) Subsystem: Red Hat, Inc. Device 1100 Flags: fast devsel Memory at fd000000 (32-bit, prefetchable) [size=16M] Memory at febd0000 (32-bit, non-prefetchable) [size=4K] Expansion ROM at 000c0000 [disabled] [size=128K] Kernel driver in use: bochs-drm Kernel modules: bochs_drm
Чтобы посмотреть какой модуль ядра использует система для данного устройства:
root@localhost:~# lspci -s 00:1f.0 -k 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02) Subsystem: Red Hat, Inc. QEMU Virtual Machine Kernel driver in use: lpc_ich Kernel modules: lpc_ich
Так же можно взглянуть на иерархию шины PCI:
root@localhost:~# lspci -t -v -[0000:00]-+-00.0 Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller +-01.0 Device 1234:1111 +-02.0 Red Hat, Inc. Virtio SCSI +-03.0 Red Hat, Inc. Virtio SCSI +-04.0 Red Hat, Inc. Virtio network device +-1f.0 Intel Corporation 82801IB (ICH9) LPC Interface Controller +-1f.2 Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] \-1f.3 Intel Corporation 82801I (ICH9 Family) SMBus Controller
Модули (драйверы и не только) ядра
Список загруженных модулей ядра можно посмотреть командой lsmod
'root@localhost:~# lspci -t -v -[0000:00]-+-00.0 Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller +-01.0 Device 1234:1111 +-02.0 Red Hat, Inc. Virtio SCSI +-03.0 Red Hat, Inc. Virtio SCSI +-04.0 Red Hat, Inc. Virtio network device +-1f.0 Intel Corporation 82801IB (ICH9) LPC Interface Controller +-1f.2 Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] \-1f.3 Intel Corporation 82801I (ICH9 Family) SMBus Controller'
Вывод состоит из трёх колонок:
- Module - название модуля
- Size - объем оперативной памяти занимаемой модулем
- Used by - список модулей которые зависят от конкретных модулей
С помощью команды modinfo можно посмотреть ощутимо больше информации о модуле, к примеру:
'[root@li2155-195 ~]# modinfo ext4 filename: /lib/modules/4.18.0-193.14.2.el8_2.x86_64/kernel/fs/ext4/ext4.ko.xz softdep: pre: crc32c license: GPL description: Fourth Extended Filesystem author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others alias: fs-ext4 alias: ext3 alias: fs-ext3 alias: ext2 alias: fs-ext2 rhelversion: 8.2 srcversion: 408EBC8810B3BE8D2C737DF depends: mbcache,jbd2 intree: Y name: ext4 vermagic: 4.18.0-193.14.2.el8_2.x86_64 SMP mod_unload modversions sig_id: PKCS#7 signer: CentOS Linux kernel signing key sig_key: 4B:D0:A9:10:8D:FE:73:3E:92:80:DF:8E:CF:B1:3F:46:D3:64:29:C5 sig_hashalgo: sha256 signature: 0A:81:D1:32:CE:0D:2B:7A:1D:1F:69:BA:03:1B:92:32:87:00:70:9D: AC:EE:09:97:F2:4A:F8:95:A2:C2:0A:51:EF:9F:8B:7A:48:A7:83:98: 6C:DA:B5:26:7A:2D:B7:A7:43:75:05:C4:87:BD:CC:ED:86:C6:FE:9B: 90:8E:3D:1D:8B:E1:79:2B:9A:B5:E9:C1:A9:30:9D:EA:7A:1B:1C:23: AB:54:AD:1B:2E:39:0D:F3:8D:1B:62:28:1E:C1:B4:54:E0:26:D8:24: 9A:9A:DE:EF:6B:07:26:27:EC:88:32:25:2E:8E:0D:18:FA:0E:34:37: B7:C8:5B:20:75:B2:CA:DB:7E:69:D2:DF:D2:37:5C:ED:F0:C3:08:14: E3:2E:EA:1A:2A:5E:FD:D8:46:37:CA:62:E0:91:E2:8A:B6:A4:00:3D: 5D:1D:5E:2A:80:B0:08:A4:4F:2D:DE:7C:02:83:F9:0D:B7:D1:84:5C: A8:3B:86:A1:D2:9A:3B:7D:4B:E1:FA:C5:9D:78:0E:B2:41:D7:A1:35: 9D:E6:62:20:07:02:1B:93:16:7A:7C:3F:7F:A4:B4:E4:4D:41:C6:D1: B4:A3:0E:9B:BC:D7:F3:16:C6:F9:57:54:75:81:3D:42:D1:13:7C:A0: 70:E0:65:C1:B6:8B:6B:19:FA:EA:B7:97:DC:C3:92:EC:F7:E3:6A:17: 53:EE:4F:16:25:59:42:10:79:0F:AE:F0:44:B1:4F:85:3F:56:88:9F: 0B:9F:21:85:9D:4F:BE:DA:FF:F0:99:A6:88:1F:DF:B9:64:31:68:9A: 78:DF:31:E0:25:46:9A:4F:1C:61:CE:EE:EF:24:F0:0B:A5:0F:13:AC: B9:BB:38:2E:5D:F5:E3:97:1B:B4:4F:51:2C:9E:8E:F6:08:86:ED:0A: C1:67:FB:78:B1:C9:8D:A7:AD:F8:72:D3:8D:B3:06:C2:5E:A7:1F:00: 09:BB:93:50:50:13:C1:E3:5F:7F:B5:AD:0A:32:0C:58:98:67:A0:81: DD:89:1E:F1'
Файлы конфигурации модулей обычно находятся в двух директориях:
- /etc/modprobe.conf - общий файл конфигурации
- /etc/modprobe.d/ - индивидуальные файлы конфигурации
Подключить или отключить модули можно командами
- modprobe $имя_модуля - для подключения
- modprobe -r $имя_модуля - для отключения
Логи о подключении или или отключении модулей можно увидеть в файле /var/log/messages или используя journalctl.
Файлы хранящие информацию об устройствах
Все команды с приставками ls (продемонстрированные ранее lspci, lsusb и lsmod) работают как фронтэнд части для хранилищ информации об устройствах или модулях. В целом вся специальная информация располагается в каталогах /proc, /sys и /dev. Эти каталоги не существуют на самом деле в файловой системе -- это точки монтирования из оперативной памяти.
Каталог /proc содержит информацию о запущенных процессах, текущих аппаратных ресурсах и состоянии операционной системы:
- /proc/cpuinfo - информация о центральном процессоре
- /proc/meminfo - информация об имеющейся оперативной памяти
- /proc/interrupts - информация о настройках прерываний всех устройств ввода/вывода
Каталог /sys содержит базовую информацию о подключенных устройствах.
Каталог /dev содержит информацию об интерфейсах работы с модулями ядра.
Устройства хранения
Как уже было упомянуто, устройства хранения имеют системные файлы в каталоге /dev и имеют следующий список префиксов для идентификации:
- sd - IDE, SSD и USB блочные устройства, не важно по каким шинам подключены, будь то SATA, pci или SCSI, начиная с версии ядра линукса 2.4 они были объединены в один префикс.
- mmcblk - имеют SD кард-ридеры
- nvme - префикс соответственно имеют NVME устройства хранения
Linux процесс загрузки
Для загрузки главного компонента управления операционной системой - ядра требуется загрузчик, который в свою очередь будет загружен при помощи микрокода BIOS или EFI на материнской плате. Загрузчик может сконфигурировать ядро путём передачи ему параметров, к примеру корневой раздел файловой системы или режимы работы операционной системы. После загрузки кода ядра оно производит конфигурирование оборудования. Далее ядро вызывает систему менеджмента процессов, которой присваивается PID1, и она управляет всеми последующими процессами.