Graph-IT

Zusätzliche Konfiguration für UniPi

Für den Betrieb von UniPi-Geräten sind einige Anpassungen des generischen Images notwendig.

UniPi-Kernel-Modul

Der Hersteller stellt unter https://github.com/UniPiTechnology/unipi-kernel-modules-v1 ein Kernel-Modul zur Verfügung.

Dieses haben wir unter https://git.graph-it.com/?p=graphit/unipi-kernel.git so angepast, dass es auf aktuellen Kernel-Versionen kompiliert werden kann.

Eine neuere Version der Kernel-Module wird unter https://github.com/UniPiTechnology/unipi-kernel-modules entwickelt, ist aber zu diesem Zeitpunkt noch nicht ausreichend komplett und dokumentiert.

Konfiguration aus Hersteller-Image

Außerdem stellt der Hersteller unter https://kb.unipi.technology/en:hw:02-neuron:download-image:03-opensource ein Debian-basiertes Betriebssytem-Image zur Verfügung.

Dieses können wir mounten, um die Konfiguration näher zu untersuchen:

$ unzip neuron-opensource-os_image-20220607.0.zip
$ sudo losetup --find --show neuron-opensource-os_image-20220607.0.img
$ sudo partprobe /dev/loop0
$ sudo mount /dev/loop0p2 /mnt/
$ sudo mount /dev/loop0p1 /mnt/boot/

Anpassungen gegenüber dem generischen Image

Öffnen einer Kopie des generischen Images:

$ sudo losetup --find --show 20YY-MM-DD-controlpi-unipi.img
$ sudo partprobe /dev/loop0
$ sudo mount /dev/loop0p2 /mnt/
$ sudo mount /dev/loop0p1 /mnt/boot/
$ TERM=xterm sudo arch-chroot /mnt/

Abhängigkeiten installieren:

# pacman -S linux-rpi-headers dtc

Kompilieren und installieren von Kernel und Device-Tree:

# su - pi
$ git clone git://git.graph-it.com/graphit/unipi-kernel.git
$ cd unipi-kernel/
$ export LINUX_DIR_PATH=/lib/modules/X.YY.ZZ-rpi-ARCH/build
$ make
$ sudo -E make install
$ cd device_tree/
$ dtc -O dtb -@ -o neuron-spi-new.dtbo neuron-spi-new-overlay.dts
$ sudo cp neuron-spi-new.dtbo /boot/overlays/
$ cd ~/
$ rm -r unipi-kernel/
$ exit

Wie auch beim generischen Image wird der Paket-Cache nach allen Installationen geleert, um möglichst Platz zu sparen:

# paccache -rk0

Installieren des ControlPi-Plugins:

# su - pi
$ source controlpi-venv/bin/activate
$ pip install git+git://git.graph-it.com/graphit/controlpi-unipi.git
$ exit

Die Konfigurations-Dateien werden – wie auch beim generischen Image – aus diesem git-Repository synchronisiert:

$ sudo rsync -rlp unipi/boot /mnt/
$ sudo rsync -rlp unipi/etc /mnt/
$ rsync -rlp unipi/home/pi /mnt/home/

Im Einzelnen sind dies:

unipi/
├── boot
│   └── config.txt
├── etc
│   ├── modules-load.d
│   │   └── unipi.conf
│   └── systemd
│       └── system
│           ├── multi-user.target.wants
│           │   └── rmmodunipi.service -> /etc/systemd/system/rmmodunipi.service
│           └── rmmodunipi.service
└── home
    └── pi
        └── conf.json

Der pigpio-Daemon, der im generischen Image eingeschaltet ist, wird für das UniPi-Image ausgeschaltet:

# rm /etc/systemd/system/multi-user.target.wants/pigpiod.service

Das Schließen und Aufspielen des Images funktioniert dann genau wie für das generische Image:

$ sudo umount /mnt/boot/
$ sudo umount /mnt/
$ sudo losetup --detach /dev/loop0
$ xz 20YY-MM-DD-controlpi-unipi.img
$ xz --decompress --stdout 20YY-MM-DD-controlpi-unipi.img.xz | sudo dd of=/dev/sdx bs=1M oflag=sync status=progress