嵌入式Linux驱动高级开发及内核原理剖析.ppt

嵌入式Linux驱动高级开发及内核原理剖析.ppt

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux驱动高级开发及内核原理 陈应刚 chenyg@miiceic.org.cn 日程安排 设备驱动简介 建立和运行模块 字符驱动 调试技术 并发和竞争 高级字符驱动操作 时间,延时和延后工作 分配内存 与硬件通讯 中断处理 块设备驱动 日程安排 设备驱动简介 设备驱动简介 驱动是什么 Driver is a software layer that lies between the applications and the actual device 驱动程序的角色 提供机制, 而不是策略 隐藏在UNIX中的哲学 mechanism: What capabilities are provided. policy: How these capabilities can be used. Kernel的作用 Kernel可划分为下列功能单元 进程管理: 进程调度, 资源分配, 进程间通信. 内存管理: 其实也算是资源分配的一部分 文件系统: 管理, 组织物理媒介上数据的方法 设备控制: 设备驱动(ldd3所关注的) 网络: 实质上是进程间通信. 但它不局限于一个特定的进程. 它关注收/发packets, 路由, 地址解析... Kernel的结构 模块 可加载模块(lodable modules) module: 可实时加载到内核中的代码, 它可动态连接到内核(insmod, rmmod) 设备驱动就是module的代表, 但module还包括文件系统等等. 设备和模块的分类 模块分为这些类型,每种类型的模块驱动对应类型的设备 character module, block module, network interface other module 字符设备和块设备 字符设备: 以字节流的形式被访问的设备。e.g: /dev/console : 文本控制台. /dev/ttyS0 : 串口 它通过文件系统节点被访问. e.g: /dev/tty1, /dev/lp0 字符设备与一般文件(regular file)的区别 可以在一般文件中前后移动(lseek), 但只能顺序访问字符设备. 当然, 也有特例: frame grabbers. 块设备: 能支持文件系统的设备 传统的UNIX: 只能以block(512B)为单位访问块设备 Linux: 能以访问字符设备的方式访问块设备, 即以字节文单位访问块设备. Linux中字符设备与块设备的区别 内核内部对数据的组织和管理不同, 对驱动开发者来说透明 接口不同: 使用两套不同的interface 网络设备 网络接口: 能与其他主机通信的设备 它可以是硬件设备, 也可以是软件设备, 比如lo. (参考TCP/IP详解p26) 网络接口只管收发数据包, 而不管这些数据包被什么协议所使用 不同于字符设备和块设备, 网络接口没有对应的文件系统节点. 虽然可以通过类似eth0这样的文件名来访问网络接口, 但文件系统节点中却没有针对网络接口的节点 内核与网络接口之间的通信也不同于内核与字符/块设备之间的通信(read, write), 它们之间使用特定的传输数据包的函数调用 其他设备 也有一些module不能严格地划分类型. USB module: 它工作在内核的USB子系统之上 实际的USB设备可以是字符设备, 块设备, 也可以是网络接口 在设备驱动之外, 别的功能, 不论硬件和软件, 在内核中都是模块化的 例如文件系统 日程安排 设备驱动简介 建立和运行模块 建立和运行模块 建立开发环境 ldd3例子开发环境linux2.6.10 2.6驱动开发需要预先安装内核源码 源码需要从官方下载kernel.org 或者其他发行版的官方下载 直接解压到/usr/src目录下 版本影响 内核官方版本注意kernel.org 注意发行版的内部版本 最新内核版本linux2.6.20/21工作队列接口变化 小版本变动不会对驱动的架构造成太大影响 对于不同发行版,不同内核版本要做少量移植和测试 内核模块VS应用程序 执行机制不同 模块初始化 模块退出 类似事件编程 使用库不一样 无法使用标准库 只能调用内核提供的函数 用户空间VS内核空间 用户空间VS内核空间 应用程序运行在用户空间 设备模块运行在内核空间 运行模式不一样 内存地址映射也不一样 用户空间和内核空间的转换 可能发生在进程中的系统调用时或者硬件中断 系统调用虽然在内核中执行,但是依然是在进程的上下文中进行的,所以可以访问到进程中的数据。 中断处理和进程是异步的了,而且不和任何进程有关系 模块跨越两个空间,有两个触发入口 一些函数作为系统调用的一部分执行 一些函数负责中断处理 内核中的并发 应

文档评论(0)

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

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

1亿VIP精品文档

相关文档