77范文网 - 专业文章范例文档资料分享平台

I2C驱动培训文档(5)

来源:网络收集 时间:2019-04-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

static initcall_t __initcall_##fn##id __used \\

__attribute__((__section__(\ level \))) = fn

customize_machine()被放到了.initcall3.init里。

理解:在/include/linux/init.h文件中

#define pure_initcall(fn) __define_initcall(\#define core_initcall(fn) __define_initcall(\#define core_initcall_sync(fn) __define_initcall(\#define postcore_initcall(fn) __define_initcall(\#define postcore_initcall_sync(fn) __define_initcall(\#define arch_initcall(fn) __define_initcall(\

#define arch_initcall_sync(fn) __define_initcall(\#define subsys_initcall(fn) __define_initcall(\#define subsys_initcall_sync(fn) __define_initcall(\#define fs_initcall(fn) __define_initcall(\#define fs_initcall_sync(fn) __define_initcall(\

#define rootfs_initcall(fn) __define_initcall(\#define device_initcall(fn) __define_initcall(\#define device_initcall_sync(fn) __define_initcall(\#define late_initcall(fn) __define_initcall(\

#define late_initcall_sync(fn) __define_initcall(\以上部分,在内核编译的时候就被加入到了代码段。(/arch/armkernel/vmlinux.lds) 具体到我们这个例子,arch_initcall(customize_machine)也就是说customize_machine()在内核编译的时候由arch_initcall(fn)放到了.initcall3.init里。

思考问题2:那么这些被加入到代码段中的fn,是在哪被调用的呢?

回顾上面的内容,有提到过driver模块等是在/init/main.c里do_initcalls()的函数里被调用。

再接着看,machine_desc 加入了.arch.info.init代码段,它的函数调用关系:

start_kernel()-->setup_arch-->setup_machine_tags-->for_each_machine_desc开始调用.arch.info.init代码段中的fn。

machine_desc的结构体的赋值如下图描述:

总结:(这里主要说的是i2c和machine——)

各个i2c device 或是其他驱动放在.arch.init代码段中,这些加入代码段的fn,会被do_initcalls()调用,从/init/main.c文件中的开始内核代码谈起,调用顺序如下: start_kernel-->rest_init-->kernel_init-->do_basic_setup()-->do_initcalls()

machine_desc 加入了.arch.info.init代码段,它的函数调用关系:

start_kernel()-->setup_arch-->setup_machine_tags-->for_each_machine_desc()

I2c驱动的代码流程

结合上图,再联系前面提到的machine_desc和i2c的加载过程,可知: 首先,先将i2c总线作为platform设备加入到platform总线。将i2c设别加到i2c总线上,值得注意的是i2c总线驱动还未加载。

接着,加载i2c总线驱动,也就是调用i2c_imx.c中的初始化函数i2c_adap_imx_init。 最后,加载i2c设备驱动,也egalax tp驱动为例,即调用egalax_ts.c中的egalax_ts_init。

Dev下i2c设备节点

在查看开发板设备下我们发现存在:

那么i2c设备节点在那里创建的呢?

看如下截图,可知是初始化i2c_dev_init时,调用register_chrdev将i2c-dev加入一个map,这个map里有设备与操作的一一对应关系。只要打开这个设备文件,我们就能使用它所定义的操作了。

节点是调用i2c_for_each_dev时,回调i2cdev_attach_adapter创建。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库I2C驱动培训文档(5)在线全文阅读。

I2C驱动培训文档(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/614959.html(转载请注明文章来源)
上一篇:[JSP]网上书店
下一篇:开题报告
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: