Opendroid原创,转载清注明! 请想要深入学习和研究Android的朋友加入Opendroid QQ群81410571,我们目前已成功移植android到s3c2440以及virtualbox等。正在筹划进一步的深入学习计划! VirtualBox是Sun推出的一款跨平台开源虚拟机软件,Android目前已经支持x86原生编译,我们的目的是让Android可以在VirtualBox上运行。鉴于x86虚拟机平台调试的方便性,不失为一学习研究的好平台。
本文写作时,android已经被国内外人士移植到x86之上。Eeepc 701和vmware是最早跑起来的一些x86平台。同时VirtualBox也已经有人移植成功。
本文亦参考了这些经验。特别是如下两文:
http://groups.google.com/group/android-porting/msg/6cf95445f9709987
http://groups.google.com/group/android-porting/msg/2dedc5fe7ad58ed3

详细的移植步骤,我们按3步来:
1.Android根文件系统
这个与eeepc701上的完全一样, 需要下载源码并自行编译. 请参考http://blog.csdn.net/opendroid/archive/2009/02/24/3933897.aspx
如果提示out/.../data目录不存在, 创建之后重编, 直到生成installer.img.

2.支持VirtualBox的linux kernel
我们这里主要添加的是网卡和fb支持.
首先拷贝./vendor/asus/eee_701/kernel.config到kernel/.config
然后make menuconfig修改如下选项:
network device support ->
Ethernet (10 or 100Mbit) --->
[*] EISA, VLB, PCI and on board controllers
<*> AMD PCnet32 PCI support

Graphics support --->
<*> Support for frame buffer devices --->
[*] VESA VGA graphics support <- Unfortunately, Vesa VGA

Console display driver support --->
<*> Framebuffer Console support
[*] Select compiled-in fonts
[*] VGA 8x8 font
[*] VGA 8x16 font
同时,还需要去掉pmem支持,只有需要大块连续内存的设备上需要它
* Disable pmem allocator if your kernel is 2.6.27 base.
[*] Misc devices --->
[ ] Android pmem allocator (NEW)
最后make bzImage生成到arch/x86/boot/bzImage

3.镜像生成
这是一个比较复杂的过程
1)创建分区配置文件, 可以参考vendor/asus/eee_701/disk_layout.conf
$vim d.conf
内容为:
device {
scheme mbr

# bytes in a disk sector (== 1 LBA), must be a power of 2!
sector_size 512

# What LBA should the partitions start at?
start_lba 2048

# Autodetect disk size if == 0
num_lba 0

partitions {
sysloader {
active y
type linux
}

recovery {
active y
type linux
}

boot {
active y
type linux
}

cache {
type linux
}

system {
type linux
}

third_party {
type linux
}

data {
type linux
}
}
}

2)拷贝host机器的mbr文件
$cp grub/grub.bin installed.img

3)创建 boot.img:
里面需要有三个文件:
ramdisk cmdline kernel
你需要export out/host/linux-x86/bin/到PATH以便方便的访问如下用到的一些工具。

接下来一步步创建出来:
$mkdir bootimg
$cp -raf root rootimg
rootimg里面的init.rc,需要改掉所有的mount ext3为ext2,因为genext2fs只能生成ext2镜像.
$mkbootfs rootimg | gzip -9 > bootimg/ramdisk

$echo "console=tty0 console=ttyS1,115200n8 console=tty0
androidboot.hardware=eee_701 vga=788" > bootimg/cmdline

$cp android/kernel/arch/x86/boot/bzImage bootimg/kernel

生成boot.img:
$genext2fs -b 8192 -m 0 -d bootimg boot.img

4)创建dummy img
$mkdir dummy
$genext2fs -b 8192 -m 0 -N 8 -d dummy dummy.img

5)创建data.img
$genext2fs -b 81920 -d data -N 512 -m 0 data.img

6)创建磁盘镜像文件installed.img
$editdisklbl -l d.conf -i installed.img boot=boot.img cache=dummy.img system=system.img third_party=dummy.img data=data.img
至此,installed.img镜像生成后,你可以直接在kvm/qemu,也可以经过一些处理,在vmware和virtualbox上使用。

7)在virtualbox上,我们需要将installed.img转换成installed.vdi
$VBoxManage convertfromraw -format VDI ./installed.img ./installed.vdi

4.运行
1)配置virtualbox
任选一linux based的机型即可。硬盘选ide primary master, 镜像选择你才做好的install.vdi..网络选择NAT方式,虽然受限制,但是可以直接支持访问外网。
2)启动
启动之后,在sun的图片界面,一定要按F12以进入启动选择界面,之后按1)即可。否则会卡在grub,需要重新生成vdi文件并重新加载!!切记!! 3)切换到命令行 按alt+right可以切换到命令行,方便调试。 Opendroid团队 QQ群:81410571

更多相关文章

  1. 实现了 Android 设备之间通过 Wifi 传输文件的功能
  2. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定
  3. Dex2jar 与 JD-GUI快速反编译Android apk文件
  4. Android在SD卡上的文件读写
  5. 2013.12.23 ——— android assents文件路径
  6. Android平台开发-Android keypad map-Android按键事件
  7. Android 制定的ROM包(文件系统根目录结构分析)
  8. Android中xml文件读写
  9. Android中Manifest.xml配置文件

随机推荐

  1. Android(安卓)Handler Message 传递字符
  2. BaseAdapter
  3. android的动画实例
  4. Android中图片的放大和缩小源码
  5. Android(安卓)判断获取的时间是否是今天
  6. Android(安卓)Spinner控件的简单应用
  7. Android(安卓)7.0版本升级解析包错误
  8. Eclipse 开发 Android, Hello Spinner( 学
  9. Android(安卓)Studio 打造一个适合自己开
  10. Android使用xml中定义的动画效果