在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时的命令行参数。vesa fb根据boot命令行的vga=788来设置frambuffer的模式,十进制值788对应十六进制的314,表示800*600*16的模式,即屏 幕分辨率为800*600,颜色为16位表示。根据我的经验,在vmWare上设置屏幕分辩率800*600 640*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可以重新看到命令提示符。可能是由于Linuxkernel没有添加vesa frambuffer,参考步骤2 重编译Linux内核的内容

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

更多相关文章

  1. Android高手进阶教程(二)之----Android Launcher抽屉类SlidingDr
  2. 在Eclipse配置安装Android详细教程
  3. [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源
  4. Android Studio2.3+AndroidSDK安装【图文教程】附资源链接
  5. android入门教程(十六)之-- 使用Intent传递数据
  6. Android入门教程(四)之-------->Android工程目录结构介绍
  7. ArcGIS Runtime for Android开发教程V2.0(1)基本概念
  8. Android Market 账号注册和应用发布教程

随机推荐

  1. 深度学习GPU环境Ubuntu16.04+GTX1080+CUD
  2. 如何删除 JavaScript 数组中的虚值[每日
  3. 10年漫威,到底有多少角色。
  4. Docker部署pinpoint2.2
  5. 中文分词原理及常用Python中文分词库介绍
  6. 轻松获得海量稳定代理!ADSL拨号代理的搭建
  7. 183条地铁线路,3034个地铁站,发现中国地铁
  8. App爬虫神器mitmproxy和mitmdump的使用
  9. Attention原理及TensorFlow AttentionWra
  10. Unity平台 | 快速集成华为AGC AppLinking