驱动的定义、分类、安全性
来源:互联网 发布:苹果numbers是什么软件 编辑:程序博客网 时间:2024/06/07 02:56
以下内容源于朱友鹏《物联网大讲坛》课程的学习,如有侵权,请告知删除。
1、驱动的概念
狭义上,驱动程序专指操作系统中的用来操控硬件的代码。
2、linux体系架构
(1)分层思想;
(2)驱动的上层是API(即应用程序调用API,API调用驱动),驱动的下层是硬件(硬件抽象为寄存器);
(3)驱动本身也是分层的。
3、微内核和宏内核
(1)宏内核(又称为单内核)
- 将内核从整体上作为一个大过程(整体看做一个程序)实现,并同时运行在一个单独的地址空间。
- 所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。
- 紧耦合,动一发而动全身。
(2)微内核
- 功能被划分成独立的过程程序(独立的模块),过程间通过IPC(进程间通信)进行通信。
- 模块化程度高,一个服务失效不会影响另外一个服务。
- 典型如windows。但效率低。
(3)linux本质上是宏内核,但是又吸收了微内核的模块化特性,提现在2个层面。
- 静态模块化:在编译时实现可裁剪,特征是想要功能裁剪,改变必须重新编译(需要关机重启)动态模块化:
- zImage可以不重新编译烧录,甚至可以不关机重启就实现模块的安装和卸载,比如驱动的安装。
4、linux设备驱动分类
(1)驱动分类
- 字符设备驱动、块设备驱动、网络设备驱动;
- 分类原则是设备读写操作的特征差异;
(2)三类驱动程序详细对比分析
- 字符设备,即“字节设备”。软件操作设备时,以字节为单位进行的。典型的如LCD、串口、LED、蜂鸣器、触摸屏。
- 块设备,相对于字符设备定义的。软件操作设备时,以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件不能去更改,但不同设备的块大小可以不一样。常见的块设备都是存储类设备,如硬盘、NandFlash、iNand、SD。
- 网络设备,网络设备是专为网卡设计的驱动模型。linux中网络设备驱动主要目的是为了支持API中socket相关函数的工作。
(3)为什么字符设备驱动最重要?
- 常见大量设备都属于字符设备
5、驱动程序的安全性要求
(1)驱动是内核的一部分
- 驱动已经成为内核中最庞大的组成部分;
- 内核会直接以函数调用的方式调用驱动代码;
- 驱动的动态安装和卸载都会“更改”内核。
(2)驱动对内核的影响
- 驱动程序崩溃甚至会导致内核崩溃;
- 驱动的效率会影响内核的整体效率;
- 驱动的漏洞会造成内核安全漏洞。
(3)常见驱动安全性问题
- 未初始化指针;
- 恶意用户程序;
- 缓冲区溢出;
- 竞争状态。
学习驱动要点
1、先学好C语言
2、硬件操作方面
3、应用层API
4、
(1)注重实践,一步一步写驱动
(2)框架思维,多考虑整体和上下层
(3)先通过简单设备学linux驱动框架
(4)学会总结、记录,这会有助于理解
0 0
- 驱动的定义、分类、安全性
- 五类线程安全性的分类
- 驱动的线程不安全性和进程不安全性
- 循环的定义、分类
- 软件的分类定义
- 软件定义存储的定义与分类
- 机器人的定义与分类
- 金融资产的定义和分类
- Issue的分类和定义
- 树的定义及其分类
- 分类问题的数学定义
- wince驱动的分类问题
- 常见的加密算法的分类以及定义
- 文本分类入门(一)文本分类问题的定义
- 文本分类入门(一)文本分类问题的定义
- 文本分类入门(一)文本分类问题的定义
- 文本分类入门(一)文本分类问题的定义
- 中间件的定义、分类以及典型产品
- pyasn1模块缺失解决
- 算法导论 练习题 13.1-4
- Spring速查手册(三)——Spring+JDBC
- Linux下C++的开发实践
- C++11 变量初始化方法汇总
- 驱动的定义、分类、安全性
- postgresql扩展uuid
- Android动态获取运行时权限RxPermissions
- EditText自动换行的问题
- PHP创建SqlLite数据表并让ID自增
- Unity日志工具——封装,跳转
- JAVA开发之 7-path环境变量的作用及配置方式
- 在BAE搭建的Django中实现图片上传并用jquery预览图片
- Glide基本使用