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

电子科技大学电子工程学院嵌入式系统设计与PCA技术课件第七章 嵌入式设备驱动.ppt

电子科技大学电子工程学院嵌入式系统设计与PCA技术课件第七章 嵌入式设备驱动.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 嵌入式Linux的设备驱动 嵌入式Linux驱动程序开发 常用的系统支持 Linux系统网络设备驱动程序 编写Linux网络驱动程序中需要注意的问题 Linux系统驱动程序开发简介 Linux中设备被抽象出来,所有设备都看成文件 如:系统中第一个IDE硬盘被表示成/dev/hda 设备的读写和普通文件一样 设备驱动程序主要完成这些功能: 探测设备和初始化设备 从设备接收数据并提交给内核 从内核接收数据送到设备 检测和处理设备错误 Linux设备驱动程序分类 Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种 字符设备是指存取时没有缓存的设备。 如:系统的串口设备/dev/cua0和/dev/cua1 块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),且不管块位于设备中何处都可以对其进行读写。块设备可以通过其设备相关文件进行访问,但更为平常的访问方法是通过文件系统。只有块设备才能支持可安装文件系统。如硬盘 用mknod命令创建的块设备特殊文件与字符设备特殊文件 网络设备在Linux里做专门的处理 ,可以通过BSD套接口访问。 编写驱动程序的一些基本概念 读写 几乎所有设备都有输入和输出。每个驱动程序要负责本设备的读写操作。操作系统的其他不需要知道对设备的具体读写操作怎样进行,这些都由驱动程序屏蔽掉了。操作系统定义好一些读写接口,由驱动程序完成具体的功能。在驱动程序初始化时,需要把具有这种接口的读写函数注册进操作系统。 常用的系统支持 内存申请和释放 中断 时钟 I/O 中断打开关闭 打印信息 注册驱动程序 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree()。用于在内核模式下申请和释放内存。 与用户模式下的malloc()不同,kmalloc()申请空间有大小限制。长度是2的整次方。可以申请的最大长度也有限制。另外kmalloc()有priority参数 Kfree()释放的内存必须是kmalloc()申请的 申请中断和释放中断 request_irq()、free_irq() 是驱动程序申请中断和释放中断的调用。 在include/linux/sched.h里声明 时钟 时钟的处理类似中断,也是登记一个时间处理函数,在预定的时间过后,系统会调用这个函数。 在include/linux/timer.h里声明 使用时钟,先声明一个timer_list结构,调用init_timer对它进行初始化。Time_list结构里expires是标明这个时钟的周期,单位采用jiffies的单位。 jiffy 指连续微处理器时钟周期间的时间长度 I/O I/O端口的存取使用: inline unsigned int inb(unsigned short port); inline unsigned int inb_p(unsigned short port); inline void outb(char value, unsigned short port); inline void outb_p(char value, unsigned short port); 在include/adm/io.h里定义 中断打开关闭 系统提供给驱动程序开放和关闭响应中断的能力 是在include/asm/system.h #define cli() __asm__ __volatile__ (cli::) #define sti() __asm__ __volatile__ (sti::) 打印信息 驱动程序要输出信息使用printk() include/linux/kernel.h里声明 注册驱动程序 如果使用模块(module)方式加载驱动程序,需要在模块初始化时把设备注册到系统设备表里去,不再使用时,把设备从系统中卸除 定义在drivers/net/net_init.h里的两个函数完成这个工作 Int register_netdev(struct device *dev); void unregister_netdev(struct device *dev); 网络驱动程序的结构 所有的Linux网络驱动程序遵循通用的接口 设计时采用的是面向对象的方法 一个设备就是一个对象(device 结构),它内部有自己的数据和方法 一个网络设备最基本的方法有初始化、发送和接收 网络驱动程序的基本方法 初始化(initialize) 打开(open) 关闭(stop ) 发

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档