WSL2下连接手柄操作

  • 前言
  • 连接USB设备
  • 重新编译内核
  • 参考

前言

最近由于项目需要,要求在linux下连接xbox手柄去控制水下机器人(所以没有办法直接连在机器人上面)所以有了需要在WSL2上连接手柄的需求,下面这篇文章就记录一下笔者在WSL2上连接手柄所遇到了一些坑
笔者采用的手柄是北通的XBOX手柄,若有其他不一样的,可能遇到其他不一样的问题,但一般的XBOX手柄应该都是一样的

连接USB设备

关于WSL2如何连接USB设备,请仔细阅读微软的官方文档。连接USB设备
主要就是使用usbipd-win这个项目把USB转IP发送到WSL下面。

插入手柄到电脑上面,管理员模式下打开PowerShell,输入

usbipd wsl list

可以查看当前连接的所有USB设备

可以看到,笔者的手柄连接在了id 为2-1的地方,接着输入

usbipd wsl attach -b <your bus_id> -d <your distribution>


由于笔者WSL安装了多个发行版,所以这里指定了一下。然后我们可以看到usbipd 提示设备繁忙,这里在笔者翻阅许多资料后,大概是手柄插上后,windows会与手柄进行交互,相对于占用了手柄的端口,导致无法与WSL连接。这时候可以在设置中取消打开XBOX

但是笔者是WIN 11 的电脑,不知道为什么没有成功,还是显示占用,然而WIN 10的电脑上面却可以。如果还是显示占用,可以输入下面命令强制绑定端口

usbipd bind --force --busid <bus_id>


提示我们重启电脑,我们按照要求即可。
重启电脑后我们再次尝试连接,连接成功,在wsl输入 lsusb 也可以查看到手柄

此时我们查看dev目录下有没有手柄信息.

一般手柄会挂载为/dev/js* 或者 /devinput/js* ,但是目前两者都没有,这是为什么呢?

原来WSL的内核并没有使能手柄驱动,但是WSL都一直走过来了,我实在又不想使用笨重的VMWare,只能见山开山,遇水架桥了

重新编译内核

关于如何重新编译wsl的linux内核,网上有许多参考方法,这里介绍一下我参考的两篇
参考1
参考2

首先从微软的官方github上下载wsl内核源码(微软官方内核源码),建议下载比较新的内核(笔者是5.15),其他内核可能没有使能USB/IP,导致usbipd没办法使用,还需要自己打开。
文件比较大,这里怎么在wsl里面使用windows的代理进行科学上网,网上也有其他写的好的博客,笔者在此不过多赘述。

下载好了后,我们进入 WSL2-Linux-Kernel 文件夹内,编译前需要下载一些工具,在参考的博客里面都有提及,如果还缺少其他工具,根据提示自行下载即可。

进入文件夹后,输入

# 注意要指定 KCONFIG_CONFIG 参数
# 内核配置文件的默认位置是源码目录下的 .config,而 WSL 2 的内核配置文件在 Microsoft/config-wsl,如果不手动指定的话会载入默认配置文件
# 当然你也可以手动复制一份内核配置文件出来,或者进 menuconfig 之后再手动加载
sudo make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

进入图形化配置界面

按y选择使能下面两项:

Device Drivers—>Input device support—>Joystick interface

Device Drivers—>Input device support—>Joysticks/Gamepads—>X-Box gamepad support&&X-Box gamepad rumble support


按空格进入Joysticks/Gamepads选择X-Box gamepad support下面的几项

然后选择Save保存,或者一直按Esc,就会问你是否保存

然后开始编译内核

# 编译并生成压缩后的内核,我比较懒,就直接把这些驱动全编译进内核了
sudo make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl
# 作为内核模组编译的话,把模组编译出来,然后安装模组
sudo make -j$(nproc) modules KCONFIG_CONFIG=Microsoft/config-wsl
sudo make -j$(nproc) modules_install KCONFIG_CONFIG=Microsoft/config-wsl

编译好的内核存放在arch/x86/boot/bzImage 这里

我们把它拷贝出来,例如笔者考在自己windows下的系统盘里面,当然其他路径也可以

cp bzImage /mnt/u/kernel/joy-bzImage


接下来,我们指定wsl以我们编译好的内核启动即可
打开你的用户目录(在C盘下面,例如笔者的目录为C:\Users\Lion),打开.wslconfig文件(如果没有就自己创建)输入以下命令,其实就是指定内核的位置

最后重新启动wsl,输入 uname -a

