Issues After Flashing Image on Verdin iMX8M Plus (Kirkstone) – Missing Tools and Features

Hi,

I was building a Yocto-based image for the Verdin iMX8M Plus (Kirkstone) following the official guide: Accelerating Edge AI on Toradex Modules | Hailo Processor
After successfully flashing the image to the device, I encountered a few issues I hope you can help clarify:

Hailo drivers appear to be installed and functioning correctly:

Although hailo GStreamer elements are present, the hailotools plugin is missing:

root@verdin-imx8mp-15601684:/var/rootdirs/home/root# gst-inspect-1.0 hailo
Plugin Details:
  Name                     hailo
  Description              hailo gstreamer plugin
  Filename                 /usr/lib/gstreamer-1.0/libgsthailo.so
  Version                  1.0
  License                  unknown
  Source module            hailo
  Binary package           GStreamer
  Origin URL               http://gstreamer.net/

  hailodevicestats: hailodevicestats element
  hailonet: hailonet element
  synchailonet: sync hailonet element

  3 features:
  +-- 3 elements

root@verdin-imx8mp-15601684:/var/rootdirs/home/root# gst-inspect-1.0 hailotools
No such element or plugin 'hailotools'

Currently, I don’t see any H.264 hardware encoder available in the GStreamer plugins list:

root@verdin-imx8mp-15601684:/var/rootdirs/home/root# gst-inspect-1.0 | grep enc
adpcmenc:  adpcmenc: ADPCM encoder
aes:  aesenc: aesenc
alaw:  alawenc: A Law audio encoder
audiolatency:  audiolatency: AudioLatency
audiovisualizers:  spectrascope: Frequency spectrum scope
bz2:  bz2enc: BZ2 encoder
closedcaption:  line21encoder: Line 21 CC Encoder
dvbsubenc:  dvbsubenc: DVB subtitle encoder
encoding:  encodebin: Encoder Bin
encoding:  encodebin2: Encoder Bin
flac:  flacenc: FLAC audio encoder
jpeg:  jpegenc: JPEG image encoder
lame:  lamemp3enc: L.A.M.E. mp3 encoder
mulaw:  mulawenc: Mu Law audio encoder
multifile:  imagesequencesrc: Image Sequence Source
png:  pngenc: PNG image encoder
pnm:  pnmenc: PNM image encoder
removesilence:  removesilence: RemoveSilence
rtp:  rtpredenc: Redundant Audio Data (RED) Encoder
rtp:  rtpulpfecenc: RTP FEC Encoder
rtpmanager:  rtpst2022-1-fecenc: SMPTE 2022-1 FEC encoder
sbc:  sbcenc: Bluetooth SBC audio encoder
siren:  sirenenc: Siren Encoder element
speex:  speexenc: Speex audio encoder
subenc:  srtenc: Srt encoder
subenc:  webvttenc: WebVTT encoder
theora:  theoraenc: Theora video encoder
vorbis:  vorbisenc: Vorbis audio encoder
wavenc:  wavenc: WAV audio muxer
webp:  webpenc: WEBP image encoder
y4menc:  y4menc: YUV4MPEG video encoder
root@verdin-imx8mp-15601684:/var/rootdirs/home/root#

Finally, I noticed there’s no package manager (like opkg ) available on the image, and basic tools like git and docker are missing. What’s the recommended way to include these tools in the build or install them later?

Any help in resolving these issues would be greatly appreciated!
Thanks in advance.

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello, and thank you for your detailed question!

Let me address each of your points regarding your Yocto-based image on the Verdin iMX8M Plus (Kirkstone).


1. Hailo GStreamer Plugins

Your GStreamer output shows that the Hailo plugin is present with the expected elements (hailonet, synchailonet, hailodevicestats). However, there is no gst element or plugin called hailotools. In the context of Hailo, “Hailo Tools” typically refers to command-line utilities, not GStreamer plugins. Your image appears to have the correct Hailo GStreamer elements. As long as you have entries for hailonet and similar, you’re set for GStreamer Hailo inferencing. For general Hailo command-line tools, you should ensure the following packages are included in your Yocto image build:

IMAGE_INSTALL:append = " libhailort hailortcli pyhailort libgsthailo hailo-pci hailo-firmware"

You can add these to your conf/local.conf and rebuild your image.
(Reference)


2. H.264 Hardware Encoder (VPU) in GStreamer

To enable the H.264 hardware encoder, you need to make sure the corresponding GStreamer elements are installed. For BSP 7 and i.MX8M Plus, the hardware encoder element is v4l2h264enc. If it does not show in gst-inspect-1.0, it may not be included in your image:

Add the following to your conf/local.conf:

IMAGE_INSTALL:append = " gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-base"

You may also want to ensure related VPU packages are included, depending on your application. After rebuilding and reflashing, gst-inspect-1.0 | grep h264 should list v4l2h264enc or similar.

(Reference)


3. Adding Basic Tools (opkg, git, docker)

By default, Yocto images are minimal and do not include package managers or development tools. The standard and recommended approach is to add these tools at build time:

  • For basic tools:
    IMAGE_INSTALL:append = " git docker "
    
  • If you want a package manager on the device, you can add opkg:
    IMAGE_INSTALL:append = " opkg "
    

These lines should be included in your conf/local.conf before building the image. This will ensure the utilities are present in your final root filesystem.

(Reference)


4. Extra Tips

  • After changing conf/local.conf, always run a clean build or at least bitbake <your-image> to update the output.
  • If you’re still missing specific plugins after these changes, use bitbake -s | grep <package> to check for their availability.

Summary of Steps:

  1. Add missing packages to conf/local.conf using IMAGE_INSTALL:append.
  2. Rebuild and flash the updated image.
  3. Confirm with gst-inspect-1.0 and by checking for git, docker, or opkg on the device.

Feel free to follow up if you run into further issues with specific GST elements or tools.

Best regards,
Toradex AI Assistant.

Hi @oshadha

Just a clarification, this is not an “official guide on how to build a yocto-based image”. :sweat_smile:

It’s a blog post that showcases a simple example of how to get things running on Toradex + Hailo; it’s not intended to be a “ready-to-use” image.

You can find the “official” building with Yocto guide on our developer website.
https://developer.toradex.com/linux-bsp/os-development/build-yocto/


Going back to the steps in the blog, this is the part where you install the dependencies

bitbake-layers add-layer meta-hailo/meta-hailo-accelerator
bitbake-layers add-layer meta-hailo/meta-hailo-libhailort
bitbake-layers add-layer meta-hailo/meta-hailo-tappas
bitbake-layers add-layer meta-hailo/meta-hailo-vpu
bitbake-layers add-layer meta-toradex-framos
bitbake-layers add-layer meta-gstreamer1.0
IMAGE_INSTALL:append = " libhailort hailortcli pyhailort libgsthailo hailo-pci hailo-firmware"
IMAGE_INSTALL:append = " gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad"
IMAGE_INSTALL:append = " v4l-utils"

I think this hailotools plugin comes from this repo.

In this case you can add libgsthailotools to IMAGE_INSTALL:append


Well, this is going to be tricky, but the way to use the hardware accelerated h264 encoding is using the NPX downstream Gstreamer + plugins.
You can refer to the Dockerfile in the github repo mentioned in this article.


In this example, we are using the Torizon OS Minimal, so it includes only the very core funcionalities, you can check more details here.

The way to include any dependency is using Yocto, in a similar way we did in the blog:

  • We started with the torizon-minimal image,
  • added the Hailo libs, GStreamer and Framos ISP dependencies in the build,
  • Flash the image with the dependencies already installed.