Jetson 安装 peak-linux-driver-8.15.2

DeepSeek:

Jetson (R35.3.1, Ubuntu 20.04 aarch64) 上编译安装 peak-linux-driver-8.15.2 完整指南

本文档适用于 Jetson 平台(如 Xavier NX、AGX Orin 等)运行 Ubuntu 20.04 LTS (aarch64),内核版本 5.10.104-tegra,需要为 USBCANFD 设备(PEAK-System PCAN-USB FD)安装官方驱动,以支持 SocketCAN(can0 网络接口)及 CAN FD 功能。

📋 前置条件

确保设备已连接并供电。

具有 sudo 权限的用户。

网络连接正常(需下载源码包,约 2~3 GB)。

📦 第一步:系统准备与时间同步

1.1 检查初始状态

lsusb | grep -i peak

预期输出:应显示类似 ID 0c72:0012 PEAK System 的设备。

sudo dmesg | grep -i "pcan|peak"

预期输出:可能显示 peak_usb 驱动的错误(如 -75)或没有输出。

ip link show can0

预期输出:Device "can0" does not exist,说明驱动未成功加载。

1.2 校正系统时间

系统时间错误会导致 HTTPS 证书验证失败,无法使用 apt。

手动设置为接近当前时间(例如 2026-05-15 09:45:00)

sudo date -s "2026-05-15 09:45:00"

预期输出:无错误,date 命令显示正确时间。

安装 NTP 服务并同步

sudo apt update
sudo apt install ntp -y
sudo systemctl start ntp
sudo systemctl enable ntp
sudo systemctl restart ntp

预期输出:服务启动正常,无报错。

1.3 修复 APT 源(可选)

若 apt update 出现证书或 GPG 错误,可临时使用 HTTP 并更新密钥:

sudo sed -i 's/https:/http:/g' /etc/apt/sources.list
sudo apt update

时间正确后可改回 https

sudo sed -i 's/http:/https:/g' /etc/apt/sources.list

🔧 第二步:屏蔽冲突的内核驱动

Ubuntu 20.04 内核自带的 peak_usb 驱动与新版 PCAN-USB FD 硬件不兼容,需禁用。

sudo modprobe -r peak_usb
echo "blacklist peak_usb" | sudo tee /etc/modprobe.d/blacklist-peak_usb.conf

预期输出:无错误,/etc/modprobe.d/blacklist-peak_usb.conf 文件被创建。

📚 第三步:安装编译依赖

sudo apt update
sudo apt install build-essential dkms libpopt-dev -y

预期输出:所有依赖包成功安装。

🧠 第四步:获取正确的内核头文件

Jetson 平台的内核头文件不在标准 Ubuntu 源中,需从 NVIDIA L4T BSP 包中提取。

4.1 确定 L4T 版本

cat /etc/nv_tegra_release

预期输出:类似 # R35 (release), REVISION: 3.1, ...,记下版本号 R35.3.1

4.2 下载匹配的内核源码包

前往 NVIDIA L4T Archive 或直接使用已知链接:

cd ~/Downloads
wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v3.1/release/jetson_linux_r35.3.1_aarch64.tbz2

预期输出:下载完成,文件大小约 2.5 GB。

4.3 解压并提取内核头文件

tar -xjf jetson_linux_r35.3.1_aarch64.tbz2
cd Linux_for_Tegra/kernel

预期输出:解压后出现 kernel/ 目录,内含 nvidia-l4t-kernel-headers_*.deb 等文件。

sudo dpkg -i nvidia-l4t-kernel-headers_5.10.104-tegra-35.3.1-20230319081403_arm64.deb

预期输出:Setting up nvidia-l4t-kernel-headers ...,无报错。

4.4 验证头文件位置

ls /usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10/include/generated/autoconf.h

预期输出:显示文件路径,确认存在。

ls -l /lib/modules/5.10.104-tegra/build

预期输出:符号链接指向 /usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10。

若链接不正确,手动修正:

sudo ln -sf /usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10 /lib/modules/5.10.104-tegra/build

🔨 第五步:编译 peak-linux-driver

https://pan.baidu.com/s/1wtoFbl1_Ln6pIZW4LVX23g&pwd=sxpc

cd ~/Downloads
tar -xzf peak-linux-driver-8.15.2.tar.gz
cd peak-linux-driver-8.15.2

预期输出:解压成功,进入驱动源码目录。

make clean

预期输出:清理旧文件,无错误。

make KERNEL_LOCATION=/usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10
NET=NETDEV_SUPPORT NO_ESCCECK=1

