Quantcast
Channel: Boundary Devices
Viewing all 391 articles
Browse latest View live

Update Factory for i.MX platforms

$
0
0

Our partner Kynetics released an OTA update solution for IoT platforms named Update Factory.

Update Factory

This solution leverages SWUpdate, which we talked about in a previous post, using its Suricatta feature to connect to a nice and easy-to-use web interface to manage all your devices.

For the impatient

If you want to test a pre-built image for our Nitrogen platforms, you simply need to register to the following website:

You will then receive a Yocto-based image file as well as some credentials to login to the management website.

The only setting required is to update /etc/swupdate/swupdate.cfg to match your website tenant ID.

Update Factory architecture

For those interested in details about the architecture, we invite you to watch Diego Rondini’s presentation during last Embedded Linux Conference Europe:

Note that the slides associated to this presentation are also freely accessible:

Although the video includes a nice demo towards the end, the next section will cover a simple update use-case.

Update Factory demo

This section will show the different steps required to apply an update on your platform using the pre-built image provided by Kynetics.

First, when you log in the Update Factory website, you will see a list of devices that are up and running.

uf-demo-1

You can see above that each platform is distinguished based on its MAC address since it is a unique number.

Also, in the Distributions tab, there is one Test distro update package which was uploaded beforehand.

If you drag & drop that package onto the device listed, a pop-up will appear which allows you to assign that update to the device (notice the Forced parameter).

uf-demo-2

Once the assignment is done, the package is uploaded to the platform and the update process starts.

Note that the pre-built image is based on Yocto and is using a Single-Copy scheme but the same mechanism can also apply to a Double-Copy scheme.

Also, in order for Forced updates to be automatically applied, you need to export a variable in /etc/swupdate/update.env as it isn’t the default setting:

export UPDATE_FORCED=true

Just like the rest of the update process, it is all explained in the documentation.

uf-demo-3

At this point, the website is waiting for the platform to be done with the update process, whether it worked or failed, to show its final status.

uf-demo-4

In the above, you can see that the device was properly updated and is now running the Test distro v1.0.

For those who prefer to see that same mechanism in video, Kynetics also prepared one for you:

The above is the simplest example provided by this solution, but the tool offers:

  • Target filtering, to separate platforms from different countries for instance
  • Planned updates, to have updates happen during the night or week-end for instance
  • Rollout groups, to have updates happening in a known order

The next section will give pointers for you to explore those different features.

Going Further

We recommend reading the nicely written documentation:

It includes, for instance, a section on how to create an update manually.

Also, a set of videos are available to help understanding and mastering the web interface:

If you want to dig into the source code, Kynetics shares their Yocto layer on Github:

Finally, the above article is oriented towards Yocto, but Update Factory can also be used with Android and can surely be adapted to other OSes.

 

As usual, feel free to share your experience/remarks in the comment section below.

The post Update Factory for i.MX platforms appeared first on Boundary Devices.


Introducing The Nitrogen8M – The First Commercial i.MX 8M SBC

$
0
0

Boundary Devices is pleased to announce that the Nitrogen8M SBC is available for pre-order now. While we may not be the first to announce an i.MX 8M based solution, we are the first to announce a fully designed and tested i.MX 8M based Single Board Computer (SBC) suitable for rugged, commercial use.

Nitrogen8M SBC        Nitrogen8M Bottom View

We will offer three options for our customers to pre-order, all of which will ship in the Spring. Our Nitrogen8M selections at launch include:

The Nitrogen8M features NXP’s new i.MX 8M Quad processor to support today’s data hungry applications that require high-performance, low-power processors. The board also features a robust set of features that will allow for rapid evaluation and development for a variety of embedded and IoT applications.

As the company who brought you the globally adopted SABRE Lite i.MX 6 development board (now BD-SL-i.MX6), we have leveraged our long history of NXP partnership and i.MX processor experience to design the next-generation, go-to evaluation platform for engineers looking to get started with the i.MX 8M application processor.

Processors, Memory and Storage

The Nitrogen8M is launching with the i.MX 8M Quad processor, with i.MX 8M Dual and QuadLite versions available on request. The i.MX 8MQ features 4 Cortex-A53 (1.5GHz) and 1 Cortex-M4F (266MHz) cores.

It comes standard with 2Gb of LPDDR4 of RAM, and can be expanded to 4GB. The launch version features a microSD Card slot, with an optional 8GB eMMC version that can expand up to 128GB. 

Networking Specifications

Nitrogen8M includes the latest in network connectivity options to serve IoT applications that employ edge, cloud, and/or fog computing.

The SBC comes with a Gigabit Ethernet port as well as the BD-SDMAC, a pre-certified WiFi 802.11ac + Bluetooth 4.1 module based on the QCA9377. All this allows engineers flexibility when determining how their end products stay connected.

Audio and Video Specifications

Nitrogen8M was designed to take full advantage of the i.MX 8M’s industry-leading audio, voice and video processing, leveraging the GC7000Lite’s 2D/3D/VG graphics processing.

The board includes a HDMI (4K@60fps) and 4-lane MIPI-DSI (1080p) display connections; two, 4-lane MIPI-CSI; and headphone, microphone and amplifier interfaces.

 Operating System Support

As with all of Boundary Devices’ SBCs and SOMs, the Nitrogen8M will come with an extensive set of operating system options.

The board supports Yocto, Ubuntu/Debian, Buildroot, FreeRTOS (M4 Core), and Android OS images. All of these OS options will include our best-in-class support via our Wiki, Blog, and Support page.

Full Specifications for the Nitrogen8M

The Nitrogen8M comes pre-populated with the most robust set of connectivity options available to allow for rapid development and validation of your next project. The boards are also be built with Boundary Device’s industry-leading, production-ready standards and include options such as industrial temp and conformal coating.

All this allows the Nitrogen8M to be used as an evaluation platform or production-ready solution. Review the full list of the specifications below. More information including pricing and availability can be found on the Nitrogen8M product page:

  • CPU — i.MX 8M Quad Core (x4 Cortex-A53 @ 1.5GHz; Cortex-M4 @ 266MHz)
  • RAM — 2GB LPDDR4 (4GB Optional)
  • Storage — micro SD slot or 8GB eMMC (upgradeable to 128GB)
  • NOR — 16MB (QSPI)
  • GPU — Vivante GC7000Lite
  • Camera — x2 4-lane MIPI-CSI
  • Display — x1 HDMI (w/CEC) and x1 MIPI DSI
  • Wireless —802.11 ac and Bluetooth 4.1 BD-SDMAC Module (QCA9377)
  • Networking — Gigabit Ethernet port
  • Other I/O:
    • x3 USB 3.0 Host ports
    • x1 USB 3.0 OTG port
    • x3 I2C
    • x1 SPI
    • x3 RS-232
    • x1 SD/MMC
    • x1 RTC + battery
    • x2 PCIe (1 Mini-PCIE connector, 1 on expansion connector)
    • x1 JTAG
  • Power — 5V DC input
  • Operating Temperature — 0 to 70°C (Industrial Optional)
  • Operating System — Yocto, Ubuntu/Debian, Buildroot, FreeRTOS (M4 Core), Android

The post Introducing The Nitrogen8M – The First Commercial i.MX 8M SBC appeared first on Boundary Devices.

Ubuntu Bionic 18.04 LTS for i.MX6/7 boards – June 2018 (kernel 4.9.x)

$
0
0

 

Ubuntu Bionic 18.04 LTS – XFCE4 desktop

In the last month Canonical released a new LTS version of Ubuntu named Bionic. We are glad to offer new images for i.MX6/7 boards with the current 4.9.x_1.0.0 kernel.

Now we changed to XFCE4 desktop since the previous MATE desktop we used with Xenial was a little too big and clumsy, XFCE offers better trade-off speed/size for embedded GUI desktop environment. As usual, a console image is also available for those who don’t need a GUI desktop.

This time we also created an other GUI desktop image without the demo applications.

These systems contain NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Important !

Before installing this image please check your U-Boot version. The above images require U-Boot version 2017.07  to be used. Make sure to visit our wiki if you need to upgrade: https://boundarydevices.com/wiki/u-boot/ .You can find the bootscript in the /boot subdirectory now, its named boot.scr . The partition labels are set if you use dd or ddrescue to create the disk. If you use your own method please check the boot partition labels, because the fstab boots by label (LABEL=sys-16h for example) now. You can use ext2label to modify partition label.

Programming the image

The image is a slightly-less-than-4GiB image file containing the partition table.  Inspired by ubuntu-mate.org, I changed over from dd to another disk copy program called ddrescue. It is a much more talkative program, although dd does do it’s job honestly. I don’t like mute programs, you never know whats happening in a given moment. For example, if you want to create an SD card for a console image, you need to do the following :

$ sudo apt-get install gddrescue xz-utils util-linux
$ gunzip 20180526-nitrogen-4.9.x_1.0.0_ga-bionic-en_US-console_armhf.img.gz
$ sudo ddrescue -D --force 20180526-nitrogen-4.9.x_1.0.0_ga-bionic-en_US-console_armhf.img /dev/sdX

You have to replace sdX with your actual SDHC reader/writer device. Use the lsblk command to check it.

Type lsblk with unplugged SDHC reader, then insert the device, and type lsblk again. A new node will be added , that is your SDHC reader/writer device.

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B). The user ubuntuhas administrator rights, but doesn’t need to enter password at sudo command. We wanted to make life easier at the cost of some security. If you want to change this please type:

ubuntu@bionic-xfce:~$ sudo visudo

, and comment out or delete the last line with “ubuntu” and “NOPASSWD:

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User ubuntu has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

ubuntu@bionic-xfce:~$ sudo mkdir /root/.ssh
ubuntu@bionic-xfce:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
ubuntu@bionic-xfce:~$ sudo chmod 600 /root/.ssh/auth*
ubuntu@bionic-xfce:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 4.9.x kernel, essentially everything is supported including :

  • Vivante GPU accelerations
  • C&M VPU accelerations
  • Wi-Fi and Bluetooth modules for Tiwi-BLE, BD_BCOM, BD-SDMAC
  • All kind of storage devices , SDHC card, eMMC, SATA hdd, USB pen sticks, cell modems
  • All of our supported touch panels
  • IMX Capture devices including OV56xx parallel and mipi cameras, Toshiba BD-HDMI-MIPI converter, UVC cameras
  • It supports i.MX6Q/DL/SX and i.MX7D board’s BSP

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What’s new in this release

  • The Linux kernel was upgraded to 4.9.x ( meta-package name: linux-boundary-14b )
  • GPU driver was upgraded to Vivante 6.2.2p0 ( meta-package name: imx-gpu-viv-b13-… ).
  • The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it’s an externally built module. This change makes the graphics system modular, and more upgradeable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
  • The package gstreamer-imx was upgraded to 0.13.0-2ubuntu9
  • The new NXP/Vivante GPU SDK was added : imx-gpu-sdk 4.0.2 . You can get the source with the usual apt-get source command. This is a brand new SDK with many new demos, for example OpenCL, OpenVG,G2D, and for OpenVX and Vulkan, but those demos will be supported only by the i.MX8 SoC.
  • The distribution was upgraded to Bionic 18.04 LTS . Here are some main component versions :
    • Xorg server 1.19.6
    • gstreamer1.0 1.14.0
    • bluez 5.48
    • Qt5 5.9.5
    • apt 1.6.1
    • chromium 66.0.3359.181-0ubuntu0.18.04.1
    • dpkg 1.19.0
    • gcc/g++ 7.3.0
    • firefox-esr 66.0.1
    • libwayland 1.14.0
    • weston 1.11.0-1
    • XFCE Desktop Environment 4.12.3
  • Silex WiFi / Bluetooth is supported in Bionic also, as well as in Stretch, Xenial and Jessie.

 


