NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题

        最近在TX2上面使用ROS时发现购买的XBOX360游戏手柄插入USB后,终端执行 ls /dev/input/ 并没有显示手柄的输入接口(js*) 于是就在TX2论坛、博客各个地方搜集解决方案,后来发现 TX2默认内核中Input并没有进行joystick的配置。

一番探索,参考 http://www.jetsonhacks.com/2017/03/25/build-kernel-and-modules-nvidia-jetson-tx2/ 重新进行了内核的编译,编译成功后可以正确识别手柄。 

步骤如下:


1.下载编译构建Jetson TX2 内核的脚本文件

$ sudo nvpmodel -m 0
编译过程中发热会重一点,建议打开TX2上面的散热扇 sudo ./jetson_clocks.sh


$ git clone https://github.com/jetsonhacks/buildJetsonTX2Kernel.git 
$ cd buildJetsonTX2Kernel 


这时需要查看你现在的内核版本 打开新的终端 输入 uname -r 
如果显示“4.4.15-tegra”,则说明版本是L4T 27.1;“4.4.38-tegra”,说明版本是L4T 28.1;
对于L4T 27.1,需要单独进行分支选择:
$ git checkout vL4T27.1


2.获得源码
$ ./getKernelSources.sh


源码下载解压完成后脚本将在内核配置文件中打开一个编辑器,我们需要在编辑器中配置修改内核。
首先修改Genral Setup->Local version - append to kernel release 双击在文本框内输入-jetsonbot-v0.1,输入完后记得回车;设置完成后如图所示:


NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题

然后在Device Drivers中找到Input device support 点击后在右侧列表中找到Joystick interface 在前面的方框中打勾,注意:显示的是打勾不是小圆点 。如图所示:


NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题

然后在列表下面找到Joysticks/Gamepads 双击 将其中设置为如图所示:


NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题

设置完成后 记得保存! 然后退出。


3.编译修改完的内核
$ ./makeKernel.sh


4.替换Image和zImage
$ ./copyImage.sh


!出现错误:提示找不到Image文件说明上一步的内核编译出现问题,将/usr/src/中的kernel文件夹删除,同时删除下载的压缩包和source文件夹,删除完后重启TX2,重新进行编译。
!注意: copyImage.sh脚本将Image文件复制到当前设备的/ boot目录。如果你正在使用外部设备(如SSD)作为根目录,并仍然使用eMMC引导,则需要将映像文件同样复制到eMMC的/ boot目录。


复制完成后重启,打开终端输入 uname -r 显示“4.4.15-jetsonbot-v0.1” 或者“4.4.38-jetsonbot-v0.1” 说明内核编译成功。
这时插入XBOX360 终端输入 ls /dev/input/  就可以看到4个js显示,就可以愉快的使用XBOX360手柄啦!