I2C驅動框架(kernel 2 6 22 6)

2022-08-24 16:51:14 字數 2389 閱讀 5872

以用i2c通訊的實時時鐘為例

框架入口原始檔:i2c_m41t11.c

(可根據入口原始檔,再按著框架到核心走一遍)

核心版本:linux_2.6.22.6   硬體平台:jz2440

以下是驅動框架:

以下是驅動** i2c_m41t11.c :

#include #include 

#include

#include

#include

#include

#include

#include

static unsigned short normal_i2c = ; //

只有七位 0xd0 >> 1

static unsigned short probe =;

static unsigned short ignore =;

//定義乙個 client 位址資料

static

struct i2c_client_address_data addr_data =;

//定義 client

static

struct i2c_client *i2c_m41t11_client;

//定義 主裝置號

static

intmajor;

//定義乙個 i2c 字元驅動

static

struct

i2c_driver i2c_m41t11_driver;

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

static ssize_t i2c_m41t11_write(struct file *file, const

char __user *buf, size_t size, loff_t *offset)

//定義字元操作函式

static

struct file_operations i2c_m41t11_fops =;

//定義乙個字元裝置類

static

struct

class *i2c_m41t11_class;

//匹配處理函式

static

int m41t11_match_fun(struct i2c_adapter* adpater,int addr ,int

kind)

static

int i2c_m41t11_attach(struct i2c_adapter *adapter)

static

int i2c_m41t11_detach(struct i2c_client *client)

//初始化 i2c_m41t11_driver

static

struct i2c_driver i2c_m41t11_driver =,

.attach_adapter =i2c_m41t11_attach,

.detach_client =i2c_m41t11_detach,

};static

int i2c_m41t11_init(void

)static

void i2c_m41t11_exit(void

)

module_init(i2c_m41t11_init);

module_exit(i2c_m41t11_exit);

module_license(

"gpl

");

注:匹配分為三個個步驟

1. 用驅動的i2c_driver.driver.name與物理裝置名字匹配,成功則呼叫 i2c_driver.attach_adapter。

2. i2c_driver.attach_adapter中用i2c_probe(adapter,addr,match_func)匹配介面卡與物理裝置,成功則呼叫 match_func。

3. match_func中建立 i2c_client,將 i2c_driver 與 i2c_adapter 聯絡起來。

以下是編譯驅動的makefile:

ker_dir=/work/systems/kernel/linux-2/linux-2.6.22.6

all:

make -c $(ker_dir) m=`pwd` modules

clean:

make -c $(ker_dir) m=`pwd` modules clean

rm -fr modules.order

obj-m += i2c_m41t11.o

學習筆記 i2c驅動框架

i2c驅動框架 一一一一一一一一一一一一一一一一一一一一一一一一一 軟體層 open read write 一一一一一一一一一一一一一一一一一一一一 驅動 drv open drv read drv write i2c裝置驅動 知道資料含義 一一一一一一一一一一一一一一一一一一一一一一一一一一一一一...

i2c裝置驅動

1,i2c 裝置註冊 static struct i2c board info i2c2 devices i2c裝置一般在板級 中註冊 static void msm8916 add i2c deivces void 2,i2c驅動註冊 include static const struct i2c...

Linux I2C匯流排(一)I2C驅動框架

copy from 文章目錄 linux i2c匯流排 一 i2c驅動框架 一 linux i2c驅動的主要物件 1.1 i2c匯流排 1.2 i2c裝置 1.3 i2c驅動 1.4 i2c介面卡 二 linux i2c驅動框架 三 i2c驅動框架原始碼剖析 3.1 註冊i2c裝置 3.2 註冊i2...