国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

驅(qū)動(dòng)和固件有啥不同?

發(fā)布時(shí)間:2017-9-11 09:46    發(fā)布者:技術(shù)小白

相信初學(xué)操作系統(tǒng)的同學(xué),都曾對(duì)這個(gè)問(wèn)題有過(guò)疑問(wèn),從嵌入式單片機(jī)到PC,各種解釋都有,到底什么是驅(qū)動(dòng),什么是固件呢?
驅(qū)動(dòng)為軟件服務(wù),固件為硬件服務(wù)
(來(lái)自知乎時(shí)國(guó)懷)
驅(qū)動(dòng)和固件(firmware)都是代碼,前者為軟件服務(wù),后者為硬件服務(wù)。

在操作系統(tǒng)概念還不明確的時(shí)代,二者是沒(méi)有明顯區(qū)別的。

但是隨著計(jì)算機(jī)體系結(jié)構(gòu)的發(fā)展,硬件的種類開(kāi)始變多,操作系統(tǒng)的種類也變多了。

這個(gè)時(shí)候,因?yàn)楦鞣N技術(shù)的、商業(yè)的原因,硬件廠商希望自己的硬件能被更多的軟件廠商使用,所以就需要在硬件之上做一些封裝,讓自己的硬件操縱起來(lái)更容易,這個(gè)時(shí)候就要有firmware這種東西了,它簡(jiǎn)化了軟件與硬件的交互。

但是為什么不把fimware做的很完美,做的不需要驅(qū)動(dòng)支持呢?因?yàn)橛胁煌牟僮飨到y(tǒng)。我不知道你對(duì)操作系統(tǒng)的理解是到什么程度?只知道Windows? 還是還僅僅知道Linux?還是清楚Unix和FreeBSD是不同的系統(tǒng)?知道有RTOS?知道有上百種不同的內(nèi)核?

不同的操作系統(tǒng), 對(duì)于操作硬件的方式完全不同,在Windows里應(yīng)用態(tài)是無(wú)法直接寫(xiě)IO端口的,而在嵌入式系統(tǒng)里,一般都不限制直接操作IO端口。所以,硬件廠商一方面為了自己的硬件能被軟件更簡(jiǎn)單的使用,就需要寫(xiě)firmware,而另一方面為了兼容各種操作系統(tǒng),又不能把firmware寫(xiě)的太死,必須預(yù)留足夠的余地讓軟件自由發(fā)揮——軟件的自由發(fā)揮就是驅(qū)動(dòng)。

不同操作系統(tǒng)的驅(qū)動(dòng)是不能兼容的,原因就是驅(qū)動(dòng)是為操作系統(tǒng)服務(wù)的,有的操作系統(tǒng)是單線程的,有些操作系統(tǒng)不允許動(dòng)態(tài)申請(qǐng)內(nèi)存,所以不同的操作系統(tǒng)要操作硬件,就要根據(jù)自身的特性編寫(xiě)對(duì)應(yīng)的操作代碼,這就是驅(qū)動(dòng)存在的意義——適應(yīng)系統(tǒng)需要。

假如世界上只有一種操作系統(tǒng),并且版本永遠(yuǎn)不會(huì)改變,那么firmware和驅(qū)動(dòng)就可以融合在一起,但這只能一個(gè)不現(xiàn)實(shí)的夢(mèng)想,要知道民用操作系統(tǒng)和工業(yè)控制操作系統(tǒng)差別是十分巨大的。
driver和firmware沒(méi)有什么直接的關(guān)系
(來(lái)自知乎in nek)
從計(jì)算機(jī)領(lǐng)域來(lái)說(shuō),驅(qū)動(dòng)和固件從來(lái)沒(méi)有過(guò)明確的定義,就好像今天我們說(shuō)內(nèi)存,大部分人用來(lái)表示SDRAM,但也有人把Android里的“固化的Flash/Storage"稱為“內(nèi)存”,你不能說(shuō)這樣說(shuō)就錯(cuò)了,因?yàn)檫@確實(shí)是一種“內(nèi)部存儲(chǔ)”。

但在Linux Kernel中,Driver和Firmware是有明確含義的,其中Driver是控制被操作系統(tǒng)管理的外部設(shè)備(Device)的代碼段。很多時(shí)候 Driver會(huì)被實(shí)現(xiàn)為L(zhǎng)KM,但這不是必要條件。driver通過(guò)driver_register()注冊(cè)到總線(bus_type)上,代表系統(tǒng)具備 了驅(qū)動(dòng)某種設(shè)備(device)的能力。當(dāng)某個(gè)device被注冊(cè)到同樣的總線的時(shí)候(通常是總線枚舉的時(shí)候發(fā)現(xiàn)了這個(gè)設(shè)備),總線驅(qū)動(dòng)會(huì)對(duì)driver 和device會(huì)通過(guò)一定的策略進(jìn)行binding(即進(jìn)行匹配),如果Binding成功,總線驅(qū)動(dòng)會(huì)調(diào)用driver的probe()函數(shù),把設(shè)備的 信息(例如端口,中斷號(hào)等)傳遞給驅(qū)動(dòng),驅(qū)動(dòng)就可以對(duì)真實(shí)的物理部件進(jìn)行初始化,并把對(duì)該設(shè)備的控制接口注冊(cè)到Linux的其他子系統(tǒng)上(例如字符設(shè) 備,v4l2子系統(tǒng)等)。這樣操作系統(tǒng)的其他部分就可以通過(guò)這些通用的接口來(lái)訪問(wèn)設(shè)備了。

