Software Release – Yocto 2.3 BSP


Gateworks would like to announce the release & support of Yocto 2.3 on the Ventana Family of Single Board Computers that feature the NXP i.MX6 processor. Yocto 2.3 is under the code name Pyro. Yocto is a Linux operating system that Gateworks uses for video input and output, networking, GUI, IoT and more. Gateworks has added enhancements to Yocto 2.3 thus creating the Gateworks Yocto 2.3 BSP.

Gateworks Yocto 2.3 BSP Highlights:

  • Using the gateworks_fslc_3.14_1.0.x_ga kernel
  • gstreamer-1.12 with many optional plugins enabled
  • gstreamer-imx-0.12.0 – provides access to hardware accelerated codecs, scaling colorspace conversions and compositing
  • 34 additional gstreamer plugins providing more codec/source/sink options
  • Updated gcc 4.9.2 -> 6.3.0
  • Updated bluez4 -> bluez5 (changed in Yocto 2.0)
  • Changed uClibc 0.9.3 -> musl 1.1.16 (changed in Yocto 2.2)
  • Changed midori browser -> ephiphany browser (changed in Yocto 2.0)
  • Changed libmad -> libmpg123 (MP3 audio decoder lib changed as the mad project is no longer maintained) (changed in Yocto 2.2)
  • Changed udev -> eudev (for compatibility when using sysvinit with newer kernels) (changed in Yocto 2.1)
  • Vivante GPU kernel driver (galcore) built as loadable kernel module (allowing flexibility to use an older kernel with a newer graphics release)
  • Changed fsl-alsa-plugins -> imx-alsa-plugins
  • and more changes listed here

To get started, Gateworks has posted Pre-Built images on the Yocto Wiki page. This includes tarballs and ubis for multimedia and gui images. The wiki page also documents building Yocto 2.3 from source.

Yocto Software Wiki Page

Please update to the Gateworks Yocto 2.3 BSP and contact Gateworks with any questions. The support team is happy and available to work with you!

Customizing Android & Yocto Splash Screens


Customizing Android & Yocto Splash Screens

Have you ever wanted to replace that ugly default logo or animation that is shown when your system boots up? Now you can with custom splash screens!

What is a Splash Screen?

  • The logo or image displayed on screen during the boot process of an embedded system

3 Splash Screens can be Customized:

  • Bootloader
  • Linux Kernel
  • Operating System

Why are Splash Screens Important?

  • Splash screen are displayed immediately conveying proper operation and responsiveness to the user
  • Replacing the splash screen logo with a company logo will effectively brand a product for customer deployment

Read more on the Gateworks Software Wiki:
Customizing the Splash Screen

Linux Wireless AP Configuration


Configuring wireless in Linux can be complex. A very common question is how does one configure an IEEE802.11 radio as an Access Point (AP) from the command line interface (CLI). This question is difficult to answer due to evolving wireless technologies. Several tools have been created to aid in configuring these devices, but are generally not user friendly or portable across operating systems (OS).

For example, in the OpenWrt OS, the UCI System allows users to configure their wireless devices easily through the CLI. But because this tool is tightly integrated into OpenWrt, it is not easily portable to other OS’s such as Yocto or Ubuntu. Other OS’s attempt to solve wireless configuration in their own way, but fail to provide an easy solution from the serial console (e.g. using NetworkManager in Ubuntu).

Gateworks has created an open-source script called hostapd-conf that creates configuration files for the Host Access Point Daemon (hostapd), a standard Linux user space daemon that is capable of creating and managing wireless APs. Both tools are provided by default on our Yocto 1.8 BSP. The inspiration came from the simplicity of the tool wpa_passphrase, a simple CLI tool that allows for an easy way to connect to wireless APs.

The hostapd-conf script is written for users wanting to create an AP out of a radio with optional WPA2 encryption. It gathers information on a specified wireless interface through iw and uses the data to generate a proper hostapd.conf file. It has only a few dependencies to run: iw, sed, grep, and cut. It should be noted that the ‘full’ version of these tools are required as opposed to the ‘busybox’ version.

