跳转至

安装KCAN驱动

安装 KCAN 驱动

1. 卸载 PCAN 驱动(如未安装过,可跳过此步骤)

cd peak-linux-driver-8.20.0   # PCAN 驱动目录
sudo modprobe -r pcan
sudo make uninstall
cd

2. 安装 KCAN 依赖

sudo apt update && sudo apt install -y build-essential g++ dkms wget unzip libpopt-dev linux-headers-$(uname -r) 

3. 验证gcc版本(需与内核编译版本一致,查询方法如下)

cat /boot/config-$(uname -r) | grep -i "gcc_version"
如果输出:CONFIG_GCC_VERSION=120300(表示需安装gcc-12)安装命令如下,如果不是则可跳过这步。

sudo apt install -y gcc-12

4. 下载 KCAN 驱动

# 下载SDK(最新版本)
wget https://gitee.com/ChengDu-KunHong/KH-UCANFD_Linux_SDK/releases/download/v1.2.2/KH-UCANFD_Linux_SDK.zip

# 解压SDK
unzip KH-UCANFD_Linux_SDK.zip

5 安装 KCAN 驱动

# 进入SDK目录
cd KH-UCANFD_LinuxSDK-v1.2.2/

# 查找并临时禁用这个选项
sudo sed -i 's/-ftrivial-auto-var-init=zero//g' /usr/src/linux-headers-$(uname -r)/Makefile 

# 附权
sudo chmod +x ./build.sh

# 重新编译
./build.sh

6. 编译进入内核

sudo mkdir -p /usr/src/kcan-8.20.0/

cat << 'EOF' | sudo tee /usr/src/kcan-8.20.0/dkms.conf
PACKAGE_NAME="kunhong-linux-driver"
PACKAGE_VERSION="8.20.0"
CLEAN="make clean"
MAKE[0]="sed -i 's/-ftrivial-auto-var-init=zero//g' /usr/src/linux-headers-${kernelver}/Makefile 2>/dev/null || true; make DKMS_KERNEL_DIR=$kernel_source_dir MOD=MODVERSIONS PAR=NO_PARPORT_SUBSYSTEM USB=USB_SUPPORT PCI=PCI_SUPPORT PCIEC=PCIEC_SUPPORT ISA=ISA_SUPPORT DNG=NO_DONGLE_SUPPORT PCC=NO_PCCARD_SUPPORT NET=NETDEV_SUPPORT RT=NO_RT"
BUILT_MODULE_NAME[0]="kcan"
BUILT_MODULE_LOCATION[0]="."
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"
EOF

7. KCAN 驱动加载验证

# 加载kcan驱动模块
sudo modprobe kcan

# 验证驱动是否加载成功(输出含"kcan"即正常)
lsmod | grep kcan
KCAN 驱动加载验证

重新拔插 CAN FD 设备后,执行以下命令确认设备被识别:

# 查看CAN接口信息(输出含"can0"、"can1"等接口即正常)
ip link show
KCAN 驱动加载验证

8. 创建内核更新

# 复制驱动源码
sudo cp -r ~/KH-UCANFD_LinuxSDK-v1.2.2/driver/* /usr/src/kcan-8.20.0/

# 创建 DKMS 配置
cat << 'EOF' | sudo tee /usr/src/kcan-8.20.0/dkms.conf
PACKAGE_NAME="kunhong-linux-driver"
PACKAGE_VERSION="8.20.0"
CLEAN="make clean"
# 优化:仅修改当前编译目录的临时Makefile(不改动系统文件),同时指定正确的源码路径
MAKE[0]="cd ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/source; sed -i 's/-ftrivial-auto-var-init=zero//g' /usr/src/linux-headers-${kernelver}/Makefile 2>/dev/null || true; make DKMS_KERNEL_DIR=${kernel_source_dir} MOD=MODVERSIONS PAR=NO_PARPORT_SUBSYSTEM USB=USB_SUPPORT PCI=PCI_SUPPORT PCIEC=PCIEC_SUPPORT ISA=ISA_SUPPORT DNG=NO_DONGLE_SUPPORT PCC=NO_PCCARD_SUPPORT NET=NETDEV_SUPPORT RT=NO_RT"
BUILT_MODULE_NAME[0]="kcan"
BUILT_MODULE_LOCATION[0]="."
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"
EOF
# 注册并安装 DKMS
sudo dkms add -m kcan -v 8.20.0
sudo dkms build -m kcan -v 8.20.0
sudo dkms install -m kcan -v 8.20.0

输入以下命令进行,验证

dkms status

可看到如下结果,只看到一个也是成功了!

kcan/8.20.0, 6.8.0-90-generic, x86_64: installed (WARNING! Diff between built and installed module!)
nvidia/580.126.09, 6.8.0-40-generic, x86_64: installed
nvidia/580.126.09, 6.8.0-90-generic, x86_64: installed

9. 开启自启动

配置

echo "kcan" | sudo tee /etc/modules-load.d/kcan.conf 

检查,输入以下命令查看

cat /etc/modules-load.d/kcan.conf

可看到如下结果

kcan

💡 如果重启后 KCAN 未自动加载,可手动执行:sudo modprobe kcan,如果还是不加载可尝试:sudo modprobe peak_usb