I2C驱动框架(二)】的更多相关文章

参考:I2C子系统之I2C bus初始化——I2C_init() 在linux内核启动的时候最先执行的和I2C子系统相关的函数应该是driver/i2c/i2c-core.c文件中的i2c_init()函数. static int __init i2c_init(void) { retval = bus_register(&i2c_bus_type); i2c_adapter_compat_class = class_compat_register("i2c-adapter")…
参考:I2C子系统之platform_driver初始化——I2C_adap_s3c_init() 在完成platform_device的添加之后,i2c子系统将进行platform_driver的注册过程.platform_driver的注册通过调用初始化函数i2c_adapter_s3c_init函数来完成. static struct platform_device_id s3c24xx_driver_ids[] = { { .name = "s3c2410-i2c", .dri…
先用韦老师的图: 注:  新版本内核的i2c驱动框架采用了    i2c_client -------> i2c_bus_type  <-------- i2c_driver   框架 如何构建i2c_client的4种方法 1.定义一个 i2c_board_info,用 i2c_register_board_info 注册,再生成i2c_client struct i2c_board_info { char type[I2C_NAME_SIZE]; //名字, unsigned short…
参考:I2C子系统之platform_device初始化——smdk2440_machine_init() I2C驱动框架还应用了另一种总线-设备-驱动模型,平台设备总线platform_bus_type.内核已经注册好了平台总线,驱动程序只需向平台总线添加平台设备和平台驱动.这节主要介绍如何添加平台设备. /*********"/arch/arm/mach-s3c64xx/mach-smdk6410.c"**********************/ //2./arch/arm/ma…
以用i2c通信的实时时钟为例 框架入口源文件:i2c_m41t11.c (可根据入口源文件,再按着框架到内核走一遍) 内核版本:linux_2.6.22.6   硬件平台:JZ2440 以下是驱动框架: 以下是驱动代码 i2c_m41t11.c : #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/slab.h> #inclu…
i2c驱动在Linux通过一个周的学习后发现i2c总线的驱动框架还是和Linux整体的驱动框架是相同的,思想并不特殊比较复杂的内容如i2c核心的内容都是内核驱动框架实现完成的,今天我们暂时只分析驱动开发需要完成的部分.iic驱动驱动开发主要是完成四个部分的内容,struct i2c_adapter(适配器),struct i2c_algorithm (通讯接口),i2c_driver(设备驱动),struct i2c_client(iic设备),其中适配器和通讯接口的实现一般SOC厂商都会针对自…
1.i2c-dev.c(i2c设备驱动组件层) 功能:1)给用户提供接口 i2c_dev_init  //入口函数 /*申请主设备号*/ register_chrdev(I2C_MAJOR(), "i2c", &i2cdev_fops); /*创建一个设备类*/ i2c_dev_class = class_create(THIS_MODULE, "i2c-dev"); /*注册一个i2c驱动*/ i2c_add_driver(&i2cdev_driv…
Linux的I2C体系结构分为3个组成部分: I2C核心(  i2c-core.c ): I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法.I2C通信方法("algorithm").与具体适配器无关的代码.探测设备.检测设备地址的上层代码等. 给驱动编程人员提供编程接口. I2C总线驱动( i2c-s3c2410.c ): I2C总线驱动是对适配器端的实现( 即初始化i2c控制器 ). 实现操作方法,它知道怎么发数据,但是不知道该发什么数据. I2C设备驱动(  i2c-dev…
参考:I2C子系统之 adapter driver注册——I2C_dev_init() i2c的操作在内核中是当做字符设备来操作的,相关初始化在由i2c_dev_init函数来初始化. static int __init i2c_dev_init(void) { int res; printk(KERN_INFO "i2c /dev entries driver\n"); register_chrdev(I2C_MAJOR, "i2c", &i2cdev_f…
参考:I2C子系统之内核中I2C子系统的结构 结合vmlinux.lds和Makefile可确定i2c初始化函数的执行顺序如下: 1./dricer/i2c/i2c-core.c中的函数:i2c_init() postcore_initcall级别 2./arch/arm/mach-s3c2440/mach-smdk2440.c中的函数:smdk2440_machine_init() arch_initcall级别 3.driver/i2c/buses/i2c-s3c2410.c中的函数:i2c…