Linux embedded log/errors detector on Imx8's NPU A developer released sentinel-imxd, a lightweight log-anomaly detection daemon for the NXP i.MX 8M Plus that runs a TensorFlow Lite autoencoder on the board's Vivante NPU via the VX external delegate. The daemon listens to the systemd journal and D-Bus system-bus signals, sanitizes each line into a template, encodes it into a fixed INT8 [1, 64] vector, and triggers an external alert script when reconstruction loss (MSE) exceeds a calibrated threshold of roughly 3× the p90 normal loss. Training runs on a host in Docker using the same encoder as the daemon, with the quantized model_quant.tflite and threshold deployed back to the board over SSH. A lightweight log-anomaly detection daemon for the NXP i.MX 8M Plus Yocto / Debian , plus a self-contained Docker build + model-training environment. The daemon sentinel-imxd listens to the systemd journal kernel messages plus userspace service logs and D-Bus system-bus signals, sanitizes each line into a stable template , encodes it into a fixed INT8 1, 64 vector, optionally runs a TensorFlow Lite autoencoder on the Vivante NPU via the VX external delegate, and — when the reconstruction loss MSE exceeds a threshold — runs an external alert script. The whole story on one page — train on your computer in Docker , deploy over SSH, and detect on the board's NPU. Regenerate it any time with scripts/make-diagram.sh https://github.com/leonardosalvatore/sentinel-imx-sys/blob/main/scripts/make-diagram.sh PDF https://github.com/leonardosalvatore/sentinel-imx-sys/blob/main/docs/sentinel-imx-solution.pdf . Want the why ? The technical brief Why standard log parsing fails on embedded boards https://github.com/leonardosalvatore/sentinel-imx-sys/blob/main/docs/why-on-device-anomaly-detection.pdf makes the case for on-device anomaly detection over rule-based / cloud log parsing. Regenerate it with python3 docs/make whitepaper.py . https://www.youtube.com/watch?v=d EssCpTC4E https://www.youtube.com/watch?v=d EssCpTC4E Everything runs on the device . Journal kernel + userspace and D-Bus events flow through a single sd-event loop, get turned into a normalized INT8 feature vector, and are scored by a TensorFlow Lite autoencoder that is offloaded to the Vivante NPU. A high reconstruction error triggers a user-supplied action script. Kernel messages arrive via journald which is the canonical /dev/kmsg consumer rather than a second raw reader; entries with TRANSPORT=kernel are still tagged source=kmsg , while other journal entries are tagged source=journal . One tradeoff: journald rate-limits RateLimitBurst , so a severe printk storm can be dropped in the journal where a raw kmsg reader would still see it until the ring buffer wraps. flowchart LR subgraph board "i.MX 8M Plus · Yocto / Debian" direction LR subgraph src "Event sources" direction TB journal "systemd-journald