WSL2使用USB转CAN(canable),2023-05

目录

I. 前言

1. 操作系统、USB转CAN

II. 流程

1. canable通过网页webdfu烧录程序

2. WSL2使用windows下的USB接口

3. WSL2使能CAN驱动

①备份原来的WSL,

②查看内核版本

③下载wsl内核源码,切到内核版本的分支

④修改配置文件

⑤编译并安装

⑥把bzImage复制到WSL系统外并且添加配置文件告诉WSL它在哪

4. 测试


I. 前言

在windows下用串口调试电机,但是想用ROS写程序然后用CAN发出来,遂搞一下WSL下面的CAN通讯。WSL2本质上也是虚拟机,当时觉得能装NVIDIA显卡驱动才用的它(并舍弃了Virtualbox),结果显卡驱动还是一堆坑

注意:这个教程只适用于WSL2,不适用于WSL1

1. 操作系统、USB转CAN

win10+WSL2+Ubuntu 20.04

canable(一个开源的usb转can项目,硬件某宝,软件自己烧)老版本,webdfu烧录的slcan或candlelight固件

II. 流程

1. canable通过网页webdfu烧录程序

(1)参考链接:

Access Denied in device.open : Webusb · Issue #184 · WICG/webusb · GitHub

google chrome - Windows 10 WebUSB printing issues with Zebra LP2844 DOMException: Access denied - Stack Overflow

(2)目标:在Updater - CANable网页在线烧录canable的usb转can的固件

(3)报错:SecurityError: Failed to execute 'open' on 'USBDevice': Access denied.

(4)原因:usb驱动不对,用Zadig - USB driver installation made easy更新一下驱动,

①选择插入canable的那个端口,②目标驱动选成winUSB,③点一下install,完事

注意,装完了记的重启windows

2. WSL2使用windows下的USB接口

(1)参考链接:

WSL support · dorssel/usbipd-win Wiki · GitHub

Connecting USB devices to WSL - Windows Command Line(命令操作有点过时)

(2)目标:

让windows下的USB在WSL2下能够识别,比如直接enumerate为一个can设备或者是在/dev下有ttyACM0,要能在lsusb命令下显示

(3)方法:

安装usbipd,windows直接github上这里下载即可;

WSL2里面运行

sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

然后就可以得到上图的结果。在WSL2开启的情况下,在windows下运行usbipd wsl attach --busid 几-几,然后ubuntu下面lsusb就有了

3. WSL2使能CAN驱动

(1)参考链接:

2022-09-WSL2添加CAN模块 - 知乎

wsl2 添加socketCAN 支持 - 知乎

Add SocketCAN support · Issue #5533 · microsoft/WSL · GitHub

(2)目标:

kernel是系统的内核,ubuntu的内核本来是可以支持can通讯的,但是WSL的内核并没有使能它。可以通过修改配置文件并重新编译,然后安装的方式让它支持can,并不需要添加什么额外代码。

(3)方法:

①备份原来的WSL,

出了问题可以再wsl --import回来

wsl --export <current-distro> <temporary-path>\备份叫啥都行.tar或.bak

current-distro是运行wsl --list --verbose后显示的WSL系统的名字,如microsoft store安装的叫Ubuntu-20.04;temporary-path随便设,但是备份一般10G往上,所以建议找个空间大的盘

②查看内核版本

uname -r

输出内核版本,如我是5.15.90.1-microsoft-standard-WSL2

③下载wsl内核源码,切到内核版本的分支

git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
git checkout linux-msft-wsl-5.15.90.1

④修改配置文件

a. 基于系统里面有的配置文件为基础,在git clone得到的文件夹里面创建一个.config文件,不要直接新建

cp /proc/config.gz config.gz
gunzip config.gz
mv config .config

或者(但我没试过)

cp Microsoft/config-wsl .config

b. 图形化方法改配置文件

sudo make menuconfig

上下左右移动,enter下一级,esc退出

在Networking support--->CAN BUS subsystem support下面,按M把他们都变成module,把能选的全选了,按M没反应变不成module的就按y让它变成build-in的;

--->子菜单进去也要都选,子菜单的子菜单里面也要选,不能只选外面那个,里面也要选

 然后最下面save,命名为.config

可以手动改一下文件里面的:CONFIG_LOCALVERSION="-microsoft-standard-WSL2"选项,改成别的随便什么名字,好区分

⑤编译并安装

a. 安装依赖

sudo apt update
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool

b. 编译运行,过程中提示还缺什么装什么即可,我没遇到很麻烦的报错

getconf _NPROCESSORS_ONLN # 看下几个核
sudo make -j 10
sudo make modules_install
sudo make install

c. make install报错

ERROR (dkms apprt): kernel package linux-header-5.x is not supported

参考19.04 - dkms apport error for Kernel 5.x - Ask Ubuntu

Bug #1978824 “ERROR (dkms apport): kernel package linux-headers-...” : Bugs : nvidia-graphics-drivers-510 package : Ubuntu

内核5.x的install的时候要把老子刚刚花了半天装上的the f**king nvidia driver再给卸喽,然后就好了

⑥把bzImage复制到WSL系统外并且添加配置文件告诉WSL它在哪

cp arch/x86/boot/bzImage /mnt/c/Users/windows你的用户名/新的bzImage随便叫什么名字

然后在c/Users/路径下创建.wslconfig文件,以文本方式打开并键入:

[wsl2]
kernel=C:\\Users\\xxxxx\\刚刚bzImage的名字不带后缀

4. 测试

windows下:

wsl --shutdown
wsl # 重启ubuntu

WSL里面:

