天天看點

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核心調試

繼續閱讀