核心概念
驅動程序本質上是運行在內核態的代碼,擁有訪問硬件資源的特權:執行特權指令、訪問 I/O 端口、映射物理內存、響應中斷請求 (IRQ)。
硬件控制的三大類模式
1. 異構處理器類(GPU、DSP、NPU)
- 硬件擁有獨立指令集和執行單元。
- 驅動程序將編譯好的微代碼/命令緩衝區提交給硬件(如 GPU 的 Command Buffer)。
- 硬件自主執行渲染/計算任務,完成後通過中斷或輪詢通知 CPU。
2. 高速 DMA 設備(磁盤控制器、網卡、USB 控制器)
- 使用直接內存訪問 (DMA) 引擎。
- 驅動程序分配一致性內存區域,構建描述符鏈表,寫入設備寄存器啟動傳輸。
- CPU 不搬運數據,只負責設置和處理完成中斷。對驅動看起來像操作內存地址。
3. 串行/低速外設(UART、I2C、SPI、GPIO、打印機)
- 通過 I/O 端口或內存映射 I/O (MMIO) 讀寫控制寄存器。
- 驅動程序按協議時序發送命令/接收數據(如 UART 設置波特率、寫入 THR 發送字節)。
- 常涉及中斷驅動或輪詢模式。
關鍵技術環節
- 內存映射:
mmap/ioremap 將設備物理地址映射到內核虛擬地址。
- 中斷處理: 註冊 ISR,顯半部/底半部機制分離耗時操作。
- 電源管理: 實現 D0-D3 狀態轉換回調。
- 用戶態接口: 通過
ioctl/read/write/mmap 向應用層暴露功能。
總結:驅動程序不是「控制硬件的魔法」,而是利用 CPU 特權模式、總線協議、中斷機制,按硬件數據手冊編排寄存器操作序列,實現軟硬件協同。