Let’s see some interesting new demos,  this is a screen of the imx-gpu-sdk OpenGLESv2 Blur demo, a spinning bubble with environment mapping:

IMX GPU SDK 4.0.2 Gaussian Blur demo

You can find many other interesting samples and framework in the SDK, including GLESv2, GLESv3, OpenCL, OpenVG.


This Qt5  Qml demo below shows how to apply various effects on a running video stream, using GPU shaders :

Qt 5.9.5 Cinematic Experience demo

Qt 5.9.5 Cinematic Experience demo

You can apply various effects on a playing video and/or recording camera screen . Source is available.


Fullscreen H264 file streaming

Hobbit movie trailer via internet

 

GPU development libraries

The package imx-gpu-viv-b13-dev ( development headers and libraries for OpenGL / ESv2 / ESv3 / Khronos / OpenVG / OpenCL /G2D ) is installed by default. You have to set the headers path, before any other headers, or you might include the mesa headers first, and you don’t want to do that. For example :

export CFLAGS="-I/usr/include/vivante ${CFLAGS}"

and you have to set the library path as well :

export LDFLAGS="-L/usr/lib/arm-linux-gnueabihf/vivante ${LDFLAGS}"

Alternatively you can use the much more precise pkg-config way, in the makefile. Setting the flags in case of X11 system :

PKG_CONFIG_PATH = /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig

EGL :

CFLAGS += $(shell pkg-config --cflags egl_x11)

LDFLAGS += $(shell pkg-config --libs egl_x11)

GLESv1 :

CFLAGS += $(shell pkg-config --cflags glesv1_cm_x11)

LDFLAGS += $(shell pkg-config --libs glesv1_cm_x11)

GLESv2 :

CFLAGS += $(shell pkg-config --cflags glesv2_x11)

LDFLAGS += $(shell pkg-config --libs glesv2_x11)

OpenVG :

CFLAGS += $(shell pkg-config --cflags vg_x11)

LDFLAGS += $(shell pkg-config --libs vg_x11)

In case of FB backend change the _x11 postfix above to _fb, thats all.

OpenCL is the same at both fb and x11 :

CFLAGS += $(shell pkg-config --cflags opencl)

LDFLAGS += $(shell pkg-config --libs opencl)

Check the directory /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig for more information


 

As always, please give us some feedback and let us know how things work for you.

The post Ubuntu Bionic 18.04 LTS for i.MX6/7 boards – June 2018 (kernel 4.9.x) appeared first on Boundary Devices.

Update Factory for i.MX platforms

$
0
0

Our partner Kynetics released an OTA update solution for IoT platforms named Update Factory.

Update Factory

This solution leverages SWUpdate, which we talked about in a previous post, using its Suricatta feature to connect to a nice and easy-to-use web interface to manage all your devices.

For the impatient

If you want to test a pre-built image for our Nitrogen platforms, you simply need to register to the following website:

You will then receive a Yocto-based image file as well as some credentials to login to the management website.

The only setting required is to update /etc/swupdate/swupdate.cfg to match your website tenant ID.

Update Factory architecture

For those interested in details about the architecture, we invite you to watch Diego Rondini’s presentation during last Embedded Linux Conference Europe:

Note that the slides associated to this presentation are also freely accessible:

Although the video includes a nice demo towards the end, the next section will cover a simple update use-case.

Update Factory demo

This section will show the different steps required to apply an update on your platform using the pre-built image provided by Kynetics.

First, when you log in the Update Factory website, you will see a list of devices that are up and running.

uf-demo-1

You can see above that each platform is distinguished based on its MAC address since it is a unique number.

Also, in the Distributions tab, there is one Test distro update package which was uploaded beforehand.

If you drag & drop that package onto the device listed, a pop-up will appear which allows you to assign that update to the device (notice the Forced parameter).

uf-demo-2

Once the assignment is done, the package is uploaded to the platform and the update process starts.

Note that the pre-built image is based on Yocto and is using a Single-Copy scheme but the same mechanism can also apply to a Double-Copy scheme.

Also, in order for Forced updates to be automatically applied, you need to export a variable in /etc/swupdate/update.env as it isn’t the default setting:

export UPDATE_FORCED=true

Just like the rest of the update process, it is all explained in the documentation.

uf-demo-3

At this point, the website is waiting for the platform to be done with the update process, whether it worked or failed, to show its final status.

uf-demo-4

In the above, you can see that the device was properly updated and is now running the Test distro v1.0.

For those who prefer to see that same mechanism in video, Kynetics also prepared one for you:

The above is the simplest example provided by this solution, but the tool offers:

  • Target filtering, to separate platforms from different countries for instance
  • Planned updates, to have updates happen during the night or week-end for instance
  • Rollout groups, to have updates happening in a known order

The next section will give pointers for you to explore those different features.

Going Further

We recommend reading the nicely written documentation:

It includes, for instance, a section on how to create an update manually.

Also, a set of videos are available to help understanding and mastering the web interface:

If you want to dig into the source code, Kynetics shares their Yocto layer on Github:

Finally, the above article is oriented towards Yocto, but Update Factory can also be used with Android and can surely be adapted to other OSes.

 

As usual, feel free to share your experience/remarks in the comment section below.

The post Update Factory for i.MX platforms appeared first on Boundary Devices.

Ubuntu Bionic 18.04 LTS for i.MX6/7 boards – June 2018 (kernel 4.9.x)

$
0
0

 

Ubuntu Bionic 18.04 LTS - XFCE4 desktop

Ubuntu Bionic 18.04 LTS – XFCE4 desktop

In the last month Canonical released a new LTS version of Ubuntu named Bionic. We are glad to offer new images of Ubuntu Bionic for i.MX6 and i.MX7  Nitrogen boards with the current 4.9.x_1.0.0 kernel.

Now we changed to XFCE4 desktop since the previous MATE desktop we used with Xenial was a little too big and clumsy, XFCE offers better trade-off speed/size for embedded GUI desktop environment. As usual, a console image is also available for those who don’t need a GUI desktop.

This time we also created an other GUI desktop image without the demo applications.

These systems contain NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Important !

Before installing this image please check your U-Boot version. The above images require U-Boot version 2017.07  to be used. Make sure to visit our wiki if you need to upgrade: https://boundarydevices.com/wiki/u-boot/ .You can find the bootscript in the /boot subdirectory now, its named boot.scr . The partition labels are set if you use dd or ddrescue to create the disk. If you use your own method please check the boot partition labels, because the fstab boots by label (LABEL=sys-16h for example) now. You can use ext2label to modify partition label.

Programming the image

The image is a slightly-less-than-4GiB image file containing the partition table.  Inspired by ubuntu-mate.org, I changed over from dd to another disk copy program called ddrescue. It is a much more talkative program, although dd does do it’s job honestly. I don’t like mute programs, you never know whats happening in a given moment. For example, if you want to create an SD card for a console image, you need to do the following :

$ sudo apt-get install gddrescue xz-utils util-linux
$ gunzip 20180606-nitrogen-4.9.x_1.0.0_ga-bionic-en_US-console_armhf.img.gz
$ sudo ddrescue -D --force 20180606-nitrogen-4.9.x_1.0.0_ga-bionic-en_US-console_armhf.img /dev/sdX

You have to replace sdX with your actual SDHC reader/writer device. Use the lsblk command to check it.

Type lsblk with unplugged SDHC reader, then insert the device, and type lsblk again. A new node will be added , that is your SDHC reader/writer device.

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B). The user ubuntuhas administrator rights, but doesn’t need to enter password at sudo command. We wanted to make life easier at the cost of some security. If you want to change this please type:

ubuntu@bionic-xfce:~$ sudo visudo

, and comment out or delete the last line with “ubuntu” and “NOPASSWD:

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User ubuntu has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

ubuntu@bionic-xfce:~$ sudo mkdir /root/.ssh
ubuntu@bionic-xfce:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
ubuntu@bionic-xfce:~$ sudo chmod 600 /root/.ssh/auth*
ubuntu@bionic-xfce:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 4.9.x kernel, essentially everything is supported including :

  • Vivante GPU accelerations
  • C&M VPU accelerations
  • Wi-Fi and Bluetooth modules for Tiwi-BLE, BD_BCOM, BD-SDMAC
  • All kind of storage devices , SDHC card, eMMC, SATA hdd, USB pen sticks, cell modems
  • All of our supported touch panels
  • IMX Capture devices including OV56xx parallel and mipi cameras, Toshiba BD-HDMI-MIPI converter, UVC cameras
  • It supports i.MX6Q/DL/SX and i.MX7D board’s BSP

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What’s new in this release

  • The Linux kernel was upgraded to 4.9.x ( meta-package name: linux-boundary-14b )
  • GPU driver was upgraded to Vivante 6.2.2p0 ( meta-package name: imx-gpu-viv-b13-… ).
  • The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it’s an externally built module. This change makes the graphics system modular, and more upgradeable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
  • The package gstreamer-imx was upgraded to 0.13.0-2ubuntu9
  • The new NXP/Vivante GPU SDK was added : imx-gpu-sdk 4.0.2 . You can get the source with the usual apt-get source command. This is a brand new SDK with many new demos, for example OpenCL, OpenVG,G2D, and for OpenVX and Vulkan, but those demos will be supported only by the i.MX8 SoC.
  • The distribution was upgraded to Bionic 18.04 LTS . Here are some main component versions :
    • Xorg server 1.19.6
    • gstreamer1.0 1.14.0
    • bluez 5.48
    • Qt5 5.9.5
    • apt 1.6.1
    • chromium 66.0.3359.181-0ubuntu0.18.04.1
    • dpkg 1.19.0
    • gcc/g++ 7.3.0
    • firefox-esr 66.0.1
    • libwayland 1.14.0
    • weston 1.11.0-1
    • XFCE Desktop Environment 4.12.3
  • Silex WiFi / Bluetooth is supported in Bionic also, as well as in Stretch, Xenial and Jessie.

 


Let’s see some interesting new demos,  this is a screen of the imx-gpu-sdk OpenGLESv2 Blur demo, a spinning bubble with environment mapping:

IMX GPU SDK 4.0.2 Gaussian Blur demo Ubuntu Bionic

IMX GPU SDK 4.0.2 Gaussian Blur demo

You can find many other interesting samples and framework in the SDK, including GLESv2, GLESv3, OpenCL, OpenVG.


This Qt5  Qml demo below shows how to apply various effects on a running video stream, using GPU shaders :

Qt 5.9.5 Cinematic Experience demo Ubuntu Bionic

Qt 5.9.5 Cinematic Experience demo

You can apply various effects on a playing video and/or recording camera screen . Source is available.


Fullscreen H264 file streaming

Ubuntu Bionic running movie trailer

Hobbit movie trailer via internet

 

GPU development libraries

The package imx-gpu-viv-b13-dev ( development headers and libraries for OpenGL / ESv2 / ESv3 / Khronos / OpenVG / OpenCL /G2D ) is installed by default. You have to set the headers path, before any other headers, or you might include the mesa headers first, and you don’t want to do that. For example :

export CFLAGS="-I/usr/include/vivante ${CFLAGS}"

and you have to set the library path as well :

export LDFLAGS="-L/usr/lib/arm-linux-gnueabihf/vivante ${LDFLAGS}"

