【业务领域】CPU 、操作系统、硬件驱动、应用程序之间关系

CPU 、操作系统、硬件驱动、应用程序、之间的关系:

  • 在 CPU 上跑一切程序,包括操作系统
  • CPU 有特权级别,一个程序可以给子程序分配更低的特权级别
  • 可以认为操作系统是第一个程序,特权最高
  • 操作系统可以控制应用程序以什么权限来使用 CPU
  • 操作系统负责把应用程序的权限控制好,使它们做不了坏事
  • 操作系统负责合理分配 CPU 的时间片
  • 操作系统还负责管理硬盘、网络等,这跟 CPU 不直接相关,就不细说了
    ————————————————
    版权声明:本文为CSDN博主「IUN_2930」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_46613023/article/details/127303076

1、CPU指令集:(主流)ARM 和 X86两类。CPU指令集取决于CPU的体系架构

2、操作系统:LINUX和 WINDOWS等。
LINUX优点:各种CPU架构都可以跑
WINDOWS: WINDOWS目前只支持X86指令集, WINDOWS RT只支持ARM指令集

3、应用程序的编译流程:
应用程序—>操作系统—>CPU指令,eg:一个.c应用程序,经操作系统编译为CPU指令,在CPU架构上执行。注意:一个应用程序,由操作系统编译为ARM指令,就只能在ARM体系架构上运行;编译为x86指令,就只能在x86体系架构上运行。

4、 操作系统和CPU之间的关系
LINUX操作系统支持多种指令集,WINDOWS操作系统只支持x86指令集。

2 操作系统
2.1 结构
2.1.1 应用程序
2.1.2 系统调用
如果你想在控制台打印一个 “hello”, 这个过程中你必须调用库函数 printf, 其内部就要调用 操作系统提供的系统调用write, 调用write时就会进入到内核来执行, 内核就要进一步控制硬件, 完成输出过程

2.1.3 操作系统的核心部分: 内核
内核是操作系统实现其主要功能 (管理各种硬件设备, 并给各种软件提供稳定的运行环境) 的部分

当我们使用操作系统进入内核时, 涉及到 用户态 到 内核态 间的切换, 要运行的程序有很多, 但内核只有一个, 就很可能要排队等待

2.1.4 驱动程序
是一个由 软件厂商 提供的 软件程序
直接和硬件设备打交道, 驱动程序相当于在 硬件 和 内核 之间来了一层转换

用软件操作硬件一般都很简单, 因为硬件一般都会提供一些"寄存器"

2.1.5 硬件设备
操作系统结构示意图:
在这里插入图片描述

————————————————
版权声明:本文为CSDN博主「1BDK」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a_YDK/article/details/128088315

操作系统、驱动和硬件的关系的思考

这些问题是困扰一个人理解整个电脑架构的难点,比如

操作系统和驱动是什么关系,为什么需要驱动?

cpu、内存需要驱动吗?

为什么操作系统可以先装到电脑上,然后再去安装其它驱动,比如主板、显卡等等?

我觉得这里起作用的是一些公开的规范,即一个操作系统能在基于某个cpu的主板上运行的基本规范。对于基于Intel cpu的主板或电脑厂商,包括设备商和操作系统商都遵循一个基本规范。

比如操作系统要跑起来需要的基本条件,有cpu、有内存、有外存、有显卡,这是一个操作系统能进入基本界面需要的条件,如果操作系统不能处理某种类型的上述硬件,那根本进不了桌面,怎么可能再去装其它驱动程序。这时就需要一个基本规范,上述硬件按这种规范设计(比如系统总线、接口等等),操作系统内置这些基本规范实现。

这样操作系统就能在这个主板上跑起来了,能够进入界面了。这个时候,可以允许不同硬件设备有自己的规范了,比如为了更好的显示效果,需要安装特定的显卡驱动。但前提是,这个显卡要遵循一个基本规范,操作系统默认才能进入基本界面。这时候的操作系统界面可能由于没有厂商特定驱动只能实现基本工作,比如显示的桌面字体很大,模糊等。

