电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

嵌入式Linux驱动程序和QT

47页
  • 卖家[上传人]:油条
  • 文档编号:47246229
  • 上传时间:2018-07-01
  • 文档格式:PPT
  • 文档大小:579KB
  • / 47 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、嵌入式Linux驱动程序开发辽宁工程技术大学电信学院1 嵌入式Linux的设备管理Linux将设备分成两大类:一类是块设备,类似磁盘以记录块或扇区为单位,成块 进行输入/输出的设备;另一类是字符设备,类似键盘以字符为单位,逐个进行输入/ 输出的设备。网路设备是介于块设备和字符设备之间的一种特殊设备。 块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O 缓冲区进行,它可以支持随机存取的功能。文件系统通常都建立在块设备上。 字符设备接口支持面向字符的I/O操作,由于它们不经过系统的快速缓存,所以它 们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的功能,一般不能进行 任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数。 处理器与设备间数据交换方式 处理器与外设之间传输数据的控制方式通常有3种:查询方式、中断方式和直接内 存存取(DMA)方式。 1查询方式 设备驱动程序通过设备的I/O端口空间,以及存储器空间完成数据的交换。例如, 网卡一般将自己的内部寄存器映射为设备的I/O端口,而显示卡则利用大量的存储器 空间作为视频信息的存储

      2、空间。利用这些地址空间,驱动程序可以向外设发送指定的 操作指令。通常来讲,由于外设的操作耗时较长,因此,当处理器实际执行了操作指 令之后,驱动程序可采用查询方式等待外设完成操作。 驱动程序在提交命令之后,开始查询设备的状态寄存器,当状态寄存器表明操作 完成时,驱动程序可继续后续处理。查询方式的优点是硬件开销小,使用起来比较简 单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,就只能循环 等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了处理器的利用率。 2中断方式 查询方式白白浪费了大量的处理器时间,而中断方式才是多任务操作系统中最有效利 用处理器的方式。当CPU进行主程序操作时,外设的数据已存入端口的数据输入寄存器, 或端口的数据输出寄存器已空,此时由外设通过接口电路向CPU发出中断请求信号。 CPU在满足一定条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/ 输出操作的子程序,待输入/输出操作执行完毕之后,CPU再返回并继续执行原来被中断 的主程序。这样,CPU就避免了把大量时间耗费在等待、查询外设状态的操作上,使其工 作效率得以大大提高。中

      3、断方式的原理示意图如下图所示。 能够向CPU发出中断请求的设备或事件称为中断源。中断源向CPU发出中断请求,若 优先级别最高,则CPU在满足一定的条件时,可中断当前程序的运行,保护好被中断的主 程序的断点及现场信息,然后根据中断源提供的信息,找到中断服务子程序的入口地址, 转去执行新的程序段,这就是中断响应。CPU响应中断是有条件的,如内部允许中断、中 断未被屏蔽、当前指令执行完等。CPU响应中断以后,就会中止当前的程序,转去执行一 个中断服务子程序,以完成为相应设备的服务。 系统引入中断机制后,CPU与外设处于“并行”工作状态,便于实现信息的实时处理和 系统的故障处理。 3直接访问内存(DMA)方式 利用中断,系统和设备之间可以通过设备驱动程序传送数据,但是,当传送的 数据量很大时,因为中断处理上的延迟,利用中断方式的效率会大大降低。而 直接内存访问(DMA)可以解决这一问题。DMA可允许设备和系统内存间在没 有处理器参与的情况下传输大量数据。设备驱动程序在利用DMA之前,需要选 择DMA通道并定义相关寄存器,以及数据的传输方向,即读取或写入,然后将 设备设定为利用该DMA通道传输数

      4、据。设备完成设置之后,可以立即利用该 DMA通道在设备和系统的内存之间传输数据,传输完毕后产生中断以便通知驱 动程序进行后续处理。在利用DMA进行数据传输的同时,处理器仍然可以继续 执行指令。设备驱动程序的概念 设备驱动程序实际是处理和操作硬件控制器的软件,从本质上讲,是内核中具有最高 特权级的、驻留内存的、可共享的底层硬件处理例程。驱动程序是内核的一部分,是操作 系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完成以下功能: 对设备初始化和释放; 对设备进行管理,包括实时参数设置,以及提供对设备的操作接口; 读取应用程序传送给设备文件的数据或者回送应用程序请求的数据; 检测和处理设备出现的错误。 Linux操作系统将所有的设备全部看成文件,并通过文件的操作界面进行操作。对用户 程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一 般来说,是把设备映射为一个特殊的设备文件,用户程序可以像对其他文件一样对此设备 文件进行操作。这意味着: 由于每一个设备至少由文件系统的一个文件代表,因而都有一个“文件名”。 应用程序通常可以通过系统调用open()打开设备

      5、文件,建立起与目标设备的连接。 打开了代表着目标设备的文件,即建立起与设备的连接后,可以通过read()、write() 、ioctl()等常规的文件操作对目标设备进行操作。 设备文件的属性由三部分信息组成:第一部分是文件的类型,第二部分是一个主设备 号,第三部分是一个次设备号。其中类型和主设备号结合在一起惟一地确定了设备文件驱 动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。 由于Linux 中将设备当做文件处理,所以对设备进行操作的调用格式与对文件的操作 类似,主要包括open()、read()、write()、ioctl()、close()等。应用程序发出系统调用命令 后,会从用户态转到核心态,通过内核将open()这样的系统调用转换成对物理设备的操作 。 驱动程序结构 1自动配置和初始化子程序,用来检测所需驱动的硬件设备是否工作正常、对正常工 作的设备及其相关驱动程序所需要的软件状态进行初始化。 2服务于I/O请求的子程序,该子程序称为驱动程序的上半部。这部分程序在执行时, 系统仍认为与进行调用的进程属于同一个进程,只是由用户态变成了核心态,可以在其 中调用sle

      6、ep()等与进程运行环境有关的函数。 3中断服务程序,又称为驱动程序的下半部,由Linux系统来接收硬件中断,再由系统 调用中断服务子程序。 在系统内部,I/O设备的存取通过一组固定的入口点来进行,入口点也可以理解为设备的 句柄,就是对设备进行操作的基本函数。字符型设备驱动程序提供如下几个入口点: open入口点。打开设备准备I/O操作。对字符设备文件进行打开操作,都会调用设备 的open入口点。open子程序必须对将要进行的I/O操作做好必要的准备工作,如清除缓 冲区等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,则open子程序必 须设置一些标志以表示设备处于忙状态。 close入口点。关闭一个设备。当最后一次使用设备完成后,调用close子程序。独占 设备必须标记设备方可再次使用。 read入口点。从设备上读数据。对于有缓冲区的I/O操作,一般是从缓冲区里读数据 。对字符设备文件进行读操作将调用read子程序。 write入口点。往设备上写数据。对于有缓冲区的I/O操作,一般是把数据写入缓冲区 里。对字符设备文件进行写操作将调用write子程序。 ioctl入口点。执行

      7、读、写之外的操作。 select入口点。检查设备,看数据是否可读或设备是否可用于写数据。select系统调用 在检查与设备文件相关的文件描述符时使用select入口点。struct file_operations struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*m

      8、map) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*s

      9、endpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)( struct file *, unsigned long, unsigned long, unsigned long, unsigned long ); ; lseek,移动文件指针的位置,只能用于可以随机存取的设备。 read,进行读操作,buf为存放读取结果的缓冲区,count为所要读取的数据长度。 write,进行写操作,与read类似。 select,进行选择操作。 ioctl,进行读、写以外的其他操作。 mmap,用于把设备的内容映射到地址空间,一般只有块设备驱动程序使用。 open,打开设备进行I/O操作。返回0表示成功,返回负数表示失败。 release,即close 操作。 struct file主要用于与文件系统相关的设备驱动程序,可提供关于被打开的文件的信 息,定义如下: struct file struct list_headf_list; struct dentry*f_dentry; struct vfsmount *f_vfsmnt; struct file_operations *f_op; atomic_tf_count; unsigned int f_flags; mode_tf_mode; loff_tf_pos; unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin; struct fown_structf_owner; unsigned intf_uid, f_gid; intf_error; unsigned longf_version; /* needed for tty driver, and maybe others */ void*private_data; /* preallocated helper kiobuf to speedup O_DIRECT */ struct kiobuf*f_

      《嵌入式Linux驱动程序和QT》由会员油条分享,可在线阅读,更多相关《嵌入式Linux驱动程序和QT》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇 农村发展调研报告_1范文 2022年电脑说明文作文合集六篇 2022年防溺水初中生演讲稿 2021最新36岁儿童学习与发展指南心得体会 2022年新生迎新晚会策划书模板 20 xx年教育系统计划生育工作总结 英语定语讲解ppt课件 2021年4s店客服工作计划范文 2022年小学优秀作文700字四篇
     
    收藏店铺
    相关文档 更多>
    正为您匹配相似的精品文档
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.