一、什么是驱动?

1: 驱动一词的字面意思

2: 物理上的驱动

3: 硬件中的驱动

4: linux内核驱动。软件层面上的驱动广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。

狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法的部分代码。而我们这里讲的驱动就指的是这个狭义上的驱动。

二、Linux驱动的体系架构

1: 分离、分层思想

2: 驱动的上面是系统调用API

3: 驱动的下面是硬件

4: 驱动本身的实现也是基于分离、分层的思想

三、模块化设计的思想

1、微内核和宏内核(操作系统设计的两种思路)

(1)宏内核(又称为单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简

单高效。坏处就是紧耦合,一个动了其他的也要跟着动,因为他们都是一起编译的,就好比我们平时写的裸机程序一样,编译成一个可执行文件的。

(2)微内核:功能被划分成独立的过程,过程间通过IPC进行通信。模块化程度高,一个服务失效不会影响另外一个服务。典型如windows

(3)linux:本质上是宏内核,但是又吸收了微内核的模块化特性,提现在2个层面

2、动态模块化和静态模块化

(1)静态模块化:在内核编译时实现可裁剪,特征是想要功能裁剪改变必须重新编译

(2)动态模块化:zImage可以不重新编译烧录,甚至可以不关机重启就实现模块的安装和卸载。

四、驱动的分类

1、驱动分类

(1)分3类:字符设备驱动、块设备驱动、网络设备驱动

(2)分类原则:设备本身读写操作的特征差异

时刻要注意一点,我们的驱动本质上是不分类的,因为我们的硬件是不同的,有不同的读写特性,所以的硬件是分类的,所以我们的驱动也就要跟着分类了。

2、三类驱动程序详细对比分析

(1)字符设备,准确的说应该叫“字节设备”,软件操作设备时是以字节为单位进行的。典型的如LCD、串口、LED、蜂鸣器、触摸屏······

(2)块设备,块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更

改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD····操作块设备时,我们必须以块单位进行操作,将一块的

数据读取到内存中去,然后在内存中找到相应的那个字节数据修改之后再以一块的数据写入到我们的块设备中去。

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

3、为什么字符设备驱动最重要

(1)常见大量设备都属于字符设备

(2)举例说明非标准类型字符设备驱动

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

1、驱动是内核的一部分

(1)驱动已经成为内核中最庞大的组成部分

(2)内核会直接以函数调用的方式调用驱动代码

(3)驱动的动态安装和卸载都会“更改”内核

2、驱动对内核的影响

(1)驱动程序崩溃甚至会导致内核崩溃

(2)驱动的效率会影响内核的整体效率

(3)驱动的漏洞会造成内核安全漏洞

3、常见驱动安全性问题

(1)未初始化指针

(2)恶意用户程序

(3)缓冲区溢出

(4)竞争状态

参考:  《朱友鹏嵌入式Linux开发\5.Linux驱动开发\5.1.驱动应该怎么学》

转载于:https://www.cnblogs.com/deng-tao/p/6165173.html

Linux驱动学习之什么是驱动?相关推荐

  1. Linux内核学习-字符设备驱动学习(二)

    在Linux内核学习-字符设备驱动学习(一)中编写字符设备驱动的一种方法,但是需要手动创建设备节点. 有没有能够自动的创建设备节点的呢? 有!使用class_create()和device_creat ...

  2. linux 驱动学习笔记-ALSA声卡驱动(二)

    前言 ASoC是建立在标准ALSA驱动层上 ,对底层的alsa框架封装了一层,为了更好的支持嵌入式cpu和音频解码器设备的一套软件体系 在ASOC出现之前 解码器驱动和平台CPU驱动联系过于紧密,导致 ...

  3. linux2.6驱动学习笔记之字符驱动

    1.字符驱动组成 1.1字符驱动的模块加载与卸载 //设备结构体模板 struct xxx_dev_t { struct cdev cdev; ...... }xxx_dev; 在字符驱动模块加载函数 ...

  4. Linux内核学习笔记之网卡驱动的详细分析:RTL8139

    学习应该是一个先把问题简单化,在把问题复杂化的过程.一开始就着手处理复杂的问题,难免让 人有心惊胆颤,捉襟见肘的感觉.读Linux网卡驱动也是一样.那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏 ...

  5. Linux驱动学习笔记之触摸屏驱动

    触摸屏归纳为输入子系统,这里主要是针对电阻屏,其使用过程如下 当用触摸笔按下时,产生中断. 在中断处理函数处理函数中启动ADC转换x,y坐标. ADC结束,产生ADC中断 在ADC中断处理函数里上报( ...

  6. linux驱动学习2(kpd驱动初步分析)

    一.kpd_pdrv_probe函数的分析: /*1. 输入设备实例 kpd_input_dev */ 全局变量:static struct input_dev *kpd_input_dev; sta ...

  7. Linux设备与驱动学习之----什么是驱动

    [ 声明:版权所有,欢迎转载,转载请注明出处,请勿用于商业用途] [ 声明:本文属于作者个人理解,如有错误,欢迎大家指正] 在上一篇博文中我们介绍了 Linux 中的device 概念,这篇博文中我们 ...

  8. linux 驱动学习笔记-ALSA声卡驱动(一)

    概述 ALSA作为Liunx现在主流的音频体系结构,提供了内核的驱动框架,也提供了应用层的alsa-lib库,应用层主要调用alsa-lib的API函数就可以实现对声卡的控制.ALSA也提供了alsa ...

  9. linux pwm 调屏_Linux驱动学习之:PWM驱动

    PWM(Pulse Width Modulation)--脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量.通信.功率控制与变换等许多领域. s3c2440 ...

最新文章

  1. 【Netty】ByteBuf--Netty的数据容器
  2. c++ 重载 重写_Java | 深入理解方法调用的本质(含重载与重写区别)
  3. 超可爱,抖音爆款实时视频漫画变身特效技术
  4. 安卓系列转载,有时间可以参考学习
  5. SAP Fiori 应用的本地 sandbox Launchpad - 出于测试用途
  6. swoole会合并到php吗,thinkphp整合swoole
  7. 国网“泛在电力物联网”的战略与逻辑
  8. 【总结整理】javascript的函数调用时是否加括号
  9. (01)数据库及相关
  10. Linux里编译命令,linux编译命令大全
  11. springboot+nodejs+vue+Elementui网上商城购物系统
  12. 谈谈培训机构的“骗局“给新人一些建议
  13. vue实现lodop打印功能
  14. 「ZEALER 出品」Shawn Talk 第三期 iOS 7 的「槽点」跟观点
  15. 电子邮件服务器匿名转发功能吗,你为什么不能匿名发送电子邮件
  16. Web开发工程师的就业前景
  17. php实现下雪场景,下雪的唯美短句 下雪的场景写一段话
  18. Rai StudiesQuick Start Site for JAVA Developers
  19. python识别图片文字、并返回文字坐标_PyAutoGui 图片识别+定位+截图函数文档
  20. (附源码)spring boot大学生综合素质测评系统 毕业设计162308

热门文章

  1. 7-3 二叉树路径和II
  2. 我试过销声匿迹最后却无人问津(人生感悟)
  3. python调用canape_利用CANape进行基于CCP的汽车控制器的匹配标定的设计
  4. solidity 异常处理
  5. uni-app 数据循环
  6. 深度学习在视频多目标跟踪中的应用综述
  7. 乌班图服务器清理log文件,定时清除ubuntu下log日志文件
  8. Data Grip常用的快捷键总结:
  9. UE中FRotator和Pitch(Roll,Yaw)以及相对朝向的关系
  10. python 小说 小说_python潇湘书院网站小说爬虫