首页 > 其他分享 >驱动和固件

驱动和固件

时间:2023-02-27 15:35:34浏览次数:56  
标签:驱动程序 硬件 软件 驱动 固件 设备 操作系统

本文整合了知乎上的问答,文后附有转载链接。
驱动(diver)和固件(firmware)都是代码,前者为软件服务,后者为硬件服务。
先看一组漫画,对固件、驱动、操作系统、软件之间的联系有个大概认识。
来自 良许老师知乎的回答




简单来讲,固件、驱动程序和软件之间的根本区别在于它们的设计目的。

  • 固件是赋予设备硬件生命的程序
  • 驱动程序是操作系统和硬件组件之间的中间人
  • 软件可以间接操作硬件
  1. 固件
    固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基础最底层工作,直接控制硬件。
    比如计算机上电后第一个启动的程序 BIOS ,它可以与硬件交互,并检查它是否有任何错误。
    BIOS 调用另一个称为引导加载程序的程序,该程序执行唤醒在硬盘驱动器内休眠的操作系统并将其放入随机存取存储器 (RAM) 的工作。
    我们可以在许多设备上看到固件,包括计算机、手机、遥控器、游戏机、智能手表、USB 驱动器和各种嵌入式系统。
    即使是电视遥控器也有一个预装的固件,可以实现你按下按钮的时候电视换台操作。

  2. 驱动驱动(Driver)
    驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。
    当计算机程序请求与某个硬件设备交互时,设备驱动程序充当硬件设备与使用它的程序之间指令的转换器。
    操作系统并不支持机器上的所有硬件,所以一般来讲硬件厂商都要为自己的硬件编写驱动程序。
    每个驱动程序都旨在为特定或一组设备工作。
    在计算机上,驱动程序使用各种总线接口来联系设备。
    此外,驱动程序一般不直接与用户交互,所以很多用户完全不知道它们的存在。
    驱动程序的开发需要非常小心,因为它直接与硬件打交道,同时也与操作系统打交道。如果设备驱动程序出现问题,可能会导致系统崩溃,这就是为什么需要专业人员或团队来为设备编写驱动程序的原因。
    但是为什么不把 Firmware 做的很完美,做的不需要驱动支持呢?因为有不同的操作系统,而这些操作系统对于操作硬件的方式完全不同。所以不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的。

  3. 软件
    与硬件不同,软件是运行在电脑里,看不见摸不着。
    操作系统也是一个软件,并且为安装在操作系统上的其他软件提供了工作空间。
    前面提到的设备驱动程序其实也是一种软件,不过它有个更细分的种类,称为系统软件。
    如果用户编写了一个软件,想要操作硬件(比如光驱、U盘等),他必须通过操作系统提供的接口来实现,而无法直接与硬件交互。
    值得注意的一点是,软件是一个广义的术语,分为系统软件和应用软件。我们在日常使用中所说的「软件」一般是指应用软件,比如:微信,QQ,浏览器等等。

标签:驱动程序,硬件,软件,驱动,固件,设备,操作系统
From: https://www.cnblogs.com/polin/p/17159858.html

相关文章

  • 如何实现基于Cortex-A9 的UART裸机驱动
    前言Uart在一个嵌入式系统中是一个非常重要的模块,他承担了CPU与用户交互的桥梁。用户输入信息给程序、CPU要打印一些信息给终端都要依赖UART。本文将以Exynos4412的UART......
  • Linux下SPI驱动详解
    1.SPI总线1.1.SPI总线概述SPI,是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应......
  • MTK平台驱动调试指南 GPIO设置篇
    一、GPIO有关的函数1.GPIO_ModeSetup:函数原型:voidGPIO_ModeSetup(kal_uint16pin,kal_uint16conf_dada)功能:设置GPIO的工作模式是作为GPIO,还是作为专有功能接口。参......
  • Linux中级——“驱动” 控制硬件必须学会的底层知识
    驱动认知1.什么是驱动驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。设备分类:linux系统将设备分为3类:字符设备、块设备、网络设备。字符设备:指只能一......
  • 数位板驱动安装
    系统环境:openSUSETumbleweedKernel:6.1.12-1-default设备:高漫M6本篇使用digimend-kernel-drivers,可以先查看支持列表另外一个数位板驱动项目是OpenTabletDrive......
  • 一枚Linux驱动开发的2022总结与2023计划
    2022总结2023计划能力与素质1.警惕身边的"奶头乐",追求高级的快乐奶头乐(英语:tittytainment),又译为奶头娱乐或奶嘴娱乐,是一个合成词,来自于英文“titty”(奶头)与“entert......
  • linux驱动移植-SPI驱动移植(OLED SSD1306)
    在之前Mini2440裸机开发之SPI(OLEDSSD1306)中我们介绍了关于OLEDSSD1306相关的知识,这里我们将会学习以内核驱动的方式去控制OLED。一、OLED128x64(SSD1306)1.1引脚说明当......
  • STM32驱动AD7920
       #ifndef__AD7920_H#define__AD7920_H #include"sys.h" //使用4线串行接口时使用#defineAD7920_SCLK PAout(6)#defineAD7920......
  • SSD1306驱动
    #include"i2c.h"voidSSD1306_SendCmd(uint8_tcmd){ uint8_tbuffer[]={0,cmd}; IIC_Write(0x78,buffer,2);}voidSSD1306_SendData(uint8_tdata){ uin......
  • 数据驱动ddt安装3种方式_unittest_Python
    命令行安装  pipinstallddt-i 管理员运行命令提示符  pycharm设置里安装pycharmPythonPackages里安装......