can-j1939-install-kernel-module: convert to Unix line endings and remove trailing whitespace
parent
06561ac3dc
commit
24e0c520b6
|
|
@ -1,180 +1,180 @@
|
||||||
# can-j1939 kernel module installation #
|
# can-j1939 kernel module installation #
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Problem
|
### Problem
|
||||||
|
|
||||||
You already have **can0** or **vcan0** up and working, **can-utils** downloaded and compiled to **~/can/can-utils** and you can send and receive frames without problems. However, when you want to bring up **can-j1939** you get error like this:
|
You already have **can0** or **vcan0** up and working, **can-utils** downloaded and compiled to **~/can/can-utils** and you can send and receive frames without problems. However, when you want to bring up **can-j1939** you get error like this:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
avra@vm-debian:~/can/can-utils$ sudo modprobe can-j1939
|
avra@vm-debian:~/can/can-utils$ sudo modprobe can-j1939
|
||||||
modprobe: FATAL: Module can-j1939 not found in directory /lib/modules/5.7.0.0.bpo.2-amd64
|
modprobe: FATAL: Module can-j1939 not found in directory /lib/modules/5.7.0.0.bpo.2-amd64
|
||||||
```
|
```
|
||||||
|
|
||||||
and also this:
|
and also this:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
avra@vm-debian:~/can/can-utils$ testj1939
|
avra@vm-debian:~/can/can-utils$ testj1939
|
||||||
testj1939: socket(j1939): Protocol not supported
|
testj1939: socket(j1939): Protocol not supported
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Solution
|
### Solution
|
||||||
|
|
||||||
Above errors mean that **can-j1939** was not enabled in your kernel and you need to compile it manually. There are several ways to do it. Any Linux kernel since 5.4 has **can-j1939** module, but you will probably want to install fresher version, which leads to downloading kernel sources, enabling **can-j1939** module, recompiling kernel and installing it. I will be using Debian 10.5 x64 (buster testing) virtual machine.
|
Above errors mean that **can-j1939** was not enabled in your kernel and you need to compile it manually. There are several ways to do it. Any Linux kernel since 5.4 has **can-j1939** module, but you will probably want to install fresher version, which leads to downloading kernel sources, enabling **can-j1939** module, recompiling kernel and installing it. I will be using Debian 10.5 x64 (buster testing) virtual machine.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 1. Download kernel source ####
|
#### 1. Download kernel source ####
|
||||||
|
|
||||||
We will download Debian patched kernel 5.8. First update your sources
|
We will download Debian patched kernel 5.8. First update your sources
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:~$ sudo apt update
|
avra@vm-debian:~$ sudo apt update
|
||||||
```
|
```
|
||||||
|
|
||||||
and then look at available Debian patched kernel source packages
|
and then look at available Debian patched kernel source packages
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:~$ apt-cache search linux-source
|
avra@vm-debian:~$ apt-cache search linux-source
|
||||||
linux-source-4.19 - Linux kernel source for version 4.19 with Debian patches
|
linux-source-4.19 - Linux kernel source for version 4.19 with Debian patches
|
||||||
linux-source - Linux kernel source (meta-package)
|
linux-source - Linux kernel source (meta-package)
|
||||||
linux-source-5.4 - Linux kernel source for version 5.4 with Debian patches
|
linux-source-5.4 - Linux kernel source for version 5.4 with Debian patches
|
||||||
linux-source-5.5 - Linux kernel source for version 5.5 with Debian patches
|
linux-source-5.5 - Linux kernel source for version 5.5 with Debian patches
|
||||||
linux-source-5.6 - Linux kernel source for version 5.6 with Debian patches
|
linux-source-5.6 - Linux kernel source for version 5.6 with Debian patches
|
||||||
linux-source-5.7 - Linux kernel source for version 5.7 with Debian patches
|
linux-source-5.7 - Linux kernel source for version 5.7 with Debian patches
|
||||||
linux-source-5.8 - Linux kernel source for version 5.8 with Debian patches
|
linux-source-5.8 - Linux kernel source for version 5.8 with Debian patches
|
||||||
```
|
```
|
||||||
|
|
||||||
If kernel 5.8 does not show in your linux-sources list (it shows above in mine since I have already upgraded stock 4.19 kernel to backported 5.7), then you will need to add backports to your sources list. It is best to do it like this
|
If kernel 5.8 does not show in your linux-sources list (it shows above in mine since I have already upgraded stock 4.19 kernel to backported 5.7), then you will need to add backports to your sources list. It is best to do it like this
|
||||||
|
|
||||||
```
|
```
|
||||||
echo 'deb http://deb.debian.org/debian buster-backports main contrib' | sudo tee -a /etc/apt/sources.list.d/debian-backports.list
|
echo 'deb http://deb.debian.org/debian buster-backports main contrib' | sudo tee -a /etc/apt/sources.list.d/debian-backports.list
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, or in case you have problems with installation of some packages, or you just want to have everything in a single list, here is what my **/etc/apt/sources.list** looks like (you will need to append at least last line to yours)
|
Alternatively, or in case you have problems with installation of some packages, or you just want to have everything in a single list, here is what my **/etc/apt/sources.list** looks like (you will need to append at least last line to yours)
|
||||||
|
|
||||||
```
|
```
|
||||||
deb http://security.debian.org/debian-security buster/updates main contrib
|
deb http://security.debian.org/debian-security buster/updates main contrib
|
||||||
deb-src http://security.debian.org/debian-security buster/updates main contrib
|
deb-src http://security.debian.org/debian-security buster/updates main contrib
|
||||||
|
|
||||||
deb http://deb.debian.org/debian/ buster main contrib non-free
|
deb http://deb.debian.org/debian/ buster main contrib non-free
|
||||||
deb-src http://deb.debian.org/debian/ buster main contrib non-free
|
deb-src http://deb.debian.org/debian/ buster main contrib non-free
|
||||||
|
|
||||||
deb http://deb.debian.org/debian buster-backports main contrib
|
deb http://deb.debian.org/debian buster-backports main contrib
|
||||||
```
|
```
|
||||||
|
|
||||||
After adding backports in one way or another, try **sudo apt update** again, and after that **apt-cache search linux-source** should show kernel 5.8 in the list, so you can install it's source package
|
After adding backports in one way or another, try **sudo apt update** again, and after that **apt-cache search linux-source** should show kernel 5.8 in the list, so you can install it's source package
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install linux-source-5.8
|
sudo apt install linux-source-5.8
|
||||||
```
|
```
|
||||||
|
|
||||||
and unpack it
|
and unpack it
|
||||||
```
|
```
|
||||||
avra@vm-debian:~$ cd /usr/src
|
avra@vm-debian:~$ cd /usr/src
|
||||||
avra@vm-debian:/usr/src$ sudo tar -xaf linux-source-5.8.tar.xz
|
avra@vm-debian:/usr/src$ sudo tar -xaf linux-source-5.8.tar.xz
|
||||||
avra@vm-debian:/usr/src$ cd linux-source-5.8
|
avra@vm-debian:/usr/src$ cd linux-source-5.8
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 2. Add can-j1939 module to kernel ####
|
#### 2. Add can-j1939 module to kernel ####
|
||||||
|
|
||||||
First we need some packages for **menuconfig**
|
First we need some packages for **menuconfig**
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt-get install libncurses5 libncurses5-dev
|
sudo apt-get install libncurses5 libncurses5-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
copy and use our old configuration to run **menuconfig**
|
copy and use our old configuration to run **menuconfig**
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo cp /boot/config-$(uname -r) .config
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo cp /boot/config-$(uname -r) .config
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make menuconfig
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make menuconfig
|
||||||
```
|
```
|
||||||
|
|
||||||
where we enable SAE J1939 kernel module as shown
|
where we enable SAE J1939 kernel module as shown
|
||||||
|
|
||||||
```
|
```
|
||||||
- Networking Support
|
- Networking Support
|
||||||
- Can bus subsystem support
|
- Can bus subsystem support
|
||||||
- <M> SAE J1939
|
- <M> SAE J1939
|
||||||
```
|
```
|
||||||
|
|
||||||
Now edit **/usr/src/linux-source-5.8/.config**, find CONFIG_SYSTEM_TRUSTED_KEYS, change it as following
|
Now edit **/usr/src/linux-source-5.8/.config**, find CONFIG_SYSTEM_TRUSTED_KEYS, change it as following
|
||||||
```
|
```
|
||||||
CONFIG_SYSTEM_TRUSTED_KEYS=""
|
CONFIG_SYSTEM_TRUSTED_KEYS=""
|
||||||
```
|
```
|
||||||
|
|
||||||
and save the file.
|
and save the file.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 3. Compile and install kernel and modules
|
#### 3. Compile and install kernel and modules
|
||||||
|
|
||||||
We will have to download necessary packages
|
We will have to download necessary packages
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install build-essential libssl-dev libelf-dev bison flex
|
sudo apt install build-essential libssl-dev libelf-dev bison flex
|
||||||
```
|
```
|
||||||
|
|
||||||
compile kernel (using threads to make it faster)
|
compile kernel (using threads to make it faster)
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make -j $(nproc)
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make -j $(nproc)
|
||||||
```
|
```
|
||||||
|
|
||||||
install
|
install
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make modules_install
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make modules_install
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make install
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
and update grub
|
and update grub
|
||||||
|
|
||||||
```
|
```
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo update-grub
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo update-grub
|
||||||
avra@vm-debian:/usr/src/linux-source-5.8$ sudo reboot
|
avra@vm-debian:/usr/src/linux-source-5.8$ sudo reboot
|
||||||
```
|
```
|
||||||
|
|
||||||
Check if installation is correct with
|
Check if installation is correct with
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo modprobe can-j1939
|
sudo modprobe can-j1939
|
||||||
```
|
```
|
||||||
|
|
||||||
and if you get no error then you can enjoy **can-j1939**. If you get some error then you might check if this alternative command works:
|
and if you get no error then you can enjoy **can-j1939**. If you get some error then you might check if this alternative command works:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo insmod /lib/modules/5.8.10/kernel/net/can/j1939/can-j1939.ko
|
sudo insmod /lib/modules/5.8.10/kernel/net/can/j1939/can-j1939.ko
|
||||||
```
|
```
|
||||||
|
|
||||||
If it does then all you need to do is
|
If it does then all you need to do is
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo depmod -av
|
sudo depmod -av
|
||||||
```
|
```
|
||||||
|
|
||||||
reboot once, and **modprobe** command from the above should finally work.
|
reboot once, and **modprobe** command from the above should finally work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 4. Install headers if needed
|
#### 4. Install headers if needed
|
||||||
|
|
||||||
You might have a problem with headers not being updated. To check that open file **/usr/include/linux/can.h** with
|
You might have a problem with headers not being updated. To check that open file **/usr/include/linux/can.h** with
|
||||||
|
|
||||||
```
|
```
|
||||||
nano /usr/include/linux/can.h
|
nano /usr/include/linux/can.h
|
||||||
```
|
```
|
||||||
|
|
||||||
If in the struct **sockaddr_can** you don’t see **j1939**, then header files did not upgrade and you need to do it manually
|
If in the struct **sockaddr_can** you don’t see **j1939**, then header files did not upgrade and you need to do it manually
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo cp /usr/src/linux-source-5.8/include/uapi/linux/can.h /usr/include/linux/can.h
|
sudo cp /usr/src/linux-source-5.8/include/uapi/linux/can.h /usr/include/linux/can.h
|
||||||
sudo cp /usr/src/linux-source-5.8/include/uapi/linux/can/j1939.h /usr/include/linux/can/
|
sudo cp /usr/src/linux-source-5.8/include/uapi/linux/can/j1939.h /usr/include/linux/can/
|
||||||
```
|
```
|
||||||
|
|
||||||
That is the minimum for compiling some **J1939** C code, but you might want to upgrade other header files as well. That's up to you. Enjoy!
|
That is the minimum for compiling some **J1939** C code, but you might want to upgrade other header files as well. That's up to you. Enjoy!
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue