linux IIC子系统分析(三)——I2c子系统初始化顺序分析
来源:互联网 发布:java触屏当乐 编辑:程序博客网 时间:2024/05/17 03:21
对于linux的IIC子系统,看了很多人的IIC源码及架构分析,看完了自己还是一头雾水,不知从何下手。因此只能看开机启动LOG分析各初始化函数,先看linux IIC子系统已经为我们做了些什么,然后再看还需要我们做些什么。 从而了解整个IIC子系统架构。
1.linux初始化函数的执行顺序
决定函数执行顺序的有两个因素:
(一)vmlinux.lds 链接脚本
(二)驱动目录下的Makefile 文件定义
1.1 vmlinux.lds 链接脚本
该脚本位于/arch/arm/kernel/ vmlinux.lds ,该脚本规定了不同代码段,如_init, test, data等不同属性代码存放的位置。
vimlinux.lds
看383行可以知道存放链接的顺序依次为:initcall0.init, initcall0s.init......
我们再看/include/linux/init.h中的定义:
从这里可以看出来,在实际驱动中,module_init(init_func) 最终展开后会将init_func做个initcall6.init的标记,最终该函数就被链接到initcall6.init的位置。在内核编译链接完成之后函数初始化的执行先后顺序就已经确定下了了。如果两个函数属性相同,比如module_init(inti_funcA); module_init(inti_funcB); 他们都属于initcall6.init,那么他们执行的先后顺序就跟Makefile文件有关了。
1.2 Makefile文件的控制
在/driver/i2c/Makefile:
在Makefile中,函数的连接顺序是按函数的存放位置先后决定的。这里可以看到是i2c-boardinf, i2c-core,i2c-dev...2. IIC子系统初始化顺序
根据上面的分析我们可以知道在linux系统中iic子系统的初始化顺序为:
1. /driver/i2c/i2c-core.c postcore_initcall(i2c_init);
2. /arch/arm/mach-s3c2440 MACHINE_START(S3C2440, "SMDK2440")
3. /drivers/i2c/busses/i2c-s3c2410.c subsys_initcall(i2c_adap_s3c_init);
4./driver/i2c/i2c-dev.c module_init(i2c_dev_init);
说明:
1.分析的内核版本是linux2.6.32.2
2.开发板为友善之臂的mini2440, 用的是ARM9(S3C2440A)处理器
3.链接的IIC设备是EEPROM(AT24C02)
4.按照内核I2C子系统的注册顺序分析。
- linux IIC子系统分析(三)——I2c子系统初始化顺序分析
- linux IIC子系统分析(三)——I2c子系统初始化顺序分析
- linux IIC子系统分析(四)——I2c bus初始化
- linux IIC子系统分析(五)——I2C plaform device 初始化
- linux IIC子系统分析(六)——I2c plaform driver 初始化
- linux IIC子系统分析(七)——实例分析通过i2c-dev操作I2C设备
- linux IIC子系统分析(七)——实例分析通过i2c-dev操作I2C设备
- linux IIC子系统分析(八)——实例分析通过sysfs访问I2c设备
- linux IIC子系统分析(九)——实例分析通过设备节点访问I2c设备
- linux IIC子系统分析(二)—— linux i2c 架构概述
- Linux I2C 子系统分析
- Linux I2C子系统分析
- LINUX下IIC子系统分析
- linux IIC子系统分析(一)——AT24C02 芯片简介
- Linux I2C子系统分析整理
- Linux输入子系统分析 -- 输入子系统初始化
- Linux I2C子系统分析-I2C总线驱动
- Linux I2C子系统分析-I2C设备驱动
- jsp
- 第二章--电商项目DB规划
- RecycleView 使用注意事项
- Linux安装配置SVN服务器
- Android 通过 WebView 请求下载 APK
- linux IIC子系统分析(三)——I2c子系统初始化顺序分析
- Java类判断地图上某点是否在多边形区域内
- leetcode 233. Number of Digit One 1个数量
- Java语言与大数据的渊源
- void 类型指针
- HTTML多媒体标记与框架标记
- 网络协议相关问题(二)
- 详解C中volatile关键字
- php冒泡排序法