zoukankan      html  css  js  c++  java
  • 驱动

    一、什么是驱动
    驱动,即驱使硬件设备行动。驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”, 是一种可以使计算机和设备通信的特殊程序,相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。
    举个最简单的例子,一个LED灯的亮或灭,就需要与之相对应的driver来驱使LED灯或亮或灭。
    如下框图, 驱动程序位于底层硬件之上,用于隔离上层应用软件,

    无操作系统驱动结构

    二、无操作系统的驱动

    首先我们需要明白,并不是所有的系统都一定运行操作系统。例如,电话机、微波炉、电冰箱等比较简单的系统不需要复杂的存储管理、文件系统、多任务调度等功能。一个无限循环中夹杂中断处理、轮询等功能就可以满足简单系统的应用。在这样的系统中,虽然没有操作系统,但是驱动程序还是需要有的。一般情况,对应一种硬件设备,我们会定义一个软件模块,包括.h头文件和.c文件。在.h文件中定义该硬件设备的数据结构和声明外部函数;而.c文件则实现该设备的各个功能,即设备驱动的具体实现。另外,在这种code架构中,driver驱动硬件,而driver中的API直接被AP层调用,中间并没有任何其他的中间层。说到这里,回过头来看,上面的框图就是无操作系统的driver框图。

    注:比较容易出现的不规范的两种code架构:
    a. 没有AP应用层,即在driver层中直接开发AP应用层;
    b. 没有driver层,或者说将driver写在AP应用层。

    三、基于操作系统的驱动开发

    看看如下的框图,与前文中无操作系统的驱动开发相比,有以下特点:
    1.与硬件沟通的driver程序还是必须要有,此时说的程序便是无操作系统的driver程序。
    2.我们还需要将设备driver融入内核。正是为此,在设计driver时,还必须在设备driver中设计面向操作系统内核的接口,而这样的接口不是随便写的,是由操作系统已经规定好的。这也是基于
    操作系统的driver开发的难点所在。
    3.由以上两点可见,设备driver的功能不再是无操作系统时连接AP和硬件的桥梁,反而变成了连接底层硬件和操作系统内核的纽带。而AP应用层则也不再直接调用设备驱动API了,而是调用操作系统向外提供的API接口。

     有操作系统驱动结构

    四、说驱动一定不是说CPU
    计算机系统的硬件主要由CPU、存储器和外设组成。随着IC制造工艺的发展,芯片的集成度越来越高,往往在CPU内部就集成了存储器和外设适配器。例如,集成了UART、I2C控制器、USB控制器、SDRAM控制器、RAM、Flash等。驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设),而不是针对CPU核。

    五、Linux设备分类
    Linux将存储器和外设分为3个基础大类:

    字符设备

    块设备

    网络设备

    这些设备在linux操作系统中的管理模式图如下:

    linux设备驱动与整个软硬件系统的关系 

  • 相关阅读:
    leetcode 175 Combine Two Tables join用法
    spark学习及环境配置
    html表格设计
    免费的论文查重网站
    php利用msqli访问数据库并实现分页,
    php利用href进行页面传值的正确姿势
    php+mysql时报错:Unknown column '' in 'field list'解决方案
    使用XMLHttpRequest解析json
    用自定义的函数将gps转换为高德坐标
    WeakHashMap回收时机
  • 原文地址:https://www.cnblogs.com/debruyne/p/9318161.html
Copyright © 2011-2022 走看看