一、什么是Android?
Android作為Google公司推出的一款手機(jī)開發(fā)平臺(tái),其本身是基于linux內(nèi)核的。Google提供的內(nèi)核源代碼中除了linux部分外,有很大一部分是與虛擬處理器Qemu和模擬硬件平臺(tái)Goldfish相關(guān)的。所以如果想將Android移植到實(shí)際的硬件平臺(tái)上需要將這部分代碼剝離出來。
二、搭建開發(fā)環(huán)境
2.1在Vmware中的安裝和設(shè)置Ubuntu Server 8.10
本文選擇在Win XP下的Vmware中安裝Ubuntu Server 8.10作為編譯開發(fā)服務(wù)器。
安裝: 略。
設(shè)置:
1. 為網(wǎng)卡配置靜態(tài)IP地址
虛擬機(jī)和XP連接用的虛擬網(wǎng)卡設(shè)置IP,gateway和DNS都為192.168.0.1。
在Vmware虛擬機(jī)中執(zhí)行:
sudo vi /etc/network/interfaces 加入:
auto eth0
iface eth0 inet static
address 192.168.0.2
gateway 192.168.0.1
netmask 255.255.255.0
2. 配置DNS
sudo vi /etc/resolv.conf
nameserver 192.168.0.1
3. 安裝開發(fā)工具
sudo apt-get install build-essential vim libncurses-dev lrzsz
4. 清理系統(tǒng)
sudo apt-get clean
2.2 建立Android內(nèi)核開發(fā)環(huán)境
1、工作環(huán)境及所需軟件包
1)系統(tǒng)環(huán)境:Ubuntu 8.10 server
2)交叉編譯器:GNU Toolchain for ARM Processors
(http://www.codesourcery.com/gnu_toolchains/arm/download.html)
本文用:arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
3)Android內(nèi)核源代碼:linux-2.6.23-android-m5-rc14.tar.gz
(http://code.google.com/p/android/downloads/list)本文用:linux-2.6.25-android-1.0_r1.tar.gz
4)Android SDK
(http://code.google.com/android/download_list.html)
SDK中帶有Android Emulator仿真器等工具,本文用:android-sdk-linux_x86-1.0_r2.zip
2、搭建交叉編譯環(huán)境
安裝好系統(tǒng)后,把下載的Android kernel,交叉編譯器和Android SDK都放在/home/xxx目錄,xxx是安裝系統(tǒng)時(shí)的普通用戶的用戶名。
1) 安裝交叉編譯器
$cd ~
$mkdir tools
$cp arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 tools
$cd tools
$tar jxvf arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
2) 解壓Android SDK
$cp ~/android-sdk-linux_x86-1.0_r2.zip ~/tools
$cd ~/tools/
$unzip android-sdk-linux_x86-1.0_r2.zip
3) 解壓縮內(nèi)核源代碼
$mkdir sources
$cp linux-2.6.25-android-1.0_r1.tar.gz sources
$cd sources
$tar zxvf linux-2.6.25-android-1.0_r1.tar.gz
$mv kernel.git linux-2.6.25-android-1.0_r1
三、編譯和運(yùn)行Android Kernel
1) 獲取Android官方的默認(rèn)內(nèi)核配置文件.config
這個(gè).config文件可以從SDK中得到。啟動(dòng)android模擬器,然后用adb從模擬器中提出內(nèi)核配置文件:
$~/tools/android-sdk-linux_x86-1.0_r2/tools/emulator &
$adb pull /proc/config.gz ~/
$mv ~/ ~/sources/linux-2.6.25-android-1.0_r1
$cd ~/sources/linux-2.6.25-android-1.0_r1
$ gunzip config.gz
$ mv config .config
2)編譯
$~/mk-kernel.sh sources/linux-2.6.25-android-1.0_r1/
其中mk-kernel.sh腳本如下:
#!/bin/sh
#Simple script for Android Kernel compiling.
#By Neil Chiao, Mar.14,2009
export PATH=$PATH:/home/neil/tools/arm-2008q3/bin
export CROSS_COMPILE=arm-none-eabi-
cd $1||exit 1
make menuconfig
make
3)運(yùn)行該鏡像
$cd ~/tools/android-sdk-linux_x86-1.0_r2/tools/
$./emulator -kernel ~/sources/linux-2.6.25-android-1.0_r1/arch/arm/boot/zImage
/*
*By Neil Chiao (neilchiao at gmail.com)
*轉(zhuǎn)載請注明出處:neilengineer.cublog.cn
*/