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

嵌入式驱动程序开发.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式驱动程序开发.ppt

嵌入式驱动程序开发 嵌入式驱动开发 驱动程序开发概览 文件系统和驱动程序开发 字符设备驱动开发 中断和I/O在驱动开发中的作用 驱动程序开发概览 驱动程序对比应用程序 应用程序是一个进程 编程从主函数main()开始 主函数main()返回即是进程结束 驱动程序是一系列内核函数 驱动程序向内核添加了一些函数,是内核的一部分 Open() Release() Read() Write() 这些函数由内核在适当的时候来调用 这些函数可以用来完成硬件访问等操作 驱动程序开发概览 驱动程序作用 设备驱动程序使得某个特定的硬件可以响应一个定义良好的内部编程接口,同时完成隐藏设备的工作。 用户操作通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的。将这些调用映射到作用于实际硬件的特定操作上,是设备驱动程序的任务。 对用户程序而言,设备驱动程序隐藏了设备的具体细节 ,对各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件(也有设备不作这样的映射),用户程序可以像对其它文件一样对此设备文件进行操作 驱动程序接口 Linux对硬件设备支持两个标准接口:块特别设备文件和字符特别设备文件 通过块(字符)特别设备文件存取的设备称为块(字符)设备或具有块(字符)设备接口. 块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O缓冲区进行,它可以运行几乎在任意长度和任意位置上的I/O请求,即提供随机存取的功能。 字符设备接口支持面向字符的I/O操作,它不经过系统的快速缓存,所以它们负责管理自己的缓冲区结构. 字符设备接口只支持顺序存取的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数. Linux驱动程序分类 设备驱动程序分类 字符设备 块设备 网络接口 其他 驱动程序的作用 从传统嵌入式开发角度来看,Linux驱动程序是直接操控硬件的软件 直接读写硬件寄存器,控制硬件 操作设备缓冲区数据 读写存储介质,比如flash或硬盘 操作输出设备和执行机 文件系统和Linux驱动 设备提供dev文件系统节点和proc文件系统节点 应用程序通过dev文件节点访问驱动程序 字符型驱动一般通过标准的文件I/O访问 块设备在上层加载文件系统,比如以FAT32的形式访问 网络设备通过SOCKET来访问 应用程序通过proc文件节点可以查询设备驱动的信息 驱动程序在哪儿 驱动程序位于内核源代码的drivers目录下,按照层次结构分门别类放置 驱动程序占kernel源代码超过50%。 开发完毕的驱动程序,放置在/lib/modules/kernel-version里 Linux驱动程序开发流程 熟悉设备的特性 确定设备驱动程序是哪一类 编写测试用例 搜集可重用的代码 编写自己的驱动程序代码 调试、编码、测试 Linux驱动程序加载方式 驱动程序直接编译入内核 驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间 驱动程序以模块形式存储在文件系统里,需要时动态载入内核 驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级灵活 授权方式灵活 设备驱动开发中的基本函 数 Linux对于驱动程序有统一的接口,以文件的形式定义系统的驱动程序: Open、Release、read、write、ioctl… 驱动程序是内核的一部分,可以使用中断、DMA等操作 驱动程序需要在用户态和内核态之间传递数据 主设备号和次设备号 主设备号标识设备对应的驱动程序 一个驱动程序可以控制若干个设备,次设备号提供了一种区分它们的方法 系统增加一个驱动程序就要赋予它一个主设备号。这一赋值过程在驱动程序的初始化过程中 int register_chrdev(unsigned int major, const char*name,struct file_operations *fops); 创建设备节点 ?? 设备已经注册到内核表中,对于设备的访问通过设备文件(设备文件与设备 驱动程序的主设备号匹配),内核会调用驱动程序中的正确函数 ?? 给程序一个它们可以请求设备驱动程序的名字。这个名字必须插入到/dev目 录中,并与驱动程序的主设备号和次设备号相连 ?? 使用mknod在文件系统上创建一个设备节点 mknod /dev/mydevice c 254 0 设备驱动程序的代码 驱动程序的注册与注销 register函数用于注册 unregister函数用于注销 设备的打开与释放 open() release() 设备的读写操作 read() write() 设备的控制操作 ioctl() 设备驱动的加载 使用模块的方式动态加载驱动 int func_init(void) Make

文档评论(0)

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

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

1亿VIP精品文档

相关文档