Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

一、Window 10 安装WSL2

安装教程来自微软官网:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

 

步骤 1 - 启用适用于 Linux 的 Windows 子系统

需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。

以管理员身份打开 PowerShell 并运行:

PowerShell复制

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

建议现在转到步骤 #2,更新到 WSL 2,但如果只想安装 WSL 1,现在可以重新启动计算机,然后继续执行步骤 6 - 安装所选的 Linux 发行版。 若要更新到 WSL 2,请等待重新启动计算机,然后继续执行下一步。

步骤 2 - 检查运行 WSL 2 的要求

若要更新到 WSL 2,需要运行 Windows 10。

  • 对于 x64 系统:版本 1903 或更高版本,采用 内部版本 18362 或更高版本。
  • 对于 ARM64 系统:版本 2004 或更高版本,采用 内部版本 19041 或更高版本。
  • 低于 18362 的版本不支持 WSL 2。 使用 Windows Update 助手更新 Windows 版本。

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。 更新到“设置”菜单中的最新 Windows 版本。

 备注

如果运行的是 Windows 10 版本1903 或 1909,请在 Windows 菜单中打开“设置”,导航到“更新和安全性”,然后选择“检查更新”。 内部版本号必须是 18362.1049+ 或 18363.1049+,次要内部版本号需要高于 .1049。 阅读详细信息:WSL 2 即将支持 Windows 10 版本 1903 和 1909。 请参阅疑难解答说明

步骤 3 - 启用虚拟机功能

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。

以管理员身份打开 PowerShell 并运行:

PowerShell复制

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重新启动 计算机,以完成 WSL 安装并更新到 WSL 2。

步骤 4 - 下载 Linux 内核更新包

  1. 下载最新包:

     备注

    如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo | find "System Type"。 警告: 在非英语 Windows 版本中,你可能需要修改搜索文本,例如在德语中为 systeminfo | find "Systemtyp"

  2. 运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)

安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)

 备注

有关详细信息,请参阅 Windows 命令行博客上的文章对更新 WSL2 Linux 内核的更改

步骤 5 - 将 WSL 2 设置为默认版本

打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:

PowerShell复制

wsl --set-default-version 2

步骤 6 - 安装所选的 Linux 分发

  1. 打开 Microsoft Store,并选择你偏好的 Linux 分发版。

    Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

    单击以下链接会打开每个分发版的 Microsoft Store 页面:

  2. 在分发版的页面中,选择“获取”。

    Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。

然后,需要为新的 Linux 分发版创建用户帐户和密码

Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

wsl2注意事项:

因为wsl2 启用了windows自己的虚拟机功能,如果你有vmware pro 12等虚拟机开启了将可能会无法启动,wsl 1则不影响。

vmware pro 12提示错误:该主机cpu类型不支持虚拟化性能计数器,开启模块VPMC的操作失败,未能启动虚拟机。

解决方案:

Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

 

解决方案:

二、迁移WSL2到一个可用空间至少200G的磁盘

wsl2 默认安装在C盘,因为Android 10 系统源码比较庞大,下载加编译需要100多G空间,而且文件系统必须要用linux的,必须在wsl2 unbutu系统内部的文件夹下载编译AOSP,不要下载到window 的文件系统里,比如下载到挂载点 /mnt/d  也就是对应window文件系统的D盘,下载是成功的,但是编译过程会因为跨了window和linux文件系统交叉,会编译出错。系统源码要下载到wsl 虚拟机内部空间里头,所以需要做一个操作:把WSL2迁移到一个空间至少有200G剩余的磁盘里

以下迁移操作均在 powershell 中实现。

1. 查看内核版本
wsl -l --all -v
1
PS  C:\Users\suyxin> wsl -l --all -v
  NAME                   STATE           VERSION
  Ubuntu-20.04           Stopped         2
2. 导出wsl 内核到非系统分区
此处选择 D 盘进行举例。

wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar
3. 注销当前内核
wsl --unregister Ubuntu-20.04
4. 重新安装 WSL
wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar --version 2
5. 设置默认登陆用户
USERNAME 替换成系统中已有的用户名。

ubuntu2004 config --default-user USERNAME
6. 删除中间缓存文件
del d:\wsl-ubuntu20.04.tar


 

三  下载编译 Android 10 

1、unbutu 20 软件源配置

默认镜像源是国外的,没法用,安装软件会失败或者非常慢,需要替换镜像源:

教程参考  https://blog.csdn.net/yfxhao123/article/details/110491251

2、android 10  系统代码下载

 源代码下载

