天天看点

Android Automotive虚拟化1 Goldfish AAOS2 CuttleFish AAOS3 Trout4 问题5 参考

硬件环境:x86 PC
软件环境:Glodfish,Cuttlefish,Trout三种Android模拟环境
目标:搭建Android Automotive模拟环境
           

1 Goldfish AAOS

  • 可以在windows上模拟器启动aaos,也可以ubuntu上通过qemu启动aaos模拟器

1.1 windows Android-studio goldfish

  • 1 Android-studio goldfish

    注意:必须要下载android studio canary版本才能更新AAOS的系统镜像,地址为:https://developer.android.com/studio/archive

    打开Android Studio -> 创建虚拟设备-> Select a system image -> x86 Image -> 安装最新的AAOS镜像. 完成后就可启动AAOS 12(API 32)模拟器了

    Android Automotive虚拟化1 Goldfish AAOS2 CuttleFish AAOS3 Trout4 问题5 参考

1.2 Linux Emulator AAOS

  • 1 下载谷歌repo工具,谷歌/清华源都是这个
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo 
           
  • 2 准备编译环境(Android 11可行)
sudo apt-get update
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install -y lib32stdc++6 
sudo apt-get install git
sudo apt-get install libssl-dev
sudo apt-get install libncurses5 
           
  • 3 下载AOSP代码
#不建议下谷歌或清华AOSP,时间太长,老断,直接下载清华的初始化包,约190G
wget -U -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar 
#我已下载到本地,scp [email protected]:/path/aosp-latest.tar
tar xvf aosp-latest.tar #解压初始化包 
#解压得到的 AOSP工程目录,ls啥也没有,只有一个隐藏的.repo目录
cd aosp
#获得master最新代码
repo sync -j4
#后续可以仅checkout代码
#repo sync -l
#获取某个版本代码,参考如下
cd .repo/manifests
git branch -a #查看Android分支
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r8 --depth=1 #如切换到Android 12分支
repo sync -j4 #同步一遍即可得到基于Android 12的完整目录,-j最多4,不然服务器并发受不了503 
           
  • 4 编译
source build/envsetup.sh 
lunch #打开选择菜单
#goldfish模拟器版本,本次用goldfish x86的 
lunch aosp_car_x86_64-userdebug 
#lunch aosp_car_arm64-userdebug
#cultfish模拟器版本
#lunch aosp_cf_x86_auto-userdebug
#lunch aosp_cf_arm64_auto-userdebug
#trout车机版本
#lunch aosp_trout_x86-userdebug
#lunch aosp_trout_arm64-userdebug
make -j4 #开始编译,有问题的话减少-j并发数,可以减少CPU和内存压力
           
  • 5 启动模拟器
#启动模拟器,显示/音频功能OK
emulator -partition-size 1500 
#无界面启动模拟器
emulator -no-window -noaudio > /dev/null 2>&1
           

2 CuttleFish AAOS

  • 说明:Host只能是ubuntu20.04

2 1. 准备环境

  • Android 12 依赖库,其实使用前面A11的依赖一样能编译,已安装忽略,master分支无需安装jdk
sudo apt-get install -y python git zip unzip curl wget llvm git-core gnupg bison flex gperf build-essential make zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc libssl-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl libncurses5
           

2.2 构建运行cultfish

  • 1.检查ubuntu20.04是否支持KVM
ls /dev/kvm
或者grep -c -w "vmx\|svm" /proc/cpuinfo
           
  • 2.构建和安装cultfish-common,重启后会安装驱动和udev规则
sudo apt install -y git devscripts config-package-dev debhelper-compat curl golang;
git clone https://github.com/google/android-cuttlefish;
cd android-cuttlefish;
           

#2.1最新版已无需升级go版本

for dir in base frontend; do
cd $dir
debuild -i -us -uc -b -d
cd ..done
           

#2.2此步骤可能包依赖问题,参考后面编译问题

sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f;
sudo usermod -aG kvm,cvdnetwork,render $USER;
sudo reboot
           

#2.3 Arm飞腾需要安装VSOCK驱动

sudo dpkg -i *.deb
sudo reboot 
           
  • 3下载AOSP代码
#Master. 不能外网的直接下载清华的初始化包,约190G
wget -U -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar 
tar xvf aosp-latest.tar 
#解压得到的 AOSP工程目录,ls啥也没有,只有一个隐藏的.repo目录
#可以外网的下载谷歌AOSP12.1.0_r11. --depth=1只同步最近一次提交
repo init -u https://android.googlesource.com/platform/manifest -b android-12.1.0_r11 --depth=1
cd aosp
#清华源-j最多4,不然服务器并发受不了
#master版本为Linux version 5.15.37-android14
repo sync -j4 
           
  • 4 玩法1. 构建AOSP
