自己看過的,覺得需要,所以特地轉移過來保存。
因爲我們需要Android的模擬器,所以需要安裝Android的SDK,並創建AVD,
可以一次命名爲AVD15,AVD22,AVD23,...
AVD15對應1.5,AVD22對應2.2,AVD23對應2.3,...
獲取.config文件:
在啓動模擬器AVD15:
$emulator -avd AVD15
$pull /proc/config.gz . //將/proc/config.gz這個文件複製到本地的目錄,對應Linux上運行該命令的當前工作的目錄,下同
然後,將其解壓並保存爲.config,留待後面使用
2 arm編譯器
去網站 下載arm工具鏈
注意選擇較早的版本,很有可能是google那班人在編譯的時候 選擇的是當時的最新的版本,但是後來就一直用那個版本
http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite
要之前的版本:點擊 All versions 即可看到所有的發行版本,2008q3-41這個版本是經過很多人測試可以用的。
解壓後,設置環境變量,將/usr/local/arm-2008q3/bin 添加到$PATH中
其中 /usr/local/爲保存解壓後的arm-tools-chain的根目錄
3 下載Android的Linux內核
記住是Android的Linux內核(git clone git://android.git.kernel.org/
kernel/common.git),而不是通用的Linuxe內核源碼(git clone git://android.git.kernel.org/kernel/linux-2.6.git
)
$ git clone git://android.git.kernel.org/kernel/common.git kernel-common
//其中 kernel-common爲存放從代碼庫下來的代碼的目錄,下同
這一步是個漫長的等待...
$ cd ~/kernel-common
$ git branch
$ android-2.6.36
//這個隨着版本的變化而變化
4 下載完Android的Linux內核源碼,你會發現在/arch/arm/configs/下沒有goldfish_defconfig這個文件,恩我們需要check_out gold_fish版本(模擬器的硬件配置就是Gold_Fish的)
$ cd ~/kernel_common
$ git branch -a
$ *android-2.6.36
remotes/origin/HEAD -> origin/android-2.6.36
remotes/origin/android-2.6.35
remotes/origin/android-2.6.36
remotes/origin/archive/android-2.6.25
remotes/origin/archive/android-2.6.27
remotes/origin/archive/android-2.6.29
remotes/origin/archive/android-2.6.32
remotes/origin/archive/android-gldfish-2.6.29
remotes/origin/archive/android-goldfish-2.6.27
//以上顯示是目前看到的,將來的某個時候可以就有點不同了,甚至老版本的Branch 名字也會被修改
//故要特別注意
$ git checkout remotes/origin/archive/android-gldfish-2.6.29
//這個過程就快多了,等待下載完數據
//git 這個東西確實不怎麼好用,還是想念Windows上TortoiseSVN
當下載完,你就能在kernel-common/arch/arm/configs/下看到goldfish_defconfig這個文件
5 編譯
1)將1中的.config文件拷貝到 ~/kernel_common目錄下
2)修改 ~/kernel_common目錄下的Makefile文件(修改兩處) -- 修改之掐最好備份下這個文件,因爲如果你修改了這個文件 用git獲取新版本的時候
會提示Makefile文件被修改
ARCH ?= arm //制定CPU的架構爲ARM
CROSS_COMPILE ?= arm-none-linux-gnueabi- //arm編譯工具前綴
3)
$ make goldfish_defconfig
$ make -j2 //現在的機器都是雙核的,這樣代碼編譯就快多了
編譯最後兩行信息:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
6 用我們剛剛編譯成功內核啓動模擬器(這樣不會對原有的模擬器產生任何的影響)
$ emulator -avd AVD15 -kernel ~/kernel_common/arch/arm/boot/zImage
如果模擬器能起來,那說明成功了。
打開另外一個終端,這樣就能解決上面的終端被佔用的情況下,也能使用終端
$ adb shell
#cd /proc
# cat version
Linux version 2.6.29-00262-gb0d93fb-dirty (dream@dream-VGN-FW351J) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-41) ) #1 Fri Dec 24 12:31:28 CST 2010
# cat cupinfo
cupinfo: No such file or directory
# cat cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 272.79
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Goldfish
Revision : 0000
Serial : 0000000000000000
注: dream@dream-VGN-FW351J,其中的 dream爲當前登錄Ubuntu的用戶名,而dream-VGN-FW351J是機器名
Sourcery G++ Lite 2008q3-41 這個就是arm tools chain的版本了
來自:http://www.cnblogs.com/mengshu-lbq/archive/2010/12/23/1914953.html