安装教程来自微软官网:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
需要先启用“适用于 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,请等待重新启动计算机,然后继续执行下一步。
若要更新到 WSL 2,需要运行 Windows 10。
若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。 更新到“设置”菜单中的最新 Windows 版本。
备注
如果运行的是 Windows 10 版本1903 或 1909,请在 Windows 菜单中打开“设置”,导航到“更新和安全性”,然后选择“检查更新”。 内部版本号必须是 18362.1049+ 或 18363.1049+,次要内部版本号需要高于 .1049。 阅读详细信息:WSL 2 即将支持 Windows 10 版本 1903 和 1909。 请参阅疑难解答说明。
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行:
PowerShell复制
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新启动 计算机,以完成 WSL 安装并更新到 WSL 2。
下载最新包:
备注
如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo | find "System Type"
。 警告: 在非英语 Windows 版本中,你可能需要修改搜索文本,例如在德语中为 systeminfo | find "Systemtyp"
。
运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)
备注
有关详细信息,请参阅 Windows 命令行博客上的文章对更新 WSL2 Linux 内核的更改。
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
PowerShell复制
wsl --set-default-version 2
打开 Microsoft Store,并选择你偏好的 Linux 分发版。
单击以下链接会打开每个分发版的 Microsoft Store 页面:
在分发版的页面中,选择“获取”。
首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。
然后,需要为新的 Linux 分发版创建用户帐户和密码。
因为wsl2 启用了windows自己的虚拟机功能,如果你有vmware pro 12等虚拟机开启了将可能会无法启动,wsl 1则不影响。
vmware pro 12提示错误:该主机cpu类型不支持虚拟化性能计数器,开启模块VPMC的操作失败,未能启动虚拟机。
解决方案:
解决方案:
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
默认镜像源是国外的,没法用,安装软件会失败或者非常慢,需要替换镜像源:
教程参考 https://blog.csdn.net/yfxhao123/article/details/110491251
源代码下载
打开一个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
更新软件源
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 编译结果,大功告成!!!
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
-system指定system.img
-data指定userdata.img
-ramdisk指定ramdisk.img
-kernel指定内核映像
我的例子:
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 安装的unbutu系统前缀是 \\wsl$ 在filename一栏输入 \\wsl$\ 回车就可以看到AOSP系统源码根目录了,导入就可以看代码了,又能用命令编译,又能用sourceInsight 看代码,确实好多了。不过调试很麻烦,需要sdk的模拟器加载img进行调试。不如ubutu虚拟机里方便,做个实验尝试一把。微软是越来越开放了,wsl2就是一个例子,完全模拟了系统调用,可以完整编译通过!