Page History
Info |
---|
If you want to make changes to a RPI which is already set up, you have to remount the read-only filesystem. |
- Install Raspbian Lite. We currently use Debian 10 (Buster).
Change password by using
:Code Block language bash passwd pi
Activate SSH
:sudo systemctl enable ssh
and sudo systemctl startCode Block language bash sudo systemctl enable ssh sudo systemctl start ssh
- Install and configure NTP
Install tmux
: sudo apt installCode Block language bash sudo apt install tmux
- "Install" the RTI Connext libraries under
/usr/local/lib/
by copying the arm-folder from the Main PC underopt/rti_connext_dds-6.0.0/lib/armv6vfphLinux3.xgcc4.7.2/
. This can of course only be done after the ARM libraries have been installed on the Main Computer.
It should look like this afterward:
Code Block | ||
---|---|---|
| ||
pi@raspberrypi-06:~ $ find /usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/ |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/ |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscppd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddstransporttcpzd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscpp2z.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcppz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtimonitoringd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddstransporttcp.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscpp2.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscpp2d.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtimonitoringz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddstransporttcpd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscppzd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddsc.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddstransporttcpz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcpp.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscpp.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscore.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtimonitoringzd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscorez.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscppz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscored.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcppd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddsjava.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscpp2zd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddsczd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddscorezd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/libnddsjavad.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtimonitoring.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcz.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcppzd.a |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlc.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlcd.so |
...
/usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2/librtidlczd.a |
'Register' the Libraries
Make the libraries available. Insert /usr/local/lib/rti_connext_dds-6.0.0/armv6vfphLinux3.xgcc4.7.2
into /etc/ld.so.conf
. Then run
Code Block | ||
---|---|---|
| ||
sudo ldconfig |
...
Configure Bootup Behaviour
...
Enable autostart, using sudo nano /etc/rc.local
and insert
tmux
...
new-session
...
-d
...
-s
...
"bootloader_raspberry"
...
"bash
...
/root/bootloader_raspberry.bash"
NTP configuration
Anchor | ||||
---|---|---|---|---|
|
See the NUC NTP-Configuration.
ID-Related Settings
Anchor | ||||
---|---|---|---|---|
|
Edit the /etc/hostname
file to give the Raspberry a unique name. The name should correspond to the vehicle ID, for example raspberrypi-06
or raspberrypi-42
.
...
In order to make NTP working properly with a read-only filesystem, it is also necessary to copy the following file
Code Block | ||
---|---|---|
| ||
cp /lib/systemd/system/ntp.service /etc/systemd/system/ntp.service |
and to comment out PrivateTmp=true
in
/etc/systemd/system/ntp.service
Info | |||||
---|---|---|---|---|---|
If you need writing access to the file system, you can use (dependent on the folder you need access to)
|
...
to remount the system. |
Applying RT-Patch
Because the vehicle needs to be real-time capable, a real-time patch (RT-Patch) should be applied to the underlying Linux Kernel.
...
It might happen that the system clock is not automatically synchronizing via NTP if it differs too much from the real-time. Firstly, take care that your timezone is set correctly:
Code Block | ||
---|---|---|
| ||
sudo raspi-config |
In the opening UI go to: 4 Localisation Options → I2 Change Time Zone → None of the above → UTC
Furthermore, you can force NTP to set the time once. Therefore, stop the service, force it, and restart it again :
Code Block | ||
---|---|---|
| ||
sudo /etc/init.d/ntp stop |
...
sudo ntpd -qg |
...
sudo /etc/init.d/ntp start |
Afterwards, NTP should synchronize automatically.
Repeating the process for several vehicles
In order to create identical vehicles it might be useful to clone the SD-cards by using Clonezilla. Afterwards, only the ID-Related Settings have to be adapted at the cloned SD-card.
Cross Compilation and Software Distribution
The vehicle Raspberry software is cross-compiled from the master PC. The build script git:software/vehicle_raspberry_firmware/build.bash
creates an archive of the compiled software and other required files and publishes it via Apache. The bootloader_raspberry.bash
autostart script on the Raspberry downloads and runs this software.
ARP Table Generation
Because unsuccessful ARP requests sometimes block communication a static ARP table is sometimes useful. To generate one one needs to switch on all participants, ping each one from the main PC and then output the arp table on the main pc with e.g. https://man7.org/linux/man-pages/man8/ip-neighbour.8.html (newer) or arp -a
(old).
The info can then be used to feed a script that sets up the arp entries statically for the participants. Currently this is done in https://git.rwth-aachen.de/CPM/Project/Lab/software/-/blob/feature/fastdds/mid_level_controller/package/start.bash and the static arp table is part of the package.