Шины в этом ноутбуке

Шины: зачем их несколько

Теория шин полезна, когда видно, как она выглядит на живой машине. Ниже — полная карта шин ноутбука Dell Latitude 7400 (Ubuntu 26.04, ядро 7.0.0). Все выводы команд сняты на нём, а не переписаны из учебника.

PCIe: скелет всей машины

Начнём с дерева. lspci -t рисует его как дерево — от корневого комплекса к мостам и устройствам:

-[0000:00]-+-00.0   корневой комплекс (Host bridge)
           +-02.0   видеокарта (UHD Graphics 620)
           +-14.0   USB-контроллер (xHCI)
           +-14.3   Wi-Fi (CNVi)
           +-15.0   I2C-контроллер №0
           +-15.1   I2C-контроллер №1
           +-15.3   I2C-контроллер (платформенный)
           +-19.0   I2C-контроллер
           +-1c.0-[01-39]----00.0-[02-39]--+-00.0-[03]----00.0
           |                               +-01.0-[04-38]--
           |                               \-02.0-[39]----00.0   ← USB-контроллер Thunderbolt
           +-1d.0-[3a]----00.0
           +-1d.4-[3b]----00.0
           +-1f.0   LPC-мост (встроенный контроллер)
           +-1f.3   звук
           +-1f.4   SMBus
           +-1f.5   SPI-контроллер (прошивка)

Как это читается:

  • 00:00.0 — корневой комплекс: с него начинается вся PCIe. Дальше всё висит на нём;
  • 00:02.0 — видеокарта. Она на PCIe, как и всё остальное, — «встроенная» значит «в процессоре», а не «вне шины»;
  • 00:14.0 — контроллер USB. К нему мы вернёмся;
  • 00:15.x, 00:19.0 — контроллеры I2C. Их в ноутбуке четыре: именно через них процессор общается с датчиками и служебными микросхемами;
  • 00:1c.0, 00:1d.0, 00:1d.4 — корневые порты PCIe. Через них подключены внешние по отношению к чипсету устройства;
  • 00:1f.0 — LPC-мост, наследник ISA: через него живёт встроенный контроллер (питание, клавиатура, вентилятор);
  • 00:1f.4 — SMBus, родственник I2C для управления питанием и памятью;
  • 00:1f.5 — SPI-контроллер: к нему подключена флеш-память с прошивкой.

Обратите внимание на строку 1c.0-[01-39]----00.0-[02-39]: это Thunderbolt. Порт пробрасывает наружу целую PCIe-ветку — мосты JHL6340 (Alpine Ridge) на шинах 01, 02, 03 и дальше. Поэтому в дереве появляется «матросская вложенность»: один мост за другим, вплоть до USB-контроллера на шине 39 и контроллера Thunderbolt на 03:00.0.

Накопитель: NVMe — это не SATA

$ lsblk -o NAME,TRAN,SIZE,MODEL
NAME        TRAN   SIZE MODEL
nvme0n1     nvme  931,5G Samsung SSD 980 1TB

TRAN=nvme — диск подключён по PCIe, а не по SATA. Отдельного SATA-контроллера в этой машине нет вовсе: NVMe — это протокол поверх PCIe, и «шина» у него та же, что у видеокарты.

USB: два контроллера, четыре шины

$ lspci | grep -i usb
00:14.0 USB controller: Intel Corporation Cannon Point-LP USB 3.1 xHCI Controller
39:00.0 USB controller: Intel Corporation JHL6340 Thunderbolt 3 USB 3.1 Controller

Контроллеров два: один в чипсете, второй — в контроллере Thunderbolt. Каждый xHCI даёт две шины: одну для USB 2.0 (480 Мбит/с), одну для USB 3.x (10 Гбит/с). Отсюда четыре шины в lsusb:

$ lsusb -t
Bus 001: root_hub, Driver=xhci_hcd/12p, 480M      ← USB 2.0, чипсет
    Port 003: Xiaomi Wireless Mouse 3 (HID, 12M)
    Port 006: Integrated Webcam (Video, 480M)
    Port 010: Bluetooth 9460/9560 (Wireless, 12M)
Bus 002: root_hub, Driver=xhci_hcd/6p, 10000M     ← USB 3.x, чипсет (пусто)
Bus 003: root_hub, Driver=xhci_hcd/2p, 480M       ← USB 2.0, Thunderbolt (пусто)
Bus 004: root_hub, Driver=xhci_hcd/2p, 10000M     ← USB 3.x, Thunderbolt (пусто)

