Skip to content
On this page

2. Raspberry Pi OS 64 Bit als Image installieren

Linux Image Herunterladen und auf SD-Karte flashen

Als erstes flashen wie die SD-Karte mit der Raspberry Pi OS Distribution.

Es handelt sich hier um eine Debian Distribution für das Raspberry Pi. Wir verwenden dieses Image um erste Schritte in Linux auf dem Target durchzuführen und funktionale Tests der Peripherie umzusetzen.

Gegenüber einer eigenen Distrubution mit Buildroot oder Yocto besteht hier der Vorteil Zugriff auf viele Entwicklungstools via "apt" Package Management zu erhalten und auch einen schnellen Einstieg ohne Buildprozess sicherzustellen. Natürlich hat das ganze auch Nachteile:

  • Die Distribution ist selbst als "minimal" Version je nach Embedded Applikation sehr "aufgeblasen" ...
  • ... und bietet so durch viele in der Produktion unnötig vorhande Software eine breiter Surface-Area für Sicherheitslücken.
  • ... sowie schwereren Memory und Disk Footprint für eine einfache Embedded Applikation.

Gerade aber während der Entwicklung kann das Arbeiten mit der Debian Distribution schnellere Resultate erzielen:

  • Verfügbare Runtimes via Package Management (Python, RUST, Java, ...)
  • WiFi / Ethernet Verbindung ohnen grossen Konfigurationsaufwand
  • Applikationsbeispiele die auf Peripherie zugreifen und "out of the box" laufen.

Laden Sie folgendes Image im Host Linux herunter: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz

Hierzu können Sie den Link kopieren und via wget in einem Terminal CTRL+ALT+T verwenden.

bash
cd Downloads
wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz

Flashen eines Images

Um ein Image auf eine SD-Karte zu schreiben, reicht es in der Regel nicht, einfach Files zu kopieren. Flashen bedeutet das Blockweise kopieren einen Speichermediums unabhängig von logischen Partitionen. Das heisst, bei einem Speichermedium werden auch bereiche ausserhalb des Filesystems kopiert (Wie zum Beispiel Partitionslayout, möglicherweise Bootloader und unterschiedliche Filesysteme).

Solche Images können z.B. durch das Blockweise lesen generiert werden. Häufig werden Images auch komprimiert verwendet, besonders, wenn viel "freier" Speicher in einer Partition vorhanden ist.

In unserem Fall beträgt die .xz komprimierte grösse des Images ca. 270 MB. (vgl. ls -alh ~/Downloads). Unkomprimiert benötigt das Image ca. 1.9 GB.

Bevor das Image auf die SD-Karte geschrieben wird, muss diese noch entpackt werden. Das kann vorher geschehen unxz 2023-12-11-raspios-bookworm-arm64-lite.img.xz, oder während dem Schreiben auf die disk via Pipe zu dd.

dd ist das tool, welches das Blockweise kopieren von Speicher erlaubt und für das flashen von Blockspeicher dient.

Als erstes "tunneln" wir den UART Serial Adapter von FTDI, sowie den SD-Kartenleser in das Linux Gastsystem.

Wir kopieren die extrahierte Image-Datei wie folgt auf die SD-Karte:

  • Stecken Sie die SD in das USB-SD-Karten-Interface und selbiges in das Hostsystem,

  • Rservieren Sie dieses für das Gastsystem per Gastsystem-Menu:
    Geräte > USB > Gerneric Flash Card Reader

Nach dem Einsetzen der SD-Karte taucht bereits eine Partition unter Ubuntu auf.

Verwenden Sie lsblk um sich einen Überblick zu verschafen:

bash
ubuntu@ub:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  61.9M  1 loop /snap/core20/1376
loop2    7:2    0 155.4M  1 loop /snap/firefox/1154
loop3    7:3    0  79.1M  1 loop /snap/gtk-common-themes/1531
loop4    7:4    0 248.8M  1 loop /snap/gnome-3-38-2004/99
loop5    7:5    0  45.9M  1 loop /snap/snap-store/575
loop6    7:6    0   288K  1 loop /snap/snapd-desktop-integration/7
loop7    7:7    0  43.6M  1 loop /snap/snapd/15177
sda      8:0    1  29.8G  0 disk 
  sda1   8:1    1  29.8G  0 part /media/ubuntu/9016-4EF8
