搭建起裝置驅動的框架

2021-06-25 23:12:02 字數 2914 閱讀 2247

理解了datasheet

之後,先不要急著去編寫**,你首先應該做的就是給你將要寫的驅動程式設計乙個框架。

那麼這裡的框架應該依據什麼搭建呢?具體怎麼搭建呢?

一般的,從

usb驅動到

i2c驅動,從

spi驅動到串列埠驅動,從

pci驅動到

dma驅動,等等,不管是什麼型別的驅動,它總有一種或者幾種基本固定的套路供你選擇。如果你打算寫乙個

touch

驅動,而這個

touch

掛接在i2c

上,那麼你就依據

i2c裝置編寫的一一種固定套路先搭建框架。具體如何搭建,這裡就給出

i2c裝置驅動編寫的一種固定套路給大家。

i2c裝置驅動的新式編寫方法為

probe

方法,這裡就講編寫

i2c裝置驅動的

probe

方法的框架的搭建。 l

建立乙個

i2c_driver

static struct i2c_driver ***x_driver = ,

.probe = ***x_probe

,/* 

當存在i2c_client

和i2c_driver

匹配時呼叫*/

.remove = ***x_remove,

.id_table = ***x_id

,/* 

匹配規則

*/}; l

註冊i2c_driver

static int __init ***x_init

(void)

module_init

(***x_init);

註冊i2c_driver

的過程,實際上是將

driver

註冊到i2c_bus_type

的匯流排上。此匯流排的匹配規則是:

static const struct i2c_device_id *i2c_match_id

(const struct i2c_device_id *id,

const struct i2c_client *client)

return null; }

上面**實際上是利用

i2c_client

的名稱和

id_table

中的名稱做匹配的。這裡的

id_table為:

static const struct i2c_device_id ***x_id = ,

, ,

, ,

, ,

}; l

註冊i2c_board_info 對於

probe

方法,都要在平台**中要完成

i2c_board_info

的註冊。辦法如下:

static struct i2c_board_info __initdata tmp_i2c_devices = ,

, ,

}; i2c_register_board_info(0

,tmp_i2c_devices,

array_size

(tmp_i2c_devices

));  /* 

註冊*/

i2c_client

是在註冊過程中建立的。 l

呼叫i2c

介面卡來完成資料傳輸

int 

(*master_xfer

)(struct i2c_adapter *adap

,struct i2c_msg *msgs

,int num);

master_xfer

要通過呼叫

i2c_transfer

來完成傳輸。

int i2c_transfer

(struct i2c_adapter * adap

,struct i2c_msg *msgs

,int num);

l字元驅動註冊

i2c裝置驅動的

probe

方法,字元驅動的新增位置在

***x_probe中。

static int __devinit ***x_probe

(struct i2c_client *client

,const struct i2c_device_id *id)

else

if (result < 0)

***x_setup_cdev

(chip,0

);   /* 

註冊字元裝置

, 具體的請

google

一下*/                      

/* … 

省略…*/}

l字元裝置驅動的構建

struct 

file_operations ***x_fops = ; l

刪除i2c_driver

static void __exit ***x_exit

(void)

module_exit

(***x_exit);

l刪除字元裝置驅動

static int __devinit ***x_remove 

(struct i2c_client *client)

你看到這裡,就應該明白上面講到的所謂裝置驅動程式的框架是什麼意思了吧。當然,這裡只寫出了

i2c裝置驅動的一種框架,

spi、

usb、

dma   

驅動程式設計都有其各自的框架,具體的資訊可以從核心文件(

kernel

頂層目錄下的

documentation

目錄)獲得。

總之,你要編寫什麼型別的驅動,首先根據實際情況搭建好框架。

Windows的裝置驅動框架

windows的裝置驅動框架 windows核心管理層的部件之一是i o管理模組,有時候也稱為i o子系統。i o管理模組所管理的物件與活動縱向貫穿管理層 核心層乃至hal層,所以稱之為子系統其實也有道理。i o管理的主體就是我們所說的裝置驅動。很自然地,如果我們沿著縱向考察某項裝置的驅動,則一般而...

platform裝置驅動框架

這裡簡單總結下platform匯流排的裝置驅動 的框架。1 建立資料夾platform 2 在資料夾下編寫裝置檔案device.c include include include include include include module author wjb module license dua...

字元裝置驅動框架

字元裝置驅動框架 一 linux軟體系統的層次關係 乙個應用程式操作底層驅動程式的過程 1 應用程式使用庫提供的 open函式開啟某乙個裝置檔案。2.庫根據 open函式傳入的引數執行 swi 軟體中斷 指令,這會引起 cpu異常,進入核心。3 核心的異常處理函式根據這些引數找到相應的驅動程式,返回...