Firmware/驅動/OS(操作系統的區別)

1.Firmware與Driver的區別


以下摘自驅動與固件的區別是什麼 答主 時國懷

驅動和固件(firmware)都是代碼,前者爲軟件服務,後者爲硬件服務

在操作系統概念還不明確的時代,二者是沒有明顯區別的。

但是隨着計算機體系結構的發展,硬件的種類開始變多,操作系統的種類也變多了。

這個時候,因爲各種技術的、商業的原因,硬件廠商希望自己的硬件能被更多的軟件廠商使用,所以就需要在硬件之上做一些封裝,讓自己的硬件操縱起來更容易,這個時候就要有firmware這種東西了,它簡化了軟件與硬件的交互。

但是爲什麼不把fimware做的很完美,做的不需要驅動支持呢?因爲有不同的操作系統。我不知道你對操作系統的理解是到什麼程度?只知道Windows?還是還僅僅知道Linux?還是清楚Unix和FreeBSD是不同的系統?知道有RTOS?知道有上百種不同的內核?

不同的操作系統,對於操作硬件的方式完全不同,在Windows裏應用態是無法直接寫IO端口的,而在嵌入式系統裏,一般都不限制直接操作IO端口。所以,硬件廠商一方面爲了自己的硬件能被軟件更簡單的使用,就需要寫firmware,而另一方面爲了兼容各種操作系統,又不能把firmware寫的太死,必須預留足夠的餘地讓軟件自由發揮——軟件的自由發揮就是驅動。

不同操作系統的驅動是不能兼容的,原因就是驅動是爲操作系統服務的,有的操作系統是單線程的,有些操作系統不允許動態申請內存,所以不同的操作系統要操作硬件,就要根據自身的特性編寫對應的操作代碼,這就是驅動存在的意義——適應系統需要。
以下摘自:驅動與固件的區別是什麼?答主-in nek

而Firmware,是表示運行在非“控制處理器”(指不直接運行操作系統的處理器,例如外設中的處理器,或者被用於bare metal的主處理器的其中一些核)中的程序。這些程序很多時候使用和操作系統所運行的處理器完全不同的指令集。這些程序以二進制形式存在於Linux內核的源代碼樹中,生成目標系統的時候,通常拷貝在/lib/firmware目錄下。當driver對device進行初始化的時候,通過request_firmware()等接口,在一個用戶態helper程序的幫助下,可以把指定的firmware加載到內存中,由驅動傳輸到指定的設備上。

所以,總的來說,其實driver和firmware沒有什麼直接的關係,但firmware通常由驅動去加載。我們討論的那個OS,一般不需要理解firmware是什麼,只是把它當做數據。firmware是什麼,只有使用這些數據的那個設備才知道。

2.Firmware和OS的區別

2.1.總結起來就是OS是一種高級的Firmware

2.2.BIOS也是一種PC的Firmware

        固件是爲控制硬件設備而設計的。在計算機中,我們稱之爲BIOS(基本輸入/輸出系統)或UEFI(統一可擴展固件接口)。BIOS是計算機上電後第一個啓動的。它可以與硬件交互,並檢查它是否有任何錯誤。BIOS調用另一個名爲bootloader的程序,它負責喚醒沉睡在硬盤驅動器內的操作系統,並將其放入隨機存取存儲器中。

2.3. Firmware固化在各種ROM或Flash中

Firmware固化在ROM或flash中,通過驅動程序讀取到DDR或者各設備的RAM中去。

以下摘自驅動與固件的區別是什麼?知乎答主 86M

首先要對操作系統有個概念,從低級系統(前後臺系統)到高級系統(進程式系統)的發展是模塊化的過程。系統的不同功能由不同模塊來實現。

驅動:它是實現高級應用和底層硬件操作的中間模塊。
在高級系統(如Windows)很明顯,可以用安裝包來安裝。而在低級系統裏可能它只是一個函數,嵌入式開發裏常見。

固件:可以認爲就是操作系統,或者是操作系統+必要的應用程序。
最平常的就是把android和ios都叫做固件(刷固件,升級固件)。
人們把嵌入式系統的安裝叫做刷固件,把pc和pc以上的硬件叫安裝系統。
爲什麼會有這樣的叫法,我覺得
1,嵌入式很多系統很低級,有些甚至不超過百行代碼,在操作系統歸類中,有些都不認爲它是操作系統。
2,嵌入式系統安裝後基本不會再進行軟件層面的修改,是穩固的。

ps:電腦可以認爲是一個高級系統和多個低級系統攜手操作硬件的機器。像網卡、聲卡、usb等的主控制器都有操作系統(固件)來控制完成其所需要完成的工作

發佈了95 篇原創文章 · 獲贊 42 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章