基于orange Pi 5 MAX （RK3588） 如何在 ubuntu-rockchip 中启用CAN通信？

环境配置

操作系统镜像：https://github.com/Joshua-Riek/ubuntu-rockchip/releases/tag/v2.4.0

硬件：orangePI 5 max RK3588

操作步骤与说明

使用管理员权限打开 /etc/default/u-boot 文件，该文件是 u-boot 的加载文件，我们的目的是修改设备启动时需要加载的设备树文件。

Copy
sudo vim /etc/default/u-boot

文件内容修改为：

Copy
## /etc/default/u-boot - configuration file for u-boot-update(8)
#U_BOOT_UPDATE="true"

#U_BOOT_ALTERNATIVES="default recovery"
#U_BOOT_DEFAULT="l0"
#U_BOOT_PROMPT="1"
#U_BOOT_ENTRIES="all"
#U_BOOT_MENU_LABEL="Debian GNU/Linux"
#U_BOOT_PARAMETERS="ro earlycon"
#U_BOOT_ROOT=""
#U_BOOT_TIMEOUT="50"
U_BOOT_FDT="/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/rk3588-orangepi-5-max.dtb"
#U_BOOT_FDT_DIR="/lib/firmware/"
U_BOOT_FDT_OVERLAYS="rk3588-can0-m0.dtbo rk3588-can1-m0.dtbo"
U_BOOT_FDT_OVERLAYS_DIR="/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/overlay"
#U_BOOT_SYNC_DTBS="false"

第一次打开时，默认情况下该文件中每一行都是 #开头，代表被注释的。我们需要取消注释其中两行 U_BOOT_FDT 和 U_BOOT_FDT_OVERLAYS。 后续两个 XXX_DIR 只是用来简化这两行的写法，就可以不写绝对路径了，只写文件名即可。

U_BOOT_FDT 后面填入香橙派型号所对应的 dtb 文件即可，路径可能有不同。U_BOOT_FDT_OVERLAYS 后方填入的内容需要注意的是，可能自带有多个不同的 rk3588-can*-m*.dtbo 文件，需要根据香橙派主板控制手册确定要选择的文件。

比如，我的这个版本系统中搜索

Copy
sudo find / -type f -name "*3588*can*.dtbo" 2>/dev/null

## the search result：
/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/overlay/rk3588-can2-m1.dtbo
/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/overlay/rk3588-can1-m0.dtbo
/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/overlay/rk3588-can1-m1.dtbo
/usr/lib/firmware/5.10.0-1012-rockchip/device-tree/rockchip/overlay/rk3588-can0-m0.dtbo

根据 orange pi 5 MAX 的说明文档，其中仅有 can0-m0 和 can1-m0，没有 can0-m1、can1-m1 以及 can2-m1。

所以，上述 u-boot 文件中，我们在 U_BOOT_FDT_OVERLAYS 填入文档中接口所示的 rk3588-can0-m0.dtbo 与 rk3588-can1-m0.dtbo

然后使用 u-boot-update 命令更新 u-boot 配置文件并重启，命令如下：

Copy
sudo u-boot-update

sudo reboot

重启后，使用 ifconfig -a 查看是否出现 CAN0 与 CAN1 端口。

Copy

can0: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 104

can1: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 105

连接 CAN 收发器与 CAN 分析仪（或者其他已配置好的 CAN 设备）

使用 candump 和 cansend 测试 CAN 通道通讯是否正常。