Linux设备驱动之I2C架构分析
一:前言
I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员
的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而
I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可自行下载spec阅读即可.
二:I2C架构概述
在linux中,I2C驱动架构如下所示:
如
上图所示,每一条I2C对应一个adapter.在kernel中,每一个adapter提供了一个描述的结构(struct
i2c_adapter),也定义了adapter支持的操作(struct i2c_adapter).再通过i2c
core层将i2c设备与i2c adapter关联起来.
这个图只是提供了一个大概的框架.在下面的代码分析中,从下至上的来分析这个框架图.以下的代码分析是基于linux 2.6.26.分析的代码基本位于: linux-2.6.26.3/drivers/i2c/位置.
三:adapter注册
在
kernel中提供了两个adapter注册接口,分别为i2c_add_adapter()和
i2c_add_numbered_adapter().由于在系统中可能存在多个adapter,因为将每一条I2C总线对应一个编号,下文中称为
I2C总线号.这个总线号的PCI中的总线号不同.它和硬件无关,只是软件上便于区分而已.
对于i2c_add_adapter()而言,它使用的是动态总线号,即由系统给其分析一个总线号,而i2c_add_numbered_adapter()则是自己指定总线号,如果这个总线号非法或者是被占用,就会注册失败.
分别来看一下这两个函数的代码:
int i2c_add_adapter(struct i2c_adapter *adapter)
{
int id, res = 0;
retry:
if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0)
return -ENOMEM;
mutex_lock(&core_lock);
/* "above" here means "above or equal to", sigh */
res = idr_get_new_above(&i2c_adapter_idr, adapter,
__i2c_first_dynamic_bus_num, &id);
mutex_unlock(&core_lock);
if (res < 0) {
if (res == -EAGAIN)
goto retry;
return res;
}
adapter->nr = id;
相关文档:
-------------------------------------------------------------------------------------------------------
//By:yuyongbao
//QQ:673360056
LINUX 内核结构体
struct attribute
{
const char * name;
struct module &nb ......
当今,不考虑 Linux 和无线网络技术的话,就无法谈到计算机和网络。在这篇文章中,Sreekrishnan Venkateswaran 用
Linux 观点阐释了通过 WLAN、Bluetooth、GPRS、GSM 以及 IrDA
实现无线联网。他使用各种不同的无线设备和相应的内核层,以及用户空间工具来示范它们在 Linux 下如何工作。
无线技术,例如
WLAN (Wireles ......
经过艰苦的奋斗,终于搞定了fedora系统从安装到3D特效(本人安装的是fedora
11),为了方便后来的linuxer,特留下本人的全过程以供参考。以下步骤有的来自于google搜索,有部分来自于嘉佑中文博客
(http://www.my-guides.net/en/content/view/164/26/),并感谢各方前辈的笔迹。
1.添加rpm fusion源
rpm -ivh
http://do ......
linux中关于链接类型分为硬链接和软链接
硬链接指令 ln 文件 链接名称
软链接指令 ln -s 文件 链接名称
共同点:
都可以通过链接名称去访问被链接的文件
不同点:
硬链接会产生一个和源文件相同的文件 不论大小和属性
删除源文件不会对链接文件产生影响
&nbs ......
----------------------------------------------------------------------------------------------------------------------------------------
/**/
/*
********************************************************************************************************
* @Description:s3c2410的rtc驱动的实 ......