Damit MeshCTL auf dem Raspberry PI läuft, wird ein Kernel mit der Crypto API benötigt (vgl. MeshCTL not working on RPI).
Ansonsten erscheint folgende Fehlermeldung:

Meshctl fails at loading the prov_db

Leider wird die aktuelle Version von Raspbian mit einem Kernel ohne Unterstützung der Crypto API ausgeliefert. Im Internet habe ich keinen passenden Kernel zum Download gefunden. Daher bleibt nichts anderes übrig als einen passenden Kernel selbst zu erzeugen.
Ich persönlich habe vorher noch nie einen Kernel kompiliert und andere scheinen ebenfalls nicht zu wissen, wie man sich den passenden Kernel erzeugen kann (siehe meshctl fails on rpi 3)

Die folgende Herangehensweise bezieht sich auf die Anleitungen von Raspberry Pi Kernel Compilation und Kernel Building
Der Kernel kann auf dem Raspberry PI, auf dem es ca 12h dauert, oder auf einem leistungsstärkeren Gerät erzeugt werden. Wir erzeugen den Kernel auf dem Laptop.
Daher wird wird ein Cross-Compiler benötigt, der auf Github geladen werden kann

$ git clone git://github.com/raspberrypi/tools.git --depth 1

Darüber hinaus erzeugen wir eine Umgebungsvariable CCPREFIX, die auf den Ordner samt Prefix der Binärdatei des Compiler zeigt.

$ export CCPREFIX=/.../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-

Zusätzlich werden die Quelldateien des Kernels geladen.

$ git clone --depth=1 https://github.com/raspberrypi/linux

Als nächstes wird

$ make mrproper

aufgerufen, um sicherzustellen, dass unsere Build-Ordner sauber und keine Reste von vorherigen Build-Vorgängen übrig sind.

Als nächstes holen wir uns die Konfiguration des aktuellen Kernels.

zcat /proc/config.gz > .config

Falls die Datei /proc/config.gz nicht existiert, kann die mit folgendem Befehl erzeugt werden:

$ sudo modprobe configs

Wir kopieren die erzeugte Datei .config in den Ordner linux, wo unsere Quelldateien des Kernels sind.
In der Konfigurationsdatei .config ändern bzw erzeugen wir folgende Einträge:

CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_USER_API=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y

Diese Einträge werden für die Unterstützung der Crypto API benötigt.
Nun kann der make-Vorgang starten:

$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} -j5

Da wir nicht auf dem Raspberry den Kernel kompilieren, werden die lokalen Umgebungsvariablen ARCH und CROSS_COMPILE benötigt. Zusätzlich wird der Parameter -jX übergeben, wobei X die Anzahl der verfügbaren Kerne + 1 darstellt (vgl. Parallel Execution), um den Vorgang zu beschleunigen.

Des Weiteren müssen neben dem Kernel-Image noch die Module erzeugt werden.

$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} modules

Nach dem erfolgreichen Abschließen des Kompiliervorgangs liegt die Kernel-Datei Image in ../linux/arch/arm/boot. Diese benennen wir beispielsweise in kernelmesh.img um und speichern diese auf der SD-Karte Partition boot. Hier bearbeiten wir die Datei config.txt

kernel=kernelmesh.img

Mit dem Befehl lsblk erhalten wir folgende Baumdarstellung, auf der wir erkennen können, wo die SD-Partitionen gemountet sind.

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0   477G  0 disk 
├─sda4        8:4    0 243,6G  0 part /media/xx/02062F64062F57C5
├─sda2        8:2    0   100M  0 part /boot/efi
├─sda5        8:5    0 140,6G  0 part /
├─sda3        8:3    0    16M  0 part 
└─sda1        8:1    0   450M  0 part 
mmcblk0     179:0    0  59,6G  0 disk 
├─mmcblk0p2 179:2    0  59,6G  0 part /media/xx/b4ea8e46-fe87-4ddd-9e94-506c37005ac5
└─mmcblk0p1 179:1    0  41,8M  0 part /media/xx/boot

Die Module werden auf der Partition installiert, auf der sich normalerweise der home-Ordner sowie lib-Ordner befinden. In diesem Beispiel:

$ sudo make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=/media/xx/b4ea8e46-fe87-4ddd-9e94-506c37005ac5/ modules_install 

Nun sollte der neue Kernel installiert sein. Wenn der Raspberry PI noch startet, kann mit dem Befehl

$ uname -a

die aktuelle Version des Kernels ausgegeben werden und meshctl erfolgreich gestartet werden.

Viele Grüße
Arthur