Jetson系列——重编译内核

问题描述:

博主团队最近新买了一块Jetson NX,打算将之前的ROS项目从树莓派4移植至其上,在运行手柄控制节点时,运行手柄控制节点,报错如下:
在这里插入图片描述
使用ls命令查看设备,发现Jetson系列无法识别手柄设备,通过查阅资料找到解决方法。

ls /dev/input

在这里插入图片描述

原因分析:

通过参考博文NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题,发现无法识别的原因在于Jetson系列的默认内核中Input未进行对joystick的配置。

此处需要对内核进行重编译,从而实现对手柄的识别。

编译内核:

1、查看内核版本

首先需要查看自己当前的内核版本

uname -r 

博主的版本号为 4.9.201-tegra,记住自己对应的内核版本,后续需要依据此版本进行下载编译脚本的版本。
在这里插入图片描述

2.下载编译脚本

从GitHub上下载编译用的脚本。

# 开启性能模式2
sudo nvpmodel -m 2
# 下载脚本文件
# Xavier NX系列:
git clone https://github.com/jetsonhacks/buildJetsonXavierNXKernel.git
cd buildJetsonXavierNXKernel
# TX2系列
git clone https://github.com/jetsonhacks/buildJetsonTX2Kernel.git 
cd buildJetsonTX2Kernel 
# AGX Xavier
git clone https://github.com/jetsonhacks/buildJetsonXavierKernel.git
cd buildJetsonXavierKernel

此处需要依据自己的内核版本进行选择不同的分支,可以通过不同tags下的自述文件查看对应的内核版本。
在这里插入图片描述
此处,博主的板子Jetson NX仅有一个分支无需切换,此处指令仅做参考。

# 切换分支
git checkout vL4T 32.5.1

3、自动下载脚本

运行安装脚本,下载kernel内核源码。

# 运行脚本
./getKernelSources.sh

在这里插入图片描述
此处运行可能由于网络原因卡在下图位置,此时可以选择使用手动下载源码的方式代替。
在这里插入图片描述

4、手动下载kernel源码

1.下载

在运行自动下载脚本时,通常可能因为网络原因,无法成功下载源码文件。此时需要自行前往Jetson官网下载源码包。

此处博主的L4T版本为32.5.1, 点击绿色标签** L4T 32.5.1 Downloads进入跳转。
在这里插入图片描述
进入跳转界面后,在表格的
SOURCES一栏中选择L4T Driver Package (BSP) Sources** 下载kernel源码。此处博主使用板子为Jetson Xavier NX,所以选择左侧标签下载文件。
在这里插入图片描述

2.解压源码

下载文件如下所示,将其用U盘或远程传输至Jetson内并解压。
在这里插入图片描述

cp public_sources.tbz2 ~/
# 解压文件
tar -xvf public_sources.tbz2  Linux_for_Tegra/source/public/kernel_src.tbz2 --strip-components=3
# 解压kernel文件
cd Linux_for_Tegra/source/public
tar -xvf kernel_src.tbz2
# 删除文件
rm -r kernel_src.tbz2

在这里插入图片描述

3.移动文件

为确保环境,此处需要将kernel源码放置在上述自动安装的位置中:

# 复制文件
cd ~
sudo cp -r kernel /usr/src/

在这里插入图片描述

4.配置文件

此处需要使用root权限进行操作

# root
sudo su
# 进入目录
cd /usr/src/kernel/kernel-4.9
# 复制文件
cp /usr/src/linux-headers-4.9.201-tegra-ubuntu18.04_aarch64/kernel-4.9/Module.symvers .
# 生成.config文件
zcat /proc/config.gz > .config
# Make a backup of the original configuration
cp .config config.orig
# Default to the current local version
KERNEL_VERSION=$(uname -r)
# For L4T 32.3 the kernel is 4.9.201-tegra ; 
# Everything after '4.9.201' is the local version
# This removes the suffix
LOCAL_VERSION=${KERNEL_VERSION#$"4.9.201"}
# Should be "-tegra"
bash scripts/config --file .config --set-str LOCALVERSION $LOCAL_VERSION

5、编译文件

完成配置后,即可进行编译。编译时间较长,需要耐心等待。

# 使用make编译内核
./makeKernel.sh

编译结果如下:
在这里插入图片描述
随后运行脚本makeModules

# 使用make编译模块,然后安装它们
./makeModules.sh

运行结果如下:
在这里插入图片描述

6、替换文件

完成编译后,需要运行脚本copyImage 替换文件

# root
sudo su
# 备份原有文件
cp /boot/Image $INSTALL_DIR/Image.orig
# 运行脚本
./copyImage.sh

结果如下:
在这里插入图片描述

7.配置手柄模块

至此,关于如何编译内核已经完成,可以通过脚本 removeAllKernelSources 删除源码。

如果对手柄有需求,建议在完成内核编译后查看博主的另一篇博文 Jetson系列——罗技手柄F710模块进行配置。

注意,由于手柄配置过程用到了内核源码,所以如若有需求,建议先配置后删除源码。

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值