1 分析i2c裝置的識別過程
i2c_add_driver
i2c_register_driver
driver->driver.bus = &i2c_bus_type;
driver_register(&driver->driver);
list_for_each_entry(adapter, &adapters, list) ;
12static unsigned short normal_addr = ; /*
位址值是7位
*/13
/*改為0x60的話, 由於不存在裝置位址為0x60的裝置, 所以at24cxx_detect不被呼叫
*/14
15static unsigned short force_addr = ;
16static unsigned short * forces =;
1718
static
struct i2c_client_address_data addr_data =;
2425
static
struct
i2c_driver at24cxx_driver;
2627
28static
intmajor;
29static
struct
class *cls;
30struct i2c_client *at24cxx_client;
3132
static ssize_t at24cxx_read(struct file *file, char __user *buf, size_t size, loff_t *offset)
3368
else
69return -eio;70}
7172
static ssize_t at24cxx_write(struct file *file, const
char __user *buf, size_t size, loff_t *offset)
7398
99100
static
struct file_operations at24cxx_fops =;
105106
static
int at24cxx_detect(struct i2c_adapter *adapter, int address, int
kind)
107125
126static
int at24cxx_attach(struct i2c_adapter *adapter)
127130
131static
int at24cxx_detach(struct i2c_client *client)
132143
144145
/*1. 分配乙個i2c_driver結構體
*/146
/*2. 設定i2c_driver結構體
*/147
static
struct i2c_driver at24cxx_driver =,
151 .attach_adapter =at24cxx_attach,
152 .detach_client =at24cxx_detach,
153};
154155
static
int at24cxx_init(void
)156
160161
static
void at24cxx_exit(void
)162
165166
module_init(at24cxx_init);
167module_exit(at24cxx_exit);
168169 module_license("
gpl");
i2c裝置驅動程式
I2C裝置驅動程式
i2c裝置驅動程式框架 1.分配乙個i2c driver結構體 2.設定 attach adapter 它直接呼叫 i2c probe adap,裝置位址,發現這個裝置後要呼叫的函式 detach client 解除安裝這個驅動後,如果之前發現能夠支援的裝置,則呼叫它來清理 3.註冊 i2c add...
i2c驅動程式
使用者空間 使用者應用程式 核心空間 sys,dev i2c客戶驅動程式 硬體 i2c裝置 i2c控制器 資料結構 i2c driver include linux i2c.h 代表乙個i2c驅動程式 i2c client address data include linux i2c.h i2c客戶...
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...