理解了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
); /*
註冊字元裝置
, 具體的請
一下*/
/* …
省略…*/}
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 核心的異常處理函式根據這些引數找到相應的驅動程式,返回...