硬體環境: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)模拟器了
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
- 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
-
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:
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核心調試