The hostapd-conf script usage is shown below:

root@ventana:~# hostapd-conf --help
hostapd-conf [OPTIONS] <iface> <ssid> <channel> [<htmode>] [<passphrase>]

 --help           - This help
 --br-name <name> - Name of bridge
 --wds <0|1>      - Enable WDS
 --version        - Print this version: v1.0

hostapd-conf also has the ability to list supported MCS Rates (e.g. HT20, VHT80 etc) per channel that the radio is allowed to emit radiation on. For example, the WLE350NX radio, an 802.11a/b/g/n radio, has the following channels that it may emit on:

root@ventana:~# hostapd-conf wlan0
ERROR: SSID is empty

Available Channel Information on phy2
Band 1:
Channel  Freq  Allowed HT Modes
0        0000  HT20 HT40 HT40+ HT40-
1        2412  HT20 HT40 HT40+
2        2417  HT20 HT40 HT40+
3        2422  HT20 HT40 HT40+
4        2427  HT20 HT40 HT40+
5        2432  HT20 HT40 HT40+ HT40-
6        2437  HT20 HT40 HT40+ HT40-
7        2442  HT20 HT40 HT40+ HT40-
8        2447  HT20 HT40 HT40+ HT40-
9        2452  HT20 HT40 HT40+ HT40-
10       2457  HT20 HT40 HT40-
11       2462  HT20 HT40 HT40-

Band 2:
Channel  Freq  Allowed HT Modes
0        0000  HT20 HT40 HT40+ HT40-
36       5180  HT20 HT40 HT40+
40       5200  HT20 HT40 HT40-
44       5220  HT20 HT40 HT40+
48       5240  HT20 HT40 HT40-
149      5745  HT20 HT40 HT40+
153      5765  HT20 HT40 HT40-
157      5785  HT20 HT40 HT40+
161      5805  HT20 HT40 HT40-
165      5825  HT20 HT40 HT40+

From the above output, it is shown that the WLE350NX radio has two bands to select from, 2.4GHz and 5GHz. Each band offers a specific range of channels it can output on with their allowed MCS Rates, which hostapd-conf details out. Please note that the ‘0’ channel is special to hostapd. It enables Automatic Channel Selection (ACS) in order to allow the radio to pick the best channel to emit radiation on.

The following invocation of hostapd-conf will create a configuration file to output at 5.18GHz with 40MHz bandwidth, with an SSID of “wlan0-ssid” and WPA2 passphrase of “nowayinside”:

root@ventana:~# hostapd-conf wlan0 "wlan0-ssid" 36 HT40 "nowayinside"
 IFACE:      wlan0
 PHY:        phy2
 SSID:       wlan0-ssid
 CHANNEL:    36
 FREQ:       5180
 BANDS:      1 2
 HWMODE:     a
 HTMODE:     HT40
 PASSPHRASE: nowayinside

Written to hostapd-phy2.conf

The output of the script, hostapd-phy2.conf, now holds the proper configuration required by hostapd to configure the radio to these specifications. Please take care to edit this newly created file manually if your country requires Dynamic Frequency Selection (DFS) for the channel you are emitting on. The following lines may need to be uncommented / edited:


In an example system, four wireless radio’s were connected to a Gateworks GW5400 Single Board Computer: 1x using ath5k, 2x using ath9k, and 1x using ath10k. After following the above steps for each of the radio’s in the system, hostapd was invoked and all four radio’s were configured with different channels and technologies.

By default, hostapd will use the configuration file located at /etc/hostapd.conf. Because of this, first stop any hostapd instance that is running. Then, simply start it as a background process, for example:

