- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 ) 发
您可能关注的文档
- 成都理工大学传播科学与艺术学院电影美学课件第七章 后现代主义理论.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第三章 电影作者论.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第十三章 全球化下的华语电影.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第十一章 西部片.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第十章 爱情片.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第四章 电影符号学、叙事学.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第五章 精神分析电影理论.ppt
- 成都理工大学传播科学与艺术学院电影美学课件第一章 导言.ppt
- 成都理工大学工程技术学院计算机基础课件第八章 计算机安全.ppt
- 成都理工大学工程技术学院计算机基础课件第七章 网页与网站制作.ppt
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
最近下载
- 大楼维修改造工程投标方案(技术标367页).docx
- 高频电刀的使用(参考).ppt
- AQT3034—2022化工过程安全管理导则.pdf VIP
- 省考公务员-黑龙江-行政职业能力测验-第一章数量关系-第四节行程问题-.docx VIP
- DB23_T(1621.10-1621.14)-2015:黑龙江省建设工程施工操作技术规程(三).pdf VIP
- 整体法-隔离法-动态平衡题型练.doc VIP
- 2021年全国乙卷(生物)高考真题.pdf VIP
- 论中小企业会计核算重要性-来源:财会学习(第2020027期)-《中国建材报》社、中国会计学会建材分会.pdf VIP
- 2022年高考真题全国乙卷(文综历史)真题(有答案).pdf VIP
- 浅谈机务维修作风建设 蔡恒志.doc VIP
文档评论(0)