###Date: 2018-3-20編程
參考:https://baike.baidu.com/item/%E5%9B%BA%E4%BB%B6/627829?fr=aladdin性能
https://www.zhihu.com/question/22175660/answer/20547502
spa
驅動和固件(firmware)都是代碼,前者爲軟件服務,後者爲硬件服務。操作系統
在操做系統概念還不明確的時代,兩者是沒有明顯區別的。線程
可是隨着計算機體系結構的發展,硬件的種類開始變多,操做系統的種類也變多了。這個時候,由於各類技術的、商業的緣由,硬件廠商但願本身的硬件能被更多的軟件廠商使用,因此就須要在硬件之上作一些封裝,讓本身的硬件操縱起來更容易,這個時候就要有firmware這種東西了,它簡化了軟件與硬件的交互。內存
可是爲何不把fimware作的很完美,作的不須要驅動支持呢?由於有不一樣的操做系統。我不知道你對操做系統的理解是到什麼程度?只知道Windows?仍是還僅僅知道Linux?仍是清楚Unix和FreeBSD是不一樣的系統?知道有RTOS?知道有上百種不一樣的內核?get
不一樣的操做系統,對於操做硬件的方式徹底不一樣,在Windows裏應用態是沒法直接寫IO端口的,而在嵌入式系統裏,通常都不限制直接操做IO端口。因此,硬件廠商一方面爲了本身的硬件能被軟件更簡單的使用,就須要寫firmware,而另外一方面爲了兼容各類操做系統,又不能把firmware寫的太死,必須預留足夠的餘地讓軟件自由發揮——軟件的自由發揮就是驅動。it
不一樣操做系統的驅動是不能兼容的,緣由就是驅動是爲操做系統服務的,有的操做系統是單線程的,有些操做系統不容許動態申請內存,因此不一樣的操做系統要操做硬件,就要根據自身的特性編寫對應的操做代碼,這就是驅動存在的意義——適應系統須要。io
假如世界上只有一種操做系統,而且版本永遠不會改變,那麼firmware和驅動就能夠融合在一塊兒,但這隻能一個不現實的夢想,要知道民用操做系統和工業控制操做系統差異是十分巨大的。