这时候,厂商需要根据操作系统操作硬件的接口规范,实现驱动程序,装到操作系统上。然后操作系统在需要该硬件时就告诉驱动做什么,具体由驱动程序实现怎么做,本质上是把一堆0和1指令转换为高低电平,驱动硬件电路工作。

对于基本的功能,如cd、usb等,这些设备也都有基本的规范,否则要从cd或usb安装操作系统是不现实的。对于额外的功能比如USB3.0、cd的刻盘功能等,这些不是启动操作系统必须的,所以可以允许在系统启动后再安装特定驱动实现特定功能。

对于硬盘这种块设备,也是遵循通用的规范的,比如基本的对硬盘的读写。否则操作系统根本不可能往硬盘上写数据,也就不可能装系统。

这对于使用Windows的用户而言,问题不大。但是当使用Linux,要将其移植到自己的设备的时候,这些知识就很重要了。

这是实现Linux操作系统移植的基础。只有理解了,操作系统和硬件、驱动的关系,才能移植操作系统。

详细的Linux内核结构介绍可参考:

http://www.ibm.com/developerworks/cn/linux/l-linux-kernel/

http://www.wowotech.net/linux_kenrel/11.html

一般的,内核可以分为3个层面,上层是系统调用接口,中间层是通用内核功能,最下层是基于特定硬件(一般是cpu)的规范实现,构成了通常称为 BSP(Board Support Package)的部分。但其中的各种驱动并不是必要的,比如没有网卡不影响系统启动、没有显卡驱动不影响进入命令行shell。当然,Linux内核一般也集成了很多常见的设备驱动,比如某个常用型号的网卡。

所谓操作系统移植,是移植的那些有特定规范的硬件设备驱动。通用的规范的设备,比如USB、读写硬盘、cd等,这些是系统内核内置的功能,一般不需要移植。

其实移植工作很大程度上是根据Linux的配置菜单,选择自己主板上各种特定厂家设备对应的驱动模块。

如果开发某个硬件比如声卡的厂商,自己不去实现驱动,基本上第三方是不可能搞的,除非硬件厂商公布自己的特定硬件设计规范,这样第三方是可以根据这些规范来开发驱动的。但自己的特定硬件规范属于商业机密,公布出来,基本上别人也就可以生产一样的产品了。

目前,由于Windows和Android比较流行,硬件设备商一般会提供这两个平台的驱动程序。Windows可以通过二进制安装包提供,Android可以通过二进制方式提供。而对于gnu Linux,多数可能不提供,少数提供开源驱动,少数以二进制方式提供。

所以,我感觉,如果硬件厂商没有提供某个操作系统的驱动,那我们需要考虑的是是否有其它产品代替。因为不可能自己去实现硬件厂商特定的、不公开其规范的驱动程序。

这样,所谓的Linux系统移植,对于板商而言无非就是根据Linux内核的配置菜单,选择一些已经集成进内核的驱动,或者根据厂商的驱动源码自己编译,或者直接使用厂商提供的二进制驱动程序。经过这样的配置,也就形成了针对自己特定主板的内核。

而真正的驱动移植,是某个硬件的厂商,其程序员根据自己的产品规范实现某个操作系统的驱动程序。一般这个人了解整个硬件产品的架构信息,具备制作同类硬件产品的理论基础。

这也就是操作系统移植了。

(或许有些地方没我理解的这么简单,有待进一步学习)

操作系统搞明白了,接下来的问题就是怎么进入操作系统了,也就是bootloader移植。大概原理见这里:

http://blog.csdn.net/shell_albert/article/details/8230666

我理解的思路是,一种是规划好存储设备的分区结构,在uboot中写死kernel的物理地址,uboot去读取这个物理地址一定长度的文件即内核,加载执行,之后就是Linux挂自己的文件系统的事情了,Linux内核会扫描存储设备的分区信息,这样就可以在uboot启动参数中指定rootfs分区,Linux内核就去挂载了。

