天天看點

Linux 核心class_simple 接口

class_simple 接口意圖是易于使用, 以至于沒人會抱怨沒有暴露至少一個包含裝置的被 配置設定的号的屬性. 使用這個接口隻不過是一對函數調用, 沒有通常的和 Linux 裝置模型 關聯的樣闆.

第一步是建立類自身. 使用一個對 class_simple_create 的調用來完成:

struct class_simple *class_simple_create(struct module *owner, char *name);

這個函數使用給定的名子建立一個類. 這個操作可能失敗, 當然, 是以在繼續之前傳回值 應當一直被檢查( 使用 IS_ERR, 在第 1 章的"指針和錯誤值"一節中描述過).

一個簡單的類可被銷毀, 使用:

void class_simple_destroy(struct class_simple *cs); 建立一個簡單類的真實目的是添加裝置給它; 這個任務使用:

struct class_device *class_simple_device_add(struct class_simple *cs, dev_t devnum, struct device *device, const char *fmt, ...);

這裡, cs 是之前建立的簡單類, devnum 是配置設定的裝置号, device 是代表這個裝置的 struct device, 其他的參數是一個 printk-風格 的格式串和參數來建立裝置名子. 這個 調用添加一項到類, 包含一個屬性, dev, 含有裝置号. 如果裝置參數是非 NULL, 一個符 号連接配接( 稱為 device )指向在 /sys/devices 下的裝置的入口.

可能添加其他的屬性到裝置入口. 它隻是使用 class_device_create_file, 我們在下一 節和完整類子系統所剩下的内容讨論.

當裝置進出時類産生熱插拔事件. 如果你的驅動需要添加變量到環境中給使用者空間事件處 理者, 可以建立一個熱插拔回調, 使用:

int class_simple_set_hotplug(struct class_simple *cs, int(*hotplug)(struct class_device *dev,

char **envp, int num_envp,

char *buffer, int buffer_size)); 當你的裝置離開時, 類入口應當被去除, 使用:void class_simple_device_remove(dev_t dev);

注意, 由 class_simple_device_add 傳回的 class_device 結構這裡不需要;裝置号(它 當然應當是唯一的)足夠了.

繼續閱讀