Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 硬體掃描與驅動載入流程詳解:從 PCI 總線枚舉到 udev 事件

編輯:Linux 教學

Linux 核心啟動時如何發現硬體並載入對應驅動?本文梳理從 PCI 總線掃描到驅動 probe 的完整路徑。

完整流程圖解

  1. 系統啟動 → BIOS/UEFI 移交控制權。
  2. 掃描 PCI 總線(PCI Enumeration):核心遍歷總線,讀取各裝置的設定空間(Configuration Space),取得 Vendor ID、Device ID、Class Code 等資訊。
  3. 建立 PCI 裝置列表:在驅動載入前,核心已在記憶體中建立完整的 struct pci_dev 列表。
  4. 核心發送 uevent:對每個偵測到的裝置發送 add 事件至 udev。
  5. 用戶空間 uevd 處理規則:匹配 /etc/udev/rules.d/ 規則(如 50-udev.rules),執行 modprobe $env{MODALIAS}。
  6. 模組別名解析:modprobe 讀取 /lib/modules/$(uname -r)/modules.alias,依 MODALIAS 找到對應模組(如 pci:v00008086d0000100E...)。
  7. 驅動註冊:模組初始化時呼叫 pci_register_driver(),提供 struct pci_driver 包含 pci_device_id 表(支援的裝置 ID 列表)。
  8. 核心匹配與 Probe:PCI 核心以 pci_device_id 比對已掃描裝置列表,匹配成功則呼叫驅動的 probe() 函數。
  9. 註冊子系統裝置:probe() 內通常註冊網路裝置(register_netdev)、區塊裝置等,完成驅動掛載。

關鍵檔案與指令

  • lspci -vv:查看 PCI 裝置詳細資訊(含驅動名稱)。
  • /sys/bus/pci/devices/:sysfs 暴露的 PCI 裝置樹。
  • modinfo <module> | grep alias:查看模組支援的硬體 ID。
  • udevadm monitor:即時觀察 uevent 事件。

理解此流程有助於除錯驅動未載入、裝置未被識別等問題。

Copyright © Windows教程網 All Rights Reserved