]> rtime.felk.cvut.cz Git - linux-lin.git/blob - sllin/README.txt
sllin: Updating of Error counters belonging to netdevice when an error occurs.
[linux-lin.git] / sllin / README.txt
1 Intro
2 =====
3 Sllin is TTY discipline enabling you to create LIN Master out of
4 your computer.
5 Hardware needed is Hardware UART embedded into the computer + simple
6 voltage level LIN converter.
7
8
9 Compilation
10 ===========
11 To successfully compile sllin, it is necessary to have source code
12 to Linux kernel actually running on the computer.
13
14 To compile, run
15 $ make
16
17
18 First steps
19 ===========
20 To use sllin, it is necessary to set sllin TTY discipline to some
21 existing serial device.
22
23 It is possible to use slightly modified slcan_attach program --
24 particular patch from canutils-patches folder has to be applied.
25
26 After successful compilation and loading of sllin, patching and
27 compiling of slcan_attach, it is possible to run:
28
29 $ sudo slcan_attach -w /dev/ttyS0
30 attached tty /dev/ttyS0 to netdevice sllin0
31 Press any key to detach /dev/ttyS0 ...
32
33 # Run from another terminal
34 $ dmesg
35 [157600.564071] sllin: sllin_kwthread stopped.
36 [157600.572058] netconsole: network logging stopped, interface sllin0 unregistered
37 [157608.437260] sllin: serial line LIN interface driver
38 [157608.437267] sllin: 10 dynamic interface channels.
39 [157608.437271] sllin: Break is generated manually with tiny sleep.
40 [157610.513646] sllin: sllin_open() invoked
41 [157610.519502] sllin: sllin_kwthread started.
42
43 $ ip link show dev sllin0
44 11: sllin0: <NOARP> mtu 16 qdisc noop state DOWN qlen 10
45     link/can
46
47 $ sudo ip link set sllin0 up
48
49 $ sudo ip link set sllin0 up
50 lisovros@pc-lisovy:~/src/lin/pcan_lin/sllin$ ip link show dev sllin0
51 11: sllin0: <NOARP,UP,LOWER_UP> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
52     link/can
53
54 # state UNKNOWN in this case is considered as wanted
55
56
57 Real usage
58 ==========
59 Communication with sllin is done by sending different types of CAN
60 frames into it.
61
62 * EFF non-RTR frame:
63   Configuration on internal "frame cache".
64
65 * SFF RTR frame:
66   Send LIN header with LIN ID corresponding to can_id in this
67   particular CAN frame.
68
69 * SFF non-RTR frame:
70   Send LIN header immediately (with LIN ID corresponding to can_id
71   in this particular CAN frame) followed by LIN response containing
72   same data as this particular CAN frame.
73
74
75
76 Examples
77 ========
78 # Some outputs might be modified for more comfortable reading
79
80 $ ls sllin.c
81 sllin.c
82
83 $ make
84 make -C /lib/modules/2.6.36.2-00398-g504e6a6-dirty/build M=/h.../sllin modules
85 make[1]: Entering directory `/h.../kernel/build/glab-2.6.36'
86 make -C /h.../kernel/2.6.36 O=/h.../kernel/build/glab-2.6.36/. modules ARCH=i386
87   CC [M]  /h.../sllin/sllin.o
88   Building modules, stage 2.
89   MODPOST 1 modules
90   LD [M]  /h.../sllin/sllin.ko
91 make[1]: Leaving directory `/h.../kernel/build/glab-2.6.36'
92
93 $ sudo insmod ./sllin.ko
94
95 $ dmesg | tail -3
96 [158268.949289] sllin: serial line LIN interface driver
97 [158268.949296] sllin: 10 dynamic interface channels.
98 [158268.949300] sllin: Break is generated manually with tiny sleep.
99
100 # Run in another terminal
101 $ sudo slcan_attach -w /dev/ttyS0
102 attached tty /dev/ttyS0 to netdevice sllin0
103 Press any key to detach /dev/ttyS0 ...
104
105 $ sudo ip link set sllin0 up
106
107 $ ip link show dev sllin0
108 12: sllin0: <NOARP,UP,LOWER_UP> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
109     link/can
110
111 # Run "candump sllin0" in another terminal
112
113
114 # ----- Simple RTR CAN frame -----
115 # Patched version of cangen
116 $ cangen sllin0 -r -I 1 -n 1 -L 0
117
118 # Output from candump
119   sllin0    1  [0] remote request
120   sllin0    1  [2] 00 00
121
122 # First line: RTR sent to sllin0
123 # Second line: Response obtained from LIN bus (there was LIN slave
124 #  device on the LIN bus answering to LIN ID 1with data 0x00 0x00).
125
126
127 # ----- RX_TIMEOUT -----
128 $ cangen sllin0 -r -I 8 -n 1 -L 0
129
130 # LIN_ERR_RX_TIMEOUT flag set -- nobody answered to our LIN header
131 #  or CAN RTR frame
132   sllin0    8  [0] remote request
133   sllin0      2000  [0]
134
135 $ ip -s link show dev sllin0
136 14: sllin0: <NOARP,UP,LOWER_UP> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
137     link/can 
138     RX: bytes  packets  errors  dropped overrun mcast   
139     2          4        1       0       0       0      
140     TX: bytes  packets  errors  dropped carrier collsns 
141     0          4        0       0       0       0 
142
143
144
145 # ----- Configure frame cache -----
146 # Configure frame cache to answer on LIN ID = 8
147 $ cangen sllin0 -e -I 0x848 -n 1 -L 2 -D beef
148
149   sllin0       848  [2] BE EF
150
151 # Try RTR CAN frame with ID = 8 again
152 $ cangen sllin0 -r -I 8 -n 1 -L 0
153
154 # Everything went better than expected
155   sllin0    8  [0] remote request
156   sllin0    8  [2] BE EF
157
158
159
160 # ----- non-RTR CAN frame -----
161 $ cangen sllin0 -I 7 -n 1 -L 2 -D f00f
162
163   sllin0    7  [2] F0 0F
164   sllin0    7  [2] F0 0F
165
166