# Installing Real-time Kernel on RPi 4
###### tags: `software` `electrical_system` `NTURT`
## Procedure
1. Download the image from github: [ros-realtime/ros-realtime-rpi4-image](https://github.com/ros-realtime/ros-realtime-rpi4-image).
2. Extract it and flash it onto a micro SD card using tools such as [rpi imager](https://www.raspberrypi.com/software/)
> Note: By using rpi imager, you can configure the user name, passwprd, host name for ssh, wifi connection, locale, etc. Tutorial can be found on [youtube](https://www.youtube.com/watch?v=ntaXWS8Lk34).
4. Incert the SD card, and then you will be able to use it via ssh.
## Some setups
### ROS2 build system setup
By default, the image does not include build tools, which can be installed by
```shell=
sudo apt install ros-dev-tools
```
To source the build tool `colcon` by
```shell=
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc \
&& echo 'source /usr/share/colcon_cd/function/colcon_cd.sh' >> ~/.bashrc \
&& echo 'export _colcon_cd_root=/opt/ros/humble/' >> ~/.bashrc \
&& echo 'source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash' >> ~/.bashrc
```
### CAN hat configuration
There some configurations that have to be done to properly use can hat.
1. Install wiringPi form [github](https://github.com/WiringPi/WiringPi).
2. Add
```
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
```
to the the start up config in `/boot/firmware/config.txt`.
Or simply
```shell=
echo 'dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000' >> /boot/firmware/config.txt
```
3. Reboot and run
```shell=
sudo ip link set can0 up type can bitrate 1000000
```
to configure the can bitrate to 1m and activate it, this step have to be done after reboot.
### Real-time permission
Add
```shell=
<USER_NAME> - rtprio 98
<USER_NAME> - memlock 1048576
```
to `/etc/security/limits.conf`, which will allow `<USER_NAME>` to run real-time application up to priority of 98 and lock memory up to 1GB.
### Automate it
Using shall script [install.sh from `NTURacingTeam/nturt_rpi_deployer`](https://github.com/NTURacingTeam/nturt_rpi_deployer/blob/ros2/install.sh).
## Weird behavior
1. The ethernet does not work after boot, it can be fixed by running `sudo dhserver -4`, but it don't lasst after reboot.