#cd .repo/manifest;git branch -a ;repo init -b branch;查看和切换Android分支
source build/envsetup.sh
#cultfish模拟器,虽然我很想编Arm的,不过我是x86服务器,只能编x86的
lunch aosp_cf_x86_auto-userdebug
#lunch aosp_cf_arm64_auto-userdebug 
make -j4
#make dist DIST_DIR=cf_arm64
           
  • 5.运行cultfish
#若想使用qemu -vm_manager=qemu_cli,默认使用crosvm作为vmm
launch_cvd  #启动一个CVD实例
#cvd_status
#stop_cvd
           
  • 6.webrtc访问图形. 默认使用webrtc

    浏览器打开 https://localhost:8443

    Android Automotive虚拟化1 Goldfish AAOS2 CuttleFish AAOS3 Trout4 问题5 参考
  • 7.VNC访问图形

#7.1下载tightvnc viewer (jar file):

https://www.tightvnc.com/download.php 
           

#7.2安装java:

sudo apt install openjdk-11-jre
           

#7.3启动tightvnc ubuntu

java -jar tightvnc-jviewer.jar #use 127.0.0.1:6444
java -jar tightvnc-jviewer.jar -ScalingFactor=80 -Tunneling=no -host=localhost -port=6444
           

#7.4启动tightvnc windows

ip::6444

Android Automotive虚拟化1 Goldfish AAOS2 CuttleFish AAOS3 Trout4 问题5 参考
  • 8 玩法2. 使用CI镜像玩Cuttlefish

    #8.1 谷歌CI http://ci.android.com/ -> aosp_master -> userdebug -> Artifacts. 有cf phone的镜像

    #8.2 下载cvd-host_package.tar.gz和aosp_cf_x86_64_phone-img-xxxxxx.zip

mkdir cf; cd cf
tar xvf /path/to/cvd-host_package.tar.gz
unzip /path/to/aosp_cf_x86_64_phone-img-xxxxxx.zip
#设置环境变量
HOME=$PWD 
#启动vm
./bin/launch_cvd
#远程使用webrtc看图形,打开https://localhost:8443:
           
Android Automotive虚拟化1 Goldfish AAOS2 CuttleFish AAOS3 Trout4 问题5 参考

3 Trout

  • Trout是谷歌面向汽车座舱领域的虚拟化Android,底层全部使用Virtio,目标做到无缝搭配各种Hypervisor,如8155上商用的qnx

    hypervisor;谷歌demo的8155 coqos hypervisor;Trout也可以在PC上模拟,使用qemu/crosvm + KVM这种虚拟化方案。

  • 谷歌的Trout还有点问题,需要设置Vulkan才能运行图形
# 1.下载android源码树,已用前文的清华源下载后可忽略
repo init -u https://android.googlesource.com/platform/manifest -b master --depth=1
repo sync -j4
# 2.构建环境
source build/envsetup.sh
# 2.1编x86或者Arm
lunch aosp_trout_x86-userdebug
#lunch aosp_trout_arm64-userdebug
make -j4 
#make dist DIST_DIR=trout_x86
# 3.编译trout后,运行虚拟机
launch_cvd 
           

4 问题

4.1 cuttlefish-common安装失败

  • 更改ubuntu的源,这里以中科大的为例
sudo vim /etc/apt/sources.list
           
  • 添加国内的源,例如 ustc
deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security multiverse
           
  • 更新源
sudo apt update
           
  • 更新软件
sudo apt-get upgrade
           
  • 安装软件
sudo dpkg -i ../cuttlefish-base_0.9.24_amd64.deb || sudo apt-get install -f;
sudo dpkg -i ../cuttlefish-user_0.9.24_amd64.deb || sudo apt-get install -f;
           

4.2 scrcpy显示

  • scrcpy利用adb把图形显示出来
#编译scrcpy
sudo apt install ffmpeg libsdl2-2.0-0 adb wget gcc git pkg-config meson ninja-build libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libusb-1.0-0 libusb-1.0-0-dev
git clone https://github.com/Genymobile/scrcpy
cd scrcpy/
./install_release.sh
#设备起来后,运行
scrcpy --tcpip=0.0.0.0:6520 
           

5 参考

https://blog.csdn.net/linkwj/article/details/119902108?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-119902108-blog-117474587.pc_relevant_default&depth_1-utm_source=distribute.pc_r

清华AOSP

Goldfish内核调试

继续阅读