章 32. 熱插拔系統

內容目錄

32.1. 設備和介面
32.2. 熱插拔事件
32.3. 熱插拔設備組態
32.4. 自動化模組載入
32.5. 開機程序檔冷插拔
32.6. 錯誤分析

摘要

熱插拔系統可以控制電腦中大部份設備的起始化。熱插拔系統不僅可用於作業期間插入和移除的設備,並可用於系統啟動時所偵測到的所有設備。它與 sysfs 檔案系統及 udev 密切配合,在 章 33, 使用 udev 的動態裝置節點 中描述了相關的資訊。

直到核心啟動時,只會起始必要的設備,例如匯流排系統、開機磁碟或鍵盤。核心會為所有偵測到的設備觸發熱插拔事件。udevd 精靈會監聽這些事件,並執行 udev 來建立裝置節點和設定裝置。如果是無法自動偵測的裝置 (例如舊的 ISA 卡),則會使用靜態組態。

除了少數的歷史特例,大部份的設備只要一提供存取,就會立即起始化,不論是在系統開機或熱插拔設備時。在起始化期間,會使用核心來註冊介面。此註冊將會接著觸發熱插拔事件,以對各自的介面進行自動設定。

在舊版的 SUSE Linux 中,使用組態資料的靜態集做為起始設備的基礎。所有熱插拔事件都是由名為代辦的不同程序檔來處理。在這個版本的 SUSE Linux 中,熱插拔子系統已整合至 udev,且由 udev 規則提供舊版熱插拔代辦的功能。

您可在 /etc/sysconfig/hotplug 中,找到熱插拔子系統的一般設定。所有變數已加上註解。一般設備組態是根據 /etc/udev/rules.d 中找到的相符規則來進行 (請參閱 章 33, 使用 udev 的動態裝置節點)。特定設備的組態檔位於 /etc/sysconfig/hardware。舊版 SUSE Linux 使用的熱插拔事件回呼 /proc/sys/kernel/hotplug 通常是空的,因為 udevd 會經由網路連結插槽收到熱插拔訊息。

32.1. 設備和介面

熱插拔系統不僅會設定設備,也會設定介面。設備通常連接到匯流排,並提供介面所需的功能。介面代表設備的整個子集合或部份子集合的使用者能看到的大綱。設備通常需要設備驅動程式 (其形式為核心模組) 才能正確運作。此外,可能還需要某些高層次驅動程式,才能為使用者提供介面。介面大部份是由 udev 所建立的設備節點所代表。設備與介面的區別,對於瞭解整體概念很重要。

sysfs 檔案系統中所輸入的設備可以在 /sys/devices 之下找到。介面是位在 /sys/class/sys/block 底下。sysfs 中的所有介面應該有一個所屬設備的連結。不過,還是有部份設備不會自動新增此連結。沒有該連結,就無法知道此介面屬於哪一個設備,而且將無法找到合適的組態。

設備會透過設備描述來處理。這可以是 sysfs 的設備路徑 (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0)、連接點的描述 (bus-pci-0000:02:00.0)、個別 ID (id-32311AE03FB82538) 或其他類似的東西。在過去,介面是透過其名稱來定址。這些名稱代表現有設備的簡單編號,而且當新增或移除設備時有可能會變更。

介面也可以用相關設備的描述來定址。通常,內容會指出描述是指設備本身或它的介面。設備、介面和描述的典型範例包括:

PCI 網路卡

連接 PCI 匯流排的設備 (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0bus-pci-0000:02:00.0) ,且具有網路介面 ( (eth0, id-00:0d:60:7f:0b:22bus-pci-0000:02:00.0)。網路介面是由網路服務所使用,或者網路介面會連線至虛擬網路設備,例如通道或 VLAN,因此會有介面。

PCI SCSI 控制器

設備 (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0bus-scsi-1:0:0:0),以匯流排 (/sys/class/scsi_host/host1) 的形式,供多個實體設備介面使用。

SCSI 硬碟

設備 (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0bus-scsi-1:0:0:0),包含多個介面 (/sys/block/sda*)。