另一种是uboot自带文件系统识别功能,在uboot中可以不用物理地址。

附:https://my.oschina.net/assange/blog/543047

设备驱动程序的简介

一、驱动的概念
设备驱动程序(Device Driver),简称驱动程序、驱动(Driver),指操作系统中用来操控硬件的代码。

驱动是硬件与操作系统之间的接口,操作系统只有通过这个接口才能控制硬件设备的工作,因此驱动程序被誉为“硬件的灵魂”、“硬件的主宰”和“硬件和系统之间的桥梁”等。

二、驱动的层次与框架
1、驱动的层次
Linux的体系架构体现着分层的思想。对于驱动层,它上面是系统调用,下面是硬件层。
在这里插入图片描述

2、驱动的框架
驱动本身也是分层的,这体现为驱动的框架。内核驱动维护者往往为同类的设备设计了一个框架,框架的核心层实现了该设备通用的一些功能,而具体的底层操作留给驱动工程师去实现。更多描述见博文:什么是驱动框架?_天糊土的博客-CSDN博客。
————————————————
版权声明:本文为CSDN博主「天糊土」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/oqqHuTu12345678/article/details/125857448
————————————————
版权声明:本文为CSDN博主「天糊土」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/oqqHuTu12345678/article/details/125857448

操作系统与驱动程序
操作系统通常会提供一个开发接口给硬件开发商,让他们可以根据这个接口设计可以驱动他们硬件的驱动程序,所以说驱动程序是依据操作系统而开发的,换一个操作系统,驱动就运行不了。

那么问题来了,操作系统的核心与驱动程序是一个什么样的关系呢?参考的鸟哥的书是这样列出的:
在这里插入图片描述
在这里插入图片描述
我的理解是这样的:操作系统核心与驱动程序是同一层的,都是软件最底层硬件的上一层,因为操作系统核心层是参照硬件规格写成(x86架构或者是ARM架构),而x86这套指令集是不会变的,但是CPU是会更新换代的,这就会有一个问题,如果参照一代CPU来写一个操作系统核心,CPU换代之后,核心就要重新写,,,所以就出现了驱动程序,驱动程序就是一个模块化的东西,通过相应的一些接口与操作系统核心连接起来,就一起构成了最系统最底层的总的核心,那么是怎么连接的呢?驱动程序是由硬件厂商开发的,而操作系统开发者在写操作系统核心的时候,会给硬件厂商留有操作系统驱动程序的开发接口,硬件厂商照着这些接口来写驱动程序就行了,开发完毕后将该驱动程序连同硬件一同贩卖给用户,所以当硬件厂商在更新自己的硬件的时候,需要再更新相应的驱动程序,而操作系统开发者就不需要针对每一款硬件来写一套操作系统核心,只需要用户安装硬件厂商的驱动程序,将驱动程序与操作系统核心进行 “连接” ,构成系统最底层,再通过相应的应用程序就能驱动硬件了。可以把核心理解为同一层的主体部分,驱动程序理解为次要部分。
(IT小白一个,以上纯属个人理解,如有不对的地方欢迎指正)
————————————————
版权声明:本文为CSDN博主「aiyueyueaoe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aiyueyueaoe/article/details/109687484

————————————————
版权声明:本文为CSDN博主「aiyueyueaoe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aiyueyueaoe/article/details/109687484

电脑里的玄学家——驱动

什么是驱动:
首先驱动不是光驱,经常有人搞混。这俩压根不是一个东西

光驱是读取光盘的硬件
驱动的本质是一堆程序代码

嘿嘿嘿,驱动出错就变成了蓝屏代码(狗头)
这堆程序代码安装到电脑上,电脑再通过这些程序代码控制各个电脑硬件

简单来说驱动就是告诉电脑如何驱使硬件动起来的东西

举个例子:

你想炒菜(用电脑),肉菜调料(主板显卡鼠标)都买齐了,但是从没人教过你怎么做菜(电脑不知道怎么使用这些硬件),这时只要有本菜谱大全(驱动程序),你就可以根据菜谱做菜啦

