网站大量收购独家精品文档,联系QQ:2885784924

刘彦文等《Linux环境嵌入式系统开发基础》第10章.ppt

刘彦文等《Linux环境嵌入式系统开发基础》第10章.ppt

  1. 1、本文档共194页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
⒌ ADC应用程序编程举例 【例10.10】以下程序举例,目的是说明在应用程序中,如何使用驱动程序提供的接口函数,读出前3个通道的A/D转换值,然后变换成对应的电压值显示。在程序运行过程中,可以调节目标板上的3个可调电阻,显示的采集数据会随之变化。 程序设计采用了线程技术,并且每2秒读出一次时间值 ,显示时、分、秒及3个通道的A/D转换值、对应的电压。 程序运行过程中,如果从minicom终端输入任何一个字符并回车,程序结束。 程序代码如下:(略) ⒍ 程序执行结果举例 程序执行结果可能是: time:08:13:12 adc(ch0)=0-0.0000V adc(ch1)=1022-3.2968V adc(ch2)=512-1.6516V time:08:13:14 adc(ch0)=0-0.0000V adc(ch1)=1022-3.2968V adc(ch2)=512-1.6516V … 10.5 ADC驱动程序源代码分析 (S3C2410A) 10.5.1 概述 Linux中把一切设备都抽象为文件,不同设备的设备驱动程序把不同的硬件特性和操作进行了内部封装,给用户编写应用程序提供的是类似于对传统文件(如磁盘文件)进行操作的一组接口函数,如open、read、write、close(release)、ioctl等。 以下分析的ADC驱动程序源代码程序名为s3c2410-adc.c,对应的内核版本为2.4。 本节分析的源代码有两个头文件和一个设备驱动程序: · s3c2410-adc.h头文件 · s3c2410.h-chip.H头文件 · s3c2410-adc.c设备驱动程序 在s3c2410-adc.c中,还包含了Linux内核提供的许多头文件,并且有些函数是在Linux内核的其他文件中实现的,本节只分析s3c2410-adc.c中定义的函数及相关的数据结构。 10.5.2 Linux设备驱动程序概述 ⒈ 设备驱动程序、模块 ⑴ 设备驱动程序 设备驱动程序也简称为驱动程序,它把对复杂的设备(硬件)进行的操作隐藏起来,将其抽象成一个结构良好的、能够提供统一编程接口的、可以为系统的其他部分(例如应用程序)提供使用设备的方法。 用户应用程序中对外设的使用,是由Linux内核实现的。内核通过驱动程序,对设备进行具体操作。 驱动程序有统一的编程接口(函数调用),对设备的操作如同对传统的磁盘文件操作一样,是由驱动程序提供的open、read、write、close(release)、ioctl等接口函数实现的。 驱动程序中可以安装将要使用的中断处理程序,可以使用中断、DMA操作。 ⑵ 驱动程序与应用程序的区别 应用程序装入内存的用户空间,从main函数开始运行,运行结束将释放应用程序占用的内存空间。 将模块加载到内核,模块装入内存的内核空间,装入后也没有一个像应用程序那样的运行的开始点。装入内核空间的模块经过向内核注册后,模块中的各个函数处于等待系统调用状态。只有调用时,才会运行。 编写应用程序可以使用glibc等标准的C函数库,但是编写驱动程序不允许使用这个库。编写驱动程序所包含的头文件通常在include/Linux和include/asm子目录下。 ⑶ 可装载模块 Linux有一个特性,即内核提供的功能,可以在内核运行时扩展。当系统运行时,超级用户可以使用insmod命令,向内核添加功能;也可以使用rmmod命令,移除已经添加的功能。 可以在系统运行时添加到内核中的代码被称为模块。设备驱动程序是模块中的一种类型。每个模块是由目标代码,如s3c2410-adc.o组成,而不是一个可执行文件。 Linux系统通常将设备分为三种基本类型:字符、块和网络,ADC属于字符类型设备,对应的驱动程序称为字符设备驱动程序。 字符设备可以通过文件系统的节点(inode)来访问。 ⑷ 模块的依赖性 可加载的驱动程序,即模块,对Linux内核版本有依赖性。或者说不同的内核版本对应的驱动程序,对相同的外设,实现的方法有所不同。因此在2.4内核版本下的ADC驱动程序,不能用于2.6内核版本。 模块对目标板处理器架构、外设接口电路也存在着依赖性。例如同样是2.6版内核,不同架构处理器的目标板,ADC驱动程序是不相同的;相同架构处理器的目标板,如果ADC接口电路不同,ADC驱动程序也是不相同的。 ⒉ 内核空间和用户空间 模块运行在内核空间,应用程序运行在用户空间。

文档评论(0)

bbnnmm885599 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档