LinCAN is a Linux kernel module that implements a CAN driver capable of working with multiple cards, even with different chips and IO methods. Each communication object can be accessed from multiple applications concurrently. It supports RT-Linux, 2.2, 2.4, and 2.6 with fully implemented select, poll, fasync, O_NONBLOCK, and O_SYNC semantics and multithreaded read/write capabilities. It works with the common Intel i82527, Philips 82c200, and Philips SJA1000 (in standard and PeliCAN mode) CAN controllers. It is part of a set of CAN/CANopen related components originally developed as part of OCERA framework. The CAN related components have been separated into its own OrtCAN repository.

The list of supported hardware and boards

LinCAN Quick Build Instructions

There are more options to build LinCAN driver. The first one is to use standalone driver module build. The latest version of standalone LinCAN sources can be obtained from GIT repository and build by next commands

git clone git://git.code.sf.net/p/ortcan/lincan
cd lincan
./build-lincan.sh

The other option is to build LinCAN driver as part of the whole OrtCAN tree

git clone git://git.code.sf.net/p/ortcan/ortcan-top
cd ortcan/
git submodule update --init
make default-config
make

The default configuration options should be overridden by user specified options in toplevel "config.omk" file before final "make" invocation. The choices 'y'/'n' can be specified to enable or disable build of specified hardware/board support, it would be next line in "config.omk" file for tscan1 card for example

CONFIG_OC_LINCAN_CARD_tscan1=y

If the build should target other then actually running kernel then LINUX_DIR option in "config.omk" file is used to specify location, where kernel has been build. If a build for non-native architecture is required then cross-compiler binaries have to be specified

LINUX_DIR=/usr/src/linux-2.6-mpc5200-build
CC=powerpc-linux-gnu-gcc
CXX=powerpc-linux-gnu-g++
AR=powerpc-linux-gnu-ar
LD=powerpc-linux-gnu-ld

LinCAN installation and use

Driver can be load into kernel directly from build directory. Example for pcm3680 PC/104 card

insmod _compiled/modules/lincan.ko hw=pcm3680 io=0x200 irq=7,11

The board is non-plug and play and that is why all parameters has to be specified. Only board hardware type (i.e. hw=pcican-q) and zero/automatic I/O address are required (io=0) for PCI and other PnP cards. The boar hardware identifiers and corresponding io locations are separated by comma in the case of multiple boards used.

The driver can be installed into system

mkdir /lib/modules/$(uname -r)/extra
cp _compiled/modules/lincan.ko /lib/modules/$(uname -r)/extra
chown root:root /lib/modules/$(uname -r)/extra/lincan.ko
depmod -a

and then load by modprobe

modprobe lincan hw=pcm3680 io=0x200 irq=7,11

or setup to autoload after boot (configuration style for Debian based system)

echo "lincan hw=pcm3680 io=0x200 irq=7,11" >/etc/modules

Next line grants CAN driver access to the all regular system users included in users group

echo 'SUBSYSTEM=="can",GROUP="users",MODE="0660"' >/etc/udev/rules.d/10-lincan.rules