linux设备驱动简介一.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux设备驱动简介一

设备文件 Linux为所有的设备文件都提供了统一的操作函数接口,方 法是使用数据结构struct file_operations。这个数 据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设的种类较多,操作方式各不相同。Struct file_operations结构体中的 成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。 属性文件 设备属性: struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, char *buf); ssize_t (*store)(struct device *dev, const char *buf, size_t count);}; 属性文件的实际管理使用通常的函数对来处理: int device_create_file(struct device *device, struct device_attribute *entry); void device_remove_file(struct device *dev, struct device_attribute *attr); 类似的还有总线属性和驱动属性 属性文件 以PowerManager为例, 在kernel\kennel\power\main.c中定义了 power_attr(state); static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 属性文件 用户空间请求系统进出省电模式只需打开文件“/sys/power/ state ”,对其做write操作,即可通过系统调用对应调用到state_store已进行相应的操作。 Thanks! * Linux设备驱动简介 2010-07-11 Linux设备驱动简介(1) 驱动入口函数 平台设备驱动 设备文件 驱动入口函数 驱动入口函数 几乎每个linux驱动都会有个module_init(XXX_init),这个函数就是驱动的入口函数,负责驱动的加载。 module_init定义在kernel\include\linux\init.h 根据模块是否动态加载被定义为两种形式 驱动入口函数 静态加载module 此属性指定改变量将放在.initcall6.init区段。 驱动入口函数 在vmlinux.lds.S中指定了 驱动入口函数 宏 INITCALLS 驱动入口函数 其他初始化模块的宏定义 根据不同的id号以保证模块加载的前后顺序,同一级别的模块,其顺序无法保证。 驱动入口函数 \kernel\init\main.c start_kernel-rest_init-kernel_init- do_basic_setup- do_initcalls do_initcalls调用后,用moudle_init定义的驱动初始化函数即被执行。 驱动入口函数 驱动在初始化阶段如果有相互前后的依赖关系,需要加以区分,不能统一都是用module_init初始化,例如: 开机初始化系统时间的函数rtc_hctosys,其功能依赖RTC驱动,所以需要 module_init(msmrtc_init); late_initcall(rtc_hctosys); I2C驱动由于会被众多I2C设备的驱动调用,所以需要 subsys_initcall(msm_i2c_init_driver); module_init(bma150_init); 驱动入口函数 linux kernel中有很大一部分代码是设备驱动代码,这些驱动代码都有初始化等函数,q且一般都只执行一次,为了有更有效的利用内存,这些代码所 占用的内存需要释放出来。对只需要初始化运行一次的函数都加上__init属性,这些函数将被放在(.init.text)段,使用后其空间将被释放。 kernel_init-init_post-free_initmem 驱动入口函数 动态加载module(非编译到kernel的驱动程序) int init_module(void) __attribute__((alias(#initfn)

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档