android開發環境搭建,內核編譯

搞了三天,終於把這個環境搞出來,一我的摸索,在網上查資料,終於搞定了。可是模擬器跑起來真是慢。html

PS:java

http://developer.android.com/sdk/installing.htmllinux

https://sourcery.mentor.com/GNUToolchain/homeandroid

本機環境:ios

[root@bruce test013]# uname -a
Linux bruce 2.6.32-71.el6.i686 #1 SMP Wed Sep 1 01:26:34 EDT 2010 i686 i686 i386 GNU/Linux
網絡

1、jdk的安裝eclipse

    官網下載安裝文件,解壓,而後配置環境變量:工具

# gedit /etc/profile,會彈出一個窗口,爲profile文件的編輯窗口,在該文件的最後添加:測試

#set java environment
export JAVA_HOME=/home/bruce/tools/jdk1.7.0_01
export JRE_HOME=/home/bruce/tools/jdk1.7.0_01/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

上面的路徑,請根據本身的機器進行修改ui

# source /proc/profile

測試:

[root@bruce test013]# java -version
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) Server VM (build 21.1-b02, mixed mode)

安裝完成。

二,交叉編譯器(若是不須要編譯內核的,能夠不要安裝)

https://sourcery.mentor.com/GNUToolchain/subscription?@template=request_eval&customer=24203

申請個免費的帳號,能夠下載,其中第一項選擇ARM EABI或ARM GNU/Linux,第二項選擇IA32 GNU/Linux便可。

我下載的是arm-2008q3,解壓後, 獲得 arm-2008q3

而後安裝環境變量:

# gedit /proc/profile

#set arm-2008q3

 export PATH=$PATH:/usr/local/arm-2008q3/bin

這樣就安裝好了。

# source /proc/profile

2、eclipse安裝

官網下載地址:http://www.eclipse.org/downloads/packages/eclipse-rcp-and-rap-developers/heliossr2

下載,解壓,

準備啓動腳本:#sudo gedit /usr/bin/eclipse

在文件中加入如下內容:若是已經有了, 則不要增長

#!/bin/sh

export MOZILLA_FIVE_HOME=/usr/lib/mozilla/

export ECLIPSE_HOME=/home/bruce/tools/eclipse

 $ECLIPSE_HOME/eclipse $*

上面的路徑,請根據本身的機器進行修改。

修改該腳本的權限:# sudo chmod +x /usr/bin/eclipse

終端輸入:# eclipse

能夠啓動了,完成,打開。


首先要按照以下方式添加updat site:

http://code.google.com/eclipse/docs/faq.html#wstinstallerror到install new softwall

對eclipse進行更新,這個會自動完成不少操做,好比依賴包的升級。下載SDK

3、安裝ADT

能夠經過eclipse-help-install new softwall 加載,也能夠本身先下 載,因爲網絡緣由,我是先下載安裝包。下載地址:http://dl.google.com/android/ADT-0.9.6.zip,其實能夠到官網下載最新的版本。安裝好後,能夠用android sdk manager 和avd進行操做。不一樣的版本,ADT的界面不同,在ADT14後,android sdk managmer 與 avd的功能已經分開,請注意, 網上不少資料講得都是14版本之前的。

4、對eclipse進行升級操做。這個會幫你完成一些ADT的操做,減小後面的不少錯誤的發生。

5、下載Android的SDK,解壓,設置好環境變量tools,實際上這個SDK下載下來以後,只是一個空殼,沒有SDK platform,只是 個引子。只有將其加入到ADT的開發目錄中,經過ADT將其升級,下載真正的SDK platform,這個,ADT會自動完成。

1) 安裝Android SDK: 將android-sdk_m5-rc14_linux-x86.zip解壓縮到適當路徑下便可使用。本文將其釋放至/home/bruce/android_sdk_linux路徑下,並將其tools路徑添加到PATH中:

# gedit /proc/profile

#set android sdk

export PATH=$PATH:/usr/local/android_sdk_linux/tools

export PATH=$PATH:/usr/local/android_sdk_linux/platform-tools

 

6、設置好ADT開發目錄,經過android sdk manager 升級SDK的 platform-tools,下載SDK platform,在這個過程當中,要反覆進行升級,其中的platform-tools,我是在add-on sites: 用來下載platform -tools。

七:建立AVD,虛擬設備,建立完成後,能夠啓動模擬器。

 

下面的內核的編譯:

下載一個android的內核源碼包,解壓,自動生成一個kernel,

獲取內核編譯配置文件

交叉編譯環境搭建好後須要獲得android的內核編譯參數的配置文件,該文件須要從android sdk 中的模擬器中獲得。啓動android模擬器,而後經過adb獲得模擬器中提供的內核配置文件:

$emulator &
$adb pull /proc/config.gz

這時候adb工具會鏈接模擬器,並從它裏面下載一個叫作config.gz的文件到你的當前目錄下。將其移動至kernel目錄,解壓該文件獲得 config,將其重命名爲.config,這樣就能夠跳過make config而直接獲得Makefile所須要的內核配置文件。

$ gunzip config.gz
$ mv config .config


此主題相關圖片以下:
按此在新窗口瀏覽圖片

3.修改Makefile

首先修改第187行,將CROSS_COMPILE值改成arm-none-linux-gnueabi-,這是咱們安裝的交叉編譯工具鏈的前綴,修改此處意在告訴make在編譯的時候要使用該工具鏈。


此主題相關圖片以下:
按此在新窗口瀏覽圖片

而後修改第51九、520行,將build id 值註釋掉,由於目前版本的android內核不支持該選項。


此主題相關圖片以下:
按此在新窗口瀏覽圖片

4.開始編譯

在kernel目錄下執行make:

$ make

除個別警告外編譯過程一切順利,最終在/kernel/arch/arm/boot目錄下面生成一個zImage,即爲編譯好的內核鏡像了。

若是你使用的是gcc 4.3,那麼頗有可能會出現建立失敗的狀況,錯誤提示以下所示:
    ......
    ......
LD      .tmp_vmlinux1
kernel/built-in.o: In function `getnstimeofday':
(.text+0x1b2b1): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0x1b36c): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0x1b38f): undefined reference to `__umoddi3'
kernel/built-in.o: In function `timekeeping_resume':
timekeeping.c:(.text+0x1b520): undefined reference to `__udivdi3'
timekeeping.c:(.text+0x1b543): undefined reference to `__umoddi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x1bb9d): undefined reference to `__udivdi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x1bbc0): undefined reference to `__umoddi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x1bc57): undefined reference to `__udivdi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x1bc81): undefined reference to `__umoddi3'
make: *** [.tmp_vmlinux1] Error 1

這個錯誤的緣由是由於gcc 4.3在處理64位整數運算的時候出現的問題,解決的辦法據我所知有兩種,這裏介紹其中一種.linux2.6.23.2目錄下的Makefile文件中給變量CFLAGS_KERNEL賦值爲:-fno-tree-scev-cprop,
改變值以後從新編譯一次就OK.若是出現了undefined reference to `__stack_chk_fail',能夠在文件Makefile中的CFLAGS設置值
-fno-stack-protector
,即關閉掉棧的保護。
若是出現其餘編譯失敗的狀況,你能夠藉助於google找到相關的解決方案。


此主題相關圖片以下:
按此在新窗口瀏覽圖片


此主題相關圖片以下:
按此在新窗口瀏覽圖片

5.運行該鏡像

$emulator -kernel ~/android/kernel/arch/arm/boot/zImage

最終效果如圖所示。


此主題相關圖片以下:
按此在新窗口瀏覽圖片

相關文章
相關標籤/搜索