I2C驱动培训文档(7)

2025-08-02

注:适配器实现其通信方法,主要实现 i2c_algorithm 的 master_xfer()函数和 functionality()数。

master_xfer()函数在适配器上完成传递给它的 i2c_msg 数组中的每个 I2C消息 functionality()函数非常简单,用于返回 FUNC_I2C、I2C_ FUNC_10BIT_ADDR、I2C_FUNC_SMBUS_READ_BYTE、I2C_FUNC_SMBUS_WRITE_BYTE等。

思考问题3:上面调用到了master_xfer(),那么它是在哪初始化的呢?

大家是否记得,文章的上面提到过,在加载i2c总线驱动时,调用i2c_imx.c中

i2c_adap_imx_init函数对i2c_adapter 的数据结构进行了初始化。master_xfer()也是在这初始化的。具体情况情看下边截图,中红色标记的部分:

/sys/bus/i2c及/sys/bus/i2c/device和driver增加

I2c总线是在i2c-core.c中i2c_init-->bus_register时,会在/sys/bus/生成i2c及子目录device和driver目录

postcore_initcall(i2c_init),对于它大家应该不会陌生,它是一个宏定义,前边说过它在内核编译的时候就被加入到了代码段。(/arch/armkernel/vmlinux.lds).initcall2.init里。 start_kernel-->rest_init-->kernel_init-->do_basic_setup()-->do_initcalls()

/sys/bus/i2c/device和driver下的各个具体设备和驱动

/sys/bus/i2c/device下的各个具体设备的增加的函数调用关系如下:

i2c_imx_probe-->i2c_add_numbered_adapter-->i2c_register_adapter-->device_register-->device_add

/sys/bus/i2c/driver下的各个具体设备驱动的增加函数调用关系如下:

egalax_ts_init-->i2c_add_driver-->i2c_register_driver-->driver_register-->bus_add_driver-->kobject_init_and_add-->kobject_add_varg-->kobject_add_internal-->create_dir

总体来说,驱动的注册可以简单概况为: 1、在总线上找找该驱动有没有被注册过

2、若没有注册过,则将驱动加入到总线驱动集合中 3、在总线上找能匹配驱动的设备 1、将总线上每个设备进行匹配

2、首先用总线的match 函数进行低级匹配 3、然后在用总线的probe函数进行高级匹配,若失败,则用驱动上的probe 进行高级匹配

4、如果匹配成功,则将设备绑定到驱动链表中

4、如果匹配成功,则将驱动加入到总线的驱动链表中

思考问题4:Platform总线是在哪初始化?

start_kernel-->rest_init-->kernel_init-->do_basic_setup()-->drive_init()-->platform_bus_init()


I2C驱动培训文档(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[JSP]网上书店

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219