Alternatively you can use the much more precise pkg-config way, in the makefile. Setting the flags in case of X11 system :

PKG_CONFIG_PATH = /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig

EGL :

CFLAGS += $(shell pkg-config --cflags egl_x11)

LDFLAGS += $(shell pkg-config --libs egl_x11)

GLESv1 :

CFLAGS += $(shell pkg-config --cflags glesv1_cm_x11)

LDFLAGS += $(shell pkg-config --libs glesv1_cm_x11)

GLESv2 :

CFLAGS += $(shell pkg-config --cflags glesv2_x11)

LDFLAGS += $(shell pkg-config --libs glesv2_x11)

OpenVG :

CFLAGS += $(shell pkg-config --cflags vg_x11)

LDFLAGS += $(shell pkg-config --libs vg_x11)

In case of FB backend change the _x11 postfix above to _fb, thats all.

OpenCL is the same at both fb and x11 :

CFLAGS += $(shell pkg-config --cflags opencl)

LDFLAGS += $(shell pkg-config --libs opencl)

Check the directory /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig for more information


 

As always, please give us some feedback and let us know how things work for you.

The post Ubuntu Bionic 18.04 LTS for i.MX6/7 boards – June 2018 (kernel 4.9.x) appeared first on Boundary Devices.

Nitrogen8M – Android Demo

$
0
0

The latest addition to our Nitrogen family, the Nitrogen8M, based on the NXP i.MX8MQ processor, will start shipping soon so it is time to show some demos of it.

The Setup

For this demo, we simply use:

Nitrogen8M

The Demo

This video shows different aspects of the platform:

  • Graphics performances
    • OS UI and Qt5 apps all leverage the GC7000Lite GPU for better performances
  • Multimedia performances
    • Decoding a 4K video (James Bond trailer)

Some Antutu benchmarking will be made in the coming weeks to compare the performances against GC2000 (i.MX6Q) and GC3000 (i.MX6QP) GPU used in our previous platforms.

The Details

For those interested in software details, this demo is using:

  • Android Oreo 8.1 (imx-o8.1.0_1.3.0_8m-ga)
  • Kernel 4.9.x from Boundary Devices
  • Vivante driver v6.2.4.p1

The Android BSP is already available but isn’t ready for prime time just yet.

For the curious that still want to build that version not fully tested, here is the manifest:

Stay tuned for more updates on this exciting new platform.

 

As usual, feel free to comment in the section below!

The post Nitrogen8M – Android Demo appeared first on Boundary Devices.

Introducing the First Mipi Display Designed for i.MX8M

$
0
0

Boundary Devices is excited to release the first commercially available Mipi Display designed for NXP’s i.MX8M family of processors. 

 BD080MCC1 MIPI Display (back)

Product Resolution Brightness Interface Screen Size
BD080MCC1 1200×1920 400 cd/m² Mipi (4 Lane) 8-inch
 
Overview

The BD080MCC1 is an 8″ MIPI DSI Display with 1200×1920 resolution and integrated PCAP multi-touch.  The display was purpose built to take advantage of the i.MX8M’s graphics processing power and it has been tested and validated using the Nitrogen8M SBC using a specially designed daughter board provided when you purchase the display and accessory kit.

Because of Boundary Device’s rigorous quality control, the BD080MCC1 display can be used as a development platform alongside the Nitrogen8M series of SBCs and SOMs as well as in production ready projects. If you need help integrating the display with your project, you can find free resources in our Blog or contact Info@boundarydevices.com to inquire about our expert Display Integration services.

You can see the BD080MCC1 in action in an upcoming demo blog.

Specifications

Below is a table of the BD080MCC1’s full specifications:

Item Specification
Part Number BD080MCC1
LCD Size 8.0 inch
Resolution 1200 x 1920
Display Mode Normally Black
Pixel pitch 0. 0897 (W) X 0. 0897 (H) mm
Active area 107.64(W) X 172.22(H) mm
Module size 132.6(W) X1 93.6(H) X 3.6(D) mm
Pixel arrangement RGB Vertical stripe
Interface MIPI(4lane)
Backlight Power Consumption 1.4W 
Weight 73g
Brightness  400 cd/m²

The post Introducing the First Mipi Display Designed for i.MX8M appeared first on Boundary Devices.

Nitrogen8M – Android Benchmark

$
0
0

Since the Nitrogen8M leverages the new NXP i.MX8MQ processor we thought providing a benchmark would be useful for those unfamiliar with the new CPU features. For this  exercise we settled on AnTuTu Benchmark on Android. 

Benchmark 

When it comes to benchmarking, many options are available from using a custom-made app for a specific purpose to a well-known standard application.

Since we want those figures to easily be understood and reproducible, we chose to run the infamous AnTuTu Benchmark on Android.

AnTuTu

Software Setup

  • AnTuTu v6.2.7
  • Android 7.1.1 for Nitrogen6_MAX platforms
  • Android 8.1.0 for Nitrogen8M

Hardware Setup

  1. Nitrogen6_MAX i.MX6 Quad (4GB of RAM)
  2. Nitrogen6_MAX i.MX6 QuadPlus (4GB of RAM)
  3. Nitrogen8M i.MX8 MQuad (2GB of RAM)

The benchmark was run on each platform on two different displays setup to see if there was a difference in the results:

Benchmark Results

For those who haven’t run AnTuTu on a platform, here is what the final output looks like:

antutu_8m_1280x800_gles31

It contains 4 different categories:

  • 3D: GPU stress testing
  • UX: User experience performances
  • CPU: Computation stress testing
  • RAM: Access speeds, random reads etc…

Disclaimer: each run of the benchmark gives slightly different results so don’t be surprised if you run it on your side and have another figure. However, the overall delta in performance between each platform stays the same.

Overall Results

Without further ado, here are the overall results of the tests:

Overall Results

First observation is that Nitrogen8M clearly outperforms our previous Nitrogen6_MAX platforms.

But some background on the above graph must be provided. Indeed, you can see two different sets of results for each display setup:

  • 1 default = stock Android image without any modification
  • 1 ES 2.0 = where the OpenGL ES version was fixed to 2.0 (ro.opengles.version)

The reason behind that distinction is that you can see that by default the i.MX6QuadPlus version has the same score as the i.MX6Quad.

Indeed the i.MX6QuadPlus GPU (GC3000) supports OpenGL ES 3.0 whereas i.MX6Quad GPU (GC2000) is limited to OpenGL ES 2.0.

Since AnTuTu adapts its GPU tests to the supported OpenGL ES version, comparing ES 3.0 results to ES 2.0 one wasn’t exactly fair. Once we limit all the GPU to ES 2.0, we can see the i.MX6Quad Plus bump in performance.

3D GPU Results

As explained in the previous sections, GPU results will be separated for OpenGL ES 2.0 and 3.x (FYI, i.MX8M support ES 3.1).

bench_3d_1920x1080

bench_3d_1280x800

The above results gives us the following information:

  • When using OpenGL ES 2.0:
    • GC7000L (i.MX8MQ) is twice as good as GC2000 (i.MX6Q)
    • GC7000L is about 25% better than GC3000 (i.MX6QP)
  • When using Open GL ES 3.0:
    • GC7000L is still about 25% better than GC3000

UX / CPU / RAM Results

Since the scale of results seemed close for all those results, they were brought on the same chart:

bench_ux_cpu_ram

As a quick analysis, the CPU improvement can easily be explained since the i.MX8MQ is a 64-bit 4*Cortex-A53 cores running @1.5GHz, it only makes sense that it is much better than the previous 32-bit 4*Cortex-A9 @1GHz.

Same goes for the RAM, the Nitrogen8M uses LPDDR4 at higher frequency than the i.MX6 platforms using DDR3.

All those improvements logically improve the UX total score.

 

As usual, feel free to comment in the section below!

The post Nitrogen8M – Android Benchmark appeared first on Boundary Devices.


Nitrogen8M – Yocto GPU Demo

$
0
0

The latest addition to our Nitrogen family, the Nitrogen8M, based on the NXP i.MX8MQ processor, is now available online. To help further development with this new board we are releasing demos and documentation to help you get started. Here is our recent demo of Nitrogen8M running Qt on Android. This post features Nitrogen8M running Yocto.

The Setup

For this demo, we simply use:

Nitrogen8M

The Demo

This first video features the different GPU stress testing applications provided by NXP/Vivante in their GPU SDK.

Such applications show the capabilities of the new GC7000Lite GPU present in the i.MX8MQ.

Some benchmarking will be made in the coming weeks to compare the performances against GC2000 (i.MX6Q) and GC3000 (i.MX6QP) GPU used in our previous platforms.

The Details

For those interested in software details, this demo is using:

  • Yocto 2.4 Rocko
  • Kernel 4.9.x_2.0.0_ga branch from Boundary Devices
  • Vivante driver v6.2.4.p1.2 (Wayland back-end)

The official BSP will be released as soon as all the i.MX8M packages are integrated inside the community BSP layers.

Stay tuned for more updates on this exciting new platform.

 

As usual, feel free to comment in the section below!

The post Nitrogen8M – Yocto GPU Demo appeared first on Boundary Devices.

Android Oreo 8.1.0 release for Nitrogen8M

$
0
0

We are glad to deliver the latest Android Oreo 8.1 GA release for most our i.MX8MQ Nitrogen8M platform.

Android Nougat


For the impatient

You can download the Android Oreo images from here:

This archive includes all the files to be flashed using fastboot.

First you need to enter fastboot mode which can be done in two different ways:

  1. Press the “FASTBOOT” button on the board while powering it up, U-Boot should automatically start fastboot
  2. From U-Boot prompt, enter the following command:
=> fastboot 0

Once the platform is in fastboot mode, you simply need to call the flashing script:

~/$ unzip o810-nitrogen8m-20180718.zip -d o810-nitrogen8m-20180718
~/$ cd o810-nitrogen8m-20180718
~/o810-nitrogen8m-20180718$ ./device/boundary/scripts/flash_fastboot.sh

Note that you can also use fastboot from a Windows Host PC, see following blog post to learn how:

C:\o810-nitrogen8m-20180718> device\boundary\scripts\flash_fastboot.bat nitrogen8m

For those wishing to see how this release looks like on the platform, please make sure to read this blog post:

For those interested in performances of the i.MX8M, please make sure to read this blog post:

What’s new?

This section will only describe the changes brought either by the OS update itself or modified/added features.

Android Oreo OS updates

The main UI difference you might notice, compare to our previous releases for i.MX6, is the change of launcher app, since we switched from Launcher2 to Launcher3:

launcher3Google also provides a list of notable changes for developers:

Linux Kernel 4.9.x

This Android Oreo release is based on a 4.9.x kernel. It therefore benefits from all our latest drivers/fixes as well as newest Vivante graphics libraries (v6.2.4p1.2).

Just like our other 4.9.x branches, we will include latest security updates to it.

As of this writing, the kernel already includes fixes up to v4.9.111 although NXP only released the v4.9.78 version.

Boundary Devices additions

Just like our previous releases, this one includes unique features that only Boundary Devices provides:

  • Optimized Camera HALv3 version
    • This releases offers continuous autofocus support for our cameras
  • Support for new 802.11b/g/n/ac + BT4.1 Silex Module
  • Display rotation setting from U-Boot
=> setenv hwrotation 270
=> saveenv
=> reset
  • Rooted device (su)
    • A very simple su application is present, allowing only root / system / shell to use it by default
    • If you want any app to be able to use (at your own risks) add the following to your BoardConfig.mk
BOARD_SU_ALLOW_ALL := true

