build android for VMware

来源:互联网 发布:恶意软件清除工具 编辑:程序博客网 时间:2024/05/17 21:21

在android-porting讨论组看到了有人成功的在X86平台下运行android后,我也开始按照讨论组内指导的方法尝试创建能够在vmWare上运行的andorid,最后成功的生成了能够运行的未作修改的android。在实现的过程发现在http://code.google.com/p/patch-hosting-for-android-x86-support/链接处有build android for x86的补丁和方法。比较详细的教程在上面所示链接的wiki下的BuildAndroidForX86Platforms 处可以找到。下面我将称这个教程为BuildAndroidForX86Platforms教程。

虽然严格按照这个教程可以成功的build,我在实现过程也出现了些许问题,所以有必要总结下。

1 首先参考BuildAndroidForX86Platforms教程的

2 重编译Linux内核

1) 运行make menuconfig, 配置内核参数。要选择添加下面的驱动:

网卡驱动:

device drivers

 network device support ->
   Ethernet (10 or 100Mbit)  --->
       [*]   EISA, VLB, PCI and on board controllers
      <*>     AMD PCnet32 PCI support

Vesa FB驱动:

device drivers

 Graphics support  --->
   <*>  Support for frame buffer devices  --->
          [*]   VESA VGA graphics support
控制台驱动:

Console display driver support  --->
         <*> Framebuffer Console support
         [*] Select compiled-in fonts
         [*]   VGA 8x8 font
         [*]   VGA 8x16 font

如果是2.6.27内核,需要将pmem取消

[*] Misc devices --->
 [ ] Android pmem allocator (NEW)

 

2) 编译内核

make bzImage

生成linux内核二进制文件。

 

3 编译installer.img

1)将步骤2生成的bzImage改名为kernel拷贝到vendor/asus/eee_701目录下。

2)确认已经打了教程提到的补丁尤其是这5个

0001-1.-added-scripts-to-build-install-image.patch

0001-1.-fixed-crash-caused-by-wrong-preload-class.patch

alarm.patch

e2fsprogs.patch

eventhub.patch

3)

在BoardConfig.mk文件为BOARD_KERNEL_CMDLINE变量赋值的那一行行尾添加vga=788.为BOARD_KERNEL_CMDLINE变量的内容是kernel boot时的命令行参数。vesafb根据boot命令行的vga=788来设置frambuffer的模式,十进制值788对应十六进制的314,表示800*600*16的模式,即屏幕分辨率为800*600,颜色为16位表示。根据我的经验,在vmWare上设置屏幕分辩率800*600640*400等都是可以的,关键不要弄错颜色位。要查看$(androidPath)/framwork/base/libs/ui/EGLDisplaySurface.cpp的513行的

mFb[i].format赋值的参数是GGL_PIXEL_FORMAT_RGB_565还是GGL_PIXEL_FORMAT_BGRA_8888,前者表示16位色,后者表示为32位色。必须根据这个值来选择frambuffer的模式,否则会出现花屏的现象。vesa frambuffer支持的模式在下图显示:

http://p.blog.csdn.net/images/p_blog_csdn_net/jkdirac/EntryImages/20090712/vesa.PNG

4)

运行回到android源码的最上层目录。执行make TARGET_PRODUCT=eee_701 TARGET_ARCH=x86 DISABLE_DEXPREOPT=true -j8 installer_img

然后就是长时间的make过程,最后将会在$(androidPath)/out/target/product/eee_701目录下生成一个installer.img文件,这就是我们需要的android的安装文件。

 

4 在vmWare安装android

创建一个installer.vmdk, 内容如下

# Disk DescriptorFile
version=1
CID=b01deebc
parentCID=ffffffff
createType="monolithicFlat"

# Extent description
RW 900376 FLAT "installer.img" 0

# The Disk Data Base
#DDB

ddb.toolsVersion = "0"
ddb.adapterType = "ide"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "255"
ddb.geometry.cylinders = "49"
ddb.virtualHWVersion = "4"

需要把RW 900376 FLAT "installer.img" 0这行的900376 改成你的 installer.img的大小/512 的值

然后将installer.img和installer.vmdk放在同一路径。使用vmWare创建一个linux-2.6的带IDE硬盘的机器,将installer.vmdk添加为一个硬盘。启动vmware的机器,将installer.vmdk设置为启动盘。然后就开始了android的安装过程。安装完成后,将机器boot设置为不是installer.vmdk,因为此时android已经安装到了机器的主硬盘上,从另外一个硬盘boot,可以开始运行android系统了。

 

实现过程的问题及可能解决的方法:

1) android启动后没有网络连接。 可能是由于在编译Linux kernel没有添加network支持,参考步骤2 重编译Linux内核的内容

2) android启动后,在出现命令提示符后,进入黑屏状态,按alt-f1可以重新看到命令提示符。可能是由于Linux kernel没有添加vesa frambuffer,参考步骤2 重编译Linux内核的内容

3) android启动后,进入android图形界面出现花屏。可能的原因是frambuffer的颜色设置与android ui的颜色格式不一致。参考步骤“编译installer.img”第3)部分。