LOS如何從技術上適配 Nexus 以外機型?


可能大家對 AOSP 的認識還是比較淺,僅僅知道「AOSP 只支持 Nexus 系列(以及其它 Google 自家手機)」這句話…


其實 CM 基於 CAF-AOSP(高通基於 AOSP 為自家 SoC 定製的 Android)

絕大部分機型(moto、HTC、一加、小米、…)使用的是高通的 SoC,他們的系統也是基於 CAF-AOSP

所以基本上,這些廠商的機型用正確對應 SoC 的 CAF-AOSP 分支就能起來,然後補上一些廠商自己的驅動(比如音頻 codec、觸屏、指紋感測器之類的),基本上就適配得七七八八了。


至於非高通機型,比如海思麒麟和三星。

我能告訴你其實 AOSP 是官方支持了麒麟960,並且就把它放在了開發板第一位么(滑稽臉

當然麒麟自己也有開源一版 AOSP

三星情況不了解


利益相關:適配過 Nubia Z11、一加5。


給los一加2機型做過一點極其簡單的維護。

一個機型的 bring up 基本分為三部分,設備樹,內核,閉源供應商文件。

設備樹主要是分機型的個別配置,比如audio部分(mixer paths, audio policy等),media部分(media_profiles等),可能還有一些非通用的,需要從源碼編譯的硬體抽象層hal(多為相機,感測器,nfc,gps,藍牙等),此外還會有linux都會有的ramdisk和一些通用的編譯flag(決定在編譯時選擇性使用某些代碼)。device tree里的配置文件在編譯完成之後,基本表現為/system/etc下的文件。hal之類的一般在/system/lib下。

對於大多數高通SoC,高通都會開源一個通用的設備樹,供製造商使用。基本的bring up就從這個通用的tree開始。當然,廠商的更改基本從官方rom獲得,也有一些配置要從使用了相同的SoC的,已經bring up完成的設備處拿來。最後難免有一些剩下,這時候就要猜和試。

內核部分相對簡單,高通會給一個基線,然後如果廠商開源了內核的話一切好說,沒開源的話就比較複雜,懶一些的可以直接使用官方rom預編譯好的內核,能不能用看運氣。

供應商部分就是一些廠商閉源的所謂blob。基本就是看哪些沒有開源,或者開源的不能用,就直接copy製造商預編譯的文件碰運氣。有時候需要進行shim或者hex edit(一般也就是改個函數名或者改個值),保證與aosp的兼容性。

大致就是這些。其實相比真正的編程簡單很多,甚至不需要會編程,但是必須有經驗,見多識廣,知道遇到坑怎麼處理(因為很多坑都是一樣的,直接抄別人解決辦法就行)。


推薦閱讀:

華為手機有優點嗎?
國外有沒有基於 Android的深度定製ROM?如果沒有,為什麼?
為什麼華為手機內核開源了但是幾乎沒有原生安卓的Rom?
怎樣判斷一款手機對第三方ROM的支持度?
魅族 MX4 為什麼不開源?

TAG:手機ROM | CyanogenMod | Android第三方ROM | ROM開發 | ROM移植 |