打开一个cmd 窗口:wsl 命令进入虚拟机环境 ,执行如下命令:

# 切换到主目录下

cd  ~/     

sudo apt-get update

#安装git   

sudo apt-get install  git 

# 下载代码,由于安装好的Ubuntu系统python版本是3.x,repo依赖2.x,所以需要先安装2.x版本的

sudo apt install python

# 初始化repo环境

mkdir ~/bin

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo

chmod +x repo

cp repo ~/bin

vim   ~/.bashrc

#添加下面两行环境变量配置 !wq 保存退出

 PATH=~/bin:$PATH

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

#环境变量生效

source ~/.bashrc

#下载到这个目录aosp下面

mkdir  aosp 

cd aosp   

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r36

repo sync -c

#可选操作: 下载成功后,删除.repo,repo隐藏文件会占据比较大的磁盘空间,如果不需要后续同步代码的话,磁盘比较紧张的老铁最好删了repo隐藏文件,省出点空间给编译用

rm -rf  .repo 

3、编译Android 10 系统

更新软件源

sudo apt-get update

安装JAVA 

sudo apt-get install openjdk-8-jdk

sudo update-alternative --config java

# 安装依赖工具链

sudo apt-get install  libncurses5   libgl1-mesa-dev g++-multilib flex bison gperf build-essential  tofrodos python-markdown libxml2-utils xsltproc  dpkg-dev libsdl1.2-dev git-core gnupg flex bison gperf  zip curl zlib1g-dev gcc-multilib   libc6-dev-i386  x11proto-core-dev libx11-dev  libgl1-mesa-dev libxml2-utils xsltproc unzip m4 ccache   

# 进入源代码根目录,编译

source build/envsetup.sh

#选择合适版本的模拟器,我电脑是x86-64  CPU,需要编译一个流畅运行的x86-64架构模拟器系统,这里最好编译 选择24. aosp_x86_64-eng ,编译arm架构的模拟器在WINDOW上运行会非常慢,不建议。 

lunch  24

make  -j10

#等待编译,性能不错的机器大概3个小时左右,性能一般的机器可能要5到6个小时,去干其他事情吧,注意电脑去掉x分钟后自动休眠,去电源管理改#成永不休眠,不然白编译了。

编译报错处理:在终端的编译输出日记中搜索error,fail 字眼,把error,fail 的一行关键字贴到百度或者google搜索,查看报错原因,大部分都是缺少依赖,安装sudo apt-get install  xxxx  依赖即可,重新 make -j8,make默认是增量式编译,已经编译好的不会再编。

本人只遇到一个编译错误  libncurses  加载失败,sudo apt-get install  libncurses5 解决

wsl 2 编译结果,大功告成!!!

Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

 

4、启动模拟器,验证编译成果

wsl2由于是没有界面的unbutu 环境集成,不支持linux下的虚拟机kvm,并不能直接启动带界面的模拟器,我们需要用我们自己windows android  sdk环境下的emulater.exe去加载编译产物img来进行调试。

参考教程:https://blog.csdn.net/dangelzjj/article/details/109267411

1、在android studio中启动avd manager,创建一个和你编译指定版本一致的模拟器,这里是android 10, x86_64的镜像,起个名字如 wsl-android-10,下面要用到这个名字

2、加载wsl2编译好的img到window模拟器中

一般调试只需要system.img和userdata.img

  #擦除已有的avd数据

 your_android_sdk_path\emulator\emulator.exe -avd your_avd_name  -wipe-data
  #模拟器重新加载android image
  your_android_sdk_path\emulator\emulator.exe -avd your_avd_name  -system  "your_android_path\out\target\product\generic_x86_64\system.img" -data  "your_android_path\out\target\product\generic_x86_64\userdata.img"

说明:

your_android_sdk_path替换成window 下的android sdk路径

your_android_path  在powershell中操作:cd  \\wsl$\Ubuntu\  可以看到wsl内的unbutu文件系统。

我的编译产物img目录是   \\wsl$\Ubuntu\root\aosp\out\target\product\generic_x86_64

我的例子:
 

D:\android-sdk\emulator\emulator.exe  -avd wsl-android-10   -wipe-data

D:\android-sdk\emulator\emulator.exe  -avd wsl-android-10     -system "\\wsl$\Ubuntu\root\aosp\out\target\product\generic_x86_64\system.img" -data "\\wsl$\Ubuntu\root\aosp\out\target\product\generic_x86_64\userdata.img"


 

上一篇:WSL对 Windows 与 Linux 之间的集成操作


下一篇:微软对开源的态度