android-4.4源码 在ubuntu上编译和 模拟运行

8 篇文章 0 订阅
7 篇文章 0 订阅

前提:代码已经准备好。首先要设定环境:
# 设共享
sudo mount -t smbfs -o username=monan,password=123123mn,iocharset=utf8 //172.16.1.102/android /home/winshare
cd /home/winshare/
# 装JDK 1.6
cp jdk-6u45-linux-x64.bin ../
./jdk-6u45-linux-x64.bin    /*下载 http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR*/
vim /etc/profile
export JAVA_HOME=/home/jdk1.6.0_45
export JRE_HOME=/home/jdk1.6.0_45/jre
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk /* 官网这句坑爹 ,要装上面的sun sdk 1.6 */
$sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
export USE_CCACHE=1
export CCACHE_DIR=<path-to-your-cache-directory> /*如果~/目录是ntfs文件则要换*/
prebuilts/misc/linux-x86/ccache/ccache -M 50G 
prebuilts/misc/linux-x86/ccache/ccache -M 50G /* 4.0 以上版本适用 */

3.选择目标

使用lunch命令来选择哪一种目标来构建。确切的配置可以作为参数传递给命令,如下:

?
1
$lunch aosp_arm-eng
以上的例子指定了构建一个完成的模拟器,其所有的debugging使能,输入该命令后,

\


若lunch后面没有参数,那么会通过一个目录来让提示让你选择。如下:

\

所有的构建目标是使用BUILD-BUILDTYPE形式,其中BUILD是代码名表示特定的特征结合,如下是部分列表:

\

而BUILDTYPE如下:

\

更好的关于构建和运行在实际硬件上的信息,参考:http://source.android.com/source/building-devices.html


4. 构建代码

使用make构建一切,GNU make可以通过使用-jN参数来处理并行任务。此处的N,根据所用的计算机的硬件的核数来指定,一般N指定为CPU核心的1到2倍。例如在一个dual-5520机器上(2个CPU,每个CPU4个核,每个核2个线程),那么最快的构建是使用make -j16或make -j32。

?
1
$make -j4

5.运行

可以在模拟器上运行构建的Android系统,可以flash到设备上,请注意已经使用lunch命令构建的目标。最好不要把构建的目标运行另一个不同的目标上。

1)模拟一个android设备

通过构建过程,模拟器已经自动的加入到了你的路径中了。因此,敲入如下命令来运行模拟器:

?
1
$emulator

2)Flash到设备上

为了Flash到设备上,需要使用fastboot,成功构建后,该命令包含在你的路径中。在引导时,要么通过适当的组合键手动放置设备到fastboot模式。或者从shell中输入如下命令进入fastboot模式

?
1
$adb reboot bootloader

一旦设备处于fastboot模式,运行:

?
1
$fastboot flashall -w
-w选项用于擦去设备上的/data部分,对于第一次flash一个特定设备这是有用的,否则不是必需的。

更多的关于在实际硬件上构建和运行的信息,见:http://source.android.com/source/building-devices.html


二、使用ccache

ccache是一个编译器ccache用于C和C++。可以让构建更加快速。在源代码的根目录处,做如下操作:

?
1
2
3
$export USE_CCACHE= 1
$export CCACHE_DIR=/<path_of_your_choice>/.ccache
$prebuilts/misc/linux-x86/ccache/ccache -M 50G</path_of_your_choice>
建议的cache大小为50-100G


可以使用如下操作来查看使用的ccache大小

?
1
$watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts来代替prebuilts/misc
Linux 系统没加swap分区的原因。
yelei@ubuntu:~$ sudo dd if=/dev/zero of=/opt/moreswap bs=1024 count=512k
[sudo] password for yelei:
524288+0 records in
524288+0 records out
536870912 bytes (537 MB) copied,14.3514 秒,37.4 MB/秒
yelei@ubuntu:~$ sudo mkswap /opt/moreswap
mkswap: /opt/moreswap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=8ba91cd0-be0f-4e83-ae2a-30b04bf41f75
yelei@ubuntu:~$ sudo swapon /opt/moreswap
yelei@ubuntu:~$ sudo gedit /etc/fstab
/opt/moreswap none swap sw 0 0

USER@ANDROID_ROOT: source ./build/envsetup.sh
这个命令设定后下一条命令才可以执行:
USER@ANDROID_ROOT: lunch full-eng
这个设定了很多环境变量,不管是编译还是模拟都要用到,
然后开始编译
make -j2
-j后面带的数字有电脑的CPU决定,如有双CPU每个CPU有4个核 则 make -j8.
编译的时间很漫长,完了后就可以开始模拟运行了
emulation
注意:如果下次打开ubuntu的终端想要再运行模拟器,要把上面两个设置环境命令再运行一次:
USER@ANDROID_ROOT: source ./build/envsetup.sh
USER@ANDROID_ROOT: lunch full-eng
否则的话会报错 ,说emulator找不到。
另外编译自己的内核 :
1. 拉模拟器的内核代码:
git clonehttps://android.googlesource.com/kernel/goldfish.git
git branch -r
gitcheckout origin/android-goldfish-2.6.29
2. 拉编译环境,并设置环境路径
$ git clonehttps://android.googlesource.com/platform/prebuilt
这个prebuilt目录建议放到android目录下面 ,和goldfish同级 $ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
把prebuild设置到环境路径
3. 建立一个shell文件叫make_goldfish.sh 里面加入内容:


export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=$(pwd)/../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
make goldfish_armv7_defconfig
make -j4


即开始编译,(确保prebuild设置到环境路径)
4.使用自己的内核运行android模拟:
USER@ANDROID_ROOT: emulator -kernel./kernel/goldfish/arch/arm/boot/zImage -shell
说明:./kernel/goldfish是我的kernel源代码目录
-shell 是在当前终端打开adb shell
也可以另开终端窗口执行 adb shell (要保证本文最开始的两条设置命令已经运行过)

catlog 显示 android调试信息

dmesg显示 内核调试信息


至此,android内核的调试之路正式开始 。  


一些错误的解决方法:

问题1  使用 make menuconfig出现:

mconf.c:(.text+0x1256): undefined reference to `initscr'
mconf.c:(.text+0x125d): undefined reference to `stdscr'
scripts/kconfig/lxdialog/checklist.o: In function `print_arrows':
checklist.c:(.text+0x41): undefined reference to `wmove'
解决办法:

sudo apt-get install libncurses5  libncurses5-dev




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值