Custom Rpi4-Nerves with CAN (MCP2515) support - Kernel issues?

Hi,
I am trying to make a custom nerves system for Raspberry Pi 4 with can support.
The system is booting yet I am not able to start the can device.
Does anyone have an Idea / a way to point me to?

Here are details that might help to pinpoint to the issue:

I have a booting nerves system with dmesg telling me (excerpt):

  • CAN device driver interface
  • can: controller area network core
  • NET: registered PF_CAN protocol family
  • can: raw protocol
  • can: broadcast manager protocol
  • can: netlink gateway - max hops=1
  • mcp251x spi0.0 can0: MCP2515 successfully initialized.

I can see the device in ifconfig:

iex(1)> ifconfig
....
can0: flags=[]

if I want to set it up and set the bitrate I get an error 2 (according to manages a kernel error)

iex(2)> System.cmd("ip", ~w{link set can0 up type can bitrate 1000000})
{"", 2}

iex(3)> :os.cmd('ip link set can0 up type can bitrate 1000000')
~c"ip: either \"dev\" is duplicated or \"type\" is garbage\n"

in the Kernel config I have two additional settings:

CONFIG_CAN_MCP251x=y
CONFIG_CAN=y

in the build root setting I have additionally:

BR2_PACKAGE_LIBSOCKETCAN=y
BR2_PACKAGE_CAN_UTILS=y

in config.txt I have the dtoverlay added and also added to fwup:

dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000

the problem is the missing package ‘IPROUTES2’ in the build root config

BR2_PACKAGE_IPROUTES2=y

thanks to Gus for the hint

2 Likes

Some time ago, we created a package to make vintage_net compatible with the hardware you mentioned. We were using SocketCcand through this fork of this repository

Perhaps it is a bit outdated, but I hope it helps you.