第24讲-Linux设备驱动程序概述.pptVIP

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

Spring Semester 2006 嵌入式系统及应用 嵌入式系统及应用 设备驱动的概念 驱动程序为硬件提供一个定义良好的内部接口 驱动程序封装了硬件细节 驱动程序为应用程序提供了访问设备的机制 分类 字符设备 块设备 网络接口 提供公共服务的特定类型设备 设备驱动程序概述 Linux设备驱动程序是处理或操作硬件控制器的软件,被集成在内核中,是常驻内存的低级硬件处理程序的共享库,设备驱动程序就是对设备的抽象处理。 Linux允许设备驱动程序作为内核可加载模块实现,这样除了可以在系统启动是进行注册外,还可以在启动后进行加载注册。 嵌入式设备框图 设备驱动程序的功能 对设备进行初始化 使设备投入运行和退出服务 从设备接收数据并将它们送回内核 将数据从内核送到设备 检测和处理设备出现的错误 Linux驱动程序的特点 嵌入式Linux驱动程序需求多样 嵌入式设备硬件各异 嵌入式处理器往往资源有限,比如处理速度、存储器容量、总线带宽、电池容量等 开发团队面临上市时间的压力 开发驱动程序需要专业知识,包括硬件和软件的 Linux驱动开发流程 熟悉设备的特性 确定设备驱动程序是哪一类 编写测试用例 搜集可重用的代码 编写自己的驱动程序代码 调试、编码、测试 Linux驱动开发环境 本机编译调试 开发环境配置简单 无需网络环境 适用于配置较高的x86机器 主机+目标机 主机可以自由选择Linux或Windows+Cygwin 主机和目标机通过网络共享文件系统 内核崩溃不会影响主机 主机运行的工具链∶cross gcc + glibc + gdb 设备驱动程序的代码 驱动程序的注册与注销 register_chrdev() register_blkdev() 设备的打开与释放 open() release() 设备的读写操作 read() write() 设备的控制操作 ioctl() 设备驱动的加载 使用模块的方式动态加载驱动 int func_init(void) Makefile: insmod xx.ko lsmod rmmod xx.ko 将驱动静态编译到内核里面 int __init func_init(void) Makefile: 启动时自动加载 Linux驱动程序模块加载 设备存储器的映射 电路图 驱动源代码 #include … #define SimpleLED_MAJOR 97 static long ioremap_addr; ssize_t SimpleLED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops){ printk(s3c2410: device file-read operation!\n); return count;} ssize_t SimpleLED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ printk(s3c2410: device file-write operation!\n); return count;} 驱动源代码 ssize_t SimpleLED_ioctl (struct inode * inode, struct file * file, unsigned int cmd, long data){ printk(s3c2410: device ioctl operation!\n); } ssize_t SimpleLED_open (struct inode * inode , struct file * file){ return 0; } ssize_t SimpleLED_release (struct inode * inode , struct file * file){ outw(0x0000,iorema

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档