“Google發布Android時為什麼不集成一些常見的驅動,手機硬件廠商為什麼不能像PC廠商那樣直接向用戶提供設備的驅動。”
相信很多網友對於Android的碎片化都有所耳聞,而萬碎萬碎萬萬碎說出的這個問題確實是更好解決Android碎片化問題的最佳方案之一,而之所以沒有成功的去實施這個方案的原因在於Windows與安卓有很大的不同,這個不同點,就讓作者給大家簡單的說一下。
首先第一點windows平台的硬體相對於Android的硬體來說簡直太少了。
Windows/Linux由於對於x86/64架構的通用性完全標準化,這個其實是歷史的原因。在很久很久以前,IBM還是傳說中秒天秒地秒宇宙的時候,為了幹掉競爭對手MAC(中文稱:麥金塔),使出終極技能“PC規則規範化”然後帶領著一眾小弟Intel、Windows這些小弟一起開闢新的世界。
然後把指令集統一,不管怎麼換,都是那兩家,而硬體接口、針腳、協議等等很多也都做出了相應的規範化。然後CPU、內存、南北橋下PCIE等等這些架構完全統一。這樣就導致了各家OEM做的各式各樣的東西隨便換,隨便玩。而這樣做的好處就是Windows面臨的不同的CPU架構少之又少,造成了現在Windows輕輕鬆鬆給這些硬體集成這些驅動。現在若要讓Windows開源,那場面簡直酸爽。
而Android就不同了,Android需要面對不同的CPU架構,雖然一開始Google就學習IBM將軟體部分開放了,但是眾多的硬體在不同的廠商手機隨便玩耍,也帶來了就是各家維護各家的事情了。隨便舉個例子,例如Android在不考慮指令集的情況下有ARM/MIPS/x86三種,而如果把不同設備類型之間最基本的驅動全部寫進內核裡面,如果一個架構需要120MB,那麼三個架構就是360MB,再加上亂七八糟的應用,導致刷機包可能會超過1GB,正因為這種原因導致了Android無法把驅動集成。
至於手機硬件商為什麼不直接向用戶提供設備驅動?
這個原因其實就是Android是運行在Linux之上的操作系統。簡單的拆解Android系統來看,Android的層次可以分為底層是Linux,中間是叫做Dalvik的Java虛擬機(現在又是ART預編譯了,天啊現在更麻煩),而上面則是Android運行時庫。而Linux採用的是宏內核,內核和驅動是在一起的,如果要添加驅動,基本上就得需要重新編譯內核了。