菜谱告诉你怎么做菜,驱动告诉电脑怎么动用硬件,这下明白了吧~

动图封面
这里可能有人纳闷,那鼠标键盘显示屏为什么插上就能用呢?这是因为电脑系统集成了一些最基础的驱动

比如:
刚做好系统的电脑你会发现屏幕能用,但分辨率会很低,只有打上专门的驱动才能正常使用;就好比我没菜谱不会做红烧鱼,但把鱼扔锅里直接煮煮总是会的吧~

动图封面
驱动类型:
菜谱有川菜、粤菜、徽菜……驱动程序也是五花八门,常见的电脑驱动程序有主板、显卡、鼠标、声卡、网卡等硬件驱动

win7系统由于没有usb3.0驱动,新电脑系统做到一半会发生键鼠动不了的现象
其实不光电脑,很多电器如打印机、路由器、电视也有自己专用的驱动,可以说万物皆有驱动…

今天我们不说别的,就说说电脑方面最玄学的驱动

上不了网:除却网线被猫咬断/忘交网费等操作,莫名其妙上不了网的一大原因就是网卡驱动坏了
电脑没声音:除却没插/插错耳机/耳机坏了等操作,电脑死活放不出声音,很大原因就是声卡驱动出错崩溃
开机黑屏:除却屏幕磕坏/进水烧了等因素,黑屏大概率是因为显卡等驱动程序出错
鼠标突然变得特别灵敏/迟缓,电竞玩家买的宏鼠标,游戏玩到半截突然出现这情况,大概率也是鼠标驱动出问题,需要重新设置……
电脑其实是很不容易坏的东西,能把电脑玩报废在某种程度而言也是种本事;

但电脑又很极其脆弱,很玄学的驱动动辄就能把电脑整出一些莫名其妙的故障

可以说很多电脑系统问题,本质还是驱动在作祟

下面就来说说,如果电脑驱动层面出了问题,以及新电脑该怎么打驱动:

怎么打驱动:
一、如果是新买的笔记本、或者整机,不用担心,买回来开机就能用,因为它们一出厂就已经做好系统并打好驱动了

二、如果是重做系统、或者自己组装的电脑:

1.笔记本用户:

笔记本一般会有自己的品牌驱动尤其游戏本(通过驱动调节键盘灯光、电脑的节能或者野兽模式等等)

fn+q能切换模式的功能,便是靠笔记本专用品牌驱动
这需要你去找当时买笔记本的客服,告诉他你笔记本的型号,他会发送适配你电脑的驱动下载链接,你可以根据链接自行下载安装。如果萌新还不知道怎么下载东西,可以参考这篇文章提到的种子下载:

小豆爵:不玩虚假和套路——好用的app网站推荐
55 赞同 · 7 评论文章

2.台式机用户:

做好系统后连上网,按windows+i调出设置菜单,点击 更新和安全-检查更新

然后什么都不用管,win10系统会自动帮你搜索并下载安装驱动程序,你需要做的就是等待然后重启,最适合萌新的方法

如果你是比较懂电脑的玩家,我更推荐这个方法:
去硬件官网下载专属你硬件的驱动程序

比如你用的是微星b450迫击炮主板、1060显卡,那么你可以去微星官网下主板驱动、英伟达官网下1060显卡驱动……

如图,在n卡官网下载1060显卡驱动
这里就长话短说啦,以后可能会单独说说怎么下载最适配自己硬件的驱动

三、如果是正在用的电脑,某个单一驱动出了问题:

就拿上不了网、网卡驱动出错来说吧:

右键我的电脑-管理-设备管理器-网络设配器

看看这些驱动图标上有没有带问号或者感叹号的,然后右键-更新驱动程序

让它自行检查安装,按照这个方法一一检查电脑驱动是否正确,如显卡驱动:

玄学的部分来了:
按照上面方法一一检查驱动、排查电脑问题其实很麻烦,而且很玄学

