基于Windows11的WSL2 mirrored模式搭建嵌入式Linux开发环境

前言

之前在搭嵌入式Linux开发环境时踩了不少坑,因为自己用的是Windows11的WSL2,没有使用Vmware虚拟机,在新版的WSL2网络模式还没有看到相关文章,故整理总结一篇。我使用的开发板是IMX6ULL,系统是最新版的Windows11系统和最新版的WSL2,使用最新的mirrored网络模式,可以省去设置桥接模式繁琐的步骤,接下来会分为NFS搭建以及交叉编译工具链搭建两部分。

NFS搭建

NFS搭建的最终效果是Windows主机、WSL2和开发板能互ping,并且能共享同一文件夹。

NFS(网络文件系统,Network File System)是一种允许不同系统和网络上的计算机之间共享目录和文件的协议。通过NFS,用户和程序可以像访问本地存储一样访问远程文件系统,这使得文件共享变得非常方便。NFS是由Sun Microsystems在1980年代开发的,现在已经成为UNIX和Linux操作系统中广泛使用的标准协议之一。

串口配置

在搭建NFS之前,需要先能在开发板上执行命令,这就需要用到串口。我的IMX6ULL开发板使用的是USB串口,先用USB将开发板与主机连接起来,然后启动开发板。

安装串口工具

这里介绍5款串口工具,我使用的是MobaXterm

  1. mobaXterm
    • mobaXterm是一个功能丰富的远程计算工具,它不仅支持串口通信,还包括SSH、Telnet、RDP等多种网络协议。mobaXterm集成了X11服务器,可以方便地进行图形界面的远程操作,是功能最全面的选项之一。
  2. COMTool
    • COMTool是另一种串口调试工具,它支持更多高级功能,如数据分析、数据监控和自动化测试脚本等。COMTool通常用于更复杂的串口通信需求,适合于需要详细数据记录和分析的场景。
  3. XCOM
    • XCOM(不要与同名游戏混淆)也是一个串口通信工具,功能类似于SSCOM,通常用于串行通信测试。它提供了基本的数据发送和接收功能,并允许用户配置串口的各种参数。
  4. SSCOM
    • SSCOM是一款简单的串口通信软件,主要用于Windows操作系统。它可以用来调试和测试串口设备,支持串口数据发送、接收和显示。SSCOM界面简洁,使用方便,但功能相对基础。
  5. minicom/picocom
    • minicom 和 picocom 都是Linux系统下的串口通信工具。minicom界面类似于DOS操作系统下的通信程序,提供丰富的配置选项和脚本功能。picocom则更为简洁,旨在提供轻量级且易于使用的串口通信功能。这两个工具都非常适合在Linux环境下进行串口设备的调试和数据传输。

安装完成后,点击Session->Serial,选择你的串口Serial port,波特率115200,数据比特为8,停止位为1,如图:

image-20240520210701970

设置后,就可以登录开发板了。

NFS配置

接下来进行NFS的配置,步骤如下。

开发板连接

首先,用网线连接开发板和主机,查看网卡的状态,打开设置->网络和Internet->高级网络设置,可以看到以太网的网卡的状态为已启用,说明开发板连接主机成功。

安装WSL2

安装WSL2的步骤比较简单,这里省略,推荐使用Ubuntu22.04系统,安装成功,在最新版的Windows11中,WSL2默认为mirrored网络模式,这里介绍下什么是mirrored模式。

image-20240520211726176

上图是我从微软官方截图关于mirrored网络模式的介绍,我来总结下这个模式的优势,比传统的NAT模式和桥接模式都更好,优势如下:

  1. 同一子网:在 mirrored 模式下,WSL2 虚拟机与 Windows 宿主机位于同一个网络子网内。这意味着两者之间可以直接通信,不需要额外的 NAT 配置。
  2. 简化的网络访问:从宿主机访问 WSL2 虚拟机的网络服务更加简便,不需要配置端口转发。
  3. 统一的 IP 地址:WSL2 虚拟机可以直接使用宿主机的 IP 地址,从而使得网络配置更为简单统一。
  4. 服务发现:由于两者在同一子网内,可以更容易地进行网络服务发现,例如通过 mDNS 或其他服务发现协议。

有了这个模式,我们就省去了设置WSL2的网络,因为WSL2和主机是公用一个网络。

设置网卡

接下来,要让主机、WSL2、开发板在同一网段中,这里我使用192.168.5.x的ip网段。

先设置开发板的IP地址:

# 编辑
vi /etc/network/interfaces

# 加入下面这个文本
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.5.9
netmask 255.255.255.0
gateway 192.168.5.1

# 重启网络服务
/etc/init.d/S40network restart

# 检查是否配置成功
ifconfig

接着设置以太网网卡的IP:

打开设置->网络和Internet->高级网络设置,点击以太网网卡,点击编辑,找到lnternet 协议版本 4 ,属性,设置成如下:

image-20240520212550263

设置完成后,打开Power shell或者命令行提示符,输入ipconfig,可以看到以太网适配器网卡的IPv4地址已经变成192.168.5.10。打开WSL2,输入ifconfig,可以看到对应的网卡的地址也变成了192.168.5.10,ping一下baidu.com,发现也可以ping通。

接下来,在主机或WSL2 ping一下开发板的ip地址192.168.5.9,发现是可以ping通的,说明网卡设置成功,接下来进入NFS配置阶段。

安装NFS并配置

打开WSL2,我使用的Ubuntu22.04,输入下面的命令安装nfs程序。

apt update

apt upgrade

apt install nfs-common nfs-kernel-server rpcbind

安装成功后,由于WSL2默认没有开启systemctl,nfs服务不会启动,输入下面命令来打开

# 编辑并创建wsl.conf文件
vim /etc/wsl.conf

# 添加如下
[boot]
systemd=true

退出保存,重启WSL,在powershell中,输入下面的命令

# 关闭wsl
wsl --shutdown

# 启动wsl
wsl

之后,在Ubuntu中,输入systemctl list-units --type=service,可以看到nfs-server.service为running状态,说明启动成功

/root(root用户的家目录)创建一个nfs的目录,接下来来添加nfs配置:

# 编辑并创建
vim /etc/exports 

# 添加下面这行
/root/nfs *(rw,sync,no_subtree_check,no_root_squash)

保存之后,进行nfs共享文件夹,touch 1.txt创建一个文本文件,在开发板挂载文件系统,输入mount -t nfs -o nolock,vers=3 192.168.5.10:/root/nfs /mnt,在输入df,可以看到已经挂载成功,并在/mnt目录看到1.txt文件,自此,NFS搭建成功~

开发板优雅挂载NFS

每次开发板重启之后,就得输入一遍mount命令来挂载,太繁琐了,我们可以编写一个shell脚本来解决。在登录用户时,Linux会执行一些shell脚本,包括如下:

  1. /etc/profile:这是一个全局配置文件,适用于所有用户。它在每次用户登录时都会被读取。主要用于设置系统范围的环境变量和启动程序。
  2. /etc/profile.d/:这是一个目录,包含了许多脚本,这些脚本也会在登录时被执行。通常用于分离不同的配置文件,使其更易于管理。
  3. ~/.bash_profile:这是用户特定的配置文件,当使用Bash作为登录shell时,会读取这个文件。用户可以在这里设置个人的环境变量和启动程序。
  4. ~/.bashrc :这个文件通常用于交互式非登录shell,但在很多情况下,它会被~/.bash_profile或~/.profile调用。因此,许多用户会在~/.bash_profile中添加source ~/.bashrc来确保登录时也读取这个文件。
  5. ~/.profile:这是一个与~/.bash_profile类似的文件,用于由sh或其他POSIX兼容shell读取。它也可以用于Bash。如果系统上没有~/.bash_profile,它会读取~/.profile。

我们可以在这些shell脚本执行自己的shell脚本。由于我的开发板没有找到.bashrc文件,因此我把脚本放到/etc/profile.d/目录下,步骤如下

# 进入该目录
cd /etc/profile.d/

# 创建并编辑mount_nfs.sh脚本文件
vi mount_nfs.sh

# 放入下面内容
# Check network connectivity and mount NFS if network is available
ping -c 3 192.168.5.10 > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Network is up, mounting NFS..."
    mount -t nfs -o nolock,vers=3 192.168.5.10:/root/nfs_folder /mnt
    echo "Mounted~"
else
    echo "Network is down, cannot mount NFS."
fi

# wq退出保存,重启开发板
reboot

登录后,如果能ping通且nfs服务开启,就会显示Mounted,表示挂载成功。

交叉编译工具安装

接下来进行交叉编译工具链的安装,WSL的Ubuntu默认使用的是x86的gcc编译器,而我们的开发板基本都是arm架构,因此要安装交叉编译工具链来编译我们的源码,这里推荐使用Linaro GCC编译器,下载地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf

在windows11下载.tar.xz结尾的压缩包,然后利用WSL的共享文件系统把压缩包放到Ubuntu系统的/root目录下,执行下面命令解压:

tar -vxf gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz

编辑~/.bashrc文件,加入下面这行:

export PATH=$PATH:/root/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

之后,终端输入arm加一个Tab键,会显示arm-linux-gnueabihf-xx,说明安装成功,可以愉快的进行编译了。

结尾

配置完NFS和交叉编译工具链之后,就可以尝试编译自己的C源码,并放到开发板上运行。我目前使用的是vscode配合clangd+wsl2插件作为我的IDE,开发起来很爽,后续等有时间再出一篇相关的配置文章~

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到美化和搭建Linux开发环境时, VS Code,WSL和Windows Terminal都是非常有用的工具。 首先,VS Code是一款流行的开源代码编辑器,可通过安装各种插件进行美化。你可以选择喜欢的主题和语法高亮方案,以配合你的个人喜好。 其次,WSL(Windows Subsystem for Linux)是一种在Windows上运行Linux二进制文件的兼容层。通过安装WSL,你可以在Windows中使用真正的Linux发行版,如Ubuntu或Debian。这样,你就可以在Windows系统中体验和开发Linux环境下的应用程序。 最后,Windows Terminal是Windows新的命令行终端。它支持多个选项卡以及各种自定义设置,如调整配色方案、字体大小和字体类型等。你可以使用Windows Terminal将多个终端会话放置在一个窗口中,从而提高工作效率。 要搭建Linux开发环境,首先你需要安装WSL以及喜欢的Linux发行版。然后,你可以通过安装VS Code插件和扩展来优化你的开发体验。安装一些常用的扩展,如Python、C++或Node.js,以根据你的需求进行开发。 当你需要在Windows环境中执行Linux命令时,你可以打开Windows Terminal,并选择WSL作为默认终端。这样,你就可以通过Windows Terminal运行和管理你的Linux环境。 总结起来,VS Code,WSL和Windows Terminal是一些功能强大且易于使用的工具,它们可以帮助你美化和搭建Linux开发环境。使用这些工具,你可以在Windows中轻松进行Linux开发,并以最佳方式执行命令和编辑代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值