uname -r                    # 应该能看到自己起的CONFIG_LOCALVERSION
lsusb                       # 要能看到插入的usb转can,是ttyACM0或者gs_usb之类的,不然是usbipd没装对

sudo apt install can-utils
sudo modprobe can
sudo modprobe can-raw

# 如果是slcan的固件
sudo modprobe slcan 
sudo slcand -o -c -s0 /dev/ttyACM0 can0
sudo ifconfig can0 up
ifconfig                    # 应该能看到can0了

sudo ifconfig can0 txqueuelen 1000
cansend can0 999#DEADBEEF   # Send a frame to 0x999 with payload 0xdeadbeef
candump can0                # Show all traffic received by can0


# 如果用的是candlelight
sudo modeprobe gs_usb 
ip link set can0 up type can bitrate 500000
ifconfig                    # 应该能看到can0了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 要在WSL2使用USB无线网卡,首先需要确保已经安装了适当的驱动程序,并将其与主机共享。以下是一些步骤: 1. 首先,在主机操作系统中安装USB无线网卡的驱动程序。这通常是通过制造商提供的光盘或下载的安装程序完成的。 2. 连接USB无线网卡到计算机上,确保它被正常识别并在主机操作系统中工作。 3. 打开WSL2终端,确保已经安装了所需的Linux发行版。如果没有,可以从Microsoft Store或官方网站上找到适合自己需求的发行版,并按照说明进行安装。 4. 在WSL2中,使用以下命令来查看网络接口列表: ```shell ip link ``` 找到对应于USB无线网卡的接口,通常以"wl"或"wifi"开头,并记下接口名称,例如"wlan0"。 5. 打开WSL2终端中的`/etc/wsl.conf`文件,如果该文件不存在,请创建一个新文件,并添加以下内容: ```shell [network] generateResolvConf = false ``` 这将禁用WSL2生成的默认网络配置。 6. 使用以下命令,将Windows主机中的USB无线网卡接口绑定到WSL2: ```shell sudo ip link set <wlan0或网卡接口名称> up sudo dhclient <wlan0或网卡接口名称> ``` 这将使得USB无线网卡在WSL2中可用,并自动获取IP地址。 现在,你应该能够在WSL2使用USB无线网卡进行网络连接了。可以尝试使用`ping`命令来测试连接,或者通过各种网络应用程序进行使用。请注意,WSL2中的网络连接是通过主机操作系统中的网络连接实现的,因此在主机操作系统中配置和管理网络设置可能会对WSL2产生影响。 ### 回答2: 要在WSL2使用USB无线网卡,首先需要确保您的操作系统和WSL2已经正确安装和配置。 在Windows系统中,确保您的USB无线网卡已正确插入并驱动程序已安装。可以通过打开设备管理器来确认网卡是否正常工作,如果看到有关网卡的驱动程序和设备信息,则表示已经安装成功。 接下来,打开WSL2终端,运行以下命令来检查是否可以识别到USB设备: ``` lsusb ``` 如果能够看到USB无线网卡的相关信息,则表示已经成功识别到了该设备。 接下来,需要在WSL2中安装和配置无线网络驱动程序。根据您所使用的Linux发行版不同,可以使用适当的包管理器来安装驱动程序。 假设您的WSL2中运行的是Ubuntu发行版,可以使用以下命令来安装无线网卡驱动程序: ``` sudo apt-get update sudo apt-get install linux-headers-generic build-essential sudo apt-get install firmware-atheros ``` 上述命令将安装Atheros无线网卡的驱动程序。如果您使用的是其他型号的无线网卡,需要根据实际情况进行相应的驱动程序搜索和安装。 安装完驱动程序后,可以使用网络管理工具(如NetworkManager)来配置无线网络连接。运行以下命令来安装NetworkManager: ``` sudo apt-get install network-manager ``` 安装完成后,使用以下命令启动NetworkManager服务: ``` sudo service network-manager start ``` 随后,可以使用NetworkManager的命令行界面(nmcli)或图形化界面(nm-connection-editor)来配置和管理无线网络连接。 通过上述步骤,您应该可以成功地在WSL2使用USB无线网卡进行网络连接。请注意,由于WSL2的网络配置方式与传统Linux系统不同,可能需要一些额外的操作和调试,具体步骤可能因实际情况而有所不同。 ### 回答3: 在WSL2使用USB无线网卡需要以下步骤: 首先,确保你的USB无线网卡与你的操作系统兼容。一些USB网卡需要特定的驱动程序才能在WSL2中正常工作,所以请确保你的网卡已经安装了适当的驱动程序。 接下来,确保在WSL2中安装了适当的网络工具。你可以使用以下命令来安装它们: ``` sudo apt update sudo apt install net-tools iw ``` 在安装完这些工具后,你可以使用`iwconfig`命令来查看无线网卡的状态。运行以下命令: ``` iwconfig ``` 该命令将列出所有的网络设备,包括无线网卡。请记下无线网卡的接口名称,比如wlan0。 然后,使用以下命令来启用无线网卡: ``` sudo ifconfig wlan0 up ``` 接下来,你可以使用`iwlist`命令来扫描可用的无线网络。运行以下命令: ``` sudo iwlist wlan0 scan ``` 该命令将列出所有可用的无线网络。 最后,你可以使用`iwconfig`命令来连接到你选择的无线网络。使用以下命令: ``` sudo iwconfig wlan0 essid your_network_name key your_network_password ``` 将上面的your_network_name替换为你要连接的无线网络的名称,your_network_password替换为无线网络的密码。 以上是在WSL2使用USB无线网卡的基本步骤。根据不同的无线网卡和操作系统,可能还有其他配置和驱动程序的要求。为了获得更详细的指导和支持,请参考你的无线网卡的文档或官方网站。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值