因为驱动本质是一堆代码,这种人写的东西本身就存在兼容性差异,经常发生明明你打了所有驱动,可还是出现黑屏没声、上不了网等糟心情况

我第一次装电脑就被显卡驱动的黑屏问题整的痛不欲生,拿到电脑维修店看也是一筹莫展。最后自己研究半天,才发现显卡驱动版本和我的显示器连接线有一些冲突,换了老版本的显卡驱动才完美解决问题……


所以当驱动程序出了问题,你怎么做都无法解决问题时,快刀能斩乱麻,最痛快便捷的方法还是重做个系统吧,保姆级系统教程全在这儿了,会一次包终身:

小豆爵:保姆级教程——纯净win10系统下载安装一条龙服务
2581 赞同 · 366 评论文章

当今有固态硬盘的电脑做系统只是十几分钟的事,关于固态硬盘的一切,也都在这篇文章里:

小豆爵:【电脑DIY】从萌新入门到开窍——硬盘篇
276 赞同 · 38 评论文章

切莫把大把时间精力放在玄学的电脑驱动上面,多思考下人生、或者点个关注、多看看我的其他文章少走弯路岂不美哉~ ╮(╯▽╰)╭

我是专为萌新科普的硬件老狗 @小豆爵 。心有灵犀一点通,欢迎你点赞关注我,我将持续为你输出简单实用的电脑知识~我们下期文章再见!

图解固件、驱动、软件的区别

大家好,我是良许。

不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?

文字描述太抽象了,我们直接来看漫画吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

好了,看完漫画,我们再来看正规的解释是怎样的。

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

  • 固件是赋予设备硬件生命的程序
  • 驱动程序是操作系统和硬件组件之间的中间人
  • 软件可以间接操作硬件
  1. 固件
    固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基础最底层工作,直接控制硬件,比如计算机上电后第一个启动的程序 BIOS ,它可以与硬件交互,并检查它是否有任何错误。

BIOS 调用另一个称为引导加载程序的程序,该程序执行唤醒在硬盘驱动器内休眠的操作系统并将其放入随机存取存储器 (RAM) 的工作。

我们可以在许多设备上看到固件,包括计算机、手机、遥控器、游戏机、智能手表、USB 驱动器和各种嵌入式系统。即使是电视遥控器也有一个预装的固件,可以实现你按下按钮的时候电视换台操作。

  1. 驱动
    驱动(Drive):驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。当计算机程序请求与某个硬件设备交互时,设备驱动程序充当硬件设备与使用它的程序之间指令的转换器。

操作系统并不支持机器上的所有硬件,所以一般来讲硬件厂商都要为自己的硬件编写驱动程序。

每个驱动程序都旨在为特定或一组设备工作。在计算机上,驱动程序使用各种总线接口来联系设备。此外,驱动程序一般不直接与用户交互,所以很多用户完全不知道它们的存在。

驱动程序的开发需要非常小心,因为它直接与硬件打交道,同时也与操作系统打交道。如果设备驱动程序出现问题,可能会导致系统崩溃,这就是为什么需要专业人员或团队来为设备编写驱动程序的原因。

但是为什么不把 Firmware 做的很完美,做的不需要驱动支持呢?因为有不同的操作系统,而这些操作系统对于操作硬件的方式完全不同。所以不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的。

  1. 软件
    与硬件不同,软件是运行在电脑里,看不见摸不着。

操作系统也是一个软件,并且为安装在操作系统上的其他软件提供了工作空间。前面提到的设备驱动程序其实也是一种软件,不过它有个更细分的种类,称为系统软件。

如果用户编写了一个软件,想要操作硬件(比如光驱、U盘等),他必须通过操作系统提供的接口来实现,而无法直接与硬件交互。

值得注意的一点是,软件是一个广义的术语。我们在日常使用中所说的「软件」一般是指应用软件,比如:微信,QQ,浏览器等等。

还有什么不明白的,欢迎评论区交流哦~

原创不易,欢迎点赞、转发朋友圈,感谢!
https://zhuanlan.zhihu.com/p/436428323

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值