预期输出:编译过程持续数分钟,最终生成 driver/pcan.ko 驱动模块。

参数说明

NET=NETDEV_SUPPORT:启用 SocketCAN 网络接口支持。

NO_ESCCECK=1:禁用 ESD 检查,解决 -75 通信错误。

ls driver/pcan.ko

预期输出:显示 pcan.ko 文件存在,说明编译成功。

⚙️ 第六步:安装驱动并加载

sudo make install

预期输出:将 pcan.ko 复制到 /lib/modules/$(uname -r)/kernel/drivers/net/can/,并运行 depmod。

sudo modprobe pcan

预期输出:无错误,驱动加载成功。

sudo dmesg | tail -20 | grep pcan

预期输出:类似以下信息,显示固件版本和 can0 注册:

[ 2928.104585] pcan 1-3.1:1.0: PCAN-USB FD (MCU01h PCB02h) fw v3.2.0 bl v2.1.0
[ 2928.106963] pcan: registered CAN-FD netdevice can0 for usbfd hw (503,32)

🌐 第七步:配置并测试 SocketCAN

7.1 查看 CAN 接口

ip link show can0

预期输出:显示 can0: mtu 16 qdisc noop state DOWN ...,状态为 DOWN。

7.2 设置波特率并启用

sudo ip link set can0 up type can bitrate 500000

预期输出:无错误,ip link show can0 状态变为 UP。

7.3 监听 CAN 报文

candump can0

预期输出:如果有其他 CAN 节点发送数据,会实时显示;否则等待,无错误。

7.4 发送测试报文(另开终端)

cansend can0 123#1122334455667788

预期输出:candump 终端应收到 can0 123 [8] 11 22 33 44 55 66 77 88。

🧹 清理与持久化

8.1 开机自动加载驱动

echo "pcan" | sudo tee -a /etc/modules

8.2 保留下载的源码(可选)

驱动源码和 L4T 包可保留在 ~/Downloads 中,以备重装系统后使用。

❗ 常见问题与解决

问题现象 可能原因 解决方法
make 找不到 autoconf.h 内核头文件未正确安装或路径错误 检查 /lib/modules/$(uname -r)/build 符号链接;执行 sudo make prepare 在头文件目录
modprobe pcan 失败,dmesg 显示 -75 ESD 检查失败 编译时添加 NO_ESCCECK=1;检查 USB 连接线质量
ip link set can0 up 报 bitrate not supported 波特率配置错误 使用 sudo ip link set can0 up type can bitrate 500000 dbitrate 2000000 fd on 启用 FD
设备插拔后 can0 消失 udev 未自动重新加载 重新插拔,或执行 sudo modprobe -r pcan && sudo modprobe pcan
apt update 证书错误 系统时间错误 按第一步校正时间;或临时改用 HTTP 源

📝 总结

完成以上步骤后,Jetson 平台上的 Ubuntu 20.04 即可完美支持 PEAK USBCANFD 设备,获得 SocketCAN 接口 can0,可以使用标准的 ip、candump、cansend 等工具进行 CAN/CAN FD 通信。编译过程中最关键的一步是获取正确版本的内核头文件,本文通过下载 NVIDIA 官方 BSP 包并安装对应的 deb 解决了该问题。

DeepSeek:

既然现在设备已经可以使用,说明当前环境没有冲突(可能 peak_usb 没有加载)。但为了避免重启后系统自动加载 peak_usb 而干扰 pcan,强烈建议执行这条 blacklist 命令,这样可以确保重启后只使用你手动编译的 pcan 驱动。

🔍 先检查一下当前是否有 peak_usb 加载

lsmod | grep peak_usb

如果没有输出,说明当前没加载;有输出则说明已加载,但可能与 pcan 共存(pcan 优先级更高?)不过安全起见,还是禁用为好。

✅ 执行 blacklist 命令

echo "blacklist peak_usb" | sudo tee /etc/modprobe.d/blacklist-peak_usb.conf

然后更新 initramfs 并重启验证(可选):

sudo update-initramfs -u
sudo reboot

重启后,插入设备,ip link show can0 应该仍然存在。

⚠️ 如果重启后 can0 消失

可能是 pcan 没有自动加载。可以设置开机自动加载:

echo "pcan" | sudo tee -a /etc/modules

并检查 /etc/modprobe.d/blacklist-peak_usb.conf 文件是否存在。

总之,执行 blacklist 是有必要的预防措施,不会影响当前已工作的配置。

posted @ 2026-05-23 12:26  一蜘  阅读(7)  评论(0)    收藏  举报