為什麼嵌入式系統需要設備樹而個人電腦不需要?
在嵌入式設備中引導核心時,您需要為 Linux 核心提供設備樹,而在正常 x86 pc 上引導核心不需要設備樹——為什麼?
據我了解,在 x86 pc 上,核心“探測”硬體(如果我錯了,請糾正我),那麼為什麼核心不能探測嵌入式系統中的硬體呢?
外圍設備通過匯流排連接到主處理器。一些匯流排協議支持列舉(也稱為發現),即主處理器可以詢問“哪些設備連接到該匯流排?” 設備會以標準化格式回復有關其類型、製造商、型號和配置的一些資訊。有了這些資訊,作業系統可以報告可用設備的列表,並決定為每個設備使用哪個設備驅動程序。有些匯流排協議不支持列舉,那麼主處理器除了猜測之外沒有辦法找出連接了哪些設備。
所有現代 PC 匯流排都支持列舉,尤其是用於連接大多數內部外圍設備的PCI(原始以及其擴展和後繼產品,例如 AGP 和 PCIe),以及用於連接大多數外部外圍設備的USB(所有版本),如以及Firewire、SCSI、所有現代版本的ATA/SATA等。現代顯示器連接還支持發現連接的顯示器(HDMI、DisplayPort、DVI、帶EDID的VGA)。所以在PC上,作業系統可以通過列舉PCI匯流排來發現連接的外圍設備,當在PCI匯流排上找到USB控制器時列舉USB匯流排等。注意作業系統必須假設PCI匯流排的存在以及探測它的方法;這在 PC 架構上是標準化的(“PC 架構”不僅僅意味著 x86 處理器:要成為(現代)PC,電腦還必須具有 PCI 匯流排並且必須以某種方式啟動)。
許多嵌入式系統使用不支持列舉的不太花哨的匯流排。直到 1990 年代中期,在 PCI 取代ISA之前,PC 上都是如此。特別是大多數 ARM 系統都有不支持列舉的匯流排。一些不遵循 PC 架構的嵌入式 x86 系統也是如此。如果沒有列舉,則必須告知作業系統存在哪些設備以及如何訪問它們。設備樹是表示此資訊的標準格式。
PC 匯流排支持發現的主要原因是它們被設計為允許模組化架構,在該架構中可以添加和移除設備,例如在 PC 中添加擴展卡或在外部埠上連接電纜。嵌入式系統通常具有一組固定的設備¹,以及由製造商預載入且不會被替換的作業系統,因此無需列舉。
¹如果有 USB 等外部匯流排,則 USB 外圍設備會自動發現,設備樹中不會提及它們。