嵌入式开发往往会通过NFS直接挂载WSL中的根文件系统,避免反复多次的程序烧录。
而WSL2目前能够安装的Ubuntu发行版最低为Ubuntu18.04。默认是不支持正点原子开发板上的NFS verson2的。
本文主要介绍WSL2镜像网络模式的配置及Ubuntu24.04中如何修改NFS以支持开发版的挂载。
系统:Win11 23H2
WSL2: Ubuntu24.04
开发板:正点原子 imx6ull
一、配置WSL2 镜像网络模式,实现与Windows共用IP
wsl默认的联网模式为NAT(网络地址转换), 这种方式无法直接与开发板连通。可通过桥接或镜像的方式,实现WSL与开发板的连接。桥接的方式配置起来我嫌麻烦,这里选择更简单的镜像网络的方式。
1. 在C:\Users\xxx目录下新建.wslconfig文件(xxx根据自己的用户名确定)写入:
# Settings apply across all Linux distros running on WSL 2
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
[experimental]
hostAddressLoopback=true
2. 使用管理员权限在 PowerShell 窗口中运行以下命令,以配置 Hyper-V 防火墙设置,从而允许入站连接:
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
3. 最好将电脑的IP配置为静态IP,方便日后开发板的挂载。
配置好IP后重启WSL
wsl --shutdown
wsl
在Ubuntu中通过ifconfig命令,可以看到我们的IP已经与Windows的IP一致,并且可以ping通开发板的IP地址。
二、配置nfs以实现开发板的nfs挂载
1. 准备工作
在Ubuntu中安装nfs-kernel-server及rpcbind,安装前更新最新的包信息索引列表。
sudo apt update
sudo apt-get install nfs-kernel-server rpcbind
2. 创建共享文件
在用户目录下创建nfs文件夹,用于共享,修改 /etc/exports文件, 配置nfs共享规则
cd ~/
mkdir nfs
sudo vim /etc/exports
/etc/exports文件中添加如下内容:
/home/ethan/nfs *(insecure,rw,sync,no_subtree_check,no_root_squash)
- /home/ethan/nfs 为共享文件夹目录(ethan是我的用户名)
- * 代表所有IP都可访问 也可配置为192.168.*来筛选连接的IP
- insecure 选项可以允许客户端使用高于1024的端口进行NFS连接
- rw 配置为允许读写
- sync 配置为同步写入
- no_subtree_check 若输出为一个子目录时,不检查父目录,以提高效率
- no_root_squash 客户端以root登录时,赋予其本地root权限
修改后保存退出,并键入如下命令重新加载exportfs文件
sudo exportfs -ar
3. 解决兼容问题
服务器所用的系统为ubuntu24.04, 默认不支持version2, 可通过cat versions查看支持的版本。
sudo cat /proc/fs/nfsd/versions
可以看到当前服务器对 version2 是不支持的。我们通过修改/etc/default/nfs-kernel-server配置文件实现对v2版本的兼容
sudo vim /etc/default/nfs-kernel-server
RPCNFSDCOUNT="-V 2 8"
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS="-V 2 --manage-gids"
NEED_SVCGSSD=""
RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"
修改内容如上文所示,加入--debug --syslog,以便于连接时出现问题查看打印的日志信息。保存并退出后,重启nfs服务,再次查看版本兼容性,验证是否支持version2。
sudo service nfs-kernel-server restart
sudo cat /proc/fs/nfsd/versions
此时nfs服务器已经支持version2 了。
4. 解决网络问题
检查nfs对应端口,键入如下命令
netstat -a | grep nfs
若如上图所示,tcpheudp的连接都存在则可直接跳过此步。若只有tcp端口没有udp端口,需修改nfs的配置文件 使其支持udp及version2。
sudo vim /etc/nfs.conf
udp=y
vers2=y
配置文件的修改如上文所示,修改后保存退出,并重启nfs服务
sudo service nfs-kernel-server restart
5. 验证
在本地验证,键入如下命令,可以看到本地的nfs共享文件已经可以获取得到
showmount -e 127.0.0.1
在客户端验证,在开发板中键入如下命令
showmount -e <服务器ip>
若可以看到服务器共享的nfs的文件,即成功一大半,挂载时注意配置版本兼容 -o vers=3
mount -t nfs -o vers=3 <server-ip>:<shared-directory> <mount-point>
至此,nfs的配置已完成。