萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 核心模組程式設計:字元裝置檔案讀寫與 ioctl 控制介面

裝置檔案互動:讀寫與 ioctl

裝置檔案應真實反映物理裝置能力。多數裝置具備輸入/輸出,核心驅動程式需接收進程輸出並送至裝置,由 device_write 實現,方式同寫入一般檔案。

ioctl:超越讀寫的控制介面

例:序列埠連接數據機。寫入資料給數據機(指令/傳輸資料)、讀取回應(指令回應/接收資料)皆可用 read/write。但需設定傳輸速率等序列埠參數時,read/write 無法表達。

Unix 解決方案:ioctl (I/O Control)。每個裝置擁有專屬 ioctl 命令:

  • 從進程向核心發送資訊(讀 ioctl)
  • 從核心接收資訊(寫 ioctl)
  • 執行無資料傳輸的控制操作

注意:此處「讀/寫」含義與檔案操作相反。

ioctl 三個參數

  1. 裝置檔案描述符
  2. ioctl 編號
  3. 任意型別/長度的參數指標(無法直接傳結構體,可傳指標)

ioctl 編號編碼與標準巨集

由主裝置號、ioctl 類型、命令、參數類型編碼。標準巨集:_IO、_IOR、_IOW、_IOWR(依資料傳輸方向選擇)。頭檔需被使用程式與核心模組同時包含(範例:chardev.h、ioctl.c)。

建議申請官方分配的 ioctl 編號,避免衝突。參考核心原始碼 Documentation/ioctl-number.txt。

copyright © 萬盛學電腦網 all rights reserved