车载系统开发—【car-aosp】开发环境配置
迪丽瓦拉
2025-06-01 20:28:06
0

简述

基于Android系统作为一个庞大的开源项目,除了一些谷歌自带服务之外,其他所有代码均以AOSP(Android Open Source Project)的形式开源。对于框架开发者来说,熟悉AOSP是必不可少的知识。即使是普通开发者,为了优化代码或者是调用一些系统底层API,有时也需要参考底层源码。那么就需要搭配一个合适的源码阅读环境了。

WSL2环境装置 (Windows)

*CPU虚拟化是装置的前提环境,能够在使命管理器-功能-CPU检查是否显示虚拟化已启用

*wsl默许会装置到C盘,假如C盘容量不行300G,则自行查阅资料将其迁移到其他契合条件的硬盘

初度运用WSL能够运用wsl --install直接初始化默许装置Ubuntu体系,假如现已装置过其他发行版别,能够运用wsl --list --online + wsl --install -d挑选Ubuntu发行版进行装置,装置完成后依照提示装备账号密码进入体系,如有其他问题请参阅官方文档

修正WSL内存和CPU核心

默许状况下Windows给WSL的装备并不是很高,咱们能够在C:/Users//目录下创立.wslconfig文件(注意无后缀名,window或许自己增加txt后缀,请注意区分),

 [wsl2]processors=8memory=16GBnestedVirtualization=true

上述核心数和内存大小请依照本机实际状况编写,可是依照Google要求,内存至少为16G,修正成功后在Windwos指令行履行wsl --shutdown以生效,在重启后的Ubuntu指令行履行 free -h和 cat /proc/cpuinfo| grep “processor”| wc -l分别检查内存和cpu是否契合

修正软件源

装备软件源能够让你更快的下载编译所需的东西,在Ubuntu中运用下面的指令进行软件源的替换

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list

然后运转 sudo apt-get update 更新索引以生效。

AOSP编译环境建立以及下载源码(Ubuntu)

装备环境

在Ubuntu中履行下述指令以装备建立环境

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

履行 sudo apt-get install repo来装置Repo东西

履行sudo ln -s /usr/bin/python3 /usr/bin/python将python链接到python3

装备账号

运用下面的指令以装备环境,读者对google的奉献会以以下账号信息提交,Google要求Email信息有必要是Google账号。

git config --global user.name Your_Name
git config --global user.email you@gmail.com

下载源码

由于网络限制,咱们假如直接下载Android源码会遇见各式各样的网络问题,即便是咱们有一个”通道”能够处理网络问题,可是由于Android源码太大,”通道”流量不行等也会阻止下载。所以咱们要利用好国内的镜像服务,运用镜像下载全量的数据,之后假如想及时的获取增量或许想要repo upload提交源码,能够运用咱们的”通道”进行,假如没有”通道”那只能等候镜像站定时更新机制,并且不能提交源码。

咱们挑选运用Tuna镜像站下载AOSP Master源码,以下是具体步骤

  1. 履行export REPO_URL=‘https://mirrors.tuna.tsinghua.edu.cn/git/git-repo’,由于repo东西在履行前会先去https://gerrit.googlesource.com/git-repo下载更新,由于网络限制,所以将其替换成Tuna镜像会提高下载速率
  2. 创立存储目录,目录名随意mkdir aosp && cd aosp
  3. 初始化库房 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
  4. 上述库房下载的是master分支,假如你想下载某一特定版别能够依据这份文档传递-b参数指定分支,例如repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r23
  5. !注意!挑选陈腐tag或许不包括下文所述东西链,例如源码导入东西AIDEGen在Android10以上源码才可运用,Cuttlefish或许在旧版别中还未支持等,本文在Master分支测试通过
  6. 履行repo sync -j4,-j4代表了并发数,超越4镜像站会呈现503限制
  7. 拉取源码成功

上述操作仅仅是将镜像站的代码复制了下来,假如想要给AOSP提交奉献,或许获取今天内的改动,那么镜像站就不那么即时了,假如有这方面的要求能够挑选装备署理并设置官方源,这样就建立了和AOSP的交互环境

署理装备并设置官方源(可选)

以笔者运用的Clash为例,在WSL中装备署理分两种状况

Windows装置Clash软件并在WSL中运用

  1. Windows发动软件并挑选支持局域网共享(ALL LAN)并记下软件设置的端口port(clash:7890)
  2. WSL中运用cat /etc/resolv.conf得到namespce的IP
  3. WSL中运用export ALL_PROXY="http://namespce_ip:port"设置署理

WSL中装置clash软件

  1. 发动软件,并获取端口
  2. 运用export ALL_PROXY=“http://localhost:port”

