搞了三天,終於把這個環境搞出來,一我的摸索,在網上查資料,終於搞定了。可是模擬器跑起來真是慢。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上面的路徑,請根據本身的機器進行修改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、安裝ADT4、對eclipse進行升級操做。這個會幫你完成一些ADT的操做,減小後面的不少錯誤的發生。
export PATH=$PATH:/usr/local/android_sdk_linux/tools
export PATH=$PATH:/usr/local/android_sdk_linux/platform-tools
下載一個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
最終效果如圖所示。