安装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"
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
重新拔插 CAN FD 设备后,执行以下命令确认设备被识别:
# 查看CAN接口信息(输出含"can0"、"can1"等接口即正常)
ip link show
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