linux之I2C驅動程式

2021-07-11 01:43:14 字數 2376 閱讀 3201

韋老師的筆記,供自己以後學習

linux核心i2c分析思路:

怎麼寫i2c裝置驅動程式?

1. 分配乙個i2c_driver結構體

2. 設定

attach_adapter // 它直接呼叫 i2c_probe(adap, 裝置位址, 發現這個裝置後要呼叫的函式);

detach_client  // 解除安裝這個驅動後,如果之前發現能夠支援的裝置,則呼叫它來清理

3. 註冊:i2c_add_driver

測試1th:

1. insmod at24cxx.ko

觀察輸出資訊

2. 修改normal_addr裡的0x50為0x60

編譯載入,觀察輸出資訊

驅動程式原始碼:

#include #include #include #include #include #include #include #include #include static unsigned short ignore      = ;

static unsigned short normal_addr = ; /* 位址值是7位 */

/* 改為0x60的話, 由於不存在裝置位址為0x60的裝置, 所以at24cxx_detect不被呼叫 */

static unsigned short force_addr = ;

static unsigned short * forces = ;

static struct i2c_client_address_data addr_data = ;

static struct i2c_driver at24cxx_driver;

static int major;

static struct class *cls;

struct i2c_client *at24cxx_client;

static ssize_t at24cxx_read(struct file *file, char __user *buf, size_t size, loff_t * offset)

else

return -eio;

}static ssize_t at24cxx_write(struct file *file, const char __user *buf, size_t size, loff_t *offset)

static struct file_operations at24cxx_fops = ;

static int at24cxx_detect(struct i2c_adapter *adapter, int address, int kind)

static int at24cxx_attach(struct i2c_adapter *adapter)

static int at24cxx_detach(struct i2c_client *client)

/* 1. 分配乙個i2c_driver結構體 */

/* 2. 設定i2c_driver結構體 */

static struct i2c_driver at24cxx_driver = ,

.attach_adapter = at24cxx_attach,

.detach_client = at24cxx_detach,

};static int at24cxx_init(void)

static void at24cxx_exit(void)

module_init(at24cxx_init);

module_exit(at24cxx_exit);

module_license("gpl");

應用測試程式:

#include #include #include #include #include #include /* i2c_test r addr

* i2c_test w addr val

*/void print_usage(char *file)

int main(int argc, char **argv)

fd = open("/dev/at24cxx", o_rdwr);

if (fd < 0)

if (strcmp(argv[1], "r") == 0)

else if (strcmp(argv[1], "w") == 0)

else

return 0;

}

i2c驅動程式

使用者空間 使用者應用程式 核心空間 sys,dev i2c客戶驅動程式 硬體 i2c裝置 i2c控制器 資料結構 i2c driver include linux i2c.h 代表乙個i2c驅動程式 i2c client address data include linux i2c.h i2c客戶...

I2C裝置驅動程式

i2c裝置驅動程式框架 1.分配乙個i2c driver結構體 2.設定 attach adapter 它直接呼叫 i2c probe adap,裝置位址,發現這個裝置後要呼叫的函式 detach client 解除安裝這個驅動後,如果之前發現能夠支援的裝置,則呼叫它來清理 3.註冊 i2c add...

Linux驅動之I2C裝置驅動

核心 4.20 晶元 hym8563 rtc 下面的 分析主要都在注釋中,會按照驅動中函式的執行順序分析。static const struct i2c device id hym8563 id module device table i2c,hym8563 id static const stru...