国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
電子工程網(wǎng)
標題:
驅(qū)動和固件有啥不同?
[打印本頁]
作者:
技術小白
時間:
2017-9-9 09:48
標題:
驅(qū)動和固件有啥不同?
相信初學操作系統(tǒng)的同學,都曾對這個問題有過疑問,從嵌入式、單片機到PC,各種解釋都有,到底什么是驅(qū)動,什么是固件呢?
驅(qū)動為軟件服務,固件為硬件服務
(來自知乎時國懷)
驅(qū)動和固件(firmware)都是代碼,前者為軟件服務,后者為硬件服務。
在操作系統(tǒng)概念還不明確的時代,二者是沒有明顯區(qū)別的。
但是隨著計算機體系結(jié)構的發(fā)展,硬件的種類開始變多,操作系統(tǒng)的種類也變多了。
這個時候,因為各種技術的、商業(yè)的原因,硬件廠商希望自己的硬件能被更多的軟件廠商使用,所以就需要在硬件之上做一些封裝,讓自己的硬件操縱起來更容易,這個時候就要有firmware這種東西了,它簡化了軟件與硬件的交互。
但是為什么不把fimware做的很完美,做的不需要驅(qū)動支持呢?因為有不同的操作系統(tǒng)。我不知道你對操作系統(tǒng)的理解是到什么程度?只知道Windows? 還是還僅僅知道Linux?還是清楚Unix和FreeBSD是不同的系統(tǒng)?知道有RTOS?知道有上百種不同的內(nèi)核?
不同的操作系統(tǒng), 對于操作硬件的方式完全不同,在Windows里應用態(tài)是無法直接寫IO端口的,而在嵌入式系統(tǒng)里,一般都不限制直接操作IO端口。所以,硬件廠商一方面為了自己的硬件能被軟件更簡單的使用,就需要寫firmware,而另一方面為了兼容各種操作系統(tǒng),又不能把firmware寫的太死,必須預留足夠的余地讓軟件自由發(fā)揮——軟件的自由發(fā)揮就是驅(qū)動。
不同操作系統(tǒng)的驅(qū)動是不能兼容的,原因就是驅(qū)動是為操作系統(tǒng)服務的,有的操作系統(tǒng)是單線程的,有些操作系統(tǒng)不允許動態(tài)申請內(nèi)存,所以不同的操作系統(tǒng)要操作硬件,就要根據(jù)自身的特性編寫對應的操作代碼,這就是驅(qū)動存在的意義——適應系統(tǒng)需要。
假如世界上只有一種操作系統(tǒng),并且版本永遠不會改變,那么firmware和驅(qū)動就可以融合在一起,但這只能一個不現(xiàn)實的夢想,要知道民用操作系統(tǒng)和工業(yè)控制操作系統(tǒng)差別是十分巨大的。
driver和firmware沒有什么直接的關系
(來自知乎in nek)
從計算機領域來說,驅(qū)動和固件從來沒有過明確的定義,就好像今天我們說內(nèi)存,大部分人用來表示SDRAM,但也有人把Android里的“固化的Flash/Storage"稱為“內(nèi)存”,你不能說這樣說就錯了,因為這確實是一種“內(nèi)部存儲”。
但在Linux Kernel中,Driver和Firmware是有明確含義的,其中Driver是控制被操作系統(tǒng)管理的外部設備(Device)的代碼段。很多時候 Driver會被實現(xiàn)為LKM,但這不是必要條件。driver通過driver_register()注冊到總線(bus_type)上,代表系統(tǒng)具備 了驅(qū)動某種設備(device)的能力。當某個device被注冊到同樣的總線的時候(通常是總線枚舉的時候發(fā)現(xiàn)了這個設備),總線驅(qū)動會對driver 和device會通過一定的策略進行binding(即進行匹配),如果Binding成功,總線驅(qū)動會調(diào)用driver的probe()函數(shù),把設備的 信息(例如端口,中斷號等)傳遞給驅(qū)動,驅(qū)動就可以對真實的物理部件進行初始化,并把對該設備的控制接口注冊到Linux的其他子系統(tǒng)上(例如字符設 備,v4l2子系統(tǒng)等)。這樣操作系統(tǒng)的其他部分就可以通過這些通用的接口來訪問設備了。
而Firmware,是表示運行在非“控制處理器”(指不直接運行操作系統(tǒng)的處理器,例如外設中的處理器,或者被用于bare metal的主處理器的其中一些核)中的程序。這些程序很多時候使用和操作系統(tǒng)所運行的處理器完全不同的指令集。這些程序以二進制形式存在于Linux內(nèi)核的源代碼樹中,生成目標系統(tǒng)的時候,通常拷貝在/lib/firmware目錄下。當driver對device進行初始化的時候,通過 request_firmware()等接口,在一個用戶態(tài)helper程序的幫助下,可以把指定的firmware加載到內(nèi)存中,由驅(qū)動傳輸?shù)街付ǖ脑O 備上。
所以,總的來說,其實driver和firmware沒有什么直接的關系,但firmware通常由驅(qū)動去加載。我們討論的那個OS,一般不需要理解firmware是什么,只是把它當做數(shù)據(jù)。firmware是什么,只有使用這些數(shù)據(jù)的那個設備才知道。好比你用一個電話,電話中有一個軟件,這個軟件你完全不關心如何工作的,你換這個軟件的時候,就可以叫這個軟件是“固件”,但如果你用了一個智能手機,你要細細關心什么是上面的應用程序,Android平臺,插件之類的細節(jié)內(nèi)容,你可能就不叫這個東西叫“固件”了。
這種情況在計算機領域非常常見,所以大部分Spec都自己重新定義概念。比如說,我們平時寫軟件,說Component,很多就是指軟件的其中一個部分,但在UEFI中,Component的定義是:
An executable image. Components defined in this specification support on elf the defined module types.
這是一個“獨立的映像”,和我們一般理解的概念就完全不同,但如果你學計算機,請了解,這是我們的慣例。
從實例看driver 和 firmware的區(qū)別
(來自知乎楊慶)
驅(qū)動 driver 指的提供編程api接口,用以操控某一硬件/軟件產(chǎn)品的應用程序。以程序的使用目的來定義它是否為driver。
固件firmware 概念上來說是指那些預安裝到硬件產(chǎn)品內(nèi)部只讀記憶體里面,與硬件產(chǎn)品捆綁匹配的程序。這個名詞的定義主要強調(diào)此類軟件的不應當被修改,并且與硬件捆綁的特性。更改firmware屬于hack范疇了。
名詞解釋到這,下面舉幾個例子吧。
屬于driver但不屬于firmware的例子:
“
● oracle database, .net driver。 所有軟件產(chǎn)品的驅(qū)動都不屬于固件。
● 打印機驅(qū)動光盤。由于并沒有預裝入打印機只讀記憶體,不屬于固件。
屬于固件但不屬于驅(qū)動的:
“
● 洗衣機內(nèi)置電腦程序。此為直接用戶交互的系統(tǒng)終端(user interface,UI),并不和其他應用程序交互(application programming interface, API)。
● 計算器里面的操作系統(tǒng)。
同屬于firmware 和 driver的:
“
● 路由器內(nèi)置系統(tǒng)... 刻錄入路由器存儲器,用于與其他軟件連接交互的(電腦,手機,其他路由器等)。
以下課程可免費試聽C語言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學習的你和我聯(lián)系預約就可以免費聽課了。
宋工企鵝號:3524-6590-88 Tel/WX:173--1795--1908
歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/)
Powered by Discuz! X3.4
主站蜘蛛池模板:
亚洲AV午夜福利精品香蕉麻豆
|
亚洲国产成人久久一区www
|
四虎国产精品免费久久久
|
综艺啪啪nph
|
在线视频一区二区三区福利精品
|
国产区精品综合在线
|
亚洲国产三级在线观看
|
日本精品久久久久中文字幕2
|
天堂亚洲国产日韩在线看
|
亚欧精品在线观看
|
91热久久免费频精品动漫99
|
男男被强bl高h文
|
青草免费在线
|
日韩在线观看免费完整版视频
|
天天做天天玩天天爽天天
|
成人午夜精品久久久久久久秋霞
|
两个人的视频免费
|
无遮挡一级毛片性视频不卡
|
日本永久视频
|
停停色
|
超h高h肉h文教室生理课
|
男男女女爽爽爽视频免费
|
亚洲国产精品91
|
日韩免费精品视频
|
西西人体做爰午夜大胆图片
|
国产成人女人在线视频观看
|
亚洲国产成人99精品激情在线
|
午夜久久网
|
一级黄色a级片
|
2018年免费三级av观看
|
青娱乐极品视觉盛宴国产视频
|
亚洲精品美女久久777777
|
四虎影视永久费观看在线
|
在线观看成年视频
|
97超视频在线观看
|
色婷婷国产精品视频一区二区三区
|
性欧美久久
|
亚洲成在人天堂在线
|
在线免费观看污视频
|
青青草原社区
|
欧美视频二区
|