使用WLS2在Windiows 10上玩AOSP踩坑

使用WLS2在Windiows 10上玩AOSP踩坑

关键词: WSL2、Windows Terminal、ADB、虚拟磁盘、zsh、VScode、CUDA

记录WSL2配置环境时的一些注意事项,旨在补充使用细节,非WSL2安装、AOSP编译教程,配置好后即可十分流畅的玩耍,尽管win10上的wsl2使用起来还是有些别扭,但个人非常不习惯win11。

本文命令会在powershell和wsl2之间反复切换

技巧:Windows Terminal 使用时CTRL+Shift+P进入命令,下滑看到拆分窗口选项,可以上下、左右拆分窗口,高效地执行不同的shell命令。

输出一个暴论,使用体验:Windows Terminal + WSL2 >= MacOS > Linux双系统 > Linux虚拟机

年轻时喜欢折腾黑苹果啥的,现在老了整不动了,黑历史如下

多系统引导背后的知识:磁盘、分区、文件系统、GPT、UEFI - Kryo - 博客园 (cnblogs.com)

AOSP的下载和编译、Android Studio For Platform(ASFP)的使用请参考其他文章。需要注意的是 WSL1 不支持AOSP编译,请勿浪费时间。

编译AOSP和使用ASFP浏览代码,WSL2 建议Windwos机器48G内存起步,给WSL2分配32GB以上。

扯的有点远了,列出目录,后面想到一些点会补充:
1、WSL2使用ADB
2、挂载磁盘
3、GUI问题
4、代理问题
5、配置zsh小技巧
6、迁移wsl2安装目录
7、串口
8、VScode查看uboot和kernel源码
9、CUDA
Reference

1、WSL2使用ADB

下面介绍如何在wsl2里面使用adb连android设备。

安装usbipd这里直接略过,可自行搜索安装,注意对应usbipd版本和wsl2内核版本。

Windows上执行usbipd list

vbnet 复制代码
Connected:
BUSID  VID:PID    DEVICE                                     STATE
1-2    0b05:19af  AURA LED Controller, USB 输入设备        Not shared
1-8    0b05:1a16  Realtek USB Audio, USB 输入设备          Not shared
1-14   8087:0026  英特尔(R) 无线 Bluetooth(R)              Not shared
1-18   2207:0006  Android ADB Interface                   Attached
5-3    046d:c09d  USB 输入设备                             Not shared
5-4    258a:002a  USB 输入设备                             Not shared
7-4    0403:6001  USB Serial Converter                    Not shared

官方教程用的busid来挂载,但是每次插拔设备后busid都可能变化,这里推荐用 -i vid:pid的参数来挂载。

把USB设备挂载到WSL2,执行ps命令前需要关闭windows上的Android Studio等使用adb的程序,避免设备被占用,如果命令出现提示重启生效的黄色警告,可以忽略

powershell 复制代码
#以下命令需要在Window管理员下运行
usbipd bind -f -i 2207:0006
usbipd attach --wsl --hardware-id 2207:0006

执行完毕后,就可以在wsl2里面使用usb设备了

yaml 复制代码
$lsusb                              
Bus 002 Device 002: ID 2207:0006 Fuzhou Rockchip Electronics Company rk3399-Android11
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

如果不再使用,用下ps面命令还原为windows使用USB设备,这里比较坑的是如果不从wsl2里面卸载usb,windows睡眠唤醒后usb设备会在wsl2里面卡死

powershell 复制代码
#以下命令需要在Window管理员下运行
usbipd unbind -i 2207:0006
usbipd detach -i 2207:0006

2、挂载磁盘

在repo拉去aosp源码前,创建一个单独的磁盘来保存,建议不定期备份wsl2

不建议直接在wsl2系统的磁盘里放代码等资源,建议把aosp源码或者其他git项目放在独立磁盘。

1、Windows + X打开磁盘管理,选择任意磁盘,点击操作创建虚拟硬盘,选择VHDX和动态扩展,大小500G(看你需求,编译AOSP推荐不小于500G)

2、K:\WSL\EXT\android11.vhdx 是我创建的磁盘路径,使用ps命令attach:

powershell 复制代码
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path K:\WSL\EXT\android11.vhdx -PassThru | Get-Disk).Number)"

命令返回得到挂载点\\.\PhysicalDrive5,一般创建磁盘后会默认attach到windows,用GET-CimInstance -query "SELECT * from Win32_DiskDrive"命令查询也可以看到虚拟磁盘

3、ps命令挂载到wsl2

powershell 复制代码
wsl --mount \\.\PhysicalDrive5 --bare 

4、wsl2内运行lsblk查看挂载的磁盘为sde,这一步看仔细点,要格式化了

sh 复制代码
# 格式化为ext4
sudo mkfs -t ext4 -i 12000 /dev/sde

5、ps命令从wsl2卸载磁盘

powershell 复制代码
wsl.exe --unmount \\.\PhysicalDrive5

6、再次挂载磁盘到wsl2,挂载目录/mnt/wsl/repo:

powershell 复制代码
wsl --mount \\.\PhysicalDrive5 -t ext4 --name repo

