linux i2c 标准接口(二)
2015-11-18 14:15
330 查看
驱动程序操作法:i2c设备的驱动也可以通过普通的设备驱动实现,像往常的驱动一样实现,然后在应用层就可以像读取普通文件一样操作,无需再考虑读写时序。其实普通的设备驱动也可以用两种方法实现,
1)构建字符设备驱动,在open,read,write等函数中直接操作i2c总线的相关寄存器来读写i2c设备,但是这种方法因平台不同,设备不同都要重新写驱动
2)在设备驱动中调用i2c-core.c提供的i2c_transfer函数来实现和i2c设备的通信,这样只要对不同的设备写不同的驱动就行了。
第一种构建字符设备驱动的方式,类似单片机上没有i2c子系统,直接操作i2c io口;其实这种方式类似gpio模拟i2c,笔者之前做过gpio模拟i2c驱动。这里我们主要讲解第二种方式。
1.笔者当前采用的是君正的3.08内核,需要修改/kernel-3.08/arch/mips/xburst/soc-4775/board//trunk/core/core-misc.c文件
// add qn8007 fm信息
static struct i2c_board_info duotin_i2c_dev[] = {
{
I2C_BOARD_INFO("dt-qn8007", 0x2b),
},
};
//static int __init core_board_init(void) 函数中添加 add 0:i2c bus0; 将duotin_i2c_dev添加到i2cbus0
i2c_register_board_info(0, duotin_i2c_dev, ARRAY_SIZE(duotin_i2c_dev));
2.在/kernel-3.08/drivers/i2c/chips/目录下添加qn8007.c设备驱动文件,并对应的修改Kconfig和Makefile文件
1)构建字符设备驱动,在open,read,write等函数中直接操作i2c总线的相关寄存器来读写i2c设备,但是这种方法因平台不同,设备不同都要重新写驱动
2)在设备驱动中调用i2c-core.c提供的i2c_transfer函数来实现和i2c设备的通信,这样只要对不同的设备写不同的驱动就行了。
第一种构建字符设备驱动的方式,类似单片机上没有i2c子系统,直接操作i2c io口;其实这种方式类似gpio模拟i2c,笔者之前做过gpio模拟i2c驱动。这里我们主要讲解第二种方式。
1.笔者当前采用的是君正的3.08内核,需要修改/kernel-3.08/arch/mips/xburst/soc-4775/board//trunk/core/core-misc.c文件
// add qn8007 fm信息
static struct i2c_board_info duotin_i2c_dev[] = {
{
I2C_BOARD_INFO("dt-qn8007", 0x2b),
},
};
//static int __init core_board_init(void) 函数中添加 add 0:i2c bus0; 将duotin_i2c_dev添加到i2cbus0
i2c_register_board_info(0, duotin_i2c_dev, ARRAY_SIZE(duotin_i2c_dev));
2.在/kernel-3.08/drivers/i2c/chips/目录下添加qn8007.c设备驱动文件,并对应的修改Kconfig和Makefile文件
相关文章推荐
- centos6.5下navicat安装
- centos 清理内存缓存
- centos6.5设置静态ip
- linux syslog 笔记
- Linux下查看进程和删除进程
- centos7 离线安装Ambari
- 伙伴算法
- Linux进程调度
- CentOs6.5安装使用数据恢复软件extundelete
- linux中环境变量的设置
- 文件I/O
- linux系统启动过程
- Linux文件目录详解
- Linux防火墙设置
- Linux的网卡由eth0变成了eth1,如何修复
- CentOS配置固定IP
- linux常用的命令
- 第七天-linux系统优化初步讲解
- linux 下查看机器是cpu是几核的
- CentOS/Linux 开放80、3306端口或者开放某个端口