sdb      8:16   1     0B  0 disk 
sr0     11:0    1  1024M  0 rom  
vda    252:0    0    60G  0 disk 
  vda1 252:1    0     1M  0 part 
  vda2 252:2    0   513M  0 part /boot/efi
  vda3 252:3    0  59.5G  0 part /

Die Grösse der SD-Karte beträgt hier 32 GB und wird an der Stelle /media/ubuntu/9016-4EF8 ins Filesystem eingebunden.

sda1 ist hierbei die erste Partition auf dem Blockstorage. Damit wir die SD-Karte beschreiben muss dieser zuerst wieder mit unmount aus dem File System geworfen werden. Das würde natürlich auch mit dem File Browser funktionieren.

bash

## unmount
sudo umount /media/ubuntu/*

## ins verzeichnis des images wechseln
cd Downloads

## image anzeigen
ls -al

## verifizieren, dass sd-Karte nicht mehr gemountet ist
lsblk

## flashen (/dev/sdx gemäss lokaler Config anpassen)
xz -dc 2023-12-11-raspios-bookworm-arm64-lite.img.xz | sudo dd of=/dev/sdx bs=4M status=progress oflag=sync

## zur sicherheit nochmals einen sync ausführen
sync

Das Flag bs steht für Blocksize und limitiert diese auf genau 1MB. Dies kann zu besserer Performance beim kopieren führen. status=progress zeigt den Fortschritt beim kopieren an und oflag=sync stellt sicher, dass nicht im Memory gebuffert (sonst würde progress nicht viel Sinn machen, da erst da die Änderungen obwohl das Programm beendet noch nicht wirklich auf das Flash geschrieben worden sind).

Sobald das Image geflasht ist, kann man im File Explorer die Boot und Root File System Partition betrachten. Hiefür sollte die SD-Karte entfernt und wieder eingefügt werden.

Ubuntu mountet die zwei Partitionen automatiosch. Ein Blick auf lsblk zeigt an welcher Stelle im Filesystem.


lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  61.9M  1 loop /snap/core20/1376
loop2    7:2    0 155.4M  1 loop /snap/firefox/1154
loop3    7:3    0  79.1M  1 loop /snap/gtk-common-themes/1531
loop4    7:4    0 248.8M  1 loop /snap/gnome-3-38-2004/99
loop5    7:5    0  45.9M  1 loop /snap/snap-store/575
loop6    7:6    0   288K  1 loop /snap/snapd-desktop-integration/7
loop7    7:7    0  43.6M  1 loop /snap/snapd/15177
sda      8:0    1     0B  0 disk 
sdb      8:16   1  29.8G  0 disk 
  sdb1   8:17   1   256M  0 part /media/ubuntu/boot
  sdb2   8:18   1   1.6G  0 part /media/ubuntu/rootfs
sr0     11:0    1  1024M  0 rom  
vda    252:0    0    60G  0 disk 
  vda1 252:1    0     1M  0 part 
  vda2 252:2    0   513M  0 part /boot/efi
  vda3 252:3    0  59.5G  0 part /

Wir möchten bereits beim erten Boot ein Terminal erhalten. Hierfür ändern wir das File config.txt in der Bootpartition.

Als Editor kann gedit oder aber auch nano verwendet werden.

Ergänzen Sie die letzte Zeile mit

enable_uart=1

Erstellen Sie ein Passwort mit openssl passwd:

# pw hier: raspberry
echo 'raspberry' | openssl passwd -6 -stdin

Erstellen Sie auch ein File userconf.txt mit dem Inhalt pi:<passwort> (Default user / Passwort).

Speichern Sie das File, führen Sie einen sync aus und unmounten Sie die zwei Partitionen.

bash
sync

sudo umount /media/ubuntu/*

Login Passwort funktioniert nicht

Falls Login via Serial Console nicht funktioniert, können Sie das File /etc/shadow auf dem RFS um den Hash des Passworts beim User Pi erweitern. In diesem File sind die Passwörter der User gehasht abgelegt.

Ersetzen Sie die Zeile mit dem User pi folgendermassen:

pi:$6$QnL4F6Z/xnrJr4U8$/IE1H1yS8YXM/iY8EK1SKV4rMmsxNBgM3KbjESRX7VbW2kSrPLICfuX
AjKea5atUL34XbDU64B.prcZtu1HaY/:19086:0:99999:7:::

Das gehashte Passwort ist hier raspberry.

Raspberry Pi starten

Fügen Sie die SD-Karte nun ins Rapsberry Pi ein. Verbinden Sie UART gemäss Datenblatt und speisen Sie das Raspberry Pi via USB.

Serial Adapter mit Raspberry Pi verbinden

  1. Zuerst eine Massefläche auf dem Raspi berühren! (Ethernet- oder USB-Stecker)
  2. Vermeiden Sie Verbindung auf die 5V-Pins der Raspi-Stiftleiste - es zerstört den USB-Adapter!
  3. Beim Verbinden immer als erstes die GND-Verbindung erstellen! (noch vor den Signalleitungen!)
  4. Verwenden Sie hierzu aus dem Kabelset die erste Dreiergruppe Kabel (z.B. sw, bn, rt)

Als nächstes wollen wir via USB-Serial auf die console von Linux zugreifen. Hierfür verwenden wir Hostseitig das Tool picocom.

Installieren Sie picocom via sudo apt install picocom.

Deaktivieren Sie auch den brltty Service, welcher versuchen kann die Serielle Schnittstelle zu übernehmen.

bash
sudo apt remove brltty

Serielle Console zum Target einrichten (Asynchrone Serielle Schnittstelle)

Unser Embedded System hat ja kein Display! Embedded Linux-Systeme unterstützen jedoch fast immer (auch) eine asynchrone serielle Schnittstelle, auf welcher einerseits der Bootvorgang angezeigt und beeinflusst werden kann, andererseits nach booten eine Shell-Console gestartet werden kann.

Um diese auf dem Hostsystem (Notebook) anzuzeigen, wird nebst einem USB-Serial Dongle ein geeignetes Terminal-Emulationsprogramm für die Benutzer-Ein-/Ausgabe benötigt. Serielle Terminal-Emulations­programme gibt es diverse – sowohl einfache Console-Programme (minicom, picocom, cu,...) wie auch direkt unter der graphischen X11-Oberfläche lauffähige (gtkterm, sayon,...) oder z.B. unter Windows PuTTY (welches gleichzeitig auch ein SSH-Client beinhaltet). Viele dieser Programme sind jedoch etwas "bockig".

  • Für Linux installieren Sie über den Paketmanager bevorzugt das simple Console-Programm picocom.

    GTK-Term

    Nicht alle gtkterm-Versionen unterstützt die vt102-Emulation korrekt, in welchem Fall z.B. der Editor vi darüber nicht korrekt funktioniert – wir verwenden deshalb besser das einfache Console-Programm picocom.

  • Da Ihr Notebook wohl kaum direkt eine Asynchrone Serielle Schnittstelle (/dev/ttyS0) hat, stecken Sie das externe USB-Serial-Interface an.

  • Bei virtualisiertem Linux sind USB-Geräte wie erwähnt erst für das Gastsystem verwendbar, wenn diese für das Gastsystem reserviert werden. Reservieren Sie falls nicht schon geschehen also das USB-Serial-Interface temporär unter Geräte > USB-Geräte > FT232 USB-Serial .

    Anmerkung

    Wird der Eintrag nicht aktiv, prüfen Sie ob in der Virtualbox-Management-Konsole unter den Gastsystem-Einstellungen die USB-Funktionalität aktiviert ist, danach das USB-RS232-Interface Aus- und Einstecken.

    Ev. haben Sie auch bei der Installation von Virtualbox den virtuellen USB-Treiber nicht installieren lassen? (ggf. im Windows Gerätemanager das Device nochmals löschen, neu erkennen lassen und diesmal die Installation des virtuellen USB-Treibers zulassen.)

  • Kontrollieren Sie nun z.B. mittels:

    bash
    tail  -100  /var/log/syslog
    

    ob und unter welchem Devicenamen das Interface von Linux erkannt wurde – ev. unter ttyUSB0

    TIP

    Das syslog-File ist auch per Menu Anwendungen > Systemwerkzeuge > Systemprotokoll → syslog einsehbar.

  • Verbinden Sie das Interface via USB EMV-gerecht und korrekt mit dem Board:

    Achtung

    beim direkten berühren des Boards immer zuerst eine Massefläche wie z.B. die Ethernet-Buchse berühren und nicht irgendwelche Signal-Pins berühren, in welchem Fall das Board durch die Elektrostatische Entladung Schaden nehmen könnte!!

  • Starten Sie danach 'picocom' mit 115200 Baud sowie ohne Flow Control auf jener Schnittstelle, welche Sie oben ermittelt haben (vermutlich /dev/ttyUSB0). Bei picocom werden diese Parameter auf der Kommandozeile angegeben - die picocom-Kurzhilfe per

    bash
    picocom --help
    

    zeigt wie Sie Baudrate und tty-Device setzen. (Die volle Hilfe würden Sie per

    bash
    man picocom
    

    erhalten).

  • Hoppla, picocom fehlt offensichtlich das Recht /dev/ttyUSB0 zu öffnen. Ein ls -l /dev/ttyUSB0 bestätigt dies. Um zukünftig serielle Devicenodes wie /dev/ttyUSB0 auch ohne sudo öffnen zu können, geben Sie Ihrer Benutzer-Id Zugriffsrecht auf die zuvor angezeigte Sicherheitsgruppe dialout per

    bash
    sudo usermod  -a  -G  dialout  $USER	
    

    Achtung!

    ohne -a würden alle bestehenden Gruppenmitgleidschaften gelöscht!!

  • Da neue Gruppenmitgleidschaften erst nach erneutem Booten wirksam sind, starten Sie nun picocom der Einfachheit halber mit vorangestelltem sudo ...

  • Wenn dies klappt, stecken Sie die SD-Karte auf das SoC-Modul (also auf den kleinen Print mit dem grossen SoC Chip) und stecken das Steckernetzteil am Board ein, worauf Sie den Bootlog des kopierten Yocto-Linux sehen sollten! Auf dem Trägerprint hat es zudem auch einen Reset-Taster...

    Tipp

    Das Beenden von picocom ist möglich mittels: Ctrl-A Ctrl-X . Ein späteres erneutes Starten inkl. Startparameter per bash Rückwärtshistory mit: Ctrl-R pico...

  • Sollte die serielle Schnittstelle nicht oder nur unzuverlässig funktionieren, so schalten Sie nach herunterfahren des Gastsystems im Virtualbox Manager in den Gastssytem-Einstellungen > USB die USB-2 Unterstützung aus.

Raspberry Pi Booten

Sobald Sie das Raspbery Pi gebootet haben werden Sie nach dem User / Passwort gefragt. Loggen Sie sich mit dem generierten Passwort ein.

Die BASH Shell (das Programm, welches Ihren Terminal Input interpretiert) wird Sie begrüssen.

pi@raspberrypi:~$

Verbinden Sie sich nun via WiFi ins Netzwerk mit sudo raspi-config.

Vergewissern Sie sich, dass Sie ins Iternet kommen mit ping 8.8.8.8.

Wir werden nun das Ethernet Interface konfigurieren um via SSH auf das Target zugreifen zu können. Das erlaubt uns das Arbeiten mit dem Raspberry Pi auch ohne UART Verbindung. Gerade falls das Anschliessen eines UART Adapters zusammen mit dem Sense HAT problematisch ist, kann SSH als Backup verwendet werden.

Hierzu starten wir den SSH Dienst auf dem Raspberry Pi mit sudo systemctl enable ssh --now. Mit netstat verifizieren wir, dass SSH auch tatsächlich auf port 22 hört.

netstat -n4telp zeigt uns

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -    

SSH hört also auf Port 22 auf allen Netzwerkinterfaces.

Ermitteln Sie die IP Adresse des WiFi interfaces mit ifconfig wlan0. Loggen Sie sich vom Hostsystem ein mit ssh pi@IP-ADRESSE.

Wenn Sie sich das erste mal mit SSH verbinden wird folgende Nachricht auftauchen:

The authenticity of host '192.168.50.1 (192.168.50.1)' can't be established.
ED25519 key fingerprint is SHA256:LlIvfSDk25fy7ws/hww4kyAceMMGEbu7H3YlJZzJKKY.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Hier geht es darum zu verhindern, dass sich jemand als Host ausgibt (MITM Attack). Beantworten Sie in diesem Fall die Frage mit yes. Achten Sie aber natürlich im Feld auf den Fingerprint.

Ethernet Interface konfigurieren

Für das Ethernet Interface verwenden wir eine statische IP Adresse im Netz 192.168.50.0/24.

Editieren Sie das File /etc/dhcpcd.conf mit nano auf dem Target und fügen Sie folgende Konfiguration ein:

Infos zur Config

Genauere Informationen zur Config finden Sie hier https://www.raspberrypi.com/documentation/computers/configuration.html#static-ip-addresses

interface eth0
static ip_address=192.168.50.1/24

Starten Sie den dhcpcd service neu mit sudo systemctl restart dhcpcd.service um die Konfiguration zu übernehmen. Sie werden zwischendurch aus dem Target rausgeworfen, da auch die IP Adresse auf dem WiFi Interface vom DHCP Server neu angefordert wird.

Schliessen Sie nun das Twisted Pair Kabel ans Ethernet Interface an und den USB-Ethernet Adapter an Ihrem Hostsystem. Tunneln Sie den USB Port auch hier wie beim UART Adapter in Ihr Gastsystem durch.

Konfigurieren Sie das neue Ethernet Interface in Ubuntu via GUI (Settings oben rechts).

Validieren Sie mit ip addr hostseitig, dass die Konfiguration geklappt hat. Versuchen Sie nun das Target mit ping 192.168.50.1 zu erreichen. Falls das klappt können Sie mit ssh pi@192.168.50.1 einloggen.

ifconfig vs ip

Der Command ifconfig ist weit verbreitet und erlaubt die Konfiguration auf Netzwerk Intrfaces. Allerdings wird er in Zukunft durch den generischeren Command ip ersetzt, welcher auch andere Tools beinhaltet.

Mehr dazu hier unter net-tools: https://wiki.archlinux.org/title/Network_configuration

Booten Sie Host und Target neu um sicherzustellen, dass die Verbindung via Ethernet klappt, da im folgenden Teil UART nicht vorhanden sein wird.

GPIO

GPIO Mapping bei den B/B+ Models des Raspberry PI

Achtung

Alle Signale und Schnittstellen auf der GPIO-Stiftleiste führen ungeschützt auf den SoC und haben 3.3V CMOS Logikpegel. Daran angelegte Signale müssen deshalb zwingend im Bereich 0V...3.3V liegen, andernfalls nimmt der SoC schaden!! Generell gilt: Zwecks Potenzialausgleich allfällig vorhandener statischer Ladung sollten GPIO- und Bauteilpins nie mit den Fingern berührt werden sonder zuerst immer die Print-Kanten sowie ein leitendendes Stecker-Gehäuse!

  • Verwenden Sie den Command 'raspi-gpio um den Zustand der GPIOS zu lesen.
  • Schliessen Sie den Taster im Kit an einen der GPIOs und GND an (Pin 39 und 40).
  • Konfigueiren Sie den Pin als Pullup und versuchen Sie einen "Button Press" zu detektieren.

Arbeiten mit dem Terminal

Im folgenden finden Sie die wichtigsten Eckpfeiler im Umgang mit dem Terminal auf Linux.

Führen Sie nachfolgend alle Commands auf Ihrem Target aus.

BASH Basics

Pfade

Das HOME Directory kann unter $HOME oder ~ gefunden werden.

Folgende Commands wechseln alle ins HOME.

bash
cd $HOME
cd ~
cd

keine sudo im Home

In Ihrem Homeverzeichnis benötigen Sie sudo nicht.

Copy + Paste

  • SHIFT + CTRL + C
  • SHIFT + CTRL + V

Shell verlassen

Sie können eine Shell entweder mit CTRL + D oder via exit verlassen.

Programm abbrechen

Dauert ein Programm zu langen, können Sie es mit CTRL + C abbrechen.

ping 8.8.8.8
CTRL + C

Programm stoppen und in den Hintergrund spedieren

Mit CTRL+Z unterbrechen Sie ein Programm. Mit bg schieben Sie es in den Hintergrund des Terminals, wo es weiterlaufen wird. Mit fg können Sie das Programm wieder in den Vordergrund holen.

ping 8.8.8.8
CTRL + Z
bg
ping 8.8.4.4
CTRL + C
fg
CTRL +C

ping

Mit ping senden Sie einem Host einen Layer 3 ICMP request um zu sehen ob er responsive ist. Ein Host muss aber nicht zwingend Antworten.

ping gitlab.fhnw.ch

TIP

Falls Sie das WiFi Netz dnet im Lab verwenden um "nach aussen" zu pingen, wird dies nicht funktionieren, das der Ping aus Infrastrukturgründen unterdrückt wird. HTTP requests werden allerdings funktionieren.

curl

Command um eine HTTP Verbindung aufzubauen. Installieren Sie curl nach:

bash
sudo apt install curl
bash
sudo curl -vvv https://gitlab.fhnw.ch

Aufgabe

Schauen Sie sich die Headers genau an. Was fällt Ihnen auf?

cat

Fileinhalt ausgeben:

cat /etc/network/interfaces

nano

Editieren Sie dieses File mit nano und speichern Sie es

nano /etc/network/interfaces

Was fällt Ihnen auf?

sudo

Super do (etwas als Administrator ausführen)

sudo nano /etc/network/interfaces

raspi-config

Einfaches UI für raspbian um das System zu konfigurieren.

echo

echo "Hallo!!"

File schreiben

echo "Hallo!!" > hello.txt
cat hello.txt
echo "... WORLD" >> hello.txt
cat hello.txt

manual pages (man)

Man pages enthalten Dokumentation zu den Commands: Lesen Sie man ls.

dmesg

Kernel Messages, können auf Probleme hinweisen.

bash
dmesg

tail

Bei viel Output interessiert vielleicht nur die letzten paar Zeilen:

bash
tail /var/log/syslog
bash
dmesg | tail -50

grep

Suchen:

bash
cat /etc/network/interfaces | grep eth1

Rekursiv im Pfad (hier /etc):

bash
grep -sr "eth1" /etc

Welche Packages wurden selber nachinstalliert?

bash
cat /var/log/apt/history.log

BASH Scripts

Ein BASH-Script erlaubt das ausführen verschiedener Commands hintereinander. Folgendes Script-File config.sh konfiguriert eth0.

bash
#!/bin/bash
ifconfig eth0 192.168.60.1 netmask 255.255.255.0

Die Zeile #!/bin/bash gibt an, dass es sich in diesem File um ein BASH Script handelt.

Ausgeführt werden kann das Script folgendermassen:

bash
bash config.sh

Das File kann auch ausführbar gemacht werden:

bash
chmod 755
./config.sh

... das hat den Vorteil, dass bash nicht mehr vor den Filenamen gesetzt werden muss.

config File schreiben via BASH Script

Oftmals würde man gerne den Inhalt eines config Files direkt in einem BASH-Script zwecks Übersicht übergeben. Ein mehrzeiliges File wlan.conf kann folgendermassen geschrieben werden:

bash
#!/bin/bash

cat << EOF > wlan.conf
#ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CH

network={
        ssid="ESSID"
        psk="PASSWORT"
}
EOF

config File mit sudo

Für Systemweite Files wie /etc/network/interfaces oder /etc/dnsmasq.conf funktioniert dies leider nicht, da die Berechtigung fehlt. Im folgenden kann tee zusammen mit sudo verwendet werden um das Problem zu lösen.

bash
#!/bin/bash

cat << EOF | sudo tee /etc/network/interfaces
auto eth0 lo

iface eth0 inet static
    address 192.168.60.1/24
EOF

Netzwerkkonfiguration persistieren

Klassisch wird in Unix Systemen das File /etc/network/interfaces zur Konfiguration von Netzwerkinterfaces verwendet.

Je nach Distribution werden andere Configfiles für das Managemnet von Netzwerkinterfaces verwendet. Eine übersich finden Sie im Arch Wiki, welches die wichtigsten aufzählt: https://wiki.archlinux.org/title/Network_configuration

Unter anderem bringt auch systemd einen eigenen Service systemd-networkd hierfür mit.

Pi Sense Hat verbinden (Teil von esl, skip in ebssd)

Montieren Sie das Addon Modul "Sense Hat" mit den Standoffs. Nehmen Sie das Raspberry Pi vom Strom und schalten Sie es vorher auch Softwareseitig mit sudo systemctl poweroff aus.

Stecken Sie nun das HAT aufs Raspberry Pi (folgen Sie den Anweisungen hier: https://projects.raspberrypi.org/en/projects/getting-started-with-the-sense-hat/2).

Installieren Sie das Package sense-hat.

sudo apt install sense-hat

Wechseln Sie in das Verzeichnis /usr/src/sense-hat/examples. Führen Sie ./python-sense-hat/text-scroll.py aus. Sie sollten nun auf der LED Matrix eine Nachricht sehen.

Folgendes Schema beschreibt den Sense-HAT https://datasheets.raspberrypi.com/sense-hat/sense-hat-schematics.pdf

Pinout: https://pinout.xyz/pinout/sense_hat#

Mit Peripherie arbeiten

Studieren Sie folgendes Tutorial: https://projects.raspberrypi.org/en/projects/getting-started-with-the-sense-hat/0

  • Wie können Sie LEDs auf dem LED Array setzen?
  • Wie können Sie Joystick Presses einlesen?
  • Was sind die Vorteile von Python gegenüber C? Was sind wohl Nachteile?

Aufgabe

Schreiben Sie ein Programm in Python, welches einen Punkt auf dem LED Array mit dem Joystick bewegt.