Für den Betrieb von UniPi-Geräten sind einige Anpassungen des generischen Images notwendig.
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.
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/
Ö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