署理装备成功后理论上咱们就能够访问 https://android.googlesource.com/platform/manifest了,咱们能够运用vim修正 .repo/manifests.git/config文件,将其下的一切https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest替换成 https://android.googlesource.com/platform/manifest 然后再次履行repo sync即可

构建源码(Ubuntu)

以下指令全部在aosp根目录下运转

设置环境

运用envsetup.sh脚本初始化环境:source build/envsetup.sh

该脚本为当时环境注入了东西,编译目录,编译产品等变量,关闭终端后会失效,之后介绍的一切指令都是履行source build/envsetup.sh指令之后,进入aosp目录之后,您应该一直履行一下该脚本

挑选方针

履行lunch弹出菜单挑选合适的类型

  • 假如您具有Pixel系列手机,请遵从官方文档挑选类型,并需要下载私有驱动到aosp目录(!重要!),请参阅文档
  • 假如是跟随本教程运转虚拟机,请挑选 lunch aosp_cf_x86_64_phone-userdebug类型,其间cf就代表Cuttlefish,说明本次构建的产品是专门给Cuttlefish来运用的

构建

履行m指令构建Android,并等候成功构建,这里会十分慢十分慢…

运转

请确保您的电脑体系是Windwos11,假如非Windows11请疏忽本章,并关注下一篇文章源码开发检查环境建立相关

检查嵌套虚拟化(Ubuntu)

1.请检查 nestedVirtualization=true 是否存在WindowsC:/Users//.wslconfig文件中 2.在Ubuntu中运用sudo apt install cpu-checker并运用kvm-ok指令检查是否可用,假如不可用,或许WSL版别或许Windows版别不对。

构建WSL2内核以支持Cuttlefish(Ubuntu)

WSL2-Linux-Kernel是开源的,咱们能够很简单的获取他,下面以linux-msft-wsl-5.15.83.1为例,展现构建流程

  1. 装备源码构建环境sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc
  2. 创立目录并下载源码mkdir ~/kernel_wsl && cd ~/kernel_wsl && wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.83.1.tar.gz,其他版别请检查WSL2-Linux-Kernel Github Release
  3. 解压并将目录切换到源码目录tar -xvf linux-msft-wsl-5.15.83.1.tar.gz 并进入到解压后的目录cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.83.1/
  4. 运用微软的构建装备cp Microsoft/config-wsl .config
  5. 履行 make menuconfig 微调参数
  6. 修正Virtualization-> KVM for Intel/ KVM for AMD 两个全部点击M键将其编译成模块

  1. 修正Processor type and features -> Linux guest support -> KVM Guest support 点击Y选中

  1. 修正Device Drivers > VHOST drivers >vhost virtio-vsock driver 点击M将其编译成模块

  1. 运用左右键移动到Save,依照提示保存并最终Exit
  2. 履行make -j8编译内核
  3. 履行sudo make modules_install装置内核模块
  4. 将内核bzImage复制到C盘用户目录下和.wslconfig相同位置!别忘记修正! cp arch/x86/boot/bzImage /mnt/c/Users//bzImage
  5. 在Windows中修正.wslconfig装备内核,最终.wslconfig如下所示,!别忘记修正! [wsl2] processors=8 memory=16GB nestedVirtualization=true kernel=C:\Users\\bzImage
  6. 在Windows指令行履行 wsl --shutdown并重启wsl
  7. 在Ubuntu中挂载内核模块sudo modprobe kvm和sudo modprobe vhost_vsock以及sudo modprobe kvm_intel
  8. 再次检查kvm-ok 和 lsmod,会发现kvm不报错lsmod包括vhost_vsock和kvm即可

运转Cuttlefish

再次将目录切换到aosp目录下,履行source build/envsetup.sh以及lunch aosp_cf_x86_64_phone-userdebug, 然后履行launch_cvd --start_webrtc=true即可敞开服务,检查日志在Windwos浏览器输入网址,即可操作Cuttlefish

ADB服务发现

由于Adb服务默许检测5555端口,而Cuttlefish敞开的服务纷歧定是5555, 1.Ubuntu Shell履行adb devices取得port,然后将其转发到5555端口adb forward tcp:5555 tcp:6520,Windows端即可发现服务

2.Ubuntu Shell履行adb devices取得port, 然后在Windows端指定端口adb connect localhost:6520

总结

至此,咱们现已成功编译并运转了AOSP,凭借Cuttlefish服务,咱们运用宿主的浏览器即可操作虚拟机,并且能够运用adb衔接服务。限于篇幅,下一篇文章将讲述怎么运用AIDEGen将源码导入Windows端的Android Studio,由于Wslg的功能和体会并不能让咱们满意,所以将Android Studio跑在WSL2并不是一个正确的挑选,何况他的渲染并不好。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...