Что из этого видно про шины:

  • устройства сидят на разных скоростях — мышь и Bluetooth на 12 Мбит/с (USB 1.1), камера на 480 Мбит/с (USB 2.0). Им не нужна USB 3;
  • USB 3-шины пустуют — обычная картина: быстрые порты ждут флешку или диск;
  • хаб внутри контроллера (12p, 6p, 2p) — это число портов, которые контроллер умеет обслуживать.

Проверить у себя: lsusb (список), lsusb -t (дерево), ls /sys/bus/usb/devices (всё, включая интерфейсы).

I2C и SMBus: шина управления

В lspci четыре устройства называются Serial bus controller — это контроллеры I2C. В системе они превращаются в двенадцать адаптеров (i2c-0 … i2c-11): часть — от этих контроллеров, часть — от видеоядра (линии DDC для чтения EDID монитора), часть — от SMBus.

Устройства на шинах видны так:

$ ls /sys/bus/i2c/devices
4-0036
4-0037
4-0050

Запись 4-0036 читается как «шина 4, адрес 0x36». То есть на i2c-4 висят три устройства:

  • 0x50 — типичный адрес EEPROM (часто именно там лежит EDID монитора или служебные данные платформы);
  • 0x36 и 0x37 — служебные устройства платформы. Что именно это за микросхемы, по адресам не определить: нужна документация Dell на конкретную модель.

Именно поэтому I2C — шина управления, а не данных: по двум проводам (SDA и SCL) десятки устройств с разными адресами обмениваются байтами. Камера по такой шине видео не передаст — для этого есть USB.

SPI и ответ на вопрос про UEFI

$ ls /sys/bus/spi/devices
spi0.0
spi0.1

spi0 — контроллер SPI (тот самый 00:1f.5), а spi0.0 — устройство на нём. На этой шине живёт флеш-память с прошивкой.

Теперь про UEFI. Проверяем:

$ ls /sys/firmware/efi
$ cat /sys/class/dmi/id/bios_vendor /sys/class/dmi/id/bios_version /sys/class/dmi/id/bios_date
Dell Inc.
1.43.0
09/08/2025
$ journalctl -k | grep -i 'EFI v'
окт 22 ... kernel: efi: EFI v2.7 by American Megatrends

Что это значит:

  1. система загружена через UEFI (/sys/firmware/efi присутствует);
  2. прошивка — Dell 1.43.0 от 08.09.2025, сделана American Megatrends (AMI);
  3. физически она лежит во флеш-памяти на шине SPI, а не «на PCIe» и не «на USB».

UEFI — не устройство на шине. Это прошивка, которую процессор исполняет при включении: читает её из SPI-флеш, выполняет свой код, своими драйверами опрашивает PCIe и USB (поэтому возможна загрузка с USB), а затем передаёт управление ядру. После этого от UEFI остаются только сервисы времени выполнения и переменные — их видно в /sys/firmware/efi/efivars.

Точная формулировка: UEFI хранится в SPI-флеш; работает поверх PCIe и USB, но само на них не «сидит».

Как осмотреть свою машину

$ lspci -t                       # дерево PCIe
$ lspci -k                       # какие драйверы взяли устройства
$ lsblk -o NAME,TRAN,SIZE,MODEL  # транспорт накопителей (nvme/sata/usb)
$ lsusb -t                       # дерево USB со скоростями
$ ls /sys/bus/i2c/devices        # устройства I2C: «шина-адрес»
$ ls /sys/bus/spi/devices        # устройства SPI
$ ls /sys/firmware/efi           # загружено ли через UEFI

Источники

  • Документация ядра: https://docs.kernel.org/driver-api/ — подсистемы PCI, USB, I2C, SPI.
  • man 8 lspci, man 8 lsusb, man 8 lsblk, man 8 i2cdetect.
  • Все выводы команд — с ноутбука Dell Latitude 7400 (Ubuntu 26.04, ядро 7.0.0), сняты 25.10.2026.

Что ещё не проверено

  • Что за микросхемы на i2c-4 (0x36, 0x37, 0x50) — по адресам не определить, нужна документация производителя. Названо только типичное назначение 0x50.
  • i2cdetect на машине не запускался: утилита не установлена (пакет i2c-tools). Поэтому список адаптеров (i2c-0…11) взят из /sys, а не из i2cdetect -l — привязка «адаптер → контроллер» не проверена.
  • Внутреннее устройство Thunderbolt-ветки описано по дереву PCIe; какие именно устройства появятся при подключении дока — не проверялось.
Оценка статьи 0

Комментарии

Пока комментариев нет.