Difference between revisions of "J1939"

From eLinux.org
Jump to: navigation, search
(drop iproute2 requirement)
(Update after inclusion in mainline kernel)
 
Line 19: Line 19:
  
 
== Sources ==
 
== Sources ==
Support for SAE J1939 in Linux consists of 3 parts:
+
SAE J1939 got in mainline kernel since v5.4
* [http://github.com/kurt-vd/linux j1939 linux kernel]
 
* [http://github.com/kurt-vd/can-utils j1939 can-utils]
 
  
You probably want all 2 components to get a J1939 linux node working.
+
You will probably also want to use [http://github.com/linux-can/can-utils can-utils]
The J1939 specific code resides in dedicated branches.
 
 
 
The final goal is to have these source trees mainlined.
 
 
 
Note that earlier versions needed a modified iproute2.
 
This requirement has been dropped.
 
 
 
== Build ==
 
=== Build the kernel (necessary) ===
 
 
 
    $ git clone <yourfavoritelinuxkernel> linux
 
    $ cd linux
 
    $ git remote add j1939 git://github.com/kurt-vd/linux
 
    $ git remote update j1939
 
    $ git merge j1939/j1939d-vX.X
 
    $ make etc.
 
 
 
With j1939-vX.X the branch that matches the closest, but not higher, with your linux version.
 
 
 
=== Build can-j1939-utils (recommended) ===
 
 
 
    $ git clone git://github.com/kurt-vd/can-utils
 
    $ cd can-utils
 
    $ make etc.
 
 
 
Or you may merge the j1939 changes into any other can-utils version.
 
This should be fairly simple.
 
 
 
If the branch of linux-can-j1939 that you merged into your kernel was for version 3.7 or higher, use the j1939-v6 branch of can-j1939-utils.
 
  
 
=== Getting Started with J1939 ===
 
=== Getting Started with J1939 ===
  
I prepared a good howto with example program on [https://github.com/kurt-vd/test-can-j1939/blob/master/can-j1939-kickstart.md my github page].
+
The can-utils repository contains a good [https://github.com/linux-can/can-utils/blob/master/can-j1939-kickstart.md].

Latest revision as of 18:15, 14 October 2019

SAE J1939 in Linux

overview

See also on Wikipedia.

SAE J1939 defines a higher layer protocol on CAN. It implements a more sophisticated addressing scheme and extends the maximum packet size above 8 bytes. Several derived specifications exists, which differ from the original j1939 on the application level, like MilCAN, NMEA2000 and especially ISO-11783 (ISOBUS). This last one specifies the so-called ETP (Extended Transport Protocol) which is has been included in this implementation. This inclusion results in a maximum packet size of ((2^24)-1)*7 bytes

Specifications

  • SAE J1939-21 : data link layer
  • SAE J1939-81 : network management
  • ISO 11783-6  : Virtual Terminal (Extended Transport Protocol)

Sources

SAE J1939 got in mainline kernel since v5.4

You will probably also want to use can-utils

Getting Started with J1939

The can-utils repository contains a good [1].