linux 驱动的分类,驱动的概念和分类及安全性

描述

1、驱动的概念

狭义上,驱动程序专指操作系统中的用来操控硬件的代码。

2、linux体系架构

(1)分层思想;

(2)驱动的上层是API(即应用程序调用API,API调用驱动),驱动的下层是硬件(硬件抽象为寄存器);

18ea19b890fcb578e0956cb18ba03224.png

(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)学会总结、记录,这会有助于理解

打开APP阅读更多精彩内容

点击阅读全文

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值