Is ESD CAN PCIe402 product supported by TX2

Hello, everyone, I want to use ESD CAN PCIe402 as can module to comminucate with car, and I chose SocketCan. What makes my confused is that ESD CAN PCIe 402 provides a drivers name esd-pcie402.ko, but this file is not compatiable on TX2, so I don’t put in on my sytem. I set up can0 and can1 following instructions shown in https://devtalk.nvidia.com/default/topic/1006762/jetson-tx2/how-can-i-use-can-bus-in-tx2-/3, and then used can cable to link ESD CAN PCIe402 with car, when I used ‘cansend can0 123#abcd’, but ‘candump can0’ showed nothing.
So, I want to know, if I don’t use the ko file which is provided by ESD, is it impossible for me to use this can card? Is there ant other choices? And which can cards are supported on TX2? Thanks in advance!!!

I know nothing of your particular driver, but the “.ko” file normally supplied is for a desktop PC architecture (x86 variant). In most cases you would simply need to build this kernel module with the arm64 architecture.

Here is some information about compiling directly on the Jetson, but the official documentation also has the information (but for cross compiling on a PC host):
https://devtalk.nvidia.com/default/topic/1038175/jetson-tx2/tx2i-wifi-support/post/5274619/#5274619

What it comes down to is you would create a kernel with a config matching your existing kernel. Then you would use an app like “make nconfig” to edit the config to include your driver as a module. Then the arm64 “.ko” file would be copied over to the correct place within “/lib/modules/$(uname -r)/”.

FYI, configuration has a “symbol” for each kernel feature. Find the symbol associated with that “.ko” file. “make nconfig” allows searching for symbols. Often some part of the symbol will be named after the chipset the driver supports, or a simple google search for "linux kernel driver " will find that information.

Hi, linuxdev, thank you for your reply, do you have any suggestions about which can cards are supported on TX2? I have testd ESD CAN PCIe402 and turned out to be a failure, so now, I’m still trying to find another can card product to use.

It isn’t the Jetson which supports or doesn’t support the hardware. It is a question of whether the driver is installed.

Admittedly, not all desktop PC drivers (x86/x86_64) are available on arm64, but most are. If the desktop PC supports the driver without third party driver add-ons, then the Jetson will also support the driver after building for arm64.

There are restrictions on the total combined size of modules an embedded system can load relative to what a desktop PC can load (it is a limitation of the maximum size of the architecture-dependent direct branch instruction), and so the habit of PC distributions to simply install all modules someone might use (e.g., AMD drivers on a system with only NVIDIA GPU) isn’t practical. If you look up which driver the PC uses, then you know which driver to install on the Jetson.

Once you know that you can ask on the forum about building a driver. One way is to see what module loads on a PC where it works (“lsmod”). Another is simply to google for the chipset or model along with “linux kernel driver”. If it turns out that the manufacturer provides a binary-only driver, then you are out of luck unless they provide arm64. If the manufacturer provides source code, then this will probably work, but is more complicated for out-of-tree builds versus something already in the Linux kernel (in which case you just add that feature in the config and it’ll build…install is a simple file copy).

NOTE: Someone else may have experience with a PCIe CAN add-on which is known to work, but I have no knowledge of this.