But the most notable change relies in the source code and its architecture. Indeed Oreo brought a new architecture called Treble in order to improve BSP porting from one version of AOSP to another.

While this release isn’t entirely compliant with Treble, it did improve a lot:

  • All vendor-specific components are now properly placed under the /vendor partition
    • Platform firmwares (VPU, WiFi, BT)
    • HAL libraries (camera, lights, sensors, etc…)
    • Proprietary libraries (GPU, VPU, codecs)
    • Platform configurations (features, permissions)
    • 3rd -party apps (FslOTA, Ethernet)
  • As few changes to AOSP core framework as possible
    • No more modification to init/recovery dynamically mount partitions
      • Using GPT partition names instead
    • No more addition of filesystems support
      • Only sdcardfs should be used now

The goal is to be able, in the future, to just flash a new OS version system.img which will work nicely with the previous vendor.img.

We hope you’ll enjoy that new partitioning and that you’ll find it easier to navigate through.

Source code access

For the newcomers, please make sure to read our “Android Getting Started Guide” since it contains all the information you need to download, build and flash an Android image.

For those already familiar with our releases, here is a condensed version to get the Android Oreo source code:

~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ repo init -u git://github.com/boundarydevices/android-manifest.git \
       -b boundary-imx-o8.1.0_1.3.0_8m-ga
~/myandroid$ repo sync
~/myandroid$ source build/envsetup.sh
~/myandroid$ lunch nitrogen8m-eng
~/myandroid$ make 2>&1 | tee build.out

 

As always, let us know your experiences (both good and bad) when you test out this image.

The post Android Oreo 8.1.0 release for Nitrogen8M appeared first on Boundary Devices.

Nitrogen8M Featuring Crank Software Demo

$
0
0

With the recent wide release of our i.MX 8M based SBC, Nitrogen8M, we wanted to release another demonstration of the board running a different UI. In this demo post we will show off Nitrogen8M running a Crank Software Demo, which is one of the nicest UI frameworks available right now in the embedded market. 

For the Impatient

What better way to show a framework capabilities than with a video?

The one below features the Launcher Demo which allows to start different applications targeting specific markets:

  • 3D Cluster – Automotive
  • Movie Kiosk – Consumer
  • IoT House – Home automation

These applications fully leverage the capabilities of the new GC7000Lite GPU present in the i.MX8MQ.

Crank Software details

Crank Software Inc. is an innovator in embedded graphical user interface (GUI) solutions. Their products and services enable R&D teams and UI Designers to quickly and collaboratively develop rich animated user interfaces for resource-constrained embedded.

The demo above relies on the Crank Storyboard Engine which is:

  • Multi-platform
    • Supported on Linux, Android, QNX, WindowsCE among others
  • Built for embedded
    • Storyboard Embedded Engine scales from low-end to high-end processors
  • 3D optimized
    • For higher end products embedding a GPU

As for the tools, the Storyboard Suite offers everything needed to designdebug and deploy your application.

Of course, all the details are provided on Crank Software’s website:

Crank also offers many useful videos and webinars for developers to get started quickly:

Fell free to contact Crank to find out how you can enable stunning user interfaces on your products.

Note that Crank Software is a NXP Proven Partner.

The post Nitrogen8M Featuring Crank Software Demo appeared first on Boundary Devices.

U-Boot v2018.07 for i.MX platforms

$
0
0

Boundary Devices is happy to release the latest U-Boot v2018.07 with support for all our Nitrogen Families of SBCs and SOMs. The new update includes support for the Nitrogen8M (i.MX8), MIPI display support, as well as Driver improvements:

For the impatient

Our build server automatically generates and uploads all the latest binaries to this address:

The README file contains the exact commit ID of this build images.

For those not sure about which binary to download, here is a quick summary for our boards:

Also, the up-to-date upgrade.scr U-Boot script is included so you can copy all the files directly to the root of your media storage.

Make sure to re-initialize your U-Boot environment after flashing the new binary in order to leverage the new feature, see flashing procedure.

What’s new?

i.MX8M support

The big news of this release is that it supports all our boards including the Nitrogen8M based on i.MX8MQ CPU.

Just like the kernel branch 4.9.x_2.0.0 it is much better to have all the platforms using the same source code.

Display configuration support

Previous U-Boot versions supported LVDS and HDMI display configuration for i.MX6/7 boards.

This version now also supports MIPI display, required for i.MX8M-based platforms.

Here is an example on how to set up the board to use our BD080MCC1 MIPI display.

=> setenv fb_mipi ltk080a60a004t
=> savee
=> reset

Driver improvements

Although no exhaustive list of changes is available between v2017.07 and v2018.07, we know many drivers have been improved.

For instance USB support (and especially USB3.0) is much better with v2018.07.

But mmc and net drivers also receive their share of improvements during last year of U-Boot development.

Build instructions

Getting the source code

First, clone our U-Boot git repository. This is the branch you’ll need to compile and install to work with the new kernel.

~$ git clone https://github.com/boundarydevices/u-boot-imx6 \
    -b boundary-v2018.07
~$ cd u-boot-imx6

Choosing the proper defconfig

Here you’ll need to find and make the relevant defconfig for your board.

If you have the board running U-Boot already, you can type the following to see which defconfig you should build.

=> printenv uboot_defconfig

Otherwise, to see all the defconfigs, use this command and pick the one that is right for you.

~/u-boot-imx6$ find configs/ -name "nit*defconfig"
configs/nit6xlite_defconfig
configs/nitrogen6_max_defconfig
configs/nitrogen6q_defconfig
configs/nitrogen6q_som2_1g_defconfig
configs/nitrogen6sx_defconfig
configs/nitrogen6_vm_defconfig
configs/nitrogen7_defconfig
configs/nitrogen8m_defconfig
...

Building for i.MX6/7

Now compile that defconfig. For 32-bit platforms, we’ll use nitrogen6q_defconfig as an example.

~/u-boot-imx6$ sudo apt-get install crossbuild-essential-armhf
~/u-boot-imx6$ export ARCH=arm
~/u-boot-imx6$ export CROSS_COMPILE=arm-linux-gnueabihf-
~/u-boot-imx6$ make nitrogen6q_defconfig
~/u-boot-imx6$ make -j2

Building for i.MX8

For 64-bit platforms, we’ll use nitrogen8m_defconfig as an example.

~/u-boot-imx6$ sudo apt-get install crossbuild-essential-arm64
~/u-boot-imx6$ export ARCH=arm64
~/u-boot-imx6$ export CROSS_COMPILE=aarch64-linux-gnu-
~/u-boot-imx6$ make nitrogen8m_defconfig
~/u-boot-imx6$ make -j4

However, for i.MX8MQ, building U-Boot is not sufficient to create a bootable image.

Indeed you need to use imx-mkimage for it to combine U-Boot binaries with the HDMI/DDR blobs as well as imx-atf.

Here is a quick procedure to create the bootable image:

~$ git clone https://github.com/boundarydevices/imx-mkimage.git
~$ cd imx-mkimage
~/imx-mkimage$ UBOOT_PATH=~/u-boot-imx6/ ./make_boundary.sh

At this point, you can rename the bootable image from flash.bin to u-boot.${uboot_defconfig}

~/imx-mkimage$ mv iMX8M/flash.bin ~/u-boot-imx6/u-boot.nitrogen8m

Flashing procedure

You can use the copy_upgrade.sh script to copy the bootable binary and the upgrade script to the root folder of your media (SD Card / USB / SATA drive).

~/u-boot-imx6/$ ./copy_upgrade.sh <mount_path>/

Plug your media to the platform, power up the board and interrupt u-boot to run the commands below (via the serial terminal).

Hit any key to stop autoboot:  0
=> run upgradeu

This will run the upgrade.scr script and look for a file u-boot.${uboot_defconfig} and burn it.

At this point it might be worth while to clear your environment variables after the first reboot.

This will set you up with the default environment variables and no more.

Hit any key to stop autoboot:  0 
=> env default -a
=> savee

Then as a final note, if you’ve somehow managed to brick your board through this process and need help. Well, we already wrote a blog post here about that topic.

The post U-Boot v2018.07 for i.MX platforms appeared first on Boundary Devices.

Android Oreo 8.0.0 release for i.MX6 boards

$
0
0

We are glad to deliver the latest Android Oreo 8.0.0 GA release for most our i.MX6 platforms:

Android Oreo


For the impatient

You can download the Android Oreo images from here:

These archives include all the files to be flashed using fastboot.

First you need to enter fastboot mode which can be done from U-Boot prompt, enter the following command:

=> fastboot 0

Note that you’ll need U-Boot v2017.07 or above for this to work and the OS to boot.

Once the platform is in fastboot mode, you simply need to call the flashing script:

~/$ unzip o800*.zip -d o800-release
~/$ cd o800-release
~/o800-release$ ./device/boundary/scripts/flash_fastboot.sh

Note that you can also use fastboot from a Windows Host PC, see following blog post to learn how:

C:\o800-release> device\boundary\scripts\flash_fastboot.bat nitrogen6x

Some might wonder why we deliver this release as fastboot images, here are some of the reasons:

  • Fastboot is much faster than flashing regular sdcard images
    • 2 minutes vs. 15+ minutes in most cases
  • It takes the same amount of time to flash a storage, no matter its size
    • Full sdcard images would take forever when the storage is > 4GB
  • That way we don’t need to maintain many scripts/indexes since it uses GPT part names

What’s new?

This section will only describe the changes brought either by the OS update itself or modified/added features.

Android Oreo OS updates

Google provides a list of notable changes for developers:

But the main change comes in the overall architecture since Treble, more in next section.

Treble or not Treble?

Oreo brought a new architecture called Treble in order to improve BSP porting from one version of AOSP to another.

While this release isn’t entirely compliant with Treble, it did improve a lot:

  • All vendor-specific components are now properly placed under the /vendor partition
    • Platform firmwares (VPU, WiFi, BT)
    • HAL libraries (camera, lights, sensors, etc…)
    • Proprietary libraries (GPU, VPU, codecs)
    • Platform configurations (features, permissions)
    • 3rd -party apps (FslOTA, Ethernet)
  • As few changes to AOSP core framework as possible
    • No more modification to init/recovery dynamically mount partitions
      • Using GPT partition names instead
    • No more addition of filesystems support

The goal is to be able, in the future, to just flash a new OS version system.img which will work nicely with the previous vendor.img.

So you might ask:

  • Can’t we use a newer AOSP version already? Why is this an Oreo 8.0 release and not Pie 9.0?
    • Well as said above, this BSP isn’t fully Treble-compliant yet
    • Some of the NXP changes are still required inside the core components of the AOSP
    • But we’ll hopefully get there really soon, just give it a couple of release for all the engineers to know their way around Treble

If you’re interested about learning more about Treble, we recommend the following links:

Linux Kernel 4.9.x

This Android Oreo release is based on a 4.9.x kernel. It therefore benefits from all our latest drivers/fixes as well as newest Vivante graphics libraries (v6.2.2).

Also, as some people already asked about it, this kernel fixes the SPECTRE vulnerabilities found on the Cortex-A9.

Goodbye 6x_bootscript!

As mentioned in our 2017.07 U-Boot release (more than a year ago), 6x_bootscript (formerly 6q_bootscript) was introduced back in 2012 when there was no standard for booting an OS.

Since then, U-Boot included such standard:

The default bootscript name is now boot.scr for any OS which makes much more sense that our 6x_bootscript that wasn’t only for i.MX6x any more.

