I recently started a project that uses the CAN serial protocol using
microcontrollers. I've got an IXXAT CAN-to-USB Compact (V1.0) adapter to
help debugging the CAN bus. The manufacturer of this adapter provides
the kernel driver and and userspace  libraries for Linux, but it uses a
custom API (ECI) instead of SocketCAN (and I really need to use
SocketCAN). The manufacturer also provides a SocketCAN driver but only
for the CAN-to-USB Compact (V2.0), so it doesn't with what I have.

I'm thinking in modifying the the SocketCAN driver to support the V1.0
adapter, but I don't have any experience in kernel driver development.
I've a solid C knowledge and a lot of experience in firmware development
for microcontrollers. Can someone show me where to find relevant
information regarding SocketCAN, USB drivers development? I don't know
if this challenge is above my skills.

I've attached both drivers and a patch for the usb-to-can_v2_socketcan
that substitutes the "netdev->trans_start =" deference to
"netif_trans_update(netdev);", so you can compile for kernels newer than


Attachment: usb-to-can_v2_socketcan.tar.xz
Description: application/xz

>From 76059561a984ef92f19e1babdf42614e99f7719e Mon Sep 17 00:00:00 2001
From: Augusto Fraga Giachero <augustof...@gmail.com>
Date: Thu, 13 Oct 2016 13:07:14 -0300
Subject: [PATCH 1/1] Patch for newer kernels

Solves the compiling errors on 4.6 kernels and newer.
 ixx_usb_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ixx_usb_core.c b/ixx_usb_core.c
index 20eb0cf..701f1f0 100644
--- a/ixx_usb_core.c
+++ b/ixx_usb_core.c
@@ -218,7 +218,7 @@ static void ixxat_usb_write_bulk_callback(struct urb *urb)
                 netdev->stats.tx_bytes += context->dlc;
                 /* prevent tx timeout */
-                netdev->trans_start = jiffies;
+                netif_trans_update(netdev);
@@ -323,7 +323,7 @@ static netdev_tx_t ixxat_usb_ndo_start_xmit(struct sk_buff *skb,
         } else {
-                netdev->trans_start = jiffies;
+                netif_trans_update(netdev);
                 /* slow down tx path */
                 if (atomic_read(&dev->active_tx_urbs) >= IXXAT_USB_MAX_TX_URBS)

Attachment: EciDriver.tar.xz
Description: application/xz

Kernelnewbies mailing list

Reply via email to