学习笔记-Linux驱动开发-1-基础

一、驱动

1、概念

软件层面的驱动广义上就是指这一段代码操作了硬件去动,所以这段代码就叫硬件的驱动程序。(本质上是电力提供了动力,而驱动程序提供了操作逻辑方法)
狭义上驱动程序专指操作系统中用来操控硬件的逻辑方法部分代码。

2、linux系统架构

(1)分层思想
优点:简化各层次的设计、解耦合
应用层通过调用API与系统进行通信,系统中的驱动控制硬件设备。
(2)驱动的上面是系统调用API
(3)驱动的下面是硬件
(4)驱动自身也是分层

二、模块化设计

1、微内核和宏内核

(1)宏内核(又称单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。
(2)微内核:功能被划分成独立的过程,过程间通过IPC(进程间通信)进行通信。模块化程度高,一个服务失效不会影响另一个服务。典型如Windows
(3)linux:本质上是宏内核,但是又吸收了微内核的模块化特性,体现在2个层面,静态模块化和动态模块化

2、静态模块化

在编译时实现可裁剪。(通过宏定义,选择Y or N来选择功能的裁剪),特征是想要功能裁剪改变必须重新编译

3、动态模块化

可以不用重新编译烧录,甚至是可以不用关机重启就实现模块的安装和卸载。

三、linux设备驱动分类

一般分为3类:字符设备驱动、块设备驱动、网络设备驱动。
分类原则:设备本身读写操作的特征差异。

1、字符设备

现实场景中较多。
准确的说可以叫做“字节设备”。特征是软件操作设备时是以字节为单位来操作的,典型的如LCD、串口、LED、蜂鸣器、触摸屏等。
学习时较为重要,因为:
(1)常见的大量设备都属于字符设备;
(2)非标准类型字符设备驱动

2、块设备

相对于字符设备定义的,块设备被软件操作时是以(多个字节构成的一个单位)为单位的。设备的块大小是设备设计时定义好的,软件不能去更改,不同设备的块大小可以不一样。常见的块设备有硬盘、nandflash、inad、SD卡等。

3、网络设备

网络设备是专为网卡设计的驱动模型。linux中网络设备驱动主要目的是为了支持API中soket相关的那些函数工作。

四、驱动程序的安全性要求

1、驱动是内核的一部分

(1)驱动已经成为内核中最庞大的组成部分
(2)内核会直接以函数调用的方式调用驱动代码
(3)驱动的动态安装和卸载都会“更改”内核

2、驱动对内核的影响

(1)驱动程序崩溃甚至会导致内核崩溃
(2)驱动的效率会影响内核的整体效率
(3)驱动的漏洞会造成内核安全漏洞

3、常见驱动安全性问题

(1)未初始化指针
(2)恶意用户程序
(3)缓冲区溢出
(4)竞争状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值