linux驅動模型 裝置

2021-06-22 17:40:27 字數 2422 閱讀 9285

thebasic device structure

~~~~~~~~~~~~~~~~~~~~~~~~~~

see the kerneldoc for the struct device.

programminginte***ce

~~~~~~~~~~~~~~~~~~~~~

檢測到裝置的匯流排驅動使用如下函式將裝置註冊到核心:

int device_register(struct device * dev);

匯流排負責初始化device結構的下列域:

- parent

- name

- bus_id

- bus

當裝置的reference count變為0時,會從核心中移除. 使用下列函式調整reference count

struct device * get_device(struct device * dev);

void put_device(struct device * dev);

如果reference count還不是0(如果正好處於移除的過程中),get_device()會返回指向傳遞給它的struct device的指標.

驅動可以使用下列函式訪問device結構中的lock:

void lock_device(struct device * dev);

void unlock_device(struct device * dev);

attributes

~~~~~~~~~~

struct device_attribute ;

驅動可以使用乙個類似於procfs(sysfs)的介面來匯出裝置的屬性。有關sysfs如何工作的內容,請參考documentation/filesystems/sysfs.txt.

裝置屬性可以通過巨集device_attr宣告:

#define device_attr(name,mode,show,store)

example:

device_attr(power,0644,show_power,store_power);

這個巨集宣告了乙個名為'dev_attr_power'的device_attribute結構. 通過下列函式可以將屬性新增/移除到裝置在/sysfs的目錄:

int device_create_file(struct device *device, structdevice_attribute * entry);

void device_remove_file(struct device * dev, structdevice_attribute * attr);

example:

device_create_file(dev,&dev_attr_power);

device_remove_file(dev,&dev_attr_power);

該檔案的名字是'power' ,訪問許可權為0644 (-rw-r--r--).

警告:  無論何時,當核心允許對乙個裝置呼叫device_create_file()和

device_remove_file(), 使用者空間對裝置屬性何時被建立有嚴格的期望. 當乙個新裝置註冊到核心,會產生乙個uevent以提示使用者空間(比如udev)有新裝置可用. 如果屬性在裝置註冊之後才新增,使用者空間則無從了解這個屬性.

對於裝置驅動而言,在探測(probe)裝置時要做的一項重要工作是為裝置發布額外的屬性. 如果裝置驅動只是簡單地對傳遞給它的device結構呼叫device_create_file(), 那麼使用者空間永遠無法獲得新屬性的通知. 相反地,裝置驅動或許應當在模組入口函式modules_init()中使用class_create() 和 class->dev_attrs建立乙個屬性列表,而後在

.probe()中使用device_create()建立乙個裝置,作為被探測到的裝置的子裝置. 這個新的裝置會產生uevent並將新的屬性發布到使用者空間.

舉例來說,如果乙個驅動想要增添如下屬性:

struct device_attribute mydriver_attribs = ;

在模組入口函式中應該做:

mydriver_class= class_create(this_module, "my_attrs");

mydriver_class.dev_attr= mydriver_attribs;

假設'dev' 是傳遞到probe()的引數,裝置驅動的probe函式則要做:

device_create(&mydriver_class,dev, chrdev, &private_data, "my_name");

Linux裝置驅動模型

核心版本 2.6.29 裝置驅動模型框架是linux驅動程式設計的基礎。它通過kobject,kset,ktype等底層資料結構將bus type,device,device driver 等高層資料結構組織起來,形成乙個層次 分類清晰的驅動模型。優點如下 1.重用。將物件抽象為匯流排 驅動 裝置三...

Linux裝置驅動模型

一 裝置驅動模型 驅動模型提供硬體的抽象,核心可以使用該抽象完成很多重複的工作。這些抽象主要有 電源管理,即插即用裝置支援,與使用者空間的通訊 二 核心資料結構 kobject 通過它可以以樹狀結構來管理裝置 kobj type 用來表示kobject的屬性 三 三大元件 匯流排 裝置 驅動 匯流排...

Linux驅動模型 裝置

1 裝置描述 linux 系統中的每個裝置由乙個 struct device 描述。2 裝置註冊 登出 int device register struct device dev void device unregister struct device dev 一條匯流排也是個裝置,也必須按裝置註冊...