windows10搭建Linux子系统WSL2及winnfsd服务

1 安装WSL2子系统#

1.1 下载安装#

进入windows Store,搜索Ubuntu,下载:
image

1.2 开启依赖#

右键windows左下角->应用和功能->相关设置-程序和功能->启用或关闭windows功能。勾选适用于Linux的windows子系统和虚拟机平台(WSL2需要)选项:
image

也可以直接在powershell中输入如下两条指令开启:

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

1.3 启动WSL Ubuntu#

wsl是windows控制Ubuntu镜像的工具。

1.3.1 查看版本为WSL2#

安装完成后,启动Ubuntu,会提示创建用户。在powerShell中输入:

1
wsl -l --all -v

image

可以看到版本为wsl2。如果不是wsl2,请按照下面方式升级:

1
wsl --set-version Ubuntu-20.04 2

提示需要更新内核组件,我们这里直接下载linux内核包进行安装:

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

使WSL 2成为你的默认体系结构:

1
wsl --set-default-version 2

1.4 导出Ubuntu到D盘#

默认会安装到c盘:C:\Users\robin.lee\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc

image

1
2
3
4
wsl --shutdown //关闭虚拟机
wsl --export Ubuntu-20.04 D:\wsl-ubuntu20.04.tar //导出打包到D:\wsl-ubuntu20.04.tar
wsl --unregister Ubuntu-20.04 //注销当前分发版
wsl --import Ubuntu-20.04 D:\wsl2-ubuntu20.04 D:\wsl-ubuntu20.04.tar --version 2 //重新导入并安装WSL2到指定目录

导出完成后,在相应磁盘路径下即可看到文件夹:
image

可以删除tar文件,也可保留,方便损坏后重新导入tar文件。

1.5 wsl2与windows相互访问#

1.5.1 wsl2访问windows#

直接在ubuntu中访问/mnt/下磁盘挂载目录即可:
image

1.5.2 windows访问wsl2#

直接在资源管理器中输入\\wsl$ 即可:

1
\\wsl.localhost\Ubuntu

image

为了方便,固定到快速访问。注意这是不能再透过/mnt目录访问自己,如c,d盘:
image

1.6 vhdx虚拟磁盘瘦身#

由于WSL2使用虚拟硬盘(VHD)存储linux下的文件,随着Linux下文件越来越多,占用空间也会不断增长。但是,在Linux中减少文件占用,WSL却没有相应的自动减少硬盘空间的占用。如下可以看到vhdx虚拟磁盘文件很大。
image

1.6.1 diskpart#

执行diskpart,会弹出一个cmd窗口:输入如下命令即可完成瘦身。
image

1
2
3
4
select vdisk file="D:\WSL\Ubuntu2004\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk

image

1.7 连接USB设备#

https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb

1.8 美化终端#

1.8.1 windows terminal#

原生的Ubuntu窗口还是low了点,字体和字符编码支持得都不是很好。可以进入windows的应用商店下载windows terminal:
image

启动后界面如下,可自定义配色和语言字体等个性化设置。
image

2 winnfsd-windows搭建nfs服务#

2.1 下载运行winnfsd#

下载windows nfs服务Release 2.4.0 · winnfsd/winnfsd · GitHub,直接运行,选择要导出的目录:

1
2
.\WinNFSd.exe D:\code\
Usage: WinNFSd.exe [-id <uid> <gid>] [-log on | off] [-pathFile <file>] [-addr <ip>] [export path] [alias path]

wsl子系统默认是通过虚拟网卡NAT模式转接到笔记本的网卡上的,所以wsl是可以上网的:
image

目前wsl只支持一张虚拟网卡,也就是说wsl系统要上网和要和板子通信两者只能取其一,但是wsl系统中可以随意访问windows文件系统,所以可以在windows上搭建NFS服务,然后直接在wsl系统中访问windows导出的共享文件夹,这样就能同步更改到板子上了。

比如我们把D:\code作为开发目录,windows和wls都能访问,又能挂载到板子上。

2.2 配置Windows网卡和开发板互通#

windows电脑的WIFI网卡上网, 以太网卡作为局域网和板端互通。

配置网卡ip;(网络适配器中找到对应网口的以太网卡,配置静态ip和网关)

2.3 挂载windows目录到板子#

1
mount -t nfs -o nolock 192.168.1.100:/D/code /mnt/nfs

这里挂载d盘的code文件夹,注意D一定要大写。

这样D/code就挂载到了板端。同样D/code下可以在wsl下进行代码编辑编译浏览,编译好之后直接可以切到板端去运行测试。