福州做企业网站的公司,卫浴外贸版网站案例,商业计划书,网站建设中单页面以下内容源于朱有鹏嵌入式课程的学习与整理#xff0c;如有侵权请告知删除。 一、驱动的概念 设备驱动程序#xff08;Device Driver#xff09;#xff0c;简称驱动程序、驱动#xff08;Driver#xff09;#xff0c;指操作系统中用来操控硬件的代码。 驱动是硬件与操…以下内容源于朱有鹏嵌入式课程的学习与整理如有侵权请告知删除。 一、驱动的概念 设备驱动程序Device Driver简称驱动程序、驱动Driver指操作系统中用来操控硬件的代码。 驱动是硬件与操作系统之间的接口操作系统只有通过这个接口才能控制硬件设备的工作因此驱动程序被誉为“硬件的灵魂”、“硬件的主宰”和“硬件和系统之间的桥梁”等。 二、驱动的层次与框架 1、驱动的层次 Linux的体系架构体现着分层的思想。对于驱动层它上面是系统调用下面是硬件层。 2、驱动的框架 驱动本身也是分层的这体现为驱动的框架。内核驱动维护者往往为同类的设备设计了一个框架框架的核心层实现了该设备通用的一些功能而具体的底层操作留给驱动工程师去实现。更多描述见博文什么是驱动框架_天糊土的博客-CSDN博客。 三、驱动的模块化设计 1、宏内核与微内核 1宏内核的含义 将内核从整体上作为一个大过程实现并同时运行在一个单独的地址空间。 所有的内核服务都在一个地址空间运行相互之间直接调用函数简单高效。 2微内核的含义 功能被划分成独立的过程过程间通过IPC进行通信。 模块化程度高一个服务失效不会影响另外一个服务。 典型如windows。 2、Linux的宏、微内核属性 Linux本质是宏内核但是吸收了微内核的模块化特性体现在以下方面 1静态模块化 在编译时可进行配置以达到功能裁剪的目的但是想要功能裁剪改变必须重新编译。 2动态模块化 不需要重新编译与烧录内核源码镜像甚至可以不关机重启就能实现模块的安装与卸载。 四、驱动分类 计算机系统的主要硬件由CPU、存储器和外部设备组成。 驱动程序的对象一般是存储器和外部设备。根据这些设备本身读写操作的特征差异驱动分为以下三类 1、字符设备驱动 字符设备或者说“字节设备”指的是以字节为单位进行操作的设备。 多数的设备属于字符设备如LCD、串口、LED、蜂鸣器、触摸屏、鼠标、键盘等等。 内核为每个字符设备设计了一个文件叫做字符设备文件表现为/dev/xxx。对字符设备文件的操作会映射为对字符设备的操作。 字符设备一般需要在驱动层实现open()、close()、read()、write()、ioctl()等函数。这些函数最终将被文件系统中的相关函数调用。 2、块设备驱动 块设备是相对于字符设备定义的块设备被软件操作时是以块为单位的。 设备的块大小是设备本身设计时定义好的软件不能更改不同设备的块大小可以不一样。 常见的块设备都是存储类设备如硬盘、iNand、SD等等。 3、网络设备驱动 Linux中网络设备驱动主要目的是为了支持API中socket相关函数的工作。 五、驱动程序的安全性要求 1、驱动对内核的影响 驱动是内核的一部分而且是内核中最庞大的组成部分。内核以函数调用的方式调用驱动代码驱动代码崩溃甚至会导致内核崩溃驱动的效率会影响内核的整体效率驱动的漏洞会造成内核安全漏洞。 2、常见驱动安全性问题 1未初始化指针 2恶意用户程序 3缓冲区溢出 4竞争状态 六、驱动开发与应用开发的差异 1、内核及驱动程序开发时不能访问C库。因为C库是使用内核中的系统调用来实现的而且是在用户空间实现的。 2、内核及驱动程序开发时必须使用GNU C因为Linux从一开始就使用GNU C。 3、内核支持异步终端、抢占和SMP故必须注意同步和并发。 4、内核只有一个很小的定长堆栈。 5、内核及驱动程序开发时缺乏像用户空间那样的内存保护机制。 6、内核及驱动程序开发时浮点数很难使用应该使用整形数。 7、内核及驱动程序开发要考虑可移植性。 七、驱动学习方法 1、基础积累 1熟悉C语言。 2对芯片手册上描述的接口设备有清楚的认识。比如SRAM、Flash、UART、IIC、USB等。 3掌握系统编程比如多任务程序设计。 2、驱动学习阶段 1注重实践一步一步写驱动。 2培养框架思维多考虑整体和上下层。 3通过简单设备学Linux驱动框架。 4学会总结、记录这会有助于理解。