Android內核開發:源碼的版本與分支詳解

(1) Android版本有哪些分支可用?每一個分支的TAG是什麼?html

 

(2) Android源碼下載完了怎麼沒有看到Linux內核代碼?Android源碼對應Linux內核是否能夠從kernel.org官網去下載?Android對標準的Linux內核作了哪些修改?linux

 

(3) Android源碼分支與Linux版本分支的對應關係是什麼樣的?高版本的Android源碼可否使用低版本的Linux內核?或者低版本Android源碼可否使用高版本的Linux內核?android

 

(4) 開發板廠商提供的Android源碼與AOSP官網下載的Android源碼是什麼關係呢?git

 

做爲個人《Android內核開發》系列文章的第三篇,本文主要來解答一下上面提到的幾個問題。github

 

1.  Android版本有哪些分支可用?每一個分支的TAG是什麼?瀏覽器

 

Android官網詳細地介紹了當前Android的各個版本名稱、Version、對應的API Level、Branch TAG、以及Supported devices,該連接地址以下:微信

 

http://source.android.com/source/build-numbers.htmlionic

 

因爲官網被牆,這裏我也給出了一份保存下來的離線html文檔,你能夠下載下來用瀏覽器打開查看,地址以下:學習

 

https://github.com/Jhuster/AOSP/tree/master/documents優化

 

固然,想查看當前可用的Android源碼分支和版本,也能夠在下載好的Android源碼根目錄下執行以下命令:

 

1

2

3

4

5

6

$ git --git-dir .repo/manifests/.git/ branch -a

 

或者

 

cd .repo/manifests

$ git branch -a | cut -d / -f 3

 

獲得的結果示例以下(只截取了部分):

 

wKiom1Vhw2_jbHQjAAK3TWf8ZCI336.jpg

 

那麼,若是你想切換到其餘Android分支,只須要從新執行 repo init 和 repo sync 便可,示例以下:

 

1

2

$ repo init -b android-4.2.2_r1 

$ repo sync

 

2.  Android源碼與Linux內核代碼的關係?

 

文章開頭提到的第二個問題主要涉及到Android源碼與Linux內核代碼的關係,咱們首先要了解一個重要的概念:

 

Android並無使用標準的Linux內核,而是作了不少的修改。

 

Android對標準的Linux內核代碼作了大量的剪裁和優化,而且添加了許多特有的代碼,主要包括:自定義UI系統,採用Bionic Libc庫代替glibc庫,添加Gold-Fish平臺,編寫專有的驅動程序,如Binder、Logger、PowerManager等等。

 

因爲版權分歧等緣由,這些修改並無merge到Linux主分支中去,所以,咱們不能直接從Linux Kernel的官網(kernel.org)去下載適用於Android源碼的Linux內核代碼,而是要到Google官網提供的kernel網址去下載通過修改後的Linux內核代碼。

 

Google提供了多個版本的Linux Kernel,分別對應不一樣的設備或者廠商版本,你能夠經過 Git clone 命令來完成下載,以下所示:

 

wKioL1VhxUijTV8kAARg-dNeQVw544.jpg   

若是你只是使用Android模擬器來跑Android內核,那麼就能夠選擇goldfish版本做爲你的Linux Kernel,若是你手頭有上述內核支持的設備,那麼,你就下載對應的kernel便可。

 

那麼,若是你手頭的設備或者開發板不在上述支持的列表中怎麼辦呢?

 

放心,通常而言,Android開發板的廠商會在上述Linux Kernel的基礎上針對本身的開發板修改適配出一套可用的Linux Kernel的,你只須要到廠商的官網或者論壇查找對應的代碼便可。對於本身設計開發的板子,則須要下載相近的kernel代碼(如CPU型號相同),而後針對性的修改和移植便可。

 

3.  Android分支與Linux分支的關係

 

Android版本迭代更新的過程當中,Linux Kernel也在不斷的迭代更新,所以,每每新的Android版本會使用較新的Linux內核分支,具體的分支對應關係我在Google官網上沒有找到,可是在維基百科和stackoverflow上找到了一份表格,以下所示:

 

wKiom1Vhw-qQFexwAAE9DtXdWqs887.jpg    

 

維基百科講的更加詳細,具體介紹了每個Android分支到底有哪些修改,地址以下:

 

http://en.wikipedia.org/wiki/Android_version_history

 

通常狀況下,不一樣的Android分支最好能使用對應的Linux內核分支版本,這樣才能保證系統的正常編譯經過和運行無誤,可是,也能夠詳細瞭解某個Android版本對應的Linux內核到底作了哪些修改,而且把這些修改移植到其餘版本的Linux內核上,也是能夠實現低版本的Android運行在高版本的Linux內核上的,固然,反過來難度比較大,由於通常高版本的Android內核會用到高版本的Linux內核特性,移植起來會麻煩不少。

 

4.  廠商提供的Android版本與AOSP的關係

 

不少廠商會提供專門的針對該開發板的Android源碼下載地址,那麼,咱們是否能夠直接使用從AOSP官網上下載的Android源碼呢?

 

廠商通常會對官網的Android源碼進行修改,可是修改的部分通常會打個patch包,所以,你只須要下載廠商提供的patch包,而且將手頭的官網上下載的Android源碼切換到對應的分支,打上patch補丁便可。

 

結束語

 

免費學習更多精品課程,登陸樂搏學院官網http://h.learnbo.cn/

或關注咱們的官方微博微信,還有更多驚喜哦~

 

本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/1654759

相關文章
相關標籤/搜索