可以看到内核的编译时间已经变了,所以已经从我们自己编译的内核上面启动
接着,我们插入手柄接收器,重新usbipd连接,可以发现/dev/input 目录下面已经可以找到js0了,说明手柄驱动重新使能

接着我们跑一下测试例程吧

sudo apt-get install joystick -y

然后输入

 sudo jstest /dev/input/js0

和串口一样,操作dev下设备都是需要root权限,如果不加sudo,可能无法正常读取

手柄已经可以正常读取啦!

参考

  1. linux系统中使能Xbox手柄驱动

WSL2下连接XBOX手柄详细教程相关推荐

  1. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)(转载)...

    win7(win10也适用)系统安装GPU/CPU版tensorflow Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程) 目录 2.配置 ...

  2. mysql的join语句使用_在MySQL中使用JOIN语句进行连接操作的详细教程

    到目前,我们已经学习了从一个表中获取数据.这是简单的需要,但在大多数现实MySQL的使用,经常需要将数据从多个表中的一个单一的查询. 可以使用多个表中的单一SQL查询.在MySQL中联接(join)行 ...

  3. svn安装教程 mysql_CentOS6.4 下安装SVN的详细教程(超详细)

    1.检查系统是否已经安装如果安装就卸载 rpm -qa subversion yum remove subversion 2.安装 yum install subversion 3.建立SVN库 mk ...

  4. iis服务器部署项目,IIS环境下部署项目的详细教程

    分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后 找到World Wide Web Services,确保选中 ...

  5. mysql8.018安装教程_mysql8.0.18下安装winx64的详细教程(图文详解)

    到网站 下载mysql数据库 解压后进入目录 d:\program files\mysql-8.0.18 创建my.ini文件 [mysql] # 设置mysql客户端默认字符集 default-ch ...

  6. asp项目如何部署到服务器,IIS环境下部署项目的详细教程

    分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后,点击"Turn Windows features ...

  7. 在linux下安装fortran编译器详细教程

    在linux下安装fortran编译器 本教程安装的编译器是Intel® Parallel Studio XE 2013 for Linux*,建议使用相同的版本(也可自行去下载Linux版的压缩包) ...

  8. Ubuntu 12.10下配置Web服务器详细教程

    搭建Ubuntu的Web服务器 无疑是目前非常热门的技术.下面我们来看一下如何在Ubuntu下搭建大家熟悉的Web服务器. Linux在服务器领域表现却尤为喜人,据IDC数据显示,部署了Linux系统 ...

  9. 针对前端初级学者,如何在windows下搭建react-native环境详细教程

    我也是自学react-native,当年到处找教程,然而最难的一步却是环境的搭建,虽然网上有很多关于环境配置的文章,但是都不够详细 所以我也是踩着坑过来的,毕竟我也只是个前端初级学者,所以我想写一篇让 ...

最新文章

  1. 深入研究敏捷的成功因素
  2. MyBatis4:动态SQL
  3. idea.config.path is invalid 问题
  4. arcgis python教程视频_arcgispython教程
  5. linux ping 8.8.8.8 不通,ping www.baidu.com和ping 8.8.8.8出现ping不通
  6. 转进制(信息学奥赛一本通-T1161)
  7. matlab共享变量,matlab如何编写共享参数拟合程序 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  8. BAT及各大互联网公司2014前端笔试面试题:JavaScript篇
  9. java8计算两个日期之间的天数
  10. PHIL2650 是个好课程
  11. C#开发Android应用实战
  12. 数据分析案例 |【01】电影数据分析
  13. 数学建模常用模型04 :灰色关联分析法
  14. git 创建本地分支及远程分支并且关联分支
  15. SSL_2325 最小转弯问题
  16. 鼠标点击器20+版本使用教程系列(2)多位置循环点击器
  17. DG部署(主库rac)--rman 异机恢复方式
  18. Oracle常用函数大全
  19. Black and white(MST)
  20. win7修复计算机消失,win7旗舰版系统重装后本地连接不见的恢复方法

热门文章

  1. ##################### Coding相关的学习网站推荐【2016/12/16更新】
  2. Entity Framework 学习
  3. 混凝土墙开洞_临沂市混凝土墙打孔开洞方案
  4. 南京大学计算机科学与技术系茅兵,层次协同系统中的对象映射模型-南京大学计算机科学与技术系.pdf...
  5. 白嫖的冷知识项目教程,教你如何做一个抖音冷知识账号,多种变现方式
  6. Java——后端开发经验总结(持续更新中)
  7. Protobuf编码解析
  8. 《Linux运维总结:服务器测试外网带宽上行和下行网速》
  9. 【java8】自定义Collector
  10. C++设计模式——命令模式(command pattern)