root@ventana:~# /etc/init.d/hostapd stop
Stopping HOSTAP Daemon: stopped /usr/sbin/hostapd (pid 14876)
root@ventana:~# hostapd -B hostapd-phy0.conf hostapd-phy1.conf hostapd-phy2.conf hostapd-phy3.conf
Configuration file: hostapd-phy0.conf
Configuration file: hostapd-phy1.conf
Configuration file: hostapd-phy2.conf
Configuration file: hostapd-phy3.conf
[   34.390709] IPv6: ADDRCONF(NETDEV_UP): wlan3: link is not ready
wlan3: interface state UNINITIALIZED->HT_SCAN
[   34.409563] IPv6: ADDRCONF(NETDEV_UP): wlan2: link is not ready
Using interface wlan2 with hwaddr 00:24:2b:38:be:db and ssid "wlan2-ssid"
[   34.473223] IPv6: ADDRCONF(NETDEV_CHANGE): wlan2: link becomes ready
wlan2: interface state UNINITIALIZED->ENABLED
[   34.514817] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
wlan0: interface state UNINITIALIZED->HT_SCAN
[   34.542100] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
wlan1: interface state UNINITIALIZED->HT_SCAN
root@ventana:~# [   34.614847] IPv6: ADDRCONF(NETDEV_CHANGE): wlan3: link becomes ready
[   34.798881] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   35.620978] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready

Other examples may also be found here on our Wireless wiki page. There are examples on how to create a routed AP, bridged AP, and includes other valuable information


Adaptive Bitrate Streaming using GStreamer

Gateworks’ SBCs are widely used for streaming audio and video over the network via Ethernet, 802.11 WiFi, or 4G LTE Cellular. Networks are dynamic, whether from network load, RF interference or signal strength thus throughput will vary requiring intelligent and flexible applications to adjust as necessary.

Adaptive Bitrate Streaming is the concept of adjusting the quality of video and/or audio depending on the quality of the network connection or server load. This type of technology is widely implemented throughout technology today, evident in streaming services like Netflix and YouTube.

​Gateworks created an example GStreamer application named gst-variable-rtsp-server. This application includes a mechanism for auto-adjusting the encoding bitrate depending on the number of clients connected to the server.

gst-variable-rtsp-server can change either the quant-param or the bitrate parameters of the imxvpuenc_h264 encoder. The quant-param will only be used if the pipeline is set to Variable Bitrate mode (VBR). This can be accomplished by passing in the -b 0 flag to the program. Otherwise, gst-variable-rtsp-server will change the bitrate of the stream.

The algorithm used to change both bitrate and quant-param are based on the --steps input (defaulted to 5). For example, if using the default steps value of 5, if the min bitrate was 500 and max bitrate was 2000, it would take 5 clients to adjust from the highest to the lowest quality.

In the below example, the rtsp server was configured to degrade from 10mbps to 400kbps bitrate within 5 steps. Please see below for our results.

gst-variable-rtsp-server --steps=5 --max-bitrate=10000 --min-bitrate=400 --src-element=imxv4l2videosrc --video-in=/dev/video0


For higher resolution images of the above, please view here (10Mbps), here (2.8Mbps), and here (400Kbps).

For more information and sample GStreamer pipelines, please visit our Software Wiki Pages:

GStreamer Compositing for Streaming H.264 Video

Gateworks recently featured a blog in which 8 video cameras were connected to a Gateworks Ventana SBC and then displayed on a HDMI monitor. This is useful for localized applications. For remote applications there is another solution.

Remote applications require streaming the multiple video streams over the network (Ethernet or WiFi). For bandwidth efficiency, all camera inputs can be joined together into a single frame and then transmitted across the network.


To join all the streams into a single frame, a software element of GStreamer called a compositor is used. Older versions of the compositor relied on the CPU and caused choppy video. Gateworks recently started using gstreamer-imx which contains a hardware accelerated compositor which is far superior. With this compositor, each stream can be positioned on the frame and then linked to a RTSP stream in the H.264 format.

An example is shown with two Gateworks Ventana SBCs that are on the same network.

Start the following pipeline on the SBC with the cameras connected:

