上次的问题果然是jdk的问题。
我以前自己有一个误解,以为cupcake里面包含了kernel,其实没有包括,这只是一个sdk而已,
里面可能有kernel的已经编译好的印象,检查你编写的application,是否正确。
就是在模拟器中,把该kernel的印象和文件系统(包括你写的application)运行起来,
从而达到检测的目的。(不知道这样的理解对不对?)
ECLAIR(目前的master,主线)目录:
bionic cts device hardware out sdk
bootable dalvik external Makefile packages system
build development frameworks ndk prebuilt vendor
cupcake的目录:
bionic build development frameworks Makefile packages system
bootable dalvik external hardware out prebuilt vendor
--bionic --Android编译过程所需要的一些库
--bootable --负责启动和备份的一些文件
--build --最主要的一些makefile和编译配置文件
--dalvik --经过Google优化了的java虚拟机
--development --开发用的一些文件夹,包括模拟器和工具等
--external --Android工程中引入的外部功能库
--frameworks --中间件部分
--hardware --和硬件有关的一些支持文件,包括wifi,电信模块等
--packages --所有的上层应用包
--prebuild --Android编译工具所在目录
--system --一些系统级文件
关于kernel的下载:
git clone git://android.kernel.org/kernel/common.git kernel
1:编译sdk工具:
运行make sdk
会看到:
[root@liyi sdk]# ls
android-sdk_eng.root_linux-x86 sdk_deps.mk
android-sdk_eng.root_linux-x86.zip
进到android-sdk_eng.root_linux-x86/platforms/android-1.5/images中:
[root@liyi images]# ls -l
total 47844
-rwxrwxr-x 1 root root 1322572 2010-04-15 10:05 kernel-qemu
-rw-rw---- 1 root root 240824 2010-04-15 10:07 NOTICE.txt
-rw-rw-r-- 1 root root 145741 2010-04-15 10:05 ramdisk.img
-rw-rw---- 1 root root 47207424 2010-04-15 10:05 system.img
-rw-rw---- 1 root root 2112 2010-04-15 10:05 userdata.img
2:编译:
make 这 一步编译出system.img、userdata.img、ramdisk.img三个镜像,位于
out/target/product /generic目录下。但是这里并没有编译最关键的kernel。
[root@liyi generic]# ll *.img
-rw-r--r-- 1 root root 145741 2010-04-15 12:41 ramdisk.img
-rw------- 1 root root 47879040 2010-04-15 12:41 system.img
-rw------- 1 root root 2112 2010-04-15 12:41 userdata.img
[root@liyi generic]# pwd
/home/liyi/android/out/target/product/generic
3:编译kernel
# cd kernel
# export ARCH=arm
# export CROSS_COMPILE=arm-eabi-
# make goldfish_defconfig
# make
4:关于编译出来的文件说明
a、android文件系统的结构
android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。
其中, ramdisk.img是emulator的文件系统,
system.img包括了主要的包、库等文件,
userdata.img包括了一些用户数 据,
emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。
因此,我们可以把ramdisk.img里的所有文件复制出来,
system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。
b、分离android文件系统出来
system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,
可以通过file命令验证:
file ramdisk.img,输出:
ramdisk.img: gzip compressed data, from Unix, last modified: Thu Apr 14 17:16:10 2010
Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。
Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,
不过这里还是介绍怎样把 ramdisk.img解压出来:
将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzip ramdisk.img.gz
然后新建一个文件夹,叫ramdisk吧,进入,输入命令
cpio -i -F ../ramdisk.img
这下,你就能看见并操作ramdisk里面的内容了。
然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了.
5:如何在emulator里面运行:
#cd /home/liyi/android/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools
#./android create avd -n NO1 -t 1
[root@liyi tools]# ./android list
Available Android targets:
id: 1
Name: Android 1.5
Type: Platform
API level: 3
Skins: QVGA-P, HVGA-P, QVGA-L, HVGA (default), HVGA-L
Available Android Virtual Devices:
Name: NO1
Path: /root/.android/avd/NO1.avd
Target: Android 1.5 (API level 3)
Skin: HVGA
#./emulator –avd NO1 -scale 0.8
执行上述命令之前:export ANDROID_PRODUCT_OUT=/home/liyi/android/out/target/product/generic
也可以不指定路径:
但是你在执行emulator的时候,需要如下:
./emulator –avd NO1 –sysdir /home/liyi/android/out/target/product/generic –data /home/liyi/android/out/target/product/generic/userdata.img -ramdisk /home/liyi/android/out/target/product/generic/ramdisk.img –kernel /home/liyi/android/prebuild/android-arm/kernel/kernel-qemu -scale 0.8
启动刚才创建的名为NO1的模拟器,使用的内核,文件系统等均使用 /home/liyi/android/out/target/product/generic 路径下的内核和文件系统。没什么问题的话,我们就可以看到Android操作系统的虚拟界面了。