So what does it mean?

  1. The boot/ partition now contains a boot.scr file instead of 6x_bootscript
  2. You’ll need U-Boot v2017.07 or above for the OS to boot

Boundary Devices additions

Just like our previous releases, this one includes unique features that only Boundary Devices provides:

  • Optimized Camera HALv3 version
    • With continuous Auto-Focus support!
  • Support for new 802.11b/g/n/ac + BT4.1 Silex Module
  • Display rotation setting from U-Boot
=> setenv hwrotation 270
=> saveenv
=> reset
  • Rooted device (su)
    • A very simple su application is present, allowing only root / system / shell to use it by default
    • If you want any app to be able to use (at your own risks) add the following to your BoardConfig.mk
BOARD_SU_ALLOW_ALL := true

Source code access

For the newcomers, please make sure to read our “Android Getting Started Guide” since it contains all the information you need to download, build and flash an Android image.

For those already familiar with our releases, here is a condensed version to get the Android Oreo source code:

~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ repo init -u git://github.com/boundarydevices/android-manifest.git \
       -b boundary-imx-o8.0.0_1.0.0-ga
~/myandroid$ repo sync
~/myandroid$ source build/envsetup.sh
~/myandroid$ lunch
... choose nitrogen6x / nit6xlite / nitrogen6sx from the list of boards 
~/myandroid$ make 2>&1 | tee build.out

 

As always, let us know your experiences (both good and bad) when you test out this image.

The post Android Oreo 8.0.0 release for i.MX6 boards appeared first on Boundary Devices.

Ubuntu Bionic 18.04 LTS for Nitrogen8M board – September 2018 (kernel 4.9.x)

$
0
0

Ubuntu 18.04.1 Weston/wayland Compositor

We’re glad to release our first Ubuntu Bionic image for Nitrogen8M board. Since this board supports only Wayland graphical backend, the system is simpler than earlier systems with i.MX6.

We use Weston, the reference Wayland compositor in this system, later we’ll release a native Ubuntu desktop as well, either Gnome3 or KDE Plasma/Neon depending which one works better, smoother and will be more steady.

This image is a console developer image also, it boots to the command prompt. Weston compositor could be started manually or you can set autostart the service, as per your preference.

This system contains NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Important !

Before installing this image please check your U-Boot version as it requires U-Boot version 2018.07  to be used.

Make sure to visit our wiki if you need to upgrade:

You can find the bootscript in the /boot subdirectory now, its named boot.scr. The partition labels are set if you use the fastboot method.

If you use your own method please check the boot partition labels, because the fstab boots by label (LABEL=sys-08h for example) now. You can use ext2label to modify partition label.

Programming the image

Since the Nitrogen8M board has no SD card slot, you need to program this image in the same way as an Android  system: by using fastboot.

Please install the following packages on your desktop PC, Debian or Ubuntu :

$ sudo apt update
$ sudo apt install fastboot android-tools-fastboot

To avoid using sudo for each command, please download the following file and move it to the /lib/udev/rules.d directory, then reboot your PC: 

Now connect your Nitrogen8M board’s J67 USB OTG port to your PC’s USB port.

Use regular USB2.0 OTG cable do not use USB3.0 cable (as it seems to be problematic with U-Boot).

Connect the Nitrogen board’s RS232 console to your PC so you can communicate with the board.

You can then power up the Nitrogen8M board, and stop the u-boot execution by pressing any key. Then type:

Hit any key to stop autoboot: 0
=> fastboot 0

Now test the USB connection on the PC, please type on the PC:

$ sudo fastboot devices -l
<some MAC address> fastboot usb-x:y

If you get the above response, a MAC address , the word fastboot, then the USB device:id numbers, the communication is OK.

Now type on PC:

$ sudo fastboot flash gpt gpt_8G.img
$ sudo fastboot flash rootfs rootfs_8G.simg

, then wait till its completed.

When its done you can disconnect USB cable, and restart your Nitrogen8M board.

Note that you can also use fastboot from a Windows Host PC, see following blog post to learn how:

https://boundarydevices.com/android-tools-windows-support-nitrogen-platforms/

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B). The user ubuntu has administrator rights, but doesn’t need to enter password at sudo command.

We wanted to make life easier at the cost of some security. If you want to change this please type:

ubuntu@bionic-dev64:~$ sudo visudo

, and comment out or delete the last line with “ubuntu” and “NOPASSWD:”

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User ubuntu has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

ubuntu@bionic-dev64:~$ sudo mkdir /root/.ssh
ubuntu@bionic-dev64:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
ubuntu@bionic-dev64:~$ sudo chmod 600 /root/.ssh/auth*
ubuntu@bionic-dev64:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 4.9.x kernel, essentially everything is supported including :

  • Vivante GPU accelerations for Wayland
  • The Hantro Video Processing Unit supports the following decoders:
    • video/x-h265
    • video/x-vp9
    • video/x-h264
    • video/x-vp8
    • video/x-vp6-flash
    • video/mpeg
    • video/x-h263
    • video/x-flash-video
    • video/x-divx
    • video/x-xvid
    • video/x-cavs
    • video/x-wmv
    • video/x-pn-realvideo
    • video/x-raw
  • Wi-Fi and Bluetooth modules for the built-in Silex module
  • All kind of storage devices , eMMC, SATA hdd (via USB3-SATA adapter), USB3.0/2.0 pen drives, mini PCIe devices, cell modems
  • All of our supported touch panels

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What’s new in this release

The Linux kernel was upgraded to 4.9.117 ( meta-package name: linux-boundary-15b )
GPU driver was upgraded to Vivante 6.2.4p1.2 ( meta-package name: imx-gpu-viv-b14-… ).
The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it’s an externally built module. This change makes the graphics system modular, and more upgradeable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
The NXP/Vivante GPU SDK was added : imx-gpu-sdk 4.0.2 . You can get the source with the usual apt-get source command. The SDK has many new demos, for example OpenCL, OpenVG, and for OpenVX and Vulkan.
The distribution is Bionic 18.04.1 LTS . Here are some main component versions :

  • Xorg server 1.19.6
  • gstreamer1.0 1.14.0
  • bluez 5.48
  • Qt5 5.9.5
  • apt 1.6.3
  • dpkg 1.19.0
  • gcc/g++ 7.3.0
  • libwayland 1.14.0
  • weston 3.0.0-3ubuntu9
  • Silex WiFi / Bluetooth is supported in Bionic also, as well as in Stretch, Xenial and Jessie.

This is a short video/GPU SDK demo, uploaded to Youtube.

 

The system boots to the command prompt, as I mentioned before. You can start Weston compositor on any tty (not ssh, not RS232) terminal by typing:

ubuntu@bionic-dev64:~$ wl
or
ubuntu@bionic-dev64:~$ weston-launch

If you want to start Weston at boot automatically, you have to enable the service, you have to type the following:

ubuntu@bionic-dev64:~$ sudo systemctl enable weston.service
ubuntu@bionic-dev64:~$ sudo systemctl unmask weston.service

If you want to disable the autostart again you need to type:

ubuntu@bionic-dev64:~$ sudo systemctl disable weston.service
ubuntu@bionic-dev64:~$ sudo systemctl mask weston.service

You can find the weston.ini file in the /usr/share/weston/examples directory. Please type:

ubuntu@bionic-dev64:~$ man weston.ini

,to check the options, and feel free to modify it to suit your needs.


As always, please give us some feedback and let us know how things work for you.

The post Ubuntu Bionic 18.04 LTS for Nitrogen8M board – September 2018 (kernel 4.9.x) appeared first on Boundary Devices.

Debian 9.5 Stretch for Nitrogen8M board – October 2018 (kernel 4.9.x)

$
0
0

Debian 9.5 Weston/Wayland Compositor

We’re glad to release our first Debian Stretch image for Nitrogen8M board. Since this board supports only Wayland graphical backend, the system is simpler than earlier systems with i.MX6.

We use Weston, the reference Wayland compositor in this system, later we’ll release a native Debian desktop as well, most probably Gnome3 or KDE Plasma/Neon depending which one works better, smoother and will be more steady.

This image is a console developer image also, it boots to the command prompt. Weston compositor could be started manually or you can set autostart the service, as per your preference.

This system contains NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Important !

Before installing this image please check your U-Boot version as it requires U-Boot version 2018.07  to be used.

Make sure to visit our wiki if you need to upgrade:

You can find the bootscript in the /boot subdirectory now, its named boot.scr. The partition labels are set if you use the fastboot method.

If you use your own method please check the boot partition labels, because the fstab boots by label (LABEL=sys-08h for example) now. You can use ext2label to modify partition label.

Programming the image

Since the Nitrogen8M board has no SD card slot, you need to program this image in the same way as an Android  system: by using fastboot.

Please install the following packages on your desktop PC, Debian or Ubuntu :

$ sudo apt update
$ sudo apt install fastboot android-tools-fastboot

To avoid using sudo for each command, please download the following file and move it to the /lib/udev/rules.d directory, then reboot your PC: 

Now connect your Nitrogen8M board’s J67 USB OTG port to your PC’s USB port.

Use regular USB2.0 OTG cable do not use USB3.0 cable (as it seems to be problematic with U-Boot).

Connect the Nitrogen board’s RS232 console to your PC so you can communicate with the board.

You can then power up the Nitrogen8M board, and stop the u-boot execution by pressing any key. Then type:

Hit any key to stop autoboot: 0
=> fastboot 0

Now test the USB connection on the PC, please type on the PC:

$ sudo fastboot devices -l
<some MAC address> fastboot usb-x:y

If you get the above response, a MAC address , the word fastboot, then the USB device:id numbers, the communication is OK.

Now type on PC:

$ fastboot flash gpt gpt_8G.img
$ fastboot flash rootfs rootfs_8G.simg

, then wait till its completed.

When its done you can disconnect USB cable, and restart your Nitrogen8M board.

Note that you can also use fastboot from a Windows Host PC, see following blog post to learn how:

https://boundarydevices.com/android-tools-windows-support-nitrogen-platforms/

Usernames and passwords

Two users are defined for use on the system: debian and root. The password for each is Boundary (capital B). The user debian has administrator rights, but doesn’t need to enter password at sudo command.

We wanted to make life easier at the cost of some security. If you want to change this please type:

debian@stretch-dev64:~$ sudo visudo

, and comment out or delete the last line with “debian” and “NOPASSWD:”

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User debian has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

debian@stretch-dev64:~$ sudo mkdir /root/.ssh
debian@stretch-dev64:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
debian@stretch-dev64:~$ sudo chmod 600 /root/.ssh/auth*
debian@stretch-dev64:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 4.9.x kernel, essentially everything is supported including :

  • Vivante GPU accelerations for Wayland
  • The Hantro Video Processing Unit supports the following decoders:
    • video/x-h265
    • video/x-vp9
    • video/x-h264
    • video/x-vp8
    • video/x-vp6-flash
    • video/mpeg
    • video/x-h263
    • video/x-flash-video
    • video/x-divx
    • video/x-xvid
    • video/x-cavs
    • video/x-wmv
    • video/x-pn-realvideo
    • video/x-raw
  • Wi-Fi and Bluetooth modules for the built-in Silex module
  • All kind of storage devices , eMMC, SATA hdd (via USB3-SATA adapter), USB3.0/2.0 pen drives, mini PCIe devices, cell modems
  • All of our supported touch panels

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What’s new in this release