gst-variable-rtsp-server -u \
 "imxv4l2videosrc device=/dev/video2 queue-size=55 ! queue2 ! c.sink_0 \
 imxv4l2videosrc device=/dev/video3 queue-size=55 ! queue2 ! c.sink_1 \
 imxv4l2videosrc device=/dev/video4 queue-size=55 ! queue2 ! c.sink_2 \
 imxv4l2videosrc device=/dev/video5 queue-size=55 ! queue2 ! c.sink_3 \
 imxv4l2videosrc device=/dev/video6 queue-size=55 ! queue2 ! c.sink_4 \
 imxv4l2videosrc device=/dev/video7 queue-size=55 ! queue2 ! c.sink_5 \
 imxv4l2videosrc device=/dev/video8 queue-size=55 ! queue2 ! c.sink_6 \
 imxv4l2videosrc device=/dev/video9 queue-size=55 ! queue2 ! c.sink_7 \
 imxg2dcompositor name=c background-color=0xffffff \
 sink_0::xpos=0 sink_0::ypos=0 sink_0::width=320 sink_0::height=360 sink_0::fill_color=0x00000000 \
 sink_1::xpos=320 sink_1::ypos=0 sink_1::width=320 sink_1::height=360 sink_1::fill_color=0x00000000 \
 sink_2::xpos=640 sink_2::ypos=0 sink_2::width=320 sink_2::height=360 sink_2::fill_color=0x00000000 \
 sink_3::xpos=960 sink_3::ypos=0 sink_3::width=320 sink_3::height=360 sink_3::fill_color=0x00000000 \
 sink_4::xpos=0 sink_4::ypos=360 sink_4::width=320 sink_4::height=360 sink_4::fill_color=0x00000000 \
 sink_5::xpos=320 sink_5::ypos=360 sink_5::width=320 sink_5::height=360 sink_5::fill_color=0x00000000 \
 sink_6::xpos=640 sink_6::ypos=360 sink_6::width=320 sink_6::height=360 sink_6::fill_color=0x00000000 \
 sink_7::xpos=960 sink_7::ypos=360 sink_7::width=320 sink_7::height=360 sink_7::fill_color=0x00000000 \
 ! queue2 ! video/x-raw, width=1280, height=720 ! imxipuvideotransform \
 ! imxvpuenc_h264 bitrate=20000 ! rtph264pay name=pay0 pt=96"

Then, on the receiving board that is connected to an HDMI display, start the following pipeline with the actual IP address (example IP below) of the board with the cameras:

gst-launch-1.0 rtspsrc location=rtsp:// latency=100 ! \
queue2 ! decodebin ! autovideosink

For more information and code examples, please visit the related Gateworks Software Wiki links below:


Capturing 8 Video Inputs on Gateworks Ventana SBCs

Gateworks would like to introduce software support for the AVC8000nano Mini-PCIe card on the Ventana Single Board Computers.

final_screen_camerasFigure 1: Screen capture of 8 analog cameras displayed on a monitor using the Gateworks Ventana SBC

Many applications, such as surveillance, require multiple analog video inputs from cameras for monitoring. These cameras can then be displayed on an HDMI monitor or streamed over the network.

final_camerasonboardFigure 2: Eight analog video cameras mounted in a circular fashion for a panoramic capture

Gateworks has added driver support for the AVC8000nano in it’s Yocto Linux board support package. This driver support will reveal 8 video interfaces in Linux, such as /dev/video0, /dev/video1, etc. These video interfaces can then be accessed using GStreamer.

final_pictureofcardFigure 3: The AVC8000nano installed on a Gateworks Ventana SBC with 8 analog cameras connected 

The OpenCV software library could be used to stitch the different inputs together to create a seamless panorama.

For more information and example GStreamer pipelines on how to use this card, please visit our Software Wiki Page:

AVC8000nano Software Wiki Page

Future blog posts will cover streaming multiple camera inputs as well as adaptive bitrate streaming! Please subscribe to the Gateworks blog to the right!



i.MX6 GStreamer-imx Plugins – Tutorial & Example Pipelines

Gateworks would like to announce the support of the GStreamer-imx plugins starting with Yocto 1.8 on the Ventana family of Single Board Computers.


Gateworks, the leading supplier of Powerful ARM based Single Board Computer solutions using the Freescale i.MX6, has invested countless engineering hours researching and mastering GStreamer for the i.MX series of processors. Gateworks would like to share this GStreamer research with the rest of the i.MX community of developers!

There are two main versions of GStreamer used on the i.MX6 processor:0.10 and 1.0. Version 1.0 is now the latest standard.

The i.MX6 processor has hardware blocks such as the IPU (image processing unit), VPU (video processing unit), and GPU (graphical processing unit). The main advantage of using these hardware blocks is that there is no CPU cost for decoding/encoding a stream because another hardware block in the i.MX6 takes care of it. This leaves the CPU free to deal with other programs etc.

The GStreamer app works with ‘plugins’. A plugin comprises of elements that can do work on a media stream. For example, the imxvpudec is a VPU based decoder plugin.

This post is specifically about the plugins. There are different versions and sets of plugins available.

Gateworks has chosen to use the GStreamer-imx plugins for the following reasons:

  • Open Source Development model: The project is on github and is very active
  • The main developer has been a GStreamer contributer for some time now and is very active in the GStreamer community
  • The source is very well documented and easy to follow
  • Things are done in a very standard GStreamer way

Plugin List

For a thorough description of each plugin, why and how to use it, please visit the Gateworks Software Wiki GStreamer Page

The following is a list of plugins provided by the latest version of gstreamer-imx (0.11.0)

Type Plugin(s) Element(s) Comments
Audio Decoder imxaudio imxuniaudiodec Uses i.MX uniaudio codecs for decoding
Audio Encoder imxaudio imxmp3audioenc Uses i.MX for MP3 audio encoding
Device Sources imxv4l2video imxv4l2videosrc Get camera source via v4l2
Video Decoder imxvpu imxvpudec VPU Based decoder
Video Encoder imxvpu imxvpuenc_mjpeg; imxvpuenc_mpeg4; imxvpuenc_h264; imxvpuenc_h263 VPU Based encoders
Video Render (sink) imxg2d; imxpxp; imxeglvivsink; imxipu imxg2dvideosink; imxpxpvideosink; imxeglvivsink; imxipuvideosink g2d1, ipu1, pxp2, and egl (overlay) video sinks
Video Converter imxg2d; imxpxp; imxipu imxg2dvideotransform; imxpxpvideotransform; imxipuvideotransform g2d, pxp, egl and ipu video filter/converter/scalars3
Video Compositing imxg2d; imxipu imxg2dcompositor, imxipucompositor gpu/ipu accelerated compositing

1. The g2d sink is very flexible in the types of input video it can take, but doesn’t have the ability to convert to as many formats as the IPU can. On the other hand, the IPU is very picky with it’s input (e.g. requiring a 1px offset) and the kernel driver is very undocumented, but as stated before, it can convert between many colorspace formats.
2. Note that the PXP sinks are only applicable to the i.mx6solo and i.mx6dl processors.
3. Please see note 1 above.

Plugin Example Pipeline

For example, to encode a video from a camera on /dev/video2 into h.264 and save it to a file:

#Take camera input /dev/video2, encode it to h264 at a bitrate of 10mbit/s (CBR) and save to a file.
gst-launch-1.0 imxv4l2videosrc device=/dev/video2 ! imxvpuenc_h264 bitrate=10000 ! filesink location=/tmp/file.mp4

Many more pipeline examples are described and listed on the Gateworks Software Wiki GStreamer Pipelines page


Using GStreamer 1.0 with the GStreamer-imx plugins is a powerful way to access and apply the multimedia capabilities of the Freescale i.MX6 processors on the Gateworks SBCs.

For more information, visit the Gateworks Software Wiki GStreamer Pipelines page

If there are other examples you would like to see, please add to the discussion!

Yocto 1.8 Linux BSP – Gateworks i.MX6 SBCs


Gateworks would like to announce the release & support of Yocto 1.8 on the Ventana Family of Single Board Computers that feature the Freescale i.MX6 processor. Yocto 1.8 is under the code name Fido. Yocto is a Linux operating system that Gateworks uses for video input and output, networking, GUI, IoT and more. Gateworks recommends all customers and engineers update from Yocto 1.7 to Yocto 1.8.

Yocto 1.8 Updates and Highlights:

  • Updated Linux Kernel. The kernel has been updated to the Gateworks downstream 3.14 vendor kernel.
  • Updated the gstreamer video framework to gstreamer-imx and gstreamer-1.0
    • Updated to the gstreamer-imx community based plugins for utilizing i.MX6 hardware acceleration to provide increased flexibility over what is provided from Freescale in gst-fsl-plugins
    • Included RTSP server application, gst-variable-rtsp-server
    • More gstreamer-imx information is available here
  • AVC8000nano Video Capture Mini-PCIe card for up to 8x D1 inputs
    • The driver is now loaded by default in Yocto 1.8 and tested with gstreamer-imx
    • This is very useful for surveillance and compositing many video sources into one screen
    • Find more information here
  • Updated uboot-envtools
  • Updated gsc-update tool
  • Support for the GW16113 IO Expansion module via the gwsoc software tool. More information available here.

To get started, Gateworks has posted Pre-Built images on the Yocto Wiki page. This includes tarballs and ubis for multimedia and gui images. The wiki page also documents building Yocto 1.8 from source.

Yocto Software Wiki Page

Please update to Yocto 1.8 and contact Gateworks with any questions. Their support team is happy and available to work with you!

H.264 Video Streaming over Network

The Gateworks Ventana Family of Single Board Computers is well suited for multimedia applications. The Freescale i.MX6 processor has hardware encoding and decoding making for very little processor overhead. To take advantage of this hardware decoding it is important to always use the ‘vpuenc’ and ‘vpudec’ gstreamer pipeline elements.

  • vpuenc – VPU (Video Processing Unit) encoder
  • vpudec – VPU (Video Processing Unit) decoder

It is also important to use a high compression video format such as H.264 which uses significantly less network bandwidth while retaining good quality. To use this, we encode by using the following pipeline element:

  • vpuenc codec=avc

When streaming over the network, TCP is a reliable protocol but often too stringent for video applications. UDP is often preferred so that even if packets are lost, the stream will continue without waiting for the lost packet. To use UDP, we use the udpsrc and udpsink pipeline elements.

Here is an example pipeline to stream live video over the network using two Ventana Single Board Computers. Be sure the two single board computers are on the same network and can ping each other. Both should also be running OpenEmbedded Yocto operating system. An analog video camera is connected to the video input on a Ventana board. Another Ventana board is connected to a HDMI monitor.

Start the server board pipeline first: (board with HDMI monitor connected)

root@ventana:~# gst-launch udpsrc port=9001 ! h264parse ! queue max-size-time=0 max-size-buffers=0 ! vpudec low-latency=true frame-plus=1 framedrop=false ! mfw_v4lsink sync=false async=false

Then start the client pipeline (board with analog video camera connected)

root@ventana:~# gst-launch tvsrc device=/dev/video0 ! vpuenc codec=avc ! udpsink host= port=9001 sync=false async=false

For more information, please view our GStreamer Software Wiki here:

Yocto 1.6 BSP Released for Gateworks Ventana Family

Gateworks is proud to announce the release of Open Embedded Yocto Daisy Version 1.6 for its Ventana Family of Single Board Computers.  The Yocto BSP is primarily used by customers utilizing the video features on the Ventana family. This release is a major improvement over the previous 3.0.35 kernel.

Key Features of this release:

  • 3.10.17 Freescale Vendor Kernel
    • Featuring Device Tree
    • Full VPU & GPU Support
    • Latest and Improved Wireless Tools
      • hostapd 2.2
      • wpa_supplicant 2.2
      • iw 3.15
      • compat-wireless 20140516
  • Updated Packages in Yocto 1.6 Daisy ( Reference: )
  • Hard Float support for i.MX6

Please find our prebuilt UBI on our Software Wiki here:

To build from source:

Please find our main OpenEmbedded Software Wiki page here:

For more information, the main Software Wiki Link is here: