使用WSL配置正点原子i.MX6ull开发环境
安装并启用WSL
强烈推荐使用软件 WSL Dashboard,可以可视化配置WSL
官方安装教程参考WSL安装教程
以管理员身份运行PowerShell,执行命令安装WSL,建议添加--no-distribution不自动下载linux发行版,分开下载
1 | wsl --install --no-distribution |
等待WSL安装完成后,可以使用命令wsl --list --online查看当前有哪些发行版可用:
1 | &: wsl --list --online |
Ubuntu一般是24.04,做嵌入式开发最好不要选择太高的版本,建议用22.04或20.04,20.04最好,
虽然wsl --list --online没显示,但是是可以安装的:
1 | wsl --install Ubuntu-20.04 |
安装依赖和环境
APT包
安装依赖的APT包
1 | sudo apt update |
交叉编译器
使用正点原子官方提供的交叉编译器,位置在百度网盘A盘->5、开发工具->1、交叉编译器-> gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
下载链接:百度网盘提取码:m65i
解压到任意目录:
1 | tar -xzvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz |
将解压出来的/absolute/path/to/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin路径添加到zshrc:
1 | echo "export PATH=\"/absolute/path/to/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin:\${PATH}\"" >> ~/.zshrc |
使用source ~/.zshrc刷新终端环境,然后执行命令测试交叉编译器是否配置好
1 | ❯ arm-linux-gnueabihf-gcc -v |
NFS
NFS是网络文件系统(Network FileSystem),NFS主要用来把 Ubuntu 主机上的目录挂载到开发板,让板子直接运行主机上交叉编译好的程序、甚至用 NFS 根文件系统启动,省掉反复烧写 eMMC/NAND 的麻烦。
安装软件:
1 | sudo apt-get install nfs-kernel-server rpcbind |
创建目录:
1 | mkdir -p ${HOME}/linux/nfs |
编辑文件/etc/exports,在最后一行添加(将zuozhongkai改为自己的用户名):
1 | /home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash) |
重启nfs服务:
1 | sudo systemctl restart nfs-kerner-server |
如果使用的是Ubuntu-22.04及更高版本系统
正点原子提供的uboot2016.03使用的是nfsv2,但是Ubuntu22.04的Linux内核已移除对NFSv2的支持,因此无法正常使用。
如果非要在Ubuntu22.04及以上的WSL系统开发,需要重新编译Linux内核启动NFSv2的支持
参考教程:自行编译内核
在编译内核前修改配置文件Microsoft/config-wsl,在7772行,将
1 | CONFIG_NFSD=m |
改为:
1 | CONFIG_NFSD=y |
保存后再编译内核即可启用NFSv2
编译安装后启动系统,修改配置文件/etc/nfs.conf,
在[nfsd]下面添加
1 | udp=y |
保存后重启nfs:sudo systemctl restart nfs-kernel-server.service
TFTP
tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,
只是 tftp 命令使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。
安装依赖:
1 | sudo apt-get install tftp-hpa tftpd-hpa |
创建目录:
1 | mkdir -p ${HOME}/linux/tftpboot |
修改配置文件/etc/xinetd.d/tftp(将zuozhongkai改为自己的用户名):
1 | server tftp |
修改配置文件/etc/default/tftpd-hpa(将zuozhongkai改为自己的用户名):
1 | # /etc/default/tftpd-hpa |
重启服务:
1 | sudo systemctl restart tftpd-hpa |
USB设备共享
类似于vmware中将设备连接到虚拟机,WSL也可以将usb设备连接到WSL,
参考指南:连接 USB 设备
在 usbipd-win Releases下载最新的.msi安装包并安装
建议使用WSL Dashboard来管理usb设备
CLI使用步骤:
- 查看有哪些usb设备:
usbipd list - 启动指定设备的共享:
usbipd bind --busid 4-4 - 附加到WSL:
usbipd attach --wsl --busid <busid>,此时可在wsl使用lsusb查看到新附加的设备 - wsl中使用完成后,可以直接断开设备,或在windows中使用
usbipd detach --busid <busid>重新连接到windows
网络配置
建议使用Windows11
如果使用的是Windows11,将WSL网络模式设置为mirrored,WSL即可和板卡处于同一个网络,
使用的是Windows10的话需要做额外的配置。
编辑文件/etc/wsl.conf,在[boot]下添加command:
1 | [boot] |
192.168.137.3/24和192.168.137.255改成对应的你要设置的ip和广播地址
在windows网络适配器中选择vEthernet和以太网(与板卡链接的网口对应的适配器),右键选择桥接
然后配置网桥的ip和linux在同一个网段,板卡也要在同一个网段
若WSL丢失172网段的默认路由,则usbipd会失效,请手动添加一个默认路由到windows
桥接后WSL无法联网
由于WSL中设置的网关地址为vEthernet适配器的ip地址,桥接后vEthernet失去ip,因此需要手动将原本vEthernet的IP地址赋予给网桥。
在WSL中使用ip r查看一下当前的默认路由地址,输出有default via 172.19.48.1 dev eth0 proto kernel,
则表示172.19.48.1为原本vEthernet的ip,在网桥的ipv4设置右下角有个高级设置,在里面添加上这个额外的ip
这个ip会在每次启动时动态改变,因此当WSL再次没网时要按上面的步骤重新设置ip