1 环境准备

1.1 硬件及主机系统

  • 使用AVD时需要硬件支持KVM。因此现在主机bios中将虚拟化设置开启。
  • x86架构的主机,安装了ubuntu16.04操作系统。

检查系统是否支持虚拟化的两条命令:

kvm-ok

egrep -c '(vmx|svm)' /proc/cpuinfo

1.2 下载goldfish源码

(1)在线方式 - 推荐

访问如下官网,执行git clone将工程克隆到本地,之后可以根据需要选择不同内核版本进行编译。

https://android.googlesource.com/kernel/goldfish.git

(2)离线方式

在官网中下载特定版本的goldfish内核tar包,到ubuntu中解压。

1.3 安装java

参考 安装java jdk的三种方式:https://blog.csdn.net/zbj18314469395/article/details/86064849

1.4 配置交叉编译环境

下载交叉编译器:https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/

可在以上链接中选择不同的交叉编译器,32位或64位,根据实际情况下载

下载到本地后,配置环境变量

vim ~/.bashrc

export PATH=xxx/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin:$PATH
export PATH=xxx/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin:$PATH
export CROSS_COMPILE=aarch64-linux-android-

source ~/.bashrc

1.5 安装linux版android studio

(1)离线方式 - 推荐 在android studio官网(https://developer.android.com/studio)下载包,本地解压后,进入android-studio/bin/目录执行./studio.h即可启动AS。

(2)在线方式

https://rotolo.dev/android-studio/

sudo apt-add-repository ppa:paolorotolo/android-studio 
sudo apt-get update
sudo apt-get install android-studio

1.6 配置AS

(1)有网络的情况

配置AS的代理,直接连接google

这种方式下的sdk,ndk,AVD system-image等等都可以在线下载,很方便。

(2)没有网络的情况

手工下载android sdk或者system images等等,按照这个网站的指导:https://my.oschina.net/u/862582/blog/349263

另一个手工下载sdk参考:https://www.jianshu.com/p/86b9c57bf838

手工下载ndk参考:https://www.jianshu.com/p/abdad7fd1367

(3)配置ubuntu环境变量

在sdk manager中将需要的组件下载完毕后,设置以下几个目录到环境变量中:sdk/emulator/platform-tools/ndk/avd

vim ~/.bashrc

export ANDROID_HOME=/xxx/xxx/android-sdk-linux
export PATH=$ANDROID_HOME/emulator:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/ndk/xxx:$PATH
export PATH=~/.android/avd:$PATH

source ~/.bashrc

1.7 使用emulator

android avd命令可以启动android device manager

android -avd xxx 指定xxx镜像启动模拟器(使用AVD manager创建完虚拟设备后,在~/.android/avd目录下会有xxx.ini)

模拟器相关命令参考:https://developer.android.com/studio/run/emulator-commandline?hl=zh-cn

1.8 加载低版本kernel

最新版的android studio和sdk均不支持加载版本<3.10的内核,想加载低版本内核做实验的话,可使用如下链接提供的sdk。

http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

android - 命令,启动android sdk管理器

android avd - 命令,启动avd manager

emulator -avd xxx - 命令,跟最新版相同

2 编译goldfish内核

假设git clone的goldfish工程在~/kernel/goldfish目录下

cd ~/kernel
cp -r goldfish goldfish44
## 创建一个out44目录,用来存放编译输出
mkdir out44
cd goldfish44
git branch -a
## 从goldfish中拉出kernel4.4分支
git checkout -b android-goldfish-4.4-dev remotes/origin/android-goldfish-4.4-dev
## ~/kernel/goldfish44/arch/arm64/configs目录下有编译配置文件defconfig和ranchu64_defconfig,我们使用ranchu64_defconfig
## 在goldfish44目录下指定好配置文件
make ARCH=arm64 O=../out44 ranchu64_defconfig
make ARCH=arm64 O=../out44/ -j16

编译完成后,如果需要更改配置(如允许内核加载自定义ko模块),操作如下

## 在goldfish44目录下执行
## 图形化配置内核选项
make ARCH=arm64 O=../out44/  menuconfig
## 配置变化的时候执行清理一下
make mrproper
## 开始编译
make ARCH=arm64 O=../out44/ -j16

编译生成的内核文件在如下目录:~/kernel/out44/arch/arm64/boot/Image.gz

3 使用编译的内核启动avd虚拟设备

执行以下命令以自编译的内核启动虚拟机

emulator -avd KernelTest -no-window -no-audio -show-kernel -kernel ~/work/kernel/out49/arch/arm64/boot/Image.gz -no-snapstorage