Android核心的編譯與裁剪
http://blog.csdn.net/leilu2008/article/details/9467991
概述
如果我們僅僅對Android核心感興趣,我們可以選擇合適的Android核心下載並編譯。
可供選擇的核心原始碼有很多版本:
- $ git clone https://android.googlesource.com/kernel/common.git
- $ git clone https://android.googlesource.com/kernel/exynos.git
- $ git clone https://android.googlesource.com/kernel/goldfish.git
- $ git clone https://android.googlesource.com/kernel/msm.git
- $ git clone https://android.googlesource.com/kernel/omap.git
- $ git clone https://android.googlesource.com/kernel/samsung.git
- $ git clone https://android.googlesource.com/kernel/tegra.git
msm這個project包含了適合於ADP1、ADP2、Nexus One、Nexus 4的原始碼,並且可以作為高通MSM晶片組開發定製核心工作的起始點;
omap這個project包含了適合於PandaBoard、Galaxy Nexus的原始碼,並且可以作為德州儀器OMAP晶片組核心開發定製工作的起始點;
samsung這個project包含了適合於Nexus S的原始碼,並且可以作為三星蜂鳥晶片組核心開發定製工作的起始點;
tegra這個project包含了適合於Xoom和Nexus 7的原始碼,並且可以作為英偉達圖睿晶片組核心開發定製工作的起始點;
exynos這個project包含了適合與Nexus 10的原始碼,並且可以作為三星獵戶座晶片組核心開發定製工作的起始點。
編譯
1. 我選擇的是goldfish這個版本,也即把goldfish給clone下來即可。
- $ mkdir AndroidKernel
- $ git clone https://android.googlesource.com/kernel/goldfish.git
需要等待一會,視網速而定:
2. 接著進入goldfish,發現裡面沒有檔案,別急,我們還要選擇分支,下載真正的原始碼:
可以通過執行:
- $ git branch -a
來檢視所有分支,接著:
- $ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
下載原始碼:
3. 下載編譯所必需的prebuilt工具:
- $ git clone https://android.googlesource.com/platform/prebuilt
等待一會:
4. 將prebuilt工具新增到環境變數中以備後續使用:
- $ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
5. 接著配置其他必要的環境變數:
- $ export ARCH=arm
- $ export SUBARCH=arm
- $ export CROSS_COMPILE=arm-eabi-
6. 我們執行:
- $ make goldfish_defconfig
來在核心原始碼根目錄下生成一個預設的.config檔案:
7. 最後,我們就可以編譯了:
- $ make
編譯過程截圖:
映像的輸出為:arch/arm/boot/zImage,這樣就通過預設的配置完成了Android核心的編譯。
裁剪
裁剪要用到一個很有用的命令:
- $ make menuconfig
上述命令的執行需要以下庫,必須提前安裝:
- $ sudo apt-get install ncurses-dev
make menuconfig這個命令在編譯Linux核心時會用到,有關於它的詳細說明可以參考以下地方,詳細閱讀:
http://blog.csdn.net/xdw1985829/article/details/6833319
http://hi.baidu.com/modygewlmsdnpre/item/b604b1c2ff676b1450505825
http://www.linuxidc.com/Linux/2012-06/63092.htm
簡單說來就是編譯的過程中編譯器通過配置檔案得知如何編譯,得知該把哪個模組編譯進去。這個命令會開啟一個藍色的命令列選單讓你更改編譯時的配置,在裁剪時也會通過這個命令開啟一個選單來更改編譯配置,在退出時如果有變化它會自動提示你儲存。
我們在make menuconfig開啟的選單中修改選單項進行裁剪,這個選單還是很友好的,你一下就能知道改如何根據需要裁剪,裁剪完成後,退出時詢問是否儲存,當然要儲存(實際上是更新了上文中所述的預設的原始碼根目錄下的.config檔案)。
接著我們就可以編譯裁剪之後的核心了(當然,編譯過程中讀取的也是更新後的配置檔案):
- $ make
編譯完畢之後,再去看看編譯好的映像,沒什麼問題的話,發現新映像比未裁剪編譯出的映像小了。
----------------------------------
1. 環境配備
首先,準備好所需要的linux作業系統以及磁碟空間,磁碟空間要足夠大。memory >1G,hard disk> 40G
1.1. 安裝JDK1.6:sudo apt-get install sun-java6-jdk
1.2. 安裝開發過程中需要的一些開發包
sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-devlibwxgtk2.6-dev build-essential zip libncurses5-dev zlib1g-dev
若自帶的源裡面找不到所需要的安裝包,可以新增軟體源:
新增源的過程:
① 備份當前的源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
② 修改 sudo gedit /etc/apt/sources.list
③ 修改之後儲存更新 sudo apt-get update
準備好了獲取android原始碼所需要的環境,下面開始獲取android原始碼
2.獲取android原始碼
2.1. 在使用者目錄下新建一個資料夾來存放我們的android目錄
① mkdir android
② cd android
③ mkdir bin
④ cd bin
⑤ 安裝repo, 通過curl下載repo:curl http://git-repo.googlecode.com/files/repo-1.17 > repo(如果沒有安裝curl,sudo apt-get install curl)
sudo chmod a+x repo
⑥ 然後向PATH中新增bin路徑:exportPATH=$PATH:~/bin
2.2. 建立存放android原始碼目錄source
① mkdir source
② cd source
③ 獲取git上的android原始碼版本: ../bin/repo init -uhttps://android.googlesource.com/platform/manifest -b android-4.0.3_r1
④ 當出現提示時,請配置您的真實姓名和電子郵件地址回購。使Gerrit程式碼審查工具,將需要註冊的Google戶連線的電子郵件地址。確保這是一個啟用活的地址上,你可以接收郵件。你在這裡所提供的名稱將顯示在您的程式碼提交的屬性中,完成之後出現“repoinitialized in/home/***(自己使用者名稱)/android”,則表示初試化完畢,可以開始下載,在Repo初始化完畢後,會產生一個隱藏的目錄”.repo”,通過檢視此目錄下的manifest檔案可以看到相應的Project。
⑤ 在終端執行命令開始下載: ../bin/reposync
3.下載android核心
新建存放android核心的目錄
①mkdir kernel
②cd kernel
③android的kernel有多個部分,可根據需要執行以下命令下載需要的內容。git clone https://android.googlesource.com/kernel/goldfish.git
下載android核心時間會比下載原始碼時間短,需要注意的是,android核心的下載不能被中斷,而android原始碼支援斷點下載。下載的內容是隱藏的,用du –sk命令來檢測資料夾的大小
4.編譯android原始碼
編譯。在Android/source目錄下執行以下命令:make
第一次編譯要等待比較久的時間,編譯成功
編譯的時間一般不會比下載的時間長。在預設的情況下,編譯完成之後,會在/root/android目錄下面生成一個out資料夾,生成的所有檔案都放在該資料夾下。編譯生成之後會在out/target/product/generic/目錄下生成一些.img映象檔案
5. 編譯android核心
5.1. 確定核心的版本
進入存放android核心原始碼的kernel目錄,我下載了goldfish.git,進入goldfish目錄,在命令列輸入以下命令,顯示所有分支及當前所在的分支:
$git branch -a
輸入以下命令選擇當前的版本(goldfish為android的模擬器描述的CPU):
$git checkout -b android-goldfish-2.6.29origin/android-goldfish-2.6.29
再次輸入命令git branch -a,將會顯示剛剛選擇的最新分支,表示目前工作在這個被選擇的分支上
5.2. 設定環境變數
export PATH=$PATH:~/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
5.3. 編譯核心原始碼
設定完之後,就是編譯android核心原始碼了,進入kernel目錄,輸入以下命令
$make ARCH=arm goldfish_armv7_defconfig
$make
第一條命令為編譯時的預設配置檔案。如果不執行這條命令,編譯時可能會提示“找不到配置檔案”。第一條命令執行完後,會在goldfish目錄下生成一個.config檔案。之後便是一段時間的等待了。。。時間不長,一會即可編譯好,比編譯android原始碼時間要少得多。編譯完成之後,會在“kernel/arch/arm/boot/”目錄下生成名為zImage的檔案。
6. 執行android系統
設定路徑
export PATH=$PATH:~/android/source/out/host/linux-x86/bin/
export ANDROID_PRODUCT_OUT=~/android/source/out/target/product/generic/
載入:emulator–kernel ./kernel/goldfish/arch/arm/boot/zImage
相關文章
- 編譯並裁剪 FFmpeg 在 Android 上做視訊編輯編譯Android
- Ubuntu下Android原始碼以及核心下載與編譯UbuntuAndroid原始碼編譯
- 核心與裝置樹編譯與燒寫編譯
- 【譯】如何使用Android MediaStore裁剪大圖片AndroidAST
- 編譯linux核心編譯Linux
- 編譯系統核心編譯
- 編譯核心過程編譯
- 如何預編譯 Android 模擬器專用核心編譯Android
- 【轉】編譯Android系統原始碼和核心原始碼編譯Android原始碼
- 編譯核心make dep 的意思(轉)編譯
- Linux核心模組編譯Linux編譯
- linux核心修改編譯Linux編譯
- 如何編譯 Linux 核心編譯Linux
- 核心編譯part5編譯
- 核心編譯part4編譯
- 核心編譯part3編譯
- 核心編譯part2編譯
- (譯)uCrop介紹 —— 我們自己的Android圖片裁剪庫Android
- Java編譯與反編譯Java編譯
- nanoPI編譯核心的一些recordNaN編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- hi3520d核心編譯編譯方法編譯
- 如何編譯樹莓派核心編譯樹莓派
- 附錄A Linux 編譯核心Linux編譯
- Assimp Android 編譯Android編譯
- 編譯 Android 4.3編譯Android
- Android 編譯 pngAndroid編譯
- android 反編譯Android編譯
- android編譯方法Android編譯
- Android反編譯:反編譯工具和方法Android編譯
- 編譯核心的一點點經驗(轉)編譯
- gcc 編譯器與 clang 編譯器GC編譯
- Linux 核心裁剪框架初探Linux框架
- 編譯Android的OpenSSL類庫編譯Android
- 為 Android 編譯並整合 FFmpeg 的嘗試與踩坑Android編譯
- Centos8編譯安裝核心CentOS編譯
- libusb android ndk編譯--編譯mipsAndroid編譯
- android 刷機ROM結構與編譯製作。Android編譯