而Firmware,是表示運(yùn)行在非“控制處理器”(指不直接運(yùn)行操作系統(tǒng)的處理器,例如外設(shè)中的處理器,或者被用于bare metal的主處理器的其中一些核)中的程序。這些程序很多時(shí)候使用和操作系統(tǒng)所運(yùn)行的處理器完全不同的指令集。這些程序以二進(jìn)制形式存在于Linux內(nèi)核的源代碼樹(shù)中,生成目標(biāo)系統(tǒng)的時(shí)候,通常拷貝在/lib/firmware目錄下。當(dāng)driver對(duì)device進(jìn)行初始化的時(shí)候,通過(guò) request_firmware()等接口,在一個(gè)用戶態(tài)helper程序的幫助下,可以把指定的firmware加載到內(nèi)存中,由驅(qū)動(dòng)傳輸?shù)街付ǖ脑O(shè) 備上。

所以,總的來(lái)說(shuō),其實(shí)driver和firmware沒(méi)有什么直接的關(guān)系,但firmware通常由驅(qū)動(dòng)去加載。我們討論的那個(gè)OS,一般不需要理解firmware是什么,只是把它當(dāng)做數(shù)據(jù)。firmware是什么,只有使用這些數(shù)據(jù)的那個(gè)設(shè)備才知道。好比你用一個(gè)電話,電話中有一個(gè)軟件,這個(gè)軟件你完全不關(guān)心如何工作的,你換這個(gè)軟件的時(shí)候,就可以叫這個(gè)軟件是“固件”,但如果你用了一個(gè)智能手機(jī),你要細(xì)細(xì)關(guān)心什么是上面的應(yīng)用程序,Android平臺(tái),插件之類的細(xì)節(jié)內(nèi)容,你可能就不叫這個(gè)東西叫“固件”了。

這種情況在計(jì)算機(jī)領(lǐng)域非常常見(jiàn),所以大部分Spec都自己重新定義概念。比如說(shuō),我們平時(shí)寫(xiě)軟件,說(shuō)Component,很多就是指軟件的其中一個(gè)部分,但在UEFI中,Component的定義是:

An executable image. Components defined in this specification support on elf the defined module types.

這是一個(gè)“獨(dú)立的映像”,和我們一般理解的概念就完全不同,但如果你學(xué)計(jì)算機(jī),請(qǐng)了解,這是我們的慣例。
從實(shí)例看driver 和 firmware的區(qū)別
(來(lái)自知乎楊慶)
驅(qū)動(dòng) driver 指的提供編程api接口,用以操控某一硬件/軟件產(chǎn)品的應(yīng)用程序。以程序的使用目的來(lái)定義它是否為driver。

固件firmware 概念上來(lái)說(shuō)是指那些預(yù)安裝到硬件產(chǎn)品內(nèi)部只讀記憶體里面,與硬件產(chǎn)品捆綁匹配的程序。這個(gè)名詞的定義主要強(qiáng)調(diào)此類軟件的不應(yīng)當(dāng)被修改,并且與硬件捆綁的特性。更改firmware屬于hack范疇了。

名詞解釋到這,下面舉幾個(gè)例子吧。

屬于driver但不屬于firmware的例子:

● oracle database, .net driver。 所有軟件產(chǎn)品的驅(qū)動(dòng)都不屬于固件。

● 打印機(jī)驅(qū)動(dòng)光盤。由于并沒(méi)有預(yù)裝入打印機(jī)只讀記憶體,不屬于固件。

屬于固件但不屬于驅(qū)動(dòng)的:

● 洗衣機(jī)內(nèi)置電腦程序。此為直接用戶交互的系統(tǒng)終端(user interface,UI),并不和其他應(yīng)用程序交互(application programming interface, API)。

● 計(jì)算器里面的操作系統(tǒng)。

同屬于firmware 和 driver的:

● 路由器內(nèi)置系統(tǒng)... 刻錄入路由器存儲(chǔ)器,用于與其他軟件連接交互的(電腦,手機(jī),其他路由器等)。

以下課程可免費(fèi)試聽(tīng)C語(yǔ)言電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。
宋工企鵝號(hào):3524-6590-88   Tel/WX:173--1795--1908








本文地址:http://m.qingdxww.cn/thread-516803-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 狠狠国产欧美在线视频| 语文老师扒开胸罩喂我奶| 伊人久久精品线影院| 妖精视频一区二区免费| 婷婷中文在线| 石原莉奈adn093店长未婚妻| 亚洲香蕉伊在人在线观看9| 国产精品无码视频一区二区| 受喷汁红肿抽搐磨NP双性| 四虎精品影视| 日韩精品欧美一区二区三区| 亚洲福利视频一区| 一日本道加勒比高清一二三| 精品高潮呻吟99AV无码| 婷婷精品国产亚洲AV在线观看 | 一区二区三区四区视频在线观看| 九九精彩视频在线观看视频| 中文字幕蜜臀AV熟女人妻| 亚洲综合校园春色| 日韩在线观看网址| 天天做日日做| 大陆极品少妇内射AAAAAA| 天海翼精品久久中文字幕| 色爱区综合小说| 婷婷丁香久久| 天天色国产| 岛国片在线看| 亚洲mv在线观看| 天天干妹子| 伊人久久青青| 一个人在线观看的www动漫中文| 九九热视频这里只有精| 做你的爱人BD日本| 日本黄 色 成 年 人免费观看| 天堂8中文在线bt| 亚洲天堂在线视频观看| 国产在线观看免费| 亚洲欧洲日韩天堂无吗| 性做久久久久久久久浪潮| 在线观看h视频播放高清| 中文字日产幕码一二区色哟哟|