- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式设备驱动程序设计
第8章 嵌入式设备驱动程序设计 第8章 嵌入式设备驱动程序设计 8.1 嵌入式设备驱动程序基础 8.1.1 设备驱动程序概述 8.1.2 设备驱动程序的框架 8.1.3 设备驱动程序的加载过程 8.1.4 设备驱动程序功能接口函数模块 8.1.5 设备驱动程序重要的数据结构体 8.2 设备驱动程序设计 8.2.1设计驱动程序 8.2.2 编译和加载驱动程序 8.3 简单驱动程序设计示例 8.1嵌入式设备驱动程序基础 8.1.1 设备驱动程序概述 1、设备文件 设备文件分为三类:字符设备文件、块设备文件和网络接口设备文件。 字符设备文件通常指不需要缓冲就能够直接读写的设备。 块设备文件通常指仅能以块为单位读写的设备,它的存取是通过缓冲区来进行。 网络接口设备文件通常指网络设备访问的接口,如网卡等。 2、内核空间和用户空间 内核主要负责操作系统最基本的内存管理、进程调度和文件管理以及虚拟内存、需求加载、TCP/IP网络功能等。 内核空间和用户空间分别引用不同的内存映射,也就是程序代码使用不同的地址空间。 3、设备驱动程序和用户应用程序 设备驱动程序可以理解为操作系统的一部分,它的作用就是让操作系统能正确识别和控制设备。 嵌入式Linux内核采用可加载的模块化设计方式,也就是将最基本的核心代码编译在内核中,其他的代码可以则编译成内核的模块文件。 对设备进行访问和操作的程序由两部分组成,即:设备驱动程序+用户应用程序。 设备驱动程序特点: (1)内核代码:设备驱动程序是内核的一部分,如果设备驱动程序出错,则有可能导致系统崩溃。 (2)内核接口:设备驱动程序必须为内核或者其子系统提供一个标准接口 (3)可动态装载:大多数嵌入式Linux设备驱动程序都可以在需要时动态地装载进内核,在不需要时从内核中卸载。 设备驱动程序运行在内核空间,而用户应用程序则运行在用户空间。 嵌入式操作系统通过系统调用和硬件中断来完成从用户空间到内核空间的控制转移 。 8.1.2 设备驱动程序的框架 【例8-1】最简单的驱动程序。 #include linux/module.h #include linux/kernel.h int init_module(void) { printk(Hello,Test_drv [ ---kernel---]\n); return 0; } void cleanup_module(void) { printk(Goodbye Test_drv [ ---kernel---]\n); } module_init(init_module); module_exit(cleanup_module); 一般地,一个设备驱动程序模块的基本框架如下: #include ……/xxx.h //驱动程序所必须的包含文件 open(){ … } read(){ … } write(){ … } …… // 设备的功能接口函数与数据结构体 struct file_operation{ …… }; int init_module(void) { …… //驱动程序注册语句 } void cleanup_module(void) { …… //释放设备资源语句 } module_init(init_module); //加载驱动的入口点 module_exit(cleanup_module); //卸载设备驱动的入口点 8.1.3 设备驱动程序的加载过程 1、设备号 嵌入式Linux系统通过设备号来区分不同设备。设备号分为主设备号和次设备号。内核通过主设备号将设备与相应的驱动程序对应起来。主设备号的取值范围是0~255。当一个驱动程序要控制若干个设备时,就要用次设备号来区分它们。 2、设备进入点 对每个设备都要定义一个设备进入点,该设备进入点的名称则称为设备名。设备进入点又称为设备文件。 如果设备注册成功,则设备名就会写入到/proc/devices文件中。 对于设备进入点(设备文件),可以象操作磁盘上的普通文件一个,进行删除(rm)、移动(mv)和复制(cp)等操作。 (1) 创建设备进入点 创建设备进入点的命令格式为: mknod /dev/xxx type major minor 其中: xxx为设备名; type为设备类型,若为字符设
文档评论(0)