DOCUMENTATION

Raspberry Setup

Introduction #


Before we can install the app, we need to make changes to the Raspberry to ensure that all interfaces are up and running. Fully update your system before proceeding and make sure that Python 3 is installed.

Note: You can also skip this entire section by running the V-Link installer once. It will setup everything as described below.

Dependencies #


Install the following dependencies:

ffmpeg
libudev-dev
libusb-dev
build-essentials
python3-venv

DTOverlays #


V-Link uses customized DTOverlays to communicate with the CAN interfaces. You can download them from the repo.

https://github.com/BoostedMoose/v-link/raw/master/resources/dtoverlays/

Make sure to place them into “boot/firmware/overlays

Enabling Ignition #


We are triggering the Raspberry shutdown through a GPIO pin. Therefore we need to get rid of the shutdown overlay from the OS. The easiest is to simply rename the service:

 sudo mv /etc/xdg/autostart/pwrkey.desktop /etc/xdg/autostart/pwrkey.desktop.backup

Config.txt #


Add the following entries to “boot/firmware/config.txt” depending on your Raspberry Pi model.

Raspberry Pi 5:

[V-LINK RPi5]

#Enable GPIO 0&1
disable_poe_fan=1
force_eeprom_read=0

#Enable devicetree overlays
dtparam=spi=on
dtparam=i2c_arm=on

dtoverlay=v-link
dtparam=uart0=on
dtoverlay=uart2-pi5
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=24
dtoverlay=mcp2515-can2,oscillator=16000000,interrupt=22

#Configure IGN logic
dtoverlay=gpio-poweroff,gpiopin=0

#No Splash on boot
disable_splash=1
EOF'

Raspberry Pi 4:

[V-LINK RPi4]

#Enable GPIO 0&1
disable_poe_fan=1
force_eeprom_read=0

#Enable devicetree overlays
dtparam=spi=on
enable_uart=1
dtparam=i2c_arm=on

dtoverlay=v-link
dtoverlay=uart3
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=24
dtoverlay=mcp2515-can2,oscillator=16000000,interrupt=22

#Configure IGN logic
dtoverlay=gpio-poweroff,gpiopin=0

#No Splash on boot
disable_splash=1
EOF'

Raspberry Pi 3:

[V-LINK RPi3]

#Enable GPIO 0&1
disable_poe_fan=1
force_eeprom_read=0

#Enable devicetree overlays
dtparam=spi=on
enable_uart=1
dtparam=i2c_arm=on

dtoverlay=v-link
dtoverlay=uart3
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=24
dtoverlay=mcp2515-can2,oscillator=16000000,interrupt=22

#Configure IGN logic
dtoverlay=pi3-disable-bt
dtoverlay=gpio-poweroff,gpiopin=0

#No Splash on boot
disable_splash=1
EOF'

Network Files #


Add the following files to “etc/systemd/network/” to setup the CAN interfaces and enable them afterwards with this command.

sudo systemctl enable systemd-networkd


can1.network:

[Match]
Name=can1

[CAN]
BitRate=125000

[Network]
# raw CAN

can2.network:

[Match]
Name=can2

[CAN]
BitRate=500000

[Network]
# raw CAN

UInput #


To control mouse and keyboard through the app we need to make sure the UInput is setup after booting. Create the following file in “/etc/modules-load.d/

uinput.conf:

uinput

UDev Rules #


To correctly set permission, create a new file in “/etc/udev/rules.d/“:

42-v-link.rules:

SUBSYSTEM=="usb", ATTR{idVendor}=="1314", ATTR{idProduct}=="152*", MODE="0660", GROUP="plugdev"
SUBSYSTEM=="net", ACTION=="add", KERNELS=="spi0.1", NAME="can1"
SUBSYSTEM=="net", ACTION=="add", KERNELS=="spi0.2", NAME="can2"
KERNEL=="ttyS0", MODE="0660", GROUP="plugdev"
KERNEL=="uinput", MODE="0660", GROUP="plugdev"

Updated on October 3, 2025

© 2025 Boosted Moose

This project is an independent initiative and has no affiliation with Volvo.

Car Love <3