The Linux kernel was upgraded to 4.9.117 ( meta-package name: linux-boundary-15s )
GPU driver was upgraded to Vivante 6.2.4p1.8 ( meta-package name: imx-gpu-viv-s15-… ).
The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it’s an externally built module. This change makes the graphics system modular, and more upgradeable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
The NXP/Vivante GPU SDK was added : imx-gpu-sdk 4.0.2 . You can get the source with the usual apt-get source command. The SDK has many new demos, for example OpenCL, OpenVG, and for OpenVX and Vulkan.
The distribution is Stretch 9.5 . Here are some main component versions :

  • Xorg server 1.19.2-1+deb9u2
  • gstreamer1.0 1.14.0
  • bluez 5.43-2.2
  • Qt5 5.7.1+dfsg-3+b1
  • apt 1.4.8
  • dpkg 1.18.25-1
  • gcc/g++ 6.3.0-18+deb9u1
  • libwayland 1.12.0-1
  • weston 4.0.0-1debian3
  • Silex WiFi / Bluetooth is supported in Bionic also, as well as in Stretch, Xenial and Jessie.

This is a short video/GPU SDK demo, uploaded to Youtube. You’ll need UHD/4k display and min. 20Mbps internet to watch 2160p60 content on Youtube.

 

The system boots to the command prompt, as I mentioned before. You can start Weston compositor on any tty (not ssh, not RS232) terminal by typing:

debian@stretch-dev64:~$ wl
or
debian@stretch-dev64:~$ weston-launch

If you want to start Weston at boot automatically, you have to enable the service, you have to type the following:

debian@stretch-dev64:~$ sudo systemctl enable weston.service
debian@stretch-dev64:~$ sudo systemctl unmask weston.service

If you want to disable the autostart again you need to type:

debian@stretch-dev64:~$ sudo systemctl disable weston.service
debian@stretch-dev64:~$ sudo systemctl mask weston.service

You can find the weston.ini file in the /usr/share/weston/examples directory. Please type:

debian@stretch-dev64:~$ man weston.ini

,to check the options, and feel free to modify it to suit your needs.


As always, please give us some feedback and let us know how things work for you.

The post Debian 9.5 Stretch for Nitrogen8M board – October 2018 (kernel 4.9.x) appeared first on Boundary Devices.


FreeRTOS SDK v2.3 for i.MX8MQ

$
0
0

One of the many advantages of developing with NXP’s i.MX 8M Family of application processors is the ability to utilize both the Cortex-A53 as well as the Cortex-M4 core. As such, we have had questions about how to run FreeRTOS using the M4-Core of our Nitrogen8M SBC. This blog post will first present the architecture of the i.MX 8MQ processor as a starting point for the discussion, and then explain how to build and run the FreeRTOS SDK v2.3 on its MCU.

The i.MX 8M (Quad) processor is coupling a Cortex-A53 cluster (Core Complex 1, 1 to 4 cores) alongside a Cortex-M4 (Core Complex 2) to offer the best of MPU and MCU worlds.

i.MX8M Block Diagram

For the impatient

You can download any of our currently available OS images for i.MX8MQ to use the Cortex-M4:

Then you need to make sure to have latest U-Boot available (v2018.07, Nov. 14th 2018  or newer):

After the upgrade and resetting the board, you should see several m4 variables:

=> env default -a
=> printenv m4boot
m4boot=load ${devtype} ${devnum}:1 ${m4loadaddr} ${m4image}; dcache flush; bootaux ${m4loadaddr}
=> saveenv

Note that you can find pre-built versions of the examples here:

You can then start your first Hello World application on the Cortex-M4 manually (after copying one of the binary above to your storage):

=> load mmc 0 $m4loadaddr hello_world.bin
=> dcache flush
=> bootaux $m4loadaddr

On the second serial port, you should see the following output:

Hello World!

Architecture 

As an introduction, here is the definition of terms that will be used throughout the post:

  • MCU: Microcontroller Unit such as the ARM Cortex-M series, here referring to the Cortex-M4
  • MPU: Microprocessor Unit such as the ARM Cortex-A series, here referring to the Cortex-A53
  • RTOS: Real-Time Operating System such as FreeRTOS or MQX

The i.MX8M processors offer an MCU and a MPU in the same chip, this is called a Heterogeneous Multicore Processing Architecture.

How does it work?

The first thing to know is that one of the cores is the “master”, meaning that it is in charge to boot the other core which otherwise will stay in reset.

The BootROM will always boot the Cortex-A core first. In this article, it is assumed that U-Boot is the bootloader used by your system. The reason is that U-Boot provides a bootaux command which allows to start the Cortex-M4.

Once started, both CPU are on their own, executing different instructions at different speeds.

Where is the code running from?

It actually depends on the application linker script used. When GCC is linking your application into an ELF executable file, it needs to know the code location in memory.

There are several options in both processors, code can be located in one of the following:

  • TCM (Tightly Coupled Memory): 128kB available
  • DDR: up to 1MB available (can be increased, set in the device tree)

Note that the TCM is the preferred option when possible since it offers the best performances since it is an internal memory dedicated to the Cortex-M4.

External memories, such as the DDR, offer more space but are also much slower to access.

In this article, it is assumed that every application runs from the TCM.

When is the MCU useful?

The MCU is perfect for all the real-time tasks whereas the MPU can provide a great UI experience with non real-time OS such as GNU/Linux.

We insist here on the fact that the Linux kernel is not real-time, not deterministic whereas FreeRTOS on Cortex-M4 is.

Also, since its firmware is pretty small and fast to load, the MCU can be fully operating within a few hundred milliseconds whereas it usually takes Linux OS much longer to be operational.

Examples of applications where the MCU has proven to be useful:

  • Motor control: DC motors only perform well in a real-time environment since feedback response time is crucial
  • Automotive: CAN messages can be handled by the MCU and operational at a very early stage

Resource Domain Controller (RDC)

Since both cores can access the same peripherals, a mechanism has been created to avoid concurrent access, allowing to ensure a program’s behavior on one core does not depend on what is executed/accessed on the other core.

This mechanism is the RDC, it can be used to grant peripheral and memory access permissions to each core.

The examples and demo applications in the FreeRTOS BSP use RDC to allocate peripheral access permission. When running the ARM Cortex-A application with the FreeRTOS BSP example/demo, it is important to respect the reserved peripheral.

The FreeRTOS BSP application has reserved peripherals that are used only by ARM Cortex-M4, and any access from ARM Cortex-A core on those peripherals may cause the program to hang.

The default RDC settings are:

  • The ARM Cortex-M4 core is assigned to RDC domain 1, and ARM Cortex-A core and other bus masters use the default assignment (RDC domain 0).
  • Every example/demo has its specific RDC setting in its board.c (see BOARD_RdcInit() function).

The user of this package can remove or change the RDC settings in the example/demo or in his application. It is recommended to limit the access of a peripheral to the only core using it when possible.

Also, in order for a peripheral not to show up as available in Linux, it is mandatory to disable it in the device, which is why a specific device tree is used when using the MCU:

The memory declaration is also modified in the device tree above in order to reserve some areas for FreeRTOS and/or shared memory.

Remote Processor Messaging (RPMsg)

The Remote Processor Messaging (RPMsg) is a virtio-based messaging bus that allows Inter Processor Communications (IPC) between independent software contexts running on homogeneous or heterogeneous cores present in an Asymmetric Multi Processing (AMP) system.

The RPMsg API is compliant with the RPMsg bus infrastructure present in upstream Linux 3.4.x kernel onward.

This API offers the following advantages:

  • No data processing in the interrupt context
  • Blocking receive API
  • Zero-copy send and receive API
  • Receive with timeout provided by RTOS

Note that the DDR is used by default in RPMsg to exchange messages between cores.

Where can I find more documentation?

The BSP actually comes with some documentation which we recommend reading in order to know more on the subject:

Build instructions

Development environment setup

In order to build the FreeRTOS BSP, you first need to download and install a toolchain for ARM Cortex-M processors.

~$ cd && mkdir toolchains && cd toolchains
~/toolchains$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2
~/toolchains$ tar xjf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2
~/toolchains$ rm gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2

FreeRTOS relies on cmake to build, so you also need to make sure the following packages are installed on your machine:

~$ sudo apt-get install make cmake

Download the BSP

The FreeRTOS SDK v2.3 is available from our GitHub freertos-boundary repository.

~$ git clone https://github.com/boundarydevices/freertos-boundary.git freertos
~$ cd freertos
~/freertos$ git checkout imx8m_2.3_ga

Finally, you need to export the ARMGCC_DIR variable so FreeRTOS knows your toolchain location.

~/freertos$ export ARMGCC_DIR=~/toolchains/gcc-arm-none-eabi-6-2017-q2-update
~/freertos$ export PATH=$PATH:~/toolchains/gcc-arm-none-eabi-6-2017-q2-update/bin

Build the FreeRTOS apps

All the applications are located under the nitrogen8m folder:

~/freertos$ tree boards/nitrogen8m/ -L 1
boards/nitrogen8m/
├── cmsis_driver_examples
├── demo_apps
├── driver_examples
├── multicore_examples
├── project_template
└── rtos_examples

As an example, we will build the helloworld application:

~/freertos$ cd boards/nitrogen8m/demo_apps/hello_world/armgcc/
~/freertos/boards/nitrogen8m/demo_apps/hello_world/armgcc$ ./build_release.sh
~/freertos/boards/nitrogen8m/demo_apps/hello_world/armgcc$ ls release/
hello_world.bin  hello_world.elf

You can then copy that hello_world.bin firmware to the root of the eMMC or any other storage you use.

Run the demo apps

Basic setup

By default, the firmware is loaded from eMMC to TCM.

Before going any further, make sure to hook up the second serial port to your machine as the one marked as “console” will be used for U-Boot and the other one will display data coming from the MCU.

This blog post only considers the firmware file is named m4_fw.bin, if you wish to use another name, you need to set the m4image variable:

=> setenv m4image hello_world.bin
=> saveenv

If you want to load the MCU fimware manually from eMMC, here is the procedure:

=> load mmc 0 $m4loadaddr $m4image
=> dcache flush
=> bootaux $m4loadaddr

If you want to load the MCU fimware from TFTP:

=> dhcp $m4loadaddr 192.168.1.60:$m4image
=> dcache flush
=> bootaux $m4loadaddr

In order to start the MCU automatically at boot up, we need to set a variable that will tell the boot.scr to load the firmware.

To do so, make sure to save this variable.

=> setenv m4enabled 1
=> saveenv

Hello World app

The Hello World project is a simple demonstration program that uses the BSP software. It prints the “Hello World” message to the ARM Cortex-M4 terminal using the BSP UART drivers.

The purpose of this demo is to show how to use the UART and to provide a simple project for debugging and further development.

In U-Boot, type the following:

=> setenv m4image hello_world.bin
=> load mmc 0 $m4loadaddr $m4image
=> dcache flush
=> bootaux $m4loadaddr

On the second serial port, you should see the following output:

Hello World!

You can then type anything in that terminal, it will be echoed back to the serial port as you can see in the source code.

RPMsg TTY demo

This demo application demonstrates the RPMsg remote peer stack. It works with Linux RPMsg master peer to transfer string content back and forth. The Linux driver creates a tty node to which you can write to. The MCU displays what is received, and echoes back the same message as an acknowledgement. The tty reader on ARM Cortex-A core can get the message, and start another transaction. The demo demonstrates RPMsg’s ability to send arbitrary content back and forth.

In U-Boot, type the following in order to boot the OS automatically while loading the M4:

=> setenv m4image rpmsg_lite_str_echo_rtos_imxcm4.bin
=> setenv m4enabled 1
=> boot

On the second serial port, you should see the following output:

RPMSG String Echo FreeRTOS RTOS API Demo...

Once Linux has booted up, you need to load the RPMsg module so the communication between the two cores can start.

# modprobe imx_rpmsg_tty
# echo "this is a test" > /dev/ttyRPMSG30  

The last command above writes into the tty node, which means that the Cortex-M4 should have received data as it can be seen on the second serial port.

Nameservice sent, ready for incoming messages...
Get Message From Master Side : "hello world!" [len : 12]
Get Message From Master Side : "this is a test" [len : 14]
Get New Line From Master Side

RPMsg Ping Pong demo

Same as previous demo, this one demonstrates the RPMsg communication. After the communication channels are created, Linux OS transfers the first integer to FreeRTOS OS. The receiving peer adds 1 to the integer and transfers it back, a hundred times and then stops.

In U-Boot, type the following:

=> setenv m4image rpmsg_lite_pingpong_rtos_linux_remote.bin
=> setenv m4enabled 1
=> boot

On the second serial port, you should see the following output:

RPMSG Ping-Pong FreeRTOS RTOS API Demo...

Once Linux has booted up, you need to load the RPMsg module so the communication between the two cores can start.

# modprobe imx_rpmsg_pingpong
[   30.501148] get 1 (src: 0x1e)
[   30.506527] get 3 (src: 0x1e)
...
[   30.730958] get 101 (src: 0x1e)
[   30.734104] imx_rpmsg_pingpong virtio0.rpmsg-openamp-demo-channel.-1.30: goodbye!

While you can send the received data from the MCU on the main serial port, you can also see the data received from the MPU on the secondary serial port.

RPMSG Share Base Addr is 0xb8000000
Link is up!
Nameservice announce sent.
Waiting for ping...
Sending pong...
...
Waiting for ping...
Sending pong...
Ping pong done, deinitializing...
Looping forever...

 

That’s it, you should now be able to build, modify, run and debug 

The post FreeRTOS SDK v2.3 for i.MX8MQ appeared first on Boundary Devices.

Yocto release for i.MX 8MQ

$
0
0

YoctoWe’ve received many requests for Yocto support on our Nitrogen8M SBC. Although this Yocto release isn’t tied to a specific version (Thud 2.6 not released yet), we believe it is still beneficial to release details on building a Yocto image for NXP’s i.MX 8MQ application processor.

Below you will find the download link for the image as well as detailed instructions for the build including a features set.

For the Impatient

You can download the Yocto image from here:

As usual, you’ll need to register on our site and agree to the EULA because it contains NXP content.

The image is a SD card image that can be restored using zcat and dd under Linux.

~$ zcat *boundary-image*.wic.gz | sudo dd of=/dev/sdX bs=1M

For Windows users, please use Alex Page’s USB Image Tool.

What took so long?

Boundary Devices, in its quest to provide the best software support possible, believes in the community BSP for i.MX platforms. This latter offers a more flexible, clean and up-to-date BSP with all NXP-specific packages.

However, updating the code base to properly support the different i.MX8 families took longer than expected.

As you can see by our participation to the different repositories, Boundary Devices made to sure to help integrating/reviewing new packages/patches.

The BSP is now in a state that we feel comfortable with! But note that it is right now using the master branch.

This branch is moving fast to include all the latest features/fixes but the drawback is that it isn’t as stable as one specific version.

So this release is basically to get everyone started on Yocto with i.MX8MQ but we’ll recommend only shipping products with the Thud version once it is released.

Note that since our platform is included in master, it will automatically be supported in Thud!

Build procedure

This image uses the master branch of our boundary-bsp-platform repository. 

This is mostly a clone of fsl-community-bsp-platform with meta-boundary added in.

To build the image, you’ll need these packages installed as well as this repo tool that can be installed like this:

~$ sudo apt-get install repo

Then create your build directory and initialize everything.

~$ mkdir ~/yocto-imx8m && cd yocto-imx8m
~/yocto-imx8m$ repo init -u http://github.com/boundarydevices/boundary-bsp-platform -b master
~/yocto-imx8m$ repo sync

Setup the environment for building, in this example we will be building our boundary-wayland distro for nitrogen8m.

~/yocto-imx8m$ MACHINE=nitrogen8m DISTRO=boundary-wayland . setup-environment build

Now bitbake boundary-image-multimedia-full which is equivalent to fsl-image-multimedia-full with Boundary-specific packages such as BD-SDMAC support

~/yocto-imx8m/build$ bitbake boundary-image-multimedia-full

After some time this should build the same image as above.

The image file will deploy to tmp/deploy/images/{MACHINE}/boundary-image-multimedia-full-{MACHINE}.wic.gz.

Features list

The image built above contains the following components:

  • GPU Vivante libraries 6.2.4p1.8
  • VPU Hantro libraries v1.8.0
  • GStreamer1.0 1.14.0 for i.MX
  • Weston 4.0.0 for i.MX
  • qcacld-2.0 Wi-Fi driver for BD-SDMAC
  • BlueZ 5.50 with support for BD-SDMAC

The next sub-sections will describe how to test most features.

Display support

Please make sure your platform includes the latest U-Boot for i.MX8M:

This version of U-Boot supports the display configuration, allowing to use any of the following displays:

Note that we’ve noticed that the NXP HDMI driver is picky when it comes to custom display timings (sometimes refuses to set the clock).

So if you are experiencing any issue with HDMI, please try entering the following commands in U-Boot in order to force the use of standard timings:

=> setenv cmd_custom 'setenv bootargs $bootargs drm_kms_helper.edid_firmware=HDMI-A-1:edid/1280x720.bin'
=> saveenv

GPU acceleration

In order to test the GPU, you can either use the standard Weston EGL programs or the ones provided by Vivante.

Here are a few examples:

root@nitrogen8m:~# weston-simple-egl &
root@nitrogen8m:~# cd /opt/viv_samples/vdk/
root@nitrogen8m:/opt/viv_samples/vdk# ./tutorial7

Nitrogen8M GPUVPU decoding

The i.MX8MQ processor can decode videos with a resolution up to 4K so here is an example using GPlay tool:

root@nitrogen8m:~# wget http://linode.boundarydevices.com/videos/SKYFALL-4K.mp4
root@nitrogen8m:~# gplay-1.0 SKYFALL-4K.mp4

nitrogen8m-vpuCamera input

Camera MIPI-CSI input can be checked using our OV5640 MIPI with GStreamer:

root@nitrogen8m:~# gst-launch-1.0 v4l2src device=/dev/video0 ! \
    video/x-raw,width=1280,height=720 ! glimagesink

nitrogen8m-camera

Ethernet

Once the eth0 interface is up, you can use iperf3 to check Ethernet performances:

root@nitrogen8m:~# ifup eth0
root@nitrogen8m:~# iperf3 -c 192.168.1.60                                                                                                                         
Connecting to host 192.168.1.60, port 5201
[  5] local 192.168.1.13 port 32880 connected to 192.168.1.60 port 5201
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   938 Mbits/sec    0             sender
[  5]   0.00-10.04  sec  1.09 GBytes   932 Mbits/sec                  receiver

Wi-Fi

Same goes for the Wi-Fi that can be tested just as easily:

root@nitrogen8m:~# wpa_passphrase <network> <passphrase> >> /etc/wpa_suplicant.conf
root@nitrogen8m:~# ifup wlan0
root@nitrogen8m:~# iw wlan0 link
Connected to a4:3e:51:08:54:f6 (on wlan0)
        SSID: Jabu_5GHz
        freq: 5240
        RX: 3243 bytes (31 packets)
        TX: 9117 bytes (48 packets)
        signal: -79 dBm
        tx bitrate: 15.0 MBit/s MCS 0 40MHz short GI
root@nitrogen8m:~# ping google.com -Iwlan0                                                                                                                       
PING google.com (216.58.198.206): 56 data bytes
64 bytes from 216.58.198.206: seq=0 ttl=55 time=3.470 ms
...

Bluetooth

For products with Bluetooth, you’ll be able to connect using these commands:

root@nitrogen8m:~# echo 0 > /sys/class/rfkill/rfkill0/state
root@nitrogen8m:~# echo 1 > /sys/class/rfkill/rfkill0/state 
root@nitrogen8m:~# hciattach /dev/ttymxc2 qca 3000000 -t30 flow
Current Product ID           : 0x00000008
Current Patch Version           : 0x0111
Current ROM Build Version       : 0x0302
Current SOC Version             : 0x00000023
qca_soc_init: Rome Version (0x03020023)
====================================================
TLV Type               : 0x1
Length                 : 33060 bytes
Total Length           : 32804 bytes
Patch Data Length      : 32780 bytes
Signing Format Version : 0x1
Signature Algorithm    : 0x2
Event Handling         : 0x3
Reserved               : 0x0
Product ID             : 0x0008
Rom Build Version      : 0x0302
Patch Version          : 0x0114
Reserved               : 0x8000
Patch Entry Address    : 0x19b08
====================================================
====================================================
TLV Type               : 0x2
Length                 : 1992 bytes
Failed to open /etc/bluetooth/firmware.conf
Ignoring invalid deep sleep config value
Failed to open /etc/bluetooth/firmware.conf
====================================================
Device setup complete
root@nitrogen8m:~# echo 1 > /sys/class/rfkill/rfkill2/state 
root@nitrogen8m:~# hciconfig hci0 up
root@nitrogen8m:~# hcitool scan
Scanning ...
11:22:DE:AD:BE:EF    Some Device
 

As usual, feel free to leave a comment below to share your experience.

The post Yocto release for i.MX 8MQ appeared first on Boundary Devices.

Welcome to the New Boundary Devices Website

$
0
0

We are very excited to announce the launch of our newly designed website at BoundaryDevices.com. We have spent the last 12 months working on an updated site to provide the highest quality user experience for our customers. We believe our website should reflect the same level of customer service we provide directly to you. The focus of our new design was to improve 3 key areas of  the site, Functionality, User Experience, an Customer Interaction. The overall goal of helping our customers get to market quickly.

New Home Page

 

Functionality

To improve functionality we redesigned the entire website from the ground up, optimizing the code to allow for a much faster experience. We understand our customers are busy, so we focused on speed to help you find the content you were looking for quickly with minimal page load times.

We’ve also revamped the way you navigate our site, including a more modern menu system, a quick and easy product search, as well as simple to follow paths designed to make finding the product and information you’re searching for intuitive and fast.

 
New Product Search

User Experience

Our focus on UI led us to rethink the way we present our information to you. Using feedback received from you on the most visited parts of our site and the most sought after information, we’ve streamlined our Product and Wiki pages. All products now have dedicated Product/Wiki pages set-up to make it easy to access all of the specifications, documentation, and software you use a part of the development process. We hope you’ll find that having all of the information readily available and easily accessible.


New Product Page

Customer Interaction

Lats but not least, we have made big steps in improving the way customers interact with us and each other. As always, we allow for commenting on our blogs and Wiki information posts that our software team responds to in a timely manner. We’ve added more ways to contact our team directly through links and contact forms, and made it easier to subscribe to product information and software releases by subscribing to our Blog/Newsletter. And one new feature that will be launching in a couple of weeks is our new “Boundary Boards”. This will be a new community message boards section of our site dedicated to the sharing of information from a hardware and software development standpoint. Not only will we moderate the message boards, but we will be working to engage with some of the industry’s leading embedded computing engineers to post their comments and solutions to your questions. It is one of the most exciting new additions to our site.


New Wiki

This was simply a high-level overview of the new website. The best way for you to see all of the improvements we’ve made is by experiencing it for yourself. While we’ve spent countless hours fine tuning the new site, there my still be some small irregularities with this launch. Please feel free to notify us at info@boundarydevices.com with anything you think might be amiss with the site. We also wanted to make you aware that while we took care to carry over all customer profiles, some may have become inaccessible or even accidentally disabled in the process. We ask for your patience as resetting your password or creating a new account with the same details may be necessary for some of you. Thank you for your continued patronage on our site and we look forward to better serving you.

The post Welcome to the New Boundary Devices Website appeared first on Boundary Devices.

Official Release of the Nitrogen8M_Mini Featuring i.MX8M Mini

$
0
0

Boundary Devices is pleased to announce the official release of our Nitrogen8M_Mini SBC & SOM for the general embedded and IoT markets. As an NXP Early Access Partner we were able to design and manufacture a commercially ready SBC AND SOM for the i.MX8M Mini worldwide launch at Embedded World 2019.

The Nitrogen8M_Mini SBC with Wifi (Nit8MQ_Mini_2r8eWB) is currently in stock and ready to ship, with orders for the lower-cost, non-Wifi version (Nit8MQ_Mini_2r8e) available and due to ship in a couple weeks. We are also taking orders for our Nitrogen8M_Mini SOM + Carrier board that will ship at the beginning of April. As with all previous Nitrogen releases, a full set of accessories and validated operating systems are available.


Nitrogen8M_Mini SBC 

The Nitrogen8M_Mini family of boards feature NXP’s new i.MX8M Mini applications processor and PF8121 PMIC. The boards also include a robust set of attributes that will allow for rapid evaluation and development for a variety of embedded and IoT applications.

As the company who brought you the globally adopted SABRE Lite i.MX 6 development board (now BD-SL-i.MX6), we have leveraged our long history of NXP partnership and i.MX processor experience to design the next-generation, go-to evaluation platform for engineers looking to get started with the i.MX8M Mini application processor.

Processors, Memory and Storage

The Nitrogen8M_Mini SBC and SOM will launch with the i.MX8M Mini Quad processor, featuring 4 Cortex-A53 and 1 Cortex-M4F cores, with 2GHz CPU clock max.

The boards will launch with 2GB of LPDDR4 RAM and 8GB of eMMC standard, with customer options to expand up to 4GB RAM and up to 128GB of eMMC.

Networking Specifications

The Nitrogen8M_Mini boards include the latest in network connectivity options to serve IoT applications that employ edge, cloud, and/or fog computing.

The SBC will come standard with a gigabit ethernet port as well as an option to include our BD-SDMAC, a certified Wifi 802.11 ac + Bluetooth 4.1 module based on the QCA9377. All this allows engineers flexibility when determining how their end products stay connected.

Nitrogen8M_Mini SOM FrontNitrogen8M_Mini SOM

Optimized for Low Power Consumption

The Nitrogen8M_Mini family is designed to maximize power efficiency making it ideal for low power applications by leveraging the following technologies:

  • Heterogeneous Multicore Processing (HMP)
  • Advanced 14LPC FinFET technology
  • High-speed LPDDR
  • NXP’s PF8121 Power Management Integrated Circuit (PMIC)

Operating System Support

As with all of Boundary Devices’ SBCs and SOMs, the Nitrogen8M_Mini will come with an extensive set of operating system options.

The board will support Linux (Yocto, Ubuntu, Buildroot), FreeRTOS, and Android OS images. All of these OS options will include our best-in-class support via our Wiki, Blog, and Support page.

Development Accessories

In order to promote rapid development, the Nitrogen8M_Mini SBC & SOM will come with available accessories. These accessories include:

  • Touchscreen Displays (7”, 8”, and 10” options)
  • Camera Moule (5MP MIPI Camera)
  • 7W PoE Module (available via daughterboard)
  • Fully populated daughter board (for SOM)

Full Specifications for the Nitrogen8M_Mini SBC and SOM

The Nitrogen8M_Mini will come pre-populated with the most robust set of connectivity options to allow for rapid development and validation of your next project. The boards will also be built with Boundary Device’s industry-leading, production-ready standards and include options such as industrial temp and conformal coating.

All this allows the Nitrogen8M to be used as an evaluation platform or production-ready option. Review the full list of the specifications below. More information including availability can be found on the Nirogen8M_Mini SBC and Nitrogen8M_Mini SOM product pages:

  • CPU — i.MX8M Mini Quad Core (x4 Cortex-A53 @ 1.3GHz; Cortex-M4 MCU)
  • RAM — 2GB LPDDR4 (4GB Optional)
  • Storage — 8GB eMMC (upgradeable to 128GB)
  • GPU — GCNanoUltra for 3D, GC320 for 2D
  • Camera — x1 4-Lane MIPI-CSI
  • Display — x1 MIPI DSI
  • Wireless —Optional Add-On 802.11 ac and Bluetooth 4.1 BD-SDMAC Module (QCA9377)
  • Networking — Gigabit Ethernet port
  • Other I/O:
    • x4 USB 2.0
    • x3 I2C
    • x1 SPI
    • UHS SD Card Support
    • x1 RTC + battery
    • x1 PCIe
    • Optional PoE Module
  • Power — 5V DC input
  • Operating temperature — 0 to 70°C (Industrial Temp Optional)
  • Operating system — Linux (Yocto, Ubuntu, Buildroot), FreeRTOS, and Android

The post Official Release of the Nitrogen8M_Mini Featuring i.MX8M Mini appeared first on Boundary Devices.

Ubuntu Bionic 18.04 LTS for Nitrogen8M_Mini board – March 2019 (kernel 4.9.x)

$
0
0

Ubuntu 18.04.2 Weston/Wayland Compositor

We’re happy to release our Ubuntu Bionic image for Nitrogen8M_Mini board. Since this board supports only Wayland graphical backend, the system is simpler than earlier systems with i.MX6, similar to i.MX8M system.

We use Weston, the reference Wayland compositor in this system, later we’ll release other Wayland compositors as well.

This image is a console developer image also, it boots to the command prompt. Weston compositor could be started manually or you can set autostart the service, as per your preference.

This system contains NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Important !

Before installing this image please check your U-Boot version as it requires U-Boot version 2018.07  to be used.

Make sure to visit our wiki if you need to upgrade:

You can find the bootscript in the /boot subdirectory now, its named boot.scr. The partition labels are set if you use the fastboot method.

If you use your own method please check the boot partition labels, because the fstab boots by label (LABEL=sys-0Ah for example) now. You can use e2label to modify partition label.

Programming the image

Since the Nitrogen8M_Mini board has an SD card slot, not like Nitrogen8M, you can create an SD car similarly to i.MX6 boards.

The image is a slightly-less-than-4GiB image file containing the partition table.  Inspired by ubuntu-mate.org, I changed over from dd to another disk copy program called ddrescue. It is a much more talkative program, although dd does do it’s job honestly. I don’t like mute programs, you never know whats happening in a given moment. For example, if you want to create an SD card for a console image, you need to do the following :

$ sudo apt-get install gddrescue xz-utils util-linux
$ gunzip 20190318-nitrogen8mm-4.9.x_2.3.0_ga-bionic-en_US-console-weston_aarch64.img.gz
$ sudo ddrescue -D --force 20190318-nitrogen8mm-4.9.x_2.3.0_ga-bionic-en_US-console-weston_aarch64.img /dev/sdX

You have to replace sdX with your actual SDHC reader/writer device. Use the lsblk command to check it.

Type lsblk with unplugged SDHC reader, then insert the device, and type lsblk again. A new node will be added , that is your SDHC reader/writer device.

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B). The user ubuntu has administrator rights, but doesn’t need to enter password at sudo command.

We wanted to make life easier at the cost of some security. If you want to change this please type:

ubuntu@bionic-dev64:~$ sudo visudo

, and comment out or delete the last line with “ubuntu” and “NOPASSWD:”

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User ubuntu has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

ubuntu@bionic-dev64:~$ sudo mkdir /root/.ssh
ubuntu@bionic-dev64:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
ubuntu@bionic-dev64:~$ sudo chmod 600 /root/.ssh/auth*
ubuntu@bionic-dev64:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 4.9.x kernel, essentially everything is supported including :

  • Vivante GPU accelerations for Wayland (OpenGL ES 2.0)
  • The Hantro Video Processing Unit supports the following decoders:
    • video/x-h265
    • video/x-vp9
    • video/x-h264
    • video/x-vp8
    • video/x-vp6-flash
    • video/mpeg
    • video/x-h263
    • video/x-flash-video
    • video/x-divx
    • video/x-xvid
    • video/x-cavs
    • video/x-wmv
    • video/x-pn-realvideo
    • video/x-raw
  • Wi-Fi and Bluetooth modules for the built-in Silex module
  • All kind of storage devices , eMMC, SDXC, USB2.0 pen drives, mini PCIe devices, cell modems
  • All of our supported touch panels

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What’s new in this release

The Linux kernel was upgraded to 4.9.155 ( meta-package name: linux-boundary-16b )
GPU driver was upgraded to Vivante 6.2.4p1.8 ( meta-package name: imx-gpu-viv-b15-… ).
The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it’s an externally built module. This change makes the graphics system modular, and more upgradeable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
The NXP/Vivante GPU SDK was added : imx-gpu-sdk 4.0.2 . You can get the source with the usual apt-get source command. The SDK has many new demos, for example OpenGL ES2, OpenVG.
The distribution is Bionic 18.04.2 LTS . Here are some main component versions :

  • Xorg server 1.19.6-1ubuntu4.2
  • gstreamer1.0 1.14.0
  • bluez 5.48-1ubuntu3.1
  • Qt5 5.9.5+dfsg-0ubuntu2
  • apt 1.6.8
  • dpkg 1.19.0.5ubuntu2.3
  • gcc/g++ 7.3.0-27ubuntu1~18.04
  • libwayland 1.16.0-2ubuntu1.1~18.04.1
  • weston 4.0.0-3ubuntu9
  • Silex WiFi / Bluetooth is supported in Bionic also, as well as in Stretch, Xenial and Jessie.

This screenshot shows a playing video, it works via gstreamer as usual:

gstreamer demo

Ubuntu 18.04.2 Weston/Wayland Compositor, playing video on glimagesink

And this screenshot is the usual Qt5/QML demo application running on wayland compositor:

Qt5/QML demo

Ubuntu 18.04.2 Weston/Wayland Compositor, running Qt5/QML demo

 

The system boots to the command prompt, as I mentioned before. You can start Weston compositor on any virtual tty (not ssh, not RS232) terminal by typing:

ubuntu@bionic-dev64:~$ wl
or
ubuntu@bionic-dev64:~$ weston-launch

If you want to start Weston at boot automatically, you have to enable the service, you have to type the following:

ubuntu@bionic-dev64:~$ sudo systemctl enable weston.service
ubuntu@bionic-dev64:~$ sudo systemctl unmask weston.service

If you want to disable the autostart again you need to type:

ubuntu@bionic-dev64:~$ sudo systemctl disable weston.service
ubuntu@bionic-dev64:~$ sudo systemctl mask weston.service

You can find the weston.ini file in the /usr/share/weston/examples directory. Please type:

ubuntu@bionic-dev64:~$ man weston.ini

,to check the options, and feel free to modify it to suit your needs.


As always, please give us some feedback and let us know how things work for you.

The post Ubuntu Bionic 18.04 LTS for Nitrogen8M_Mini board – March 2019 (kernel 4.9.x) appeared first on Boundary Devices.

Viewing all 391 articles
Browse latest View live