__i2c_first_dynamic_bus_num定义的位置在/driver/i2c/i2c-boardinfo.c

#include

#include

。。。 。。。

int__i2c_first_dynamic_bus_num;

EXPORT_SYMBOL_GPL(__i2c_first_dynamic_bus_num);

。。。 。。。

int__init

i2c_register_board_info(intbusnum,

structi2c_board_infoconst*info, unsigned len)

{

... ...

if(busnum >= __i2c_first_dynamic_bus_num)

__i2c_first_dynamic_bus_num = busnum + 1;

... ...

}

此函数在machine_init()函数中被调用:

staticvoid__init smdk2440_machine_init(void)

{

。。。 。。。

i2c_register_board_info(0, tq2440_i2c_devs,

ARRAY_SIZE(tq2440_i2c_devs));

。。。 。。。

}首先__i2c_first_dynamic_bus_num变量被定义成一个全局变量,所以初始化的时候自动被赋值为0。

此处busnum由machine_init()函数传递,同样也为0。所以在i2c_register_board_info()函数中的if语句肯定会被执行:

__i2c_first_dynamic_bus_num = busnum + 1;这导致__i2c_first_dynamic_bus_num的数值永远比busnum大1。

然后看i2c_register_adapter()函数中和__i2c_first_dynamic_bus_num相关的

代码部分:

staticinti2c_register_adapter(structi2c_adapter *adap)

{

。。。 。。。

if(adap->nr

i2c_scan_static_board_info(adap);

。。。 。。。

}其中的adap->nr赋值操作在s3c24xx_i2c_probe中完成:

staticints3c24xx_i2c_probe(structplatform_device *pdev)

{

。。。 。。。

i2c->adap.nr = pdata->bus_num;

。。。 。。。

}此处的pdata->bus_num未初始化,所以默认为0。

这使得i2c_register_adapter中的if条件成立,i2c_scan_static_board_info(adap)执行。

相关阅读:

linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析相关推荐

  1. linux串口读取mpu9250数据,模拟 I2C 读取 MPU9250 数据的测试笔记

    硬件:STM32F103ZET6 + GY9250 软件:Keil MDK(v5.27)+ STM32CUBEMX(v5.2.1) 这里我在使用STM32CUBEMX最新版本(v5.5.0)生成Kei ...

  2. Linux 设备驱动篇之I2c设备驱动

    ******************************************************************************************** 装载声明:希望 ...

  3. STM32单片机硬件I2C读取AHT10温湿度传感器数据

    STM32使用硬件IIC读取AHT10温湿度传感器的数据并显示在0.96寸OLED屏上. 我用的单片机是STM32F103C8T6,程序用的是ST标准库写的. STM32使用硬件I2C读取SHTC3温 ...

  4. S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作。

    这篇文档算上期末复习这段时间其实拖了有好久了,因为从一开始接触linux的i2c驱动体系我就各种凌乱,因为起初脑海中既没有整体框架也不熟悉相关体系下的结构,所以四处乱看,经常性的在看内核代码时看着看着 ...

  5. linux下IO口模拟I2C的一些总结

    2019独角兽企业重金招聘Python工程师标准>>> 以前一直在用I2C接口,因为总是有线程的例子就一直没有去深入的了解,今天分析了一下在linux下通用GPIO模拟I2C的程序. ...

  6. vb6编写dll读取dat文件_【STM32Cube_15】使用硬件I2C读取温湿度传感器数据(SHT30)...

    寻求更好的阅读体验,请移步Mculover666的个人博客: [STM32Cube_15]使用硬件I2C读取温湿度传感器数据(SHT30)​www.mculover666.cn 本篇详细的记录了如何使 ...

  7. Linux i2c总线(2) - I2C核心层

    1. I2C 核心层初始化 这一部分向系统注册了一个名为i2c的总线类型. static int __init i2c_init(void) {int retval;retval = bus_regi ...

  8. linux i2c 读写函数,Linux下读写芯片的I2C寄存器

    要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章<手把手教你写Linux I2C设备驱动>已经做了初 ...

  9. 启明云端分享|Linux系统下如何调试I2C设备

    提示:Linux系统中,一些传感器通常挂载在I2C总线上,比如RTC和CSI等.我们在调试这些设备的时候,就需要了解Linux系统中操作I2C总线的方法.本文将详细介绍在Linux系统中如何调试I2C ...

最新文章

  1. 终端bash美化(FC)
  2. 数据科学家们,请补齐你的短板,如何提升R语言编程能力
  3. background 旋转_基于HTML5 Canvas 实现矢量工控风机叶轮旋转
  4. C语言通过链表指针删除链表节点的算法(附完整源码)
  5. 年度总结、下年计划不会做?教给你一个一招致胜的方法
  6. 日志汇总:logging、logger
  7. 实例化Model的三种方式
  8. JS:1.什么是JavaScript?
  9. 各类型土地利用图例_给排水系统各部件及图纸你还有多少不了解?
  10. python 正则表达式 前瞻_我应该如何在python中编写这个正则表达式(How should I write this regex in python)...
  11. 2-10 TreeView 控件
  12. Leetcode加一 (java、python3)
  13. SPSS基础教程:统计分析前的准备
  14. python计算iv值_Python计算IV值的示例讲解
  15. 锐捷交换机查看配置命令
  16. AR/VR研究框架——迎接AR元年
  17. DSP28335 eCAP 测频
  18. Calcite执行计划的四种展示格式
  19. 怎么把word里面的彩色图转化为灰度图,直接在word里面操作,无需转其他软件,超简单!(位图和矢量图都可以)
  20. 实现strstr()函数

热门文章

  1. Nginx对某个文件夹或整个站点进行登录认证的方法
  2. 60秒,我们可以干什么?
  3. Spring+ActiveMQ配置
  4. PPP协议的CHAP验证
  5. 72小时BCH日本生存挑战赛顺利完成
  6. Electron Cash发布功能机BCH钱包,低端市场利好来袭
  7. 新闻资讯小程序开发实践
  8. java基础面试题:抽象类中是否可以有静态的main方法?
  9. 这可能是最好的RxJava 2.x 入门教程(二)
  10. 电话号码 【trie树】