wsl进入磁盘cd /mnt/wsl/repo

7、开机自动挂载磁盘

更改vhdx文件权限,选择用户User(当前用户),编辑权限允许的都勾了

WIN + R后运行shell:startup,创建wsl-startup.vbs文件

vbs 复制代码
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl --mount --vhd K:\WSL\EXT\android11.vhdx", 0

重启可以自动挂载磁盘

3、GUI问题

WSL2安装GUI很简单,只用执行以下命令即可,不建议安装完整的gnome和xface

bash 复制代码
sudo apt install nautilus -y

点一下WIN键看看,wsl2安装的gui程序系统会自动帮你把启动快捷方式放入Windows的启动菜单,直接双击启动即可,完全不需要Linux下的Desktop。

SO

如果GUI显示有问题可以尝试安装mesa驱动:

bash 复制代码
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt-get update && sudo apt dist-upgrade
sudo apt install mesa-utils

4、代理问题(仅Win10需要,Win11有网络镜像模式应该可以不用配置)

4.1、代理服务器配置

WSL2安装后ipconfig.exe查看WSL网络桥接:

arduino 复制代码
以太网适配器 vEthernet (WSL):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::76be:f5ab:fb9b:2a17%52
   IPv4 地址 . . . . . . . . . . . . : 172.19.80.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :

每次Windows系统重启后需要管理员运行命令解除Firewall限制,不然ping不通,如果有能永久生效的方案,请告诉我

powershell 复制代码
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

wsl2内ping 172.19.80.1,如果ping的通执行下面的步骤,ping不同检查网络适配器名字、ip、防火墙

把这几行加到bashrc里面:

bash 复制代码
export hostip=172.19.80.1
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"

4.2、自定义DNS

wsl2编辑/etc/wsl.conf,添加如下配置禁用dns自动生成

ini 复制代码
[network]
generateResolvConf=false

我的/etc/wsl.conf如下

conf 复制代码
[boot]
systemd=true
[network]
generateResolvConf=false
[interop]
enabled=false
appendWindowsPath=false # 不使用window的path执行windows上的程序

编辑/etc/resolv.conf,添加你喜欢的dns服务器,示例:

conf 复制代码
nameserver 114.114.114.114
nameserver 114.114.114.115

wsl --shuntdown 重启子系统,bash进入拉起子系统,看看能不能Google了

5、配置zsh后需要做的工作,直接输入zsh进入WSL

关于zsh的配置文章也烂大街了,关于wsl2配置后,怎么在windows terminal快速以zsh打开参考以下配置:

配置powershell永久别名 原文链接:blog.csdn.net/qq_37186947...

1、首先使用Test-Path $profile查看是否有 profile 文件, 如果显示 flase 则执行2

2、New-Item -path $profile -itemtype file -Force 返回一个目录,去打开编辑这个文件

3、文件添加以下内容

ps 复制代码
function zsh {wsl -d Ubuntu-22.04 zsh}

4、打开管理员powershell,允许执行未签名的脚本

powershell 复制代码
set-executionpolicy remotesigned

5、重新打开一个 Powershell, 别名即可使用zsh进入WSL2的zsh终端

6、如果不想配置以上脚本,可以直接在Windows Terminal里面加一个新的窗口配置:

6、迁移WSL2安装目录

powershell 复制代码
# 导出/备份
wsl --export Ubuntu-22.04 K:\WSL\Ubuntu-22.04\Ubuntu-22.04.tar

# 导入/还原
wsl --import Ubuntu K:\WSL\Ubuntu-22.04 K:\WSL\Ubuntu-22.04\Ubuntu-22.04.tar --version 2

# 迁移完成后还原用户名,不然进入是root用户
Ubuntu-22.04 config --default-user kryo 

7、串口

Windows可以同时运行wsl1和wsl2

sql 复制代码
PS C:\Users\Kryo> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
  Ubuntu-18.04    Stopped         2
  Ubuntu          Running         1

wsl1能直接访问windows对应的com口,minicom可配置如下:

Q: 为什么不直接使用windows上的串口工具?

A: 可能是RockPi4 console 1.5m的波特率太大原因,几乎所有工具都显示乱码,而wsl1下的minicom正常

8、VScode查看uboot和kernel源码

Android内核和其他内核配置差不多,直接参考:

blog.csdn.net/Telly_/arti...

愉快的阅读kernel代码

9、CUDA

没错,这篇文章把CUDA配置也顺便讲了,简单来说,完全不需要再WSL2上配置任何东西,只需要在Windows上装好CUDA驱动,WSL2也能敲nvidia-smi

AND

Reference

1、WSL 中的高级设置配置 learn.microsoft.com/zh-cn/windo...

未完待续

相关推荐
云飞云共享云桌面2 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq2 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮3 小时前
Linux 使用中的问题
linux·运维
dsywws4 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零5 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程6 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
帅得不敢出门7 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
程思扬7 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
sun0077007 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器
wowocpp7 小时前
ubuntu 22.04 server 安装 anaconda3
linux·运维·ubuntu