Опубликован: 18.04.2021 | Доступ: свободный | Студентов: 998 / 513 | Длительность: 04:36:00
Лекция 2:

Linux

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
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, и она управляет всеми последующими процессами.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Рустам Тагаев
Рустам Тагаев

Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция.