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

Nitrogen6_MAX with i.MX6 Quad PLUS Processor

$
0
0

Boundary Devices will soon be releasing a version of the Nitrogen6_MAX with the Quad Plus processor.    The Nitrogen6_MAX is a good fit for the Quad Plus Processor because it offers the full 4GB DDR3 memory as well as other high end features including eMMC and Dual LVDS.  

Here are the notable improvements from the standard i.MX6 Quad to the i.MX6 Quad PLUS:

  • Dramatic graphics performance with enhanced versions of 3D, 2D and composition GPUs and memory bandwidth utilization
  • Improve the system performance of i.MX 6 class systems by dramatically increasing the memory bandwidth utilization without significant impact to Software or Hardware designs
  • Improvement of the internal bus interconnect to more efficiently transport and order memory requests to the DDR controller. 
  • Significantly upgraded the capabilities of the graphic and display subsystems to generate more efficient memory requests, resulting in further bandwidth improvements. (interchangeable tiled buffer, pre-fetch / resolve modules, larger OCRAM)

This is a nice video put together at FTF by Freescale that shows the notable improvements:  Freescale Quad Plus at FTF

The i.MX6 Quad Plus processor will be officially released by Freescale in November 2015.  Boundary Devices will have Nitrogen6_MAX boards available with the Quad Plus in the same time frame.   

Please find below a link to a Buildroot image that works on both iMX6Q and iMXQP of the Nitrogen6_MAX:
http://boundarydevices.com/eula/?file=20150810_buildroot_qt5_sdkviv.img.gz

 This image contains:
– Latest graphics libraries 5.0.11 p6.3-beta
– FSL-GPU-SDK v2.2
– Qt5.5
 
 Here are our measurements on a 720P HDMI display:
 
                        i.MX6Q         i.MX6QP
Fur demo         42fps           66fps
Fractal demo    20fps           30fps
8 layers            20fps           36fps
Blur demo        35fps           65fps
Tutorial7          407fps         670fps

 

The post Nitrogen6_MAX with i.MX6 Quad PLUS Processor appeared first on Boundary Devices.


Using the Cortex-M4 MCU on the Nit6_SoloX

$
0
0

The i.MX6 SoloX processor is the first of a kind, coupling a Cortex-A9 with a Cortex-M4 core inside one chip to offer the best of both MPU and MCU worlds. 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.

SoloX Block Diagram

This blog post will detail how to build and run source code on the MCU using our Nit6_SoloX.

Terminology

Before getting any further, here is a list of terms that will be used in this post:

  • MCC: Multi-Core Communication: protocol offered by Freescale for the MCU and MPU to exchange data
  • 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-A9
  • MQX: RTOS provided by Freescale to run their MCUs
  • RTOS: Real-Time Operating System such as MQX or FreeRTOS

For the impatient

You can download a demo image from here:

20150814-buildroot-nitrogen6x-mcu-demo.img.gz for Nit6_SoloX.

As usual, you’ll need to register on our site and agree to the EULA because it contains Freescale content. The image is a 1GB SD card image that can be restored using zcat and dd under Linux.

~$ zcat 20150814-buildroot*.img.gz | sudo dd of=/dev/sdX bs=1M

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

This image contains the following components:

Development environment setup

This section will detail how to set up a Linux machine to be able to build MCU source code.

First you need to download the “MQX RTOS for i.MX 6SoloX v4.1.0 releases and patches” file which requires to be registered to Freescale website:

Then you need to untar this archive and apply our patch to add support for the Nit6_SoloX board.

~$ cd && mkdir mqx && cd mqx
~/mqx$ tar xf ~/Downloads/Freescale\ MQX\ RTOS\ 4.1.0\ for\ i.MX\ 6SoloX\ Linux\ Base.tar.gz
~/mqx$ wget http://boundarydevices.com.commondatastorage.googleapis.com/0001-Add-Nit6_SoloX-board-support.patch
~/mqx$ patch -p1 < 0001-Add-Nit6_SoloX-board-support.patch
~/mqx$ find . -name "*.sh" -exec chmod +x {} \;

Note that this package comes with a good set of documentation which we invite you to read:

  • doc/Freescale_MQX_RTOS_4.1.0_i.MX_6SoloX_Release_Notes.pdf
  • doc/Getting_Started_with_Freescale_MQX_RTOS_on_i.MX_6SoloX.pdf

As specified in the documentation, you need to install a specific toolchain (CodeSourcery v2014q1) in order to build the BSP.

~$ cd && mkdir toolchains && cd toolchains
~/toolchains$ wget https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q1-update/+download/gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2
~/toolchains$ tar xjf gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2
~/toolchains$ rm gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2

Your machine is now ready to build applications for the MCU!

Build instructions

This section explains how to build the BSP as well as the applications for the MCU only. In order to build the BSP for the MPU, please refer to other blog posts on either Yocto or Buildroot.

~$ cd ~/mqx/
~/mqx$ export TOP=$PWD
~/mqx$ export TOOLCHAIN_ROOTDIR=$HOME/toolchains/gcc-arm-none-eabi-4_8-2014q1/
~/mqx$ cd $TOP/build/imx6sx_nit6sx_m4/make
~/mqx$ ./build_gcc_arm.sh

As the BSP for our board is now built, we can build any example application provided in the MQX package. In order to have an interaction between the MPU and the MCU, you need to build a MCC application. Below are the instructions to build the pingpong application which sends data back and forth between the cores.

~/mqx$ cd $TOP/mcc/examples/pingpong/build/make/pingpong_example_imx6sx_nit6sx_m4/
~/mqx$ ./build_gcc_arm.sh
~/mqx$ $TOOLCHAIN_ROOTDIR/bin/arm-none-eabi-objcopy \
./gcc_arm/ram_release/pingpong_example_imx6sx_nit6sx_m4.elf \
-O binary m4_fw.bin

That’s it, the binary is ready to be used!

Some might be interested in using an IDE to browse/modify/build the source code, note that Freescale provides instructions to use IAR Workbench (Windows only). It seems that there isn’t any plan to support the SoloX MQX release inside the KSDK (Kinetis SDK) as explained in a community forum post.

Run the demo

First you need to copy the image (20150814-buildroot-nitrogen6x-mcu-demo.img.gz) provided at the beginning of this post to an SD Card. Then copy the m4_fw.bin binary to the root directory of the SD Card.

The SD Card contains the U-Boot version that enables the use of the Cortex-M4, the bootloader inside your NOR must therefore be upgraded.

U-Boot > setenv bootfile u-boot.imx
U-Boot > run upgradeu

Once the upgrade is complete and the board restarted, make sure to have a clean environment:

U-Boot > env default -a
## Resetting to default environment
U-Boot > saveenv

By default, the M4 must be flashed in NOR memory, a U-Boot command has been added to look for the m4_fw.bin as the root of any external storage (SD, USB, SATA):

U-Boot > run m4update

This command will download the firmware from external storage to RAM and flash it at the offset 0x1E0000 of the NOR.

While debugging on the MCU, you might wish not to write every firmware into NOR so we’ve added a command that loads the M4 firmware directly from external storage.

U-Boot > setenv m4boot 'run m4boot_ext'

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. In order to start the MCU at boot up, we need to set a variable that will tell the 6x_bootscript to load the firmware into OCRAM. If you wish to start the MCU at every boot, make sure to save this variable.

U-Boot > setenv m4enabled 1
U-Boot > boot

While the kernel is booting, you should see the following prompt on the MCU serial output:

***** MCC PINGPONG EXAMPLE *****
Please wait :
 1) A9 peer is ready
Then press "S" to start the demo
********************************

Press "S" to start the demo : 

Press the S key as requested above on the MCU serial console and then log into Buildroot on the MPU serial output (login is root, no password). You now need to enable the MPU side of the communication before starting the demo:

# echo 1 > /sys/bus/platform/drivers/imx6sx-mcc-test/mcctest.15/pingpong_en &
A9 mcc prepares run, MCC version is 002.000
test/mcctest.15/pingpong_en &
# Main task received a msg from [1, 0, 2] endpoint
Message: Size=0x00000004, data = 0x00000002
Main task received a msg from [1, 0, 2] endpoint
Message: Size=0x00000004, data = 0x00000004
...

That’s it, you’ve built a MCU application from scratch and can now start exploring all the examples provided inside the MQX SoloX release.

The post Using the Cortex-M4 MCU on the Nit6_SoloX appeared first on Boundary Devices.

Android Getting Started Guide

$
0
0

This post intends to gather all the information you need to start a project on Android. It is not tied to a specific version but instead tries to be generic across all of them.

Development environment

Before being able to develop on Android, we need to set up the development environment. This section will differentiate two types of development: system and application. The reason is that some costumers are just interested in developing an Android application on top of our system release without modifying the system.

System development

If you wish to build the entire Android system from scratch, know that it requires a Linux machine or at least a Linux Virtual Machine (VM). Mac OS systems are also supported but will not be covered on this post.

The Android Open-Source Project (AOSP) provides a website with lots of useful information about Android system development.

Regarding the development environment, you need to first make sure to comply with the AOSP recommendations. Note that it requires a 64-bit version of Linux.

Note that for building versions prior to Lollipop, the page above has incomplete instructions for Java versions on newer Ubuntu machine. For building Android v2.3 to v4.4.4, you’ll need the Sun Java development kit (JDK 1.6). You can install using by following the instructions provided in the following post.

Building Lollipop version or above only requires to have OpenJDK v7.

~$ sudo apt-get install openjdk-7-jdk

In addition to the AOSP requirements, the following packages are needed to build Freescale components:

~$ sudo apt-get install uuid uuid-dev zip lzop gperf zlib1g-dev \
liblz-dev liblzo2-2 liblzo2-dev u-boot-tools lib32z1 flex git-core curl

Next step is downloading the source code. To do so you need the repo tool which has been developed especially for Android in order to manage the hundreds of Git repositories this project contains.

  • https://source.android.com/source/downloading.html
~/$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo \ 
    > ~/bin/repo
~/$ chmod a+x ~/bin/repo
~/$ export PATH=~/bin/repo:$PATH

The lasts steps before being able to download the Android source code for our platforms are:

Then you can retrieve the entire tree. Note that you need a lot of space, Google says “at least 100GB of free disk space for a checkout, 150GB for a single build”.

~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ ~/bin/repo init -u git://github.com/boundarydevices/android-manifest.git 
       -b boundary-imx-l5.0.0_1.0.0-ga
~/myandroid$ repo sync

Note that the repo init command above will change depending on the version of Android you want to build. The -b parameter selects which branch of our manifest repository to use.

Your machine is now ready to build a fresh Android image from scratch!

Application development

Setting up a machine for application development is much easier plus it works the same on every OS: Windows, Linux, Mac OS.

Although application development IDE used to be Eclipse along with a plugin named ADT, this has been deprecated in favour of Android Studio.

Download this IDE along with the Android SDK from the following website:

Note that this site provides the API guide as well as lots of app examples which are directly available in the IDE as part of the SDK.

android_studio

Debugging Tools

The most important tool that Android offers is the Android Debug Bridge (ADB). It is mandatory to set it up as the IDE requires it in order to install/debug applications. It is also useful for system development as it allows to access the board easily, allowing to send files back and forth between the target and the host machine for instance.

Under GNU/Linux systems (and specifically under Ubuntu systems), regular users can’t directly access USB devices by default. The system needs to be configured to allow such access. Please follow the instructions from the AOSP website to authorize USB access to most common devices.

Details about the tool and all the commands available:

A couple of other tools might be of interest depending on your needs.

systrace_sample

Build instructions

AOSP build

Initialize the environment with the envsetup.sh script.

~/myandroid$ source build/envsetup.sh

This script gives you access to a new set of commands targeted for AOSP development. Below are detailed the most useful ones (in our opinion).

  • croot: Changes directory to the top of the tree (useful when you get lost in frameworks/base)
  • mm: Builds all of the modules in the current directory
  • mmm: Builds all of the modules in the supplied directories
  • cgrep: Greps on all local C/C++ files
  • jgrep: Greps on all local Java files
  • resgrep: Greps on all local res/*.xml files

The next step is to choose the target board and build:

~/myandroid$ lunch
... choose nitrogen6x-eng or nit6xlite-eng from the list of boards and then build
~/myandroid$ make 2>&1 | tee build.out

A full build will take upwards of 3 hours, but incremental builds are pretty speedy if you’re changing things.

In order to flash the newly created Android image into a SD Card, you can use our mksdcard.sh script:

~/myandroid$ ./device/boundary/mksdcard.sh /dev/sdX nitrogen6x (or nit6xlite)

Tips & Tricks

If your latest modifications only affect kernel, ramdisk or bootscript, you do not need to start a full build but use the bootimage target instead.

~/myandroid$ make bootimage

This will only update the components under the boot/ output folder which then can be updated as follows as an example:

~/myandroid$ adb push $OUT/boot/imx6q-nitrogen6x.dtb /boot
~/myandroid$ adb push $OUT/boot/uImage /boot
~/myandroid$ adb push $OUT/boot/6x_bootscript /boot
~/myandroid$ adb push $OUT/boot/uramdisk.img /boot

Those modifications require a reboot in order to take effect:

~/myandroid$ adb reboot

If on the other hand the modification only affect a specific package, you can rebuild only that latter by issuing:

~/myandroid$ mmm hardware/libhardware_legacy/

You can even force the rebuild in case the Android.mk doesn’t see any obvious change that require re-building:

~/myandroid$ mmm -B hardware/libhardware_legacy/

Then the Android build process allows you to just send over changes to a USB-connected board using adb sync which requires to remount the system partition first:

~/myandroid$ adb remount
~/myandroid$ adb sync

If you’re changing system components, the best is to reboot as explained above but you could stop and restart the Android GUI.

~/myandroid$ adb shell 'stop && start'

Finally, in order to add a git project as part of your custom image, you need to edit .repo/manifest.xml which is actually a symlink to .repo/manifests/default.xml. Note that when adding new projects, there are at least three parts defined:

  • remote — the name of the remote. this can be one that was defined in either the default manifest or local_manifest.xml.
  • name — the name of the git project– for github it has the format account_name/project_name.
  • path — where the git repository should go in your local copy of the source code.
  • revision — (optional) which branch or tag to use in the repository. If this attribute is omitted, repo sync will use the revision specified by the <default … /> tag in the default manifest.

Here is an example that adds the CMFileManager application:

Going further

This post should enable you to get started with your project. But if you are looking for more information on some specific topics, we’ll try to link our more advanced Android posts here.

We also try to give as much details as possible on every of our release post.

The post Android Getting Started Guide appeared first on Boundary Devices.

Fido release of Yocto

$
0
0

So it’s about time we posted a Fido image. For the impatient, here are two image files:

These images are core-image-sato-dev with gstreamer, gpu tools, and gstreamer plugins. Also added in is a simple desktop icon launcher to test video input from cameras or our HDMI input daughterboard.

To burn the image file to a sdcard, run this command assuming your sdcard is mounted on /dev/sdc

sudo umount /dev/sdc*
zcat core-image-sato-dev-nitrogen6x.sdcard.gz | sudo dd of=/dev/sdc bs=1M

If you want to build this image on your own you’ll need the local.conf and the bblayers.conf and this meta-boundary-example layer and this meta-browser layer that I used in my build. The image file will deploy to ~/bd-yocto/sato-dev/tmp/deploy/images/nitrogen6x/core-image-sato-dev-nitrogen6x.sdcard or nitrogen6x-lite/core-image-sato-dev-nitrogen6x-lite.sdcard depending on your board target.

I assume you have bitbake and these packages installed.
I assume you’ve downloaded the files above to ~/Downloads/
The MACHINE name for the nitrogen6x, nitrogen6_max, and sabrelite is MACHINE=nitrogen6x
The MACHINE name for the nitrogen6x-lite is MACHINE=nitrogen6x-lite
The nitrogen6_vm does not have a machine target for Yocto, contact us if you wish to build for that
The SoloX board will have a machine target soon, this post will be updated when that happens
Use the appropriate MACHINE name for your platform and edit the local.conf to reflect that. My example will be for the nitrogen6x.
Then run these commands to start the build:

~$ mkdir ~/bd-yocto
~$ cd ~/bd-yocto
~/bd-yocto$ repo init -u http://www.github.com/Freescale/fsl-community-bsp-platform -b fido
~/bd-yocto$ repo sync
~/bd-yocto$ tar xf ~/Downloads/meta-boundary-example.tgz -C sources/
~/bd-yocto$ tar xf ~/Downloads/meta-browser.tgz -C sources/
~/bd-yocto$ MACHINE=nitrogen6x . setup-environment sato-dev
~/bd-yocto/sato-dev$ cp ~/Downloads/fido-nitrogen6x-local.conf conf/local.conf
~/bd-yocto/sato-dev$ cp ~/Downloads/fido-bblayers.conf conf/bblayers.conf
~/bd-yocto/sato-dev$ bitbake core-image-sato-dev

Be warned, this image recipe calls out for building chromium which will take hours and will take ~12GB of RAM at the linking stage of compilation. If you’d like to get rid of chromium, simply remove it from the local.conf file. This image also includes the much easier-to-build firefox browser.

For those with the HDMI Input Daugherboard, this image includes a separate device tree for the nitrogen6x that enables the HDMI input daughterboard and disables the cameras. If you’d like to use this image for that purpose, interrupt u-boot as it boots to drop into the u-boot console and run these commands:

Hit any key to stop autoboot: 0 
U-Boot > setenv dtbname imx6q-nitrogen6x-hdmi-input.dtb
U-Boot > saveenv
Saving Environment to SPI Flash...
SF: Detected SST25VF016B with page size 256 Bytes, erase size 4 KiB, total 2 MiB
Erasing SPI flash...Writing to SPI flash...done
U-Boot > reset

Then click on the Video Input Test icon on the desktop when it boots, seen below. This launcher also works for the ov5642 camera when the regular device tree file is used at boot.

For those with the ov5640_mipi camera, click on the OV5640 MIPI Test Icon seen below.

ov5640_mipi

The post Fido release of Yocto appeared first on Boundary Devices.

Android support for Nitrogen6X with Murata module

$
0
0

As you might have noticed, one version of our Nitrogen6X takes advantage of the Murata LBEH5DU1BW WiFi/BT combo module.

http://boundarydevices.com/product/nit6q_w_bcom-quad-core-1gb-ddr3-murata-wifibt-antenna/

i.MX6 Quad-Core with WiFI+BT from Murata

i.MX6 Quad-Core with WiFI+BT from Murata

This module is now supported in our latest Android 5.0.0 (Lollipop) release!

For the impatient

You can download the Nit6Q_W_BCOM image from here:

As usual, you’ll need to register on our site and agree to the EULA because it contains Freescale content. The image is a 4GB SD card image that can be restored using zcat and dd under Linux or Alex Page’s USB Image Tool under Windows.

What’s supported?

Feature-wise, the support is the same between the modules:

  • WiFi STA mode
  • WiFi Ad-Hoc mode (hotspot)
  • WiFi P2P (WiFi Direct)
  • Bluetooth 4.0
    • just like the TiWi, BLE peripheral mode isn’t supported

To be noted that WiFi Direct doesn’t interfere with Bluetooth at all, allowing users to use both features seamlessly.

Performances comparison

WiFi

Both tests have been running with the same iperf3 v3.0.10 binary with the exact same network configuration.

  • Murata LBEH5DU1BW
[ ID] Interval       Transfer     Bandwidth       Retr
[ 5] 0.00-10.11 sec  24.6 MBytes  20.4 Mbits/sec  0     sender
[ 5] 0.00-10.11 sec  24.4 MBytes  20.3 Mbits/sec        receiver
  • LSR TiWi-BLE
[ ID] Interval       Transfer     Bandwidth       Retr
[ 4] 0.00-10.00 sec  19.3 MBytes  16.2 Mbits/sec  0     sender
[ 4] 0.00-10.00 sec  16.8 MBytes  14.1 Mbits/sec        receiver

Source code access

The sources for this release are in the boundary-imx-l5.0.0_1.0.0-ga branch of our new android-manifest Github project.

Please follow our latest release instructions to retrieve the source code. Once everything is set up properly, you just need to modify one configuration file in order to specify the use of the Murata module (TiWi BLE being the default configuration).

~/myandroid$ sed -i 's/TI/BCM/' device/boundary/nitrogen6x/wifi_config.mk
~/myandroid$ source build/envsetup.sh
~/myandroid$ lunch nitrogen6x-eng
~/myandroid$ make 2>&1 | tee build.out

 

The post Android support for Nitrogen6X with Murata module appeared first on Boundary Devices.

What is Yocto and how can I start?

$
0
0

This is one of the more common questions I receive. Maybe you’ve read our recent Yocto Fido post and want more information. It’s not a short or easy question to answer. The Yocto “Mega-Manual” is 453 pages long and the Bitbake User Manual is 55 pages long. If you really want to be an expert, you’ll need to read through both of those very thoroughly, but for now how about we create our own getting-started guide here.

Quick Reference

Here are some quick cheat sheets I use to remember commands or reference various variable names. Bookmark these, they’ll help.

Bitbake Cheat Sheet
Bitbake Variable Glossary

Build Environment

You’re going to need lots of disk space(100G+), a rather decent build machine, and I recommend Ubuntu. For the purposes of this guide, I’m going to assume you’re on Ubuntu although you should have no problems with Fedora, openSUSE, CentOS, or Debian. You’ll need the following packages installed on your system:

~$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm

Basic Image

Now for a basic image. Lets first initialize the Freescale community board support package.

~$ mkdir ~/fido
~$ cd ~/fido
~/fido$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b fido
~/fido$ repo sync

This will pull in all the Yocto Fido branch recipes, configurations, and everything you need to build a Yocto image for our boards. We tend to give out an image called core-image-sato, it has a nice X11 desktop people are used to. So let’s build that, I’ll get more in-depth into how the core-image-sato image recipe works later.

For the sabre-lite board, the MACHINE name is imx6qsabrelite. For the nitrogen6x and nitrogen6x_max boards and all their variants, the MACHINE name is nitrogen6x. For the nitrogen6x-lite, the MACHINE name is nitrogen6x-lite. For the purposes of the example, I’ll build for the nitrogen6x, replace that according to whatever you’re using.

~$ cd ~/fido
~/fido$ MACHINE=nitrogen6x . setup-environment core-image-sato
(accept the license agreement)
~/fido/core-image-sato$ bitbake core-image-sato

Let that run, it will build the whole image and deploy a sdcard file to ~/fido/core-image-sato/tmp/deploy/images/nitrogen6x/core-image-sato-nitrogen6x.sdcard. Once this is done, you can write this sdcard file to a sdcard and it will boot the core-image-sato image on your board.

Write Image to SD Card

To write a sdcard on Linux we use a utility called dd. Sometimes I receive general confusion as to exactly what this command does. Some people wonder if they need to format the sdcard first or if I left out other steps. The answer here is simply no. All dd does is write bits from one location to another, converting for block size differences if applicable. In fact, dd probably just stands for “covert and copy”, but the C compiler uses the “cc” command so they opted to use “dd”. The core-image-sato-nitrogen6x.sdcard file includes all partition table information and is a complete image file, although we use the .sdcard file extension and not .img.

The core-image-sato recipe just expands upon the core-image class and that just expands upon the image class which defines the image creation class to include image_types. There you will see how the rootfs ext3 file is created, among other image deployment types. Also our machine configurations include Freescale’s image creation class image_types_fsl. There you will see how the .sdcard file is created and how you can modify certain global variables to change the size of the rootfs or boot partitions. Also, for those who’ve used the mkfs.ext3 command before, no there isn’t a -d option, but Yocto’s build process includes a different mkfs executable which does include this option. So, you couldn’t achieve the same results by running these commands by hand.

To dd the image file to a sdcard, first plugin and mount your sdcard to your computer. It will mount itself somewhere in /dev/sdX where X is the letter it mounts to. I have two hard drives and a DVD drive that take up /dev/sda /dev/sdb and /dev/sdc, so when I plugin sdcards Linux mounts my sdcards at /dev/sdd. Tail your syslog(run command “tail -f /var/log/syslog” then plugin your sdcard) to find out where your sdcard mounted and replace the letter X appropriately in the following instructions.

~$ cd ~/fido/core-image-sato/tmp/deploy/images/nitrogen6x/
~/fido/core-image-sato/tmp/deploy/images/nitrogen6x$ sudo umount /dev/sdX*
~/fido/core-image-sato/tmp/deploy/images/nitrogen6x$ sudo dd if=core-image-sato-nitrogen6x.sdcard of=/dev/sdX bs=1M

So now you’ve built and deployed an image to your device. Lets drill down deeper into the details, look at exactly what just happened, add some things to the image, modify existing elements of the image, and create our own recipes. I cover this in the next blog post.

The post What is Yocto and how can I start? appeared first on Boundary Devices.

What is a Yocto image and how can I modify it?

$
0
0

This is a continuation of a previous blog post. Here I will add some things to the image and modify existing elements of the image.

If you’re brand new at this Yocto thing and are completely overwhelmed with documentation to read through, this blog post is meant to be an axillary bare-bones starting guide. Some quick tips that you can try to get results right away. That is the hope, anyway. So here are a few topics I think are most important to know about when you’re just starting.

local.conf/bblayers.conf

After you initialize and run the setup-environment script, you’ll notice a ~/fido/core-image-sato/conf folder. In this are two important files, bblayers.conf and local.conf. bblayers.conf tells bitbake what layers are present in the sources directory located at ~/fido/sources/ and local.conf is a configuration file where you can set build specific last-minute additions or tweaks. For this demo, I’ll add the package gstreamer to the image. This will install gstreamer on the image as the gstreamer recipe is available in the ~/fido/sources/poky/ directory and that directory is specified in bblayers.conf.

Add the following line to the end of ~/fido/core-image-sato/conf/local.conf:

IMAGE_INSTALL_append += “gstreamer”

The IMAGE_INSTALL variable lists all packages that this particular image includes. Any variable with _append following it is a separate variable that simply appends more information to that variable. There is also a _prepend variable which prepends information to that particular variable. You can read more about these variables and syntax in the short cheat sheet here or in the in-depth chapter in the manual here.

Now go back and re-build core-image-sato and it should have the gstreamer package installed:

~$ cd ~/fido/
~/fido$ MACHINE=nitrogen6x . setup-environment core-image-sato
~/fido/core-image-sato$ bitbake core-image-sato

It’s important to note that you need to re-run the setup-environment script line once per terminal session. That is to say if you have 5 bash terminals open, you need to run that command in each one of those terminals if you intend on running the bitbake command within that terminal. Doing it more than once is harmless.

Add your own layer

If you take a look at our Yocto Fido blog post you’ll notice I included a meta-boundary-example layer and some instructions on how to include it. This layer is a bit simple, but shows how easy it can be to deploy some particular files to your image’s root file system. In that example I just deployed two simple desktop icons and two simple scripts to particular locations in the root file system of the image to add gstreamer desktop icon launchers for our camera modules.

For the purposes of this tutorial, we’ll construct a different layer that does some more interesting things.

conf/layer.conf

Every bitbake source layer needs a configuration file to define where the recipes are. So lets create our layer and that configuration file like this:

~$ cd ~/fido/sources/
~/fido/sources$ mkdir meta-boundary-tutorial
~/fido/sources$ cd meta-boundary-tutorial
~/fido/sources/meta-boundary-tutorial$ mkdir conf
~/fido/sources/meta-boundary-tutorial$ cd conf
~/fido/sources/meta-boundary-tutorial/conf$ vi layer.conf

The layer.conf file needs to look like this:

BBPATH .= ":${LAYERDIR}"

BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "boundary-tutorial"
BBFILE_PATTERN_boundary-tutorial := "^${LAYERDIR}/"

Now you’re ready to create recipes and put them in your layer. Categorize your recipes with some sort of name, it can be anything so try and be descriptive. sources/meta-boundary-tutorial/recipes-kernel for example to collect recipes related to and for building kernels. Or sources/meta-boundary-tutorial/recipes-boundary-example for some boundary devices example recipes.

Patch Recipe

So one of the more common recipes you might make is to simply patch something. Lets say some particular piece of software in the distribution is broken and needs fixing. Or maybe you want to make some modifications to some other piece of software. Well, in this instance you’d want to “append” to that software’s recipe and include patch files. Any .patch file in the SRC_URI variable will automatically be applied to the source code of the project, so this recipe is particularly easy.

So for a practical example, lets say you have our Nitrogen6_Max board and want to enable the RS485 serial port on uart5. Well that UART is defined in the device tree here and as you can see the rs485-mode is off, to enable it you’d need to patch this file. The patch is rather simple and looks like this:

From 1e9d092394584c83ed3217339c593171be57b103 Mon Sep 17 00:00:00 2001
From: Ian Coolidge <ian@boundarydevices.com>
Date: Mon, 31 Aug 2015 14:26:59 -0700
Subject: [PATCH 1/1] imx6qdl-nitrogen6_max.dtsi: Enable RS485 on uart5

---
 arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
index 11c0856..e7649e2 100644
--- a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
@@ -946,7 +946,7 @@
 	rs485_txen_mask = <0x3>;
 	rs485_txen_levels = <M_TX_EN>;
 	uart-has-rs485-half-duplex;
-	rs485-mode = <0>;	/* 1 to enable */
+	rs485-mode = <1>;	/* 1 to enable */
 	status = "okay";
 };
 
-- 
1.9.1

As you can see, we simply just changed the value there. So to create a recipe that appends that patch file to our linux-boundary_3.10.53.bb recipe you would do the following:

~$ cd ~/fido/sources/meta-boundary-tutorial/
~/fido/sources/meta-boundary-tutorial$ mkdir -p recipes-kernel/linux/files/
~/fido/sources/meta-boundary-tutorial$ cd recipes-kernel/linux
~/fido/sources/meta-boundary-tutorial/recipes-kernel/linux$ vi linux-boundary_3.10.53.bbappend

This recipe would look like this:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += "file://0001-imx6qdl-nitrogen6_max.dtsi-Add-rs485-support-on-uart.patch"

That recipe requires that the 0001-imx6qdl-nitrogen6_max.dtsi-Add-rs485-support-on-uart.patch file described above be put in ~/fido/sources/meta-boundary-tutorial/recipes-kernel/linux/files/.

Now if you add the meta-boundary-tutorial layer to the end of your ~/fido/core-image-sato/conf/bblayers.conf file, then your layer will be added to bitbake’s path and your append recipe will be applied during compilation. To add that, simply add this line to the end of the BBLAYERS block in bblayers.conf:

  ${BSPDIR}/sources/meta-boundary-tutorial \

Now if you re-run the bitbake process, you’ll notice the linux-boundary recipe is re-built from scratch and your patch will be applied in linux-boundary_3.10.53.bb’s do_patch stage.

~$ cd ~/fido/
~/fido$ MACHINE=nitrogen6x . setup-environment core-image-sato
~/fido/core-image-sato$ bitbake core-image-sato

 Customize Kernel

Sometimes we get requests for modified kernel configurations in standard images we release. Even though the kernel recipe calls out for a specific defconfig file, we can re-run the kernel build manually and select our own configuration by running the task do_menuconfig for the kernel recipe. Then you would run the do_compile and do_install tasks manually to compile and deploy the newly built kernel.

~/fido/core-image-sato$ bitbake -c menuconfig virtual/kernel
(select configuration and save)
~/fido/core-image-sato$ bitbake -c compile virtual/kernel
~/fido/core-image-sato$ bitbake -c install virtual/kernel

If you wanted to use that configuration instead of the default, you could create a defconfig file and replace the one the recipe uses.

~/fido/core-image-sato$ bitbake -c savedefconfig virtual/kernel
~/fido/core-image-sato$ cp ~/fido/core-image-sato/tmp/work/nitrogen6x-poky-linux-gnueabi/linux-boundary/3.10.53-r0/build/defconfig ~/fido/sources/meta-fsl-arm-extra/recipes-kernel/linux/linux-boundary-3.10.53/defconfig

In the next blog post we will talk about creating your own recipes for your own software projects.

The post What is a Yocto image and how can I modify it? appeared first on Boundary Devices.

What is a Yocto recipe and how can I make one?

$
0
0

This is a continuation of a previous blog post. Here I will show how to add your own content to an existing image.

Recipe Making Guide

The Yocto manual covers how to make a recipe very well. So well, in fact, that it blows this simple tutorial out of the water. I don’t want to re-invent the wheel here, so if you’re looking to learn how to do something big, read through the chapter in their manual here.

If you’re looking to create QT application recipes, I’ve found this to be a short and concise guide on how to do that. So read through that if you’re looking to create QT recipes.

Add a project recipe

This is where you really need to read through everything and get a good knowledge of how everything works. However, for bare-bones introduction the Yocto manual includes several really good examples in this chapter.

Hello World

A simple C code “hello world” application recipe can be seen here

Autotools

If you have a project that can be built using autoconf and automake, making recipes is extremely easy like their example here.

We have a simple application up on our github that daemonizes an application, the source code can be seen here. This project can be built using autotools, so an example recipe to build that would go in sources/meta-boundary-tutorial/recipes-boundary/daemonize/daemonize.bb and would look like this:

# Copyright (C) 2014 Boundary Devices

SUMMARY = "Daemonize"
SECTION = "base"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=5003fa041d799dd5dd5f646b74e36924"

S = "${WORKDIR}/git"

SRC_URI = "git://github.com/boundarydevices/daemonize.git;branch=${SRCBRANCH}"
SRCBRANCH = "master"
SRCREV = "9c08934f6cbf3cf4bfbdeb92d411072e5d2f7ad0"

inherit autotools-brokensep

As you can see here, bitbake knows what to do with autotools recipes and this recipe is pretty simple. If you add the daemonize recipe to IMAGE_INSTALL_append in your ~/fido/core-image-sato/conf/local.conf, then re-run the bitbake process you would include this daemonize tool in your image.

Makefile

If your source code depends on other libraries and is built using a Makefile, then this example illustrates how to do that.

The post What is a Yocto recipe and how can I make one? appeared first on Boundary Devices.


Android Lollipop 5.1.1 BETA release for i.MX6 boards

$
0
0

We are glad to release a new version of Android 5.1.1 (Lollipop) for all our platforms: BD-SL-i.MX6 (SABRE Lite), Nitrogen6x, Nitrogen6_Max, Nitrogen6_Lite and Nitrogen6_VM.

This release is a BETA release meant for testing and evaluation of the latest features and security enhancements of the Android OS.

We still recommend either KitKat 4.4.3 or Lollipop 5.0.0 for new designs as the source code of this release cannot be shared.


For the impatient

You can download images from here:

As usual, you’ll need to register on our site and agree to the EULA because it contains Freescale content. The image is a 4GB SD card image that can be restored using zcat and dd under Linux.

~$ zcat l511*.img.gz | sudo dd of=/dev/sdX bs=1M

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

What’s new?

First of all, this release includes all the features that were previously available in our last Android 5.0.0 release. We will only describe the changes brought either by the OS update itself or changes in features that have been enabled in last release.

OS update

Here is a non-exhaustive list of noticeable changes between Android 5.0.0 and 5.1.1:

  • Quick Settings drawer allows now to access some menu such as WiFi selection

wifi_menu

  • Notifications have been heavily changed and now offer an option to temporarily dismiss them

notif_menu

  • Change the system volume level while music is playing
  • Fixes most memory leaks reported in 5.0.0 and 5.1.0

For a more complete changelog between the two versions, we invite you to look at the very nice Opersys website which lists all the different commits between every version:

Linux Kernel 3.14.38

This is the first Android release based on a 3.14 kernel which brings:

  • Latest and greatest drivers support
    • Vivante graphics libraries v5.0.11 p6.3-beta
  • i.MX6 Quad/Dual Plus support
  • i.MX6 SoloX support
  • No more earlysuspend mechanism as recommended by the AOSP folks

Another change is to be noted regarding our display plug-and-play experience. Since the switch to device tree, it has been hard to keep a simple/readable 6x_bootscript that fits all our platforms/displays. So we went ahead and tried another approach having a default node for display timings which U-Boot is in charge to populate. This approach requires an update of U-Boot (see next section).

U-Boot changes

First you need to update U-Boot (after flashing the sdcard image provided above). To do so, you need to set a uboot_defconfig variable which is unique per platform:

  • nit6xlite for Nit6xlite
  • nitrogen6_max for Nitrogen6_MAX
  • nitrogen6q for Nitrogen6x/BD-SL-i.MX6
  • nitrogen6sx for Nit6_SoloX

Below is an example for Nitrogen6x.

U-Boot> setenv uboot_defconfig nitrogen6q
U-Boot> run upgradeu

Then everything should work out of the box again. But in case you wonder how to specify a specific display, here are some useful commands:

U-Boot> fbpanel
 clock-frequency hactive vactive hback-porch hfront-porch vback-porch vfront-porch hsync-len vsync-len
hdmi: 1280x720M@60:m24:74161969,1280,720,220,110,20,5,40,5
 74161969 1280 720 220 110 20 5 40 5
hdmi: 1920x1080M@60:m24:148500148,1920,1080,148,88,36,4,44,5
 148500148 1920 1080 148 88 36 4 44 5
hdmi: 1024x768M@60:m24:64998375,1024,768,220,40,21,7,60,10
 64998375 1024 768 220 40 21 7 60 10
lvds: lg1280x800:j24:71108582,1280,800,48,80,15,2,32,6
 71108582 1280 800 48 80 15 2 32 6
...
U-Boot> setenv fb_lvds lg1280x800
U-Boot> saveenv
U-Boot> reset

The example above uses fbpanel to list all the available settings for this particular platform. Then the LVDS display is set to be the LG1280x800 display by setting fb_lvds. The same can be done for HDMI or LCD displays through fb_hdmi and fb_lcd.

Behind the curtain you can have a look at the cmd_hdmi, cmd_lvds and cmd_lcd variables which are now being run from the 6x_bootscript in order to setup the display timings and resolutions.

Source code access

Unfortunately the BETA source code cannot be shared. This is therefore a binary-only release but be sure it will help us getting the GA source code adapted and released faster.

You can however see the kernel changes (GPL) as well as our own device layer:

 

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

The post Android Lollipop 5.1.1 BETA release for i.MX6 boards appeared first on Boundary Devices.

Android Lollipop NFC demo on i.MX6

$
0
0

Here is a video that shows the NFC feature integrated into our Android Lollipop 5.0.0 code base. It is running on our Nitrogen6x platform along with the NXP PN7120 development kit.

The video shows that a NFC tag, programmed with Boundary’s URL, is automatically read and starts the Browser accordingly.

In order to read/write data from a NFC tag, Android provides a fully documented API.

If you seek an existing application to write tags, here are a couple of options:

 

Let us know if you have any question regarding this feature.

The post Android Lollipop NFC demo on i.MX6 appeared first on Boundary Devices.

Compiling latest U-Boot for i.MX6 (2015 edition)

$
0
0

If you’ve updated to our most recent kernel >= 3.14.28_1.0.0_ga then you’ll be needing our new u-boot to accompany it. This will require you to pull and compile our u-boot branch and deploy it to your board.

Please take your time. Doing this incorrectly will brick your board. Triple check the u-boot binary matches the board you have. If you’re not sure, ask!

For the impatient

I took the liberty of compiling nearly all the versions of u-boot for nearly all our boards. These are built against their respective defconfig as of revision 440d481 on branch boundary-v2015.07.

You’ll also need this 6x_upgrade script. Instructions on how to upgrade are after the compiling instructions below.

Compilation

The usual compilation disclaimers apply for this. I highly recommend the gcc-arm-linux-gnueabihf package available on Ubuntu. I use this package and target CROSS_COMPILE at that compiler in my example below.

~$ sudo apt-get install gcc-arm-linux-gnueabihf

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-imx -b boundary-v2015.07
~$ cd u-boot-imx6

Here you’ll need to find and make the relevant defconfig for your board. To see all the defconfigs, use this command and pick the one that is right for you.

~/u-boot-imx6$ find . -name "nitrogen*defconfig"
./configs/nitrogen6qp_max_defconfig
./configs/nitrogen6q2g_defconfig
./configs/nitrogen6s_defconfig
./configs/nitrogen6_lum_dl1_defconfig
./configs/nitrogen6sx_defconfig
./configs/nitrogen6q_fl_defconfig
./configs/nitrogen6_max_defconfig
./configs/nitrogen6_vm1g_defconfig
./configs/nitrogen6dl2g_defconfig
./configs/nitrogen6dl_defconfig
./configs/nitrogen6_vm_defconfig
./configs/nitrogen6q_defconfig
./configs/nitrogen6s1g_defconfig

 Now compile that defconfig, here I’ll use nitrogen6q_defconfig as an example.

~/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 all

Now you’ll have a u-boot.imx file compiled. Rename the u-boot.imx file to u-boot.{uboot_defconfig} (see below), then move that and the 6x_upgrade script to the Boot partition of the image you created (see here for instructions on creating a Fido Yocto image). Interrupt u-boot and run the u-boot commands below.

In the u-boot just built, the environment variable uboot_defconfig is defined to show which defconfig was used in the build process. Unless you’re already on a 2015.07 or later u-boot, you won’t have this yet, so for the 1st upgrade you need to set it manually.

You will need to rename u-boot.imx when copying to the SD card, ie.

~/u-boot-imx6/$ cp u-boot.imx /dev/sdd1/u-boot.nitrogen6q

We changed this so that the next time you upgrade, there will be little risk of accidentally using the wrong u-boot.imx file.

If your u-boot prompt is “U-boot >” then run:

Hit any key to stop autoboot:  0 
U-Boot > setenv uboot_defconfig nitrogen6q
U-Boot > run upgradeu

Otherwise just run:

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

This will run the 6x_upgrade script and look for a file u-boot.{uboot_defconfig} and burn it. At this point it might be worth while to clear your envionment variables, this will set you up with the default environment variables and no more.

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

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.

New Features

One of the more important features of the new u-boot is improved display detection and selection. To see the available displays, run the “fbpanel” command from u-boot prompt

Hit any key to stop autoboot:  0
=> fbpanel

Then four variables control which panels you’d like to select:
fb_hdmi controls HDMI display selection
fb_lcd controls LCD display selection
fb_lvds controls LVDS display selection
fb_lvds2 controls LVDS2 display selection

An example selection would look like this:

Hit any key to stop autoboot:  0
=> setenv fb_hdmi 1280x720M@60
=> setenv fb_lcd CLAA-WVGA
=> setenv fb_lvds hannstar7
=> setenv fb_lvds2 hannstar
=> saveenv

Booting with these variables set would pass the appropriate boot parameters to use those display settings if a display is detected on that port.

The post Compiling latest U-Boot for i.MX6 (2015 edition) appeared first on Boundary Devices.

Programming eMMC on i.MX6

$
0
0

This post intends to answer the question of programming the eMMC memory you can find on our Nitrogen6_MAX or Nit6_SoloX devices.

Although there are many different approaches available based on Linux or the MFG Tools, this post will focus on two solutions provided under U-Boot.

Solution #1: Using U-Boot USB Mass Storage Gadget

This feature is fully explained here:

Here is a quick summary:

  • Plug a micro-USB cable from your host machine to the target
  • Connect the board serial output (console) to your computer
    • On the host machine, start a terminal software such as minicom for Linux or TeraTerm for Windows
    • Set the connection baudrate to 115200 with no hardware flow control
  • Power up the board and stop auto-boot process to get U-Boot prompt
    • Simply enter any character on the terminal software to stop auto-boot
  • Enable the UMS Gadget for the eMMC
U-Boot > ums 0 mmc 1
  • On the host machine, you should now see a new USB drive attached, you can now flash it
    • On Linux you can simply use the dd utility
~$ zcat .img.gz | sudo dd of=/dev/sdX bs=1M

Solution #2: Using U-Boot ‘gzwrite’ command

This feature is fully explained here:

Here is a quick summary:

  • Connect the board serial output (console) to your computer
    • On the host machine, start a terminal software such as minicom for Linux or TeraTerm for Windows
    • Set the connection baudrate to 115200 with no hardware flow control
  • Power up the board and stop auto-boot process to get U-Boot prompt
    • Simply enter any character on the terminal software to stop auto-boot
  • Load the gzipped image into RAM
    • This can be done by reading the image from USB, TFTP or MMC
    • Below is an example if the image is copied on a SDCard
U-Boot > load mmc 0 10008000 my.img.gz
  • Once loaded, you can flash the image onto the eMMC
U-Boot > gzwrite mmc 1 10008000 0x$filesize 100000 0

The post Programming eMMC on i.MX6 appeared first on Boundary Devices.

Avnet Inks Distribution Agreement with Boundary Devices Inc

$
0
0

We are excited to announce that Boundary Devices has signed a new distribution agreement with Avnet.  Click here for the press release.

PHOENIX–(BUSINESS WIRE)–Avnet, Inc. (NYSE: AVT), a leading global technology distributor, today announced a new distribution agreement with Boundary Devices Inc., a leading global supplier of ARM-based single board computers and System-on-Modules for the general embedded market. Avnet can now provide customers in markets including military, aerospace and digital displays, with rapid embedded product hardware and software development support, while maintaining the flexibility of a custom design.

Boundary Devices is a provider of hardware and software solutions that can be tailored to each customer’s required form factor and peripheral set. The company specializes in network-connected, fanless, low-power multimedia devices featuring ARM-based boards and designs based on the i.MX family of processors from Freescale® Semiconductor. As a proven partner in Freescale’s Connect Partner Program, Boundary Devices has access to Freescale’s advanced roadmap and product information, giving the company technology insights to ensure customers are building the right product for the right price.

“Software continues to be a challenge for many embedded designers,” said John Salemme, vice president and general manager of Avnet Embedded. “In addition to its strong SBC and SoM offerings, Boundary Devices has tremendous internal software expertise in an array of operating systems, including Ubuntu, Yocto and Android, as well as a network of software partners to help customers choose and implement the best board support package for their embedded design.”

“Avnet has put together an impressive offering of embedded hardware and software partners to properly address the needs of the embedded market,” said Boundary Devices Chief Financial Officer Pejman Kalkhoran. “Boundary Devices is excited to bring our unique products and top notch software support to Avnet’s wide-ranging customer base. Avnet provides a compelling value-add proposition with their supply chain solutions that perfectly complement the strengths of Boundary Devices’ products and services.”

To learn more about the Boundary Devices product and service offerings available from Avnet, visit http://bit.ly/1MEMvuX.

The post Avnet Inks Distribution Agreement with Boundary Devices Inc appeared first on Boundary Devices.

Jethro release of Yocto

$
0
0

Yocto 2.0 release, Jethro, is now available.

Update December 1st, 2015: chromium replaced with firefox until chromium is fixed.

For the Impatient

How to Burn

To burn the image file to a sdcard, run this command assuming your sdcard is mounted on /dev/sdc

~$ sudo umount /dev/sdc*
~$ zcat boundary-eval-image-nitrogen6x-jethro.sdcard.gz | sudo dd of=/dev/sdc bs=1M

How to Replicate

To make the build process a bit easier, we’ve created our own boundary-bsp-platform that can be used to build images for our boards. This is mostly a clone of fsl-community-bsp-platform but we’ve added meta-browser and our own meta-boundary to the mix. There is also a Boundary-Devices-centric setup-environment script. Again, this is mostly a clone of fsl-community-bsp-base’s setup-environment script however we’ve added a central download area and cache to the default local.conf.

Firstly, you’ll need to create the download/cache folders and give r/w access.

~$ sudo mkdir -p /opt/freescale/yocto/imx
~$ sudo mkdir -p /opt/freescale/yocto/sstate-cache
~$ sudo chown -R 777 /opt/freescale

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

~$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
~$ sudo chmod a+x /usr/bin/repo

Now create your build directory and initialize everything.

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

Now setup the environment for building. In this example I’m targeting the nitrogen6x, however nitrogen6x-lite and nitrogen6sx are also valid MACHINE targets here. Use whatever your platform is.

~/jethro$ MACHINE=nitrogen6x . setup-environment boundary-eval-image

Now bitbake boundary-eval-image

~/jethro/boundary-eval-image$ bitbake boundary-eval-image

Now after some time this should build the same image as above. The image file will deploy to ~/jethro/boundary-eval-image/tmp/deploy/images/{MACHINE}/boundary-eval-image-{MACHINE}.sdcard.gz. Feel free to tweak and add things as you see fit.

Video Input Tests

If you have our ov5640-mipi camera, ov5642 camera, or our HDMI input daughterboard the image includes easy desktop icons to launch tests for the respective hardware.

jethro-desktop

The post Jethro release of Yocto appeared first on Boundary Devices.

Buildroot Getting Started Guide

$
0
0

This post intends to gather all the information you need to start a project based on Buildroot. It relies on the 2015.11 release but applies to other versions. This post is largely inspired from Free Electrons Buildroot training, with a focus towards our platforms and Freescale-specific packages.


Introduction

When choosing a build system for an embedded Linux project, many options are available such as: Yocto/OpenEmbedded, PTXdist, Buildroot, LTIB, OpenBricks, OpenWRT, etc…

However nowadays the two most popular ones are:

  • Yocto/OpenEmbedded
    • Builds a complete Linux distribution with binary packages.
    • Most powerful option but also the most complex.
    • Officially supported by Freescale.
  • Buildroot
    • Builds a root filesystem image, no binary packages.
    • Much simpler to use, understand and modify.

Although Freescale is only supporting Yocto, Buildroot offers the same level of support in most instances in regards to the Freescale-specific packages. For instance, the Buildroot 2015.11 release is using the exact same Freescale packages as the Fido release of Yocto.

Here are the key features of Buildroot:

  • Can build a toolchain, a rootfs, a kernel, a bootloader
  • Fast: builds a simple root filesystem in a few minutes
    • Small root filesystem, starting at 2 MB
  • Easy to understand: written in make, extensive documentation
    • Based on well-known technologies: make and kconfig
  • 1600+ packages for user space libraries/apps available
    • Including X.org, Kodi (formerly XBMC), Gstreamer1.0, Qt5.5 etc…
  • Active community, regular releases

For the impatients

We’ve prepared images with the following content:

  • U-Boot 2015.07
  • Kernel 3.14.28_1.0.0-GA
  • All the Freescale packages (GPU, VPU, firmwares)
  • Gstreamer1 + Gstreamer-imx plugin
  • Qt5.5 + Cinematic demo

You can download them from here:

As usual, you’ll need to register on our site and agree to the EULA because it contains Freescale content. The image is a 4GB SD card image that can be restored using zcat and dd under Linux.

~$ zcat buildroot-2015.11-nitrogen*.img.gz | sudo dd of=/dev/sdX bs=1M

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

Build & flashing instructions

In order to retrieve Buildroot source code, you can either download the latest available archive (2015.11 as of this writing):

~$ curl http://buildroot.uclibc.org/downloads/buildroot-2015.11.tar.gz | tar xz
~$ cd buildroot-2015.11

Another option to get Buildroot source is to clone the git repository:

~$ git clone https://git.buildroot.net/buildroot

The configurations available in the Buildroot work fine but only contain very minimalistic system packages.

~/buildroot-2015.11$ make nitrogen6x_defconfig

For this blog post and the image associated to it, we’ve prepared a Qt5.5 + Gstreamer1.0 configuration for Nitrogen6x:

~/buildroot-2015.11$ curl http://storage.googleapis.com/boundarydevices.com/20151201-buildroot-nitrogen6x.config > .config

If you wish to build for Nitrogen6sx instead:

~/buildroot-2015.11$ curl http://storage.googleapis.com/boundarydevices.com/20151201-buildroot-nitrogen6sx.config > .config

Finally the build process is very easy:

~/buildroot-2015.11$ make

The output image will be located in output/images/rootfs.ext2.gz and can be flashed as follows:

~/buildroot-2015.11$ sudo parted /dev/sdc mklabel msdos
~/buildroot-2015.11$ sudo parted -a optimal /dev/sdc mkpart primary 0% 100%
~/buildroot-2015.11$ zcat output/images/rootfs.ext2.gz | sudo dd of=/dev/sdc1 bs=1M

That’s it! As simple as that. Once the image booted, you can start playing with the applications available on the image

# wget http://media.xiph.org/mango/tears_of_steel_1080p.webm -P /root/
# gst-launch-1.0 playbin uri=file:///root/tears_of_steel_1080p.webm
# gst-launch-1.0 imxv4l2videosrc device=/dev/video1 ! imxeglvivsink
# /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience

Next sections will give an overview of Buildroot features, how you can modify and/or extend it for your needs

Customization

Configuration

As Buildroot on Kconfig, its configuration is going to be just like the Linux kernel

~/buildroot-2015.11$ make menuconfig

buildroot_menuconfig

From there you can browse the Target Packages available and select the ones you want.

Quick tip, you can look for a component by typing “/”, then you can go straight to it by entering the number associated to it.

buildroot_menuconfig_search

In the example above, a search for “imx” has been issued. Then typing “2” would bring you directly to the “Freescale i.MX libraries” package selection.

Create a new package

A package in Buildroot-speak is the set of meta-information needed to automate the build process of a certain component of a system. It can be used for open-source, third party proprietary components, or in-house components.

Adding a package consists of creating the following:

  • A directory: package/foo
  • A Config.in file, written in kconfig language, describing the configuration options for the package.
  • A .mk file, written in make, describing where to fetch the source, how to build and install it, etc…
  • An optional .hash file, providing hashes to check the integrity of the downloaded tarballs.
  • Optionally, .patch files, that are applied on the package source code before building.
  • Optionally, any additional file that might be useful for the package: init script, example configuration file, etc…

Here are the steps Buildroot goes through when building a package:

  1. Download the package (to the dl directory)
  2. Extract the package (inside the output/build directory)
  3. Patch the source code
  4. Configure the package
  5. Build the package
  6. Install the package (to output/target directory)

Each software component to be built by Buildroot comes with its own build system. Buildroot does not re-invent the build system of each component, it simply uses it, whether it is hand-written Makefiles or shell scripts, autotools, CMake and also some specific to languages: Python, Perl, Lua, Erlang, etc. In order to avoid duplicating code, Buildroot has package infrastructures for well-known build systems.

Below are some simple examples of existing packages, based on different infrastructures. This should give a good starting point for making your own package.

FBGRAB_VERSION = 1.2
FBGRAB_SITE = http://fbgrab.monells.se
FBGRAB_DEPENDENCIES = libpng
FBGRAB_LICENSE = GPLv2
FBGRAB_LICENSE_FILES = COPYING

define FBGRAB_BUILD_CMDS
 $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)
endef

define FBGRAB_INSTALL_TARGET_CMDS
 $(INSTALL) -m 0755 -D $(@D)/fbgrab $(TARGET_DIR)/usr/bin/fbgrab
endef

$(eval $(generic-package))
E2TOOLS_VERSION = 3158ef18a903ca4a98b8fa220c9fc5c133d8bdf6
E2TOOLS_SITE = $(call github,ndim,e2tools,$(E2TOOLS_VERSION))

# Source coming from GitHub, no configure included.
E2TOOLS_AUTORECONF = YES
E2TOOLS_LICENSE = GPLv2
E2TOOLS_LICENSE_FILES = COPYING
E2TOOLS_DEPENDENCIES = e2fsprogs
E2TOOLS_CONF_ENV = LIBS="-lpthread"

$(eval $(autotools-package))
PYTHON_SERIAL_VERSION = 2.6
PYTHON_SERIAL_SOURCE = pyserial-$(PYTHON_SERIAL_VERSION).tar.gz
PYTHON_SERIAL_SITE = http://pypi.python.org/packages/source/p/pyserial
PYTHON_SERIAL_LICENSE = Python Software Foundation License
PYTHON_SERIAL_LICENSE_FILES = LICENSE.txt
PYTHON_SERIAL_SETUP_TYPE = distutils

$(eval $(python-package))

Use BR2_EXTERNAL

The instructions above show the simplest solution for building and customizing Buildroot. But storing your custom packages, custom configuration files and custom defconfigs inside the Buildroot tree may not be the most practical solution:

  • Doesn’t cleanly separate open-source parts from proprietary parts
  • Makes it harder to upgrade Buildroot

The BR2_EXTERNAL mechanism allows to store your own package recipes, defconfigs and other artefacts outside of the Buildroot source tree. Thus allowing to have a project structure as:

  • project/
    • buildroot/
      • The Buildroot source code, cloned from Git, or extracted from a release tarball.
    • external/
      • Your external tree, with your own custom packages and defconfigs
    • output-build1/
    • output-build2/
      • Several output directories, to build various configurations
    • custom-app/
    • custom-lib/
      • The source code of your custom applications and libraries.

Here is an example of what the external folder can contain.

  • external/
    • board//
      • folder containing board specific post-install/image scripts or overlays
    • configs/
      • custom configuration for your project
    • packages/
      • custom packages (proprietary?) for your project
    • Config.in
      • Configuration options for the BR2_EXTERNAL packages
source "$BR2_EXTERNAL/package/package1/Config.in"
source "$BR2_EXTERNAL/package/package2/Config.in"
    • external.mk
      • Can include custom make logic, use to include the package .mk files
include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))

Once your external folder is properly configured, using the same folder structure as before, starting a new build would be:

~/project$ make BR2_EXTERNAL=$PWD/external -C $PWD/buildroot \
           O=$PWD/output-build3 myownconf_defconfig
~/project$ make -C $PWD/output-build3

Going further

This post just gives an overview of what you can achieve with Buildroot. This is what we think is sufficient to get you started. But if you wish to go further, here are a few links.

First, the project documentation is very thorough and well-written:

Once again we highly recommend to look at the Free Electrons training:

As usual all the slides, labs and solutions are open-source (Creative Commons Attribution – Share Alike 3.0).

Finally, the Buildroot community is very friendly and appreciates any contribution/feedback you can provide:

 

Let us know your experience with Buildroot, good or bad, so we can update this post with more information if needed.

 

The post Buildroot Getting Started Guide appeared first on Boundary Devices.


Ubuntu Trusty for i.MX6 boards – December 2015 (kernel 3.14.28)

$
0
0

It’s been a while since our last Ubuntu release, so it’s time for an updated image of Ubuntu Trusty for our i.MX6 boards with some nice new features.

Ubuntu Trusty 3.14.28 LXDE

 


This image contains 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 image from here:

This image contains support for all of our publicly available i.MX6 boards, though using it with the Nitrogen6 Lite requires a couple of tweaks (described here).

Programming the image

The image is a slightly-less-than-4GiB image file containing the partition table, so you can copy it to an SD card or SATA drive on /dev/sdc using zcat and dd like so:

~/Downloads$ sudo umount /dev/sdc*
~/Downloads$ zcat 20151204-nitrogen*.img.gz | sudo dd of=/dev/sdc bs=1M
~/Downloads$ sync

Or you can use Alex Page’s USB Image Tool under Windows.

If you’re using our latest U-Boot and a Nitrogen6 Max board, you can use the new USB Mass Storage Gadget to program the eMMC. If not, there were some notes in our first release that describe a more complicated way of programming eMMC.

Source code access


The kernel image is based on the boundary-imx_3.14.28_1.0.0_ga branch of our Github kernel repository using boundary_defconfig. The source code of individual packages are available and downloadable in the usual debian/apt way, for example the kernel source :

ubuntu@nitrogen:~$ apt-get source linux-image-`uname -r`

What’s new in this release

  • The Linux kernel was upgraded to 3.14.28 ( meta-package name: linux-boundary-9t6 )
  • GPU driver was upgraded to Vivante 5.0.11p4.5 ( meta-package name: imx-gpu-viv-9t6- )
    • OpenGL ES v3.0 support was added
    • Khronos GLES 3.0 API
    • The 5.x driver is compatible with the 4.x driver. Applications developed using 4.x drivers can run on the 5.x driver without any changes.
    • Application’s performance on the 5.x driver will be better than or equal to that with the 4.x driver
    • Apitrace X11 tools added to trace OpenGL, OpenGL ES, Direct3D and DirectDraw API’s
  • VPU driver was updated to 3.14.28 and multimedia libraries to 4.0.3 ( meta-package name: imx-vpu-cnm-9t )
    • Added Real Networks parser and codec
  • Qt5 support added for X11, Wayland, and Framebuffer backends
  • gstreamer 1.0 support
  • Added support for Toshiba TC358743XBG HDMI to MIPI converter
  • Added support for TS quadrant-calibration
  • Many-many bugfixes, and refinements… no place here to list all of them.

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B).

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@nitrogen:~$ sudo mkdir /root/.ssh
[sudo] password for ubuntu:
ubuntu@nitrogen:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
ubuntu@nitrogen:~$ sudo chmod 600 /root/.ssh/auth*
ubuntu@nitrogen:~$ sudo chmod 600 /root/.ssh/

What’s supported

Since the images above include our stable 3.14.28 kernel, essentially everything is supported. This includes Wi-Fi and Bluetooth, all of our storage devices (SD card, eMMC, SATA, USB sticks, GPU and VPU acceleration) and all of our supported touch panels.

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

GPU development libraries

The package imx-gpu-viv-9t6-dev ( development headers and libraries for OpenGL / ESv2 / ESv3 / Khronos ) is installed by default now. 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}"

If you would like to develop with the original mesa libraries, you have to uninstall the imx-gpu-viv-9t6-dev package, at least temporarily

ubuntu@nitrogen:~$ sudo apt-get purge imx-gpu-viv-9t6-dev

 

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

The post Ubuntu Trusty for i.MX6 boards – December 2015 (kernel 3.14.28) appeared first on Boundary Devices.

QNX Getting Started Guide

$
0
0

This post intends to gather all the information you need to start a project based on QNX Neutrino Real-Time Operating System. It will provide instructions to build your own BSP and/or application.


Introduction

As Wikipedia says: QNX is a commercial Unix-like real-time operating system, aimed primarily at the embedded systems market.

As this RTOS is based on a micro-kernel architecture, it offers a very high stability and robustness which is why it is mainly used for critical applications in medical, defense or automotive industries.

Here is a quick video that shows our QNX6.6 BSP running on our Nitrogen6X platform:

Requirements

Either for BSP or App debugging, QNX Momentics IDE must be installed on your host machine:

Then the BSP can be found on QNX website:

From there can be download either our QNX6.5 or QNX6.6 BSP:

BSP development

In order to build the BSP, you can either do it in command line:

~$ mkdir qnx-bsp && cd qnx-bsp
~/qnx-bsp$ unzip BSP_boundary-imx6q-nitrogen_br-660_be-660_786740.zip
~/qnx-bsp$ make

Or you can use the Momentics IDE:

  • File > Import > QNX > QNX Source Package & BSP > Local archive

qnx_bsp_import

Once imported you can browse the source code:

qnx_bsp_dev

After either manual or IDE build, the output file will be images/ifs-mx6q-nitrogen.raw which you need to copy along with images/bootscript/6x_bootscript to and SDCard or USB drive previously formatted in FAT or ext2/3/4.

App development

Application development is actually going to be pretty similar as it is based on the same tool:

  • File > New > QNX C/C++ project

qnx_app_creation

Once the application is set up, you can specify the target architecture which is ARMv7 in our case.

qnx_app_creation2

Then a sample C file will be created, from there you can start developing/debugging the application.

  • Run > Debug As > QNX C/C++ application

qnx_app_debugging

System Profiling

On top of an excellent debugging capability, this IDE also offers many profiling features which allow to fine tune your system, making sure the process are running as expected.

First, an Eclipse perspective offers many information about every process memory consumption:

  • Window > Open Perspective > QNX System Information perspective
  • On the left panel: right click > New QNX Target (enter the IP of the board)

qnx_memory

From that same perspective, you can start a profiling of several seconds on the target. This will record every interrupt occurring on the target, every task-switching, every instructions, allowing to discover is using the CPU too much or too often for instance.

  • On the left panel: right click > Log With… > Kernel Event Trace
  • Output log will be a .kev file that can be opened with the IDE

qnx_profiling2

Tips & Tricks

This section will give a few tips for those coming from the Linux world, the equivalent of very famous/useful Unix tools.

System logs

If you are looking for dmesg and /var/log/syslog you will see that those do not exist. Instead every log is centralized in sloginfo:

# sloginfo 
Time Sev Major Minor Args
Jan 01 00:00:00 2 19 1800 devb-sdmmc-mx6_generic 1.00A (Dec 2 2015 22:43:33)
Jan 01 00:00:00 2 5 0 libcam.so (Feb 22 2014 18:44:02) bver 6060109
...

Then your application must use the slogf function in order to have the log appear the standard way.

Processes list

Unix systems usually rely on the ps command in order to list the running processes, QNX has another tool called pidin.

# pidin
 pid tid name                prio  STATE     Blocked
 1   1   /procnto-smp-instr  0f    READY
 1   2   /procnto-smp-instr  0f    RUNNING
 1   3   /procnto-smp-instr  0f    RUNNING
 1   4   /procnto-smp-instr  0f    RUNNING
...

Refer to the documentation to know about the different options of the tool.

Manual

Unix users are familiar with the man command which displays the manual pages of a command, instead QNX has use.

# use dvfsmgr-imx6 
dvfsmgr-imx6 - DVFS Manager

dvfsmgr-imx6 [vwp:i:c:d:u:s]

Options:
 -c cfg_file DVFS config file path (default: /etc/system/config/dvfs.conf)
 -o cfg_pwrtable DVFS config Power Table file path (default: /etc/system/config/dvfs_pwrtbl.conf)
 -v Increase verbosity
...

The post QNX Getting Started Guide appeared first on Boundary Devices.

Boot2Qt Getting Started Guide

$
0
0

Introduction

Developing an embedded product requires 3 main steps:  selection of the proper hardware platform, operating system selection/setup, and User Interface (UI) development.  All 3 of these steps are very closely tied together.  t is critical to select the proper hardware platform that also has excellent operating system support as well as the proper UI tools.  Boundary Devices products are exclusively based on the very popular and powerful i.MX family of processors from Freescale.  Our boards have been designed to harness the extreme versatility of the processor while providing the user a variety of integration options.  On the operating system side, Boundary Devices has industry leading operating system options including Android, Yocto, Ubuntu, and Buildroot.  The third and final piece of the puzzle is the UI and this blog post intends to show how fast and easy the setup to get started with a new Qt project when using Boundary Devices platforms.   One of the most complex and time-consuming elements of an embedded project is the User Interface development.  

Thanks to a Qt for Device Creation image (formerly called Boot2Qt or B2Qt) working on all our platforms, one can download the IDE and start developing within minutes!

Note that all our platforms are based on Freescale i.MX processors which provide all the features required for the best Qt experience:

  • 3D/2D/VG processing
  • Video Processing Unit (VPU) for 1080p60 hardware decoding
  • Image Processing Unit (IPU) for hardware-accelerated re-sizing/blending/rotation
  • HDMI, RGB and LVDS display interfaces
  • CSI parallel & MIPI capture capable

Our platforms range from a low-end i.MX6Solo with 512MB of RAM (Nit6xlite) to a high-end i.MX6Quad with 4GB of RAM (Nitrogen6_MAX).

Installation

First, download the online installer from Qt website. Note that is can be downloaded for Windows, Linux or MAC OS.

Start the installation and make sure to select Boundary Devices platforms SDK.

1_Screenshot from 2015-11-19 15-59-53

After a few clicks, the installation will be complete and the environment ready for development.

Flashing instructions

QtCreator provides a “Help” tab which provides lots of information on the APIs but also on the supported hardware. In our case, it also gives the flashing instructions which you can find online:

2_Screenshot from 2015-11-19 16-34-10

$ cd 
$ sudo 5.5/Boot2Qt/nitrogen6x-eLinux/images/deploy.sh /dev/

First boot

Once the flashing process is completed, you can insert the SDCard inside your platform and the system should come up with the following screen:

3_b2qt

This Qt launcher app is made of different sample applications which show off different graphics features such as blurring, 3D/2D, dynamic re-sizing, multimedia and so on.

Application development

Now that everything is set up properly, you can start developing your application. This section will describe the creation of a Canvas 3D sample app.

Create a “New Project” > “Application” > “Qt Canvas 3D Application”. Select the location of this project as well as its name. Then make sure to select the Boundary Devices dev kit:

4_Screenshot from 2015-11-19 16-38-14

Finally the sample app will appear in the IDE, ready to be built/debugged. You can add a breakpoint anywhere and launch the application on the target selecting “Debug” > “Start Debugging” (or F5).

Below is a screenshot of QtCreator during a simple debugging session.

5_Screenshot from 2015-11-19 17-11-36

Here is what should be displayed on the platform display.

6_canvas_3d

That’s all folks! You’ve created your first app and now are ready for app development directly on target.  By working with Boundary Devices hardware, customers can significantly improve their time to market with production-ready hardware and software as well as a well-documented, step-by-step instructions on UI development.  Please contact us for more information or to select the best hardware/software combination for your project.

The post Boot2Qt Getting Started Guide appeared first on Boundary Devices.

New i.MX6 System on Module released – Nit6X_SOM_V2

$
0
0

Boundary Devices introduces the next generation of the Nitrogen6X-SOM – the Nit6X_SOM_V2. The Nit6X_SOM_V2 is fully compatible with the previous Nitrogen6X-SOM, but with some notable improvements. As with the previous version, the Nit6X_SOM_V2 is a low cost, highly integrated System-on-Module based on the Freescale i.MX6 Single/Dual/Quad-Core CPU.  The SOM is ideal for customers looking for rapid product development while maintaining the flexibility of a custom design.  For the V2 SOM, there were some notable improvements:

  • 4GB eMMC
  • 2nd LVDS Channel
  • Modified power supply architecture to support i.MX6 Quad PLUS processor
  • Modified DDR3 layout to support up to 4GB DDR3

Click here for more information on Nit6X_SOM_V2 including schematics

  The Nit6X_SOM_V2 has 10 year guaranteed availability and industrial temperature versions including conformal coating options.  The Nit6X_SOM_V2 can be built with Single, Dual Lite, Dual, Quad, and Quad PLUS Processors as well as from 512MB DDR3 up to 4GB. Contact us for more information.

Design your own carrier board or contact us for a custom carrier board quote. If designing your own carrier board, send us your schematics and layout for a no cost, high level review.

The Nit6X_SOM_V2 has an updated uboot which is not compatible with the previous version of the SOM (due to the additional of on-board eMMC, among other changes).  The new SOM will also require a modified DTB.  Contact us for specific questions.

The post New i.MX6 System on Module released – Nit6X_SOM_V2 appeared first on Boundary Devices.

Debian 8.3 Jessie for i.MX6 boards – February 2016 (kernel 3.14.28)

$
0
0
Debian Jessie 8.3 - XFCE4 desktop

Debian Jessie 8.3 – with XFCE4 desktop

 

It’s been a while since our last Debian Jessie release, so it’s time for an updated image for our i.MX6 boards with some nice new features.

So, without further ado, here are a couple of images of Debian Jessie:

Programming the image

The images are slightly-less-than-4GiB image files containing the partition table, so you can copy it to an SD card or SATA drive on /dev/sdc using zcat and dd like so:

~/Downloads$ sudo umount /dev/sdc*
~/Downloads$ zcat 201602*jessie*.img.gz | sudo dd of=/dev/sdc bs=1M
~/Downloads$ sync

Or you can use Alex Page’s USB Image Tool under Windows.

If you’re using our latest U-Boot and a Nitrogen6 Max board, you can use the new USB Mass Storage Gadget to program the eMMC. If not, there were some notes in our first release that describe a more complicated way of programming eMMC.

Note that the links above require acceptance of a EULA because they do include support for acceleration of the GPU and VPU (the Freescale proprietary content).

What’s supported

Since the images above include our stable 3.14.28 kernel, essentially everything is supported including GPU and VPU accelerations, Wi-Fi and Bluetooth, all of our storage devices (SD card, eMMC, SATA, USB sticks) and all of our supported touch panels.

The kernel packaging is also 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 (compared to our previous Jessie release)

      • The Linux kernel was upgraded to 3.14.28 ( meta-package name: linux-boundary-9j6 )
      • Jessie is not “testing” anymore but “stable
      • GPU driver was added , Vivante 5.0.11p4.5 ( meta-package name: imx-gpu-viv-9j6- )
        • OpenGL ES v3.0 support was added
        • Khronos GLES 3.0 API
        • The 5.x driver is compatible with the 4.x driver. Applications developed using 4.x drivers can run on the 5.x driver without any changes.
        • Application’s performance on the 5.x driver will be better than or equal to that with the 4.x driver
        • Apitrace X11 tools added to trace OpenGL, OpenGL ES, Direct3D and DirectDraw API’s
      • VPU driver was added, 3.14.28 and multimedia libraries to 4.0.3 ( meta-package name: imx-vpu-cnm-9j )
        • Added Real Networks parser and codec
      • Qt5 support added for X11, Wayland, and Framebuffer backends
      • Added gstreamer 1.0 support with gst1.0-fsl-plugins (VPU accelerated)
      • Added gstreamer-imx_0.12.0 package for gstreamer 1.0
      • Added support for Toshiba TC358743XBG HDMI to MIPI converter
      • Added support for TS quadrant-calibration
      • Many-many bugfixes, and refinements… no place here to list all of them.

The gstreamer-imx package (0.12.0)

 

This new package gives you many new options to create your gstreamer pipeline, with bunch of new plugins :

      • elements of imxaudio  : imxuniaudiodec, imxmp3audioenc
      • element of imxv4l2video : imxv4l2videosrc
      • elements of imxvpu : imxvpudec, imxvpuenc_mjpeg; imxvpuenc_mpeg4; imxvpuenc_h264; imxvpuenc_h263
      • elements of imxg2d : imxg2dvideosink, imxg2dvideotransform, imxg2dcompositor
      • elements of imxpxp : imxpxpvideosink, imxpxpvideotransform
      • element of imxeglvivsink : imxeglvivsink
      • elements of imxipu : imxipuvideosink, imxipuvideotransform, imxipucompositor

Please check this thread for further information about gstreamer-imx plugins package :

https://community.freescale.com/thread/376271

An example of using imxeglvivsink :

Debian Jessie 8.3 - eglvivsink window

Debian Jessie 8.3 – eglvivsink window

Usernames and passwords

Two users are defined for use on the system: debian and root. The password for each is Boundary (with a Capital B).

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@nitrogen:~$ sudo mkdir /root/.ssh
[sudo] password for debian:
debian@nitrogen:~$ sudo nano /root/.ssh/authorized_keys
... paste content of $HOME/.ssh/id_rsa.pub here
debian@nitrogen:~$ sudo chmod 600 /root/.ssh/auth*
debian@nitrogen:~$ sudo chmod 600 /root/.ssh/

Bluetooth settings on XFCE (only Nitrogen6_Max and Nitrogen6x boards)

 

In the notification area (top-right corner) you can see the Bluetooth applet icon :

Debian Jessie - Bluetooth applet

Debian Jessie – Bluetooth applet

Push it, then select [Devices…] button.

Debian Jessie - Bluetooth Manager

Debian Jessie – Bluetooth Manager

The Bluetooth Manager’s Devices window pops up. Push the [Search] button, and you’ll see the available devices.

If you select a device from the list, you can connect and pair with them.

Bluetooth settings on console (only Nitrogen6_Max and Nitrogen6x boards)

 

Handling bluetooth is easier on a headless Debian system than on Ubuntu, since Debian uses the newest 5.23 bluez package, while Ubuntu uses 4.101 .

Debian has a great cmd-line utility for bluetooth, named bluetoothctl with many more options than hci-tools. For example pairing a device from the shell. You have to run it as root :

debian@jessie-dev:~$ sudo bluetoothctl
[NEW] Controller 84:DD:20:DA:B1:8F jessie-dev [default]
[bluetooth]# help
Available commands:
 list List available controllers
 show [ctrl] Controller information
 select  Select default controller
 devices List available devices
 paired-devices List paired devices
 power <on/off> Set controller power
 pairable <on/off> Set controller pairable mode
 discoverable <on/off> Set controller discoverable mode
 agent <on/off/capability> Enable/disable agent with given capability
 default-agent Set agent as the default one
 scan <on/off> Scan for devices
 info  Device information
 pair  Pair with device
 trust  Trust device
 untrust  Untrust device
 block  Block device
 unblock  Unblock device
 remove  Remove device
 connect  Connect device
 disconnect  Disconnect device
 version Display version
 quit Quit program
[bluetooth]# scan on
Discovery started
[CHG] Controller 84:DD:20:DA:B1:8F Discovering: yes
[NEW] Device 0C:1D:AF:A2:E3:78 Redmi
[bluetooth]# info 0C:1D:AF:A2:E3:78
Device 0C:1D:AF:A2:E3:78
 Name: Redmi
 Alias: Redmi
 Class: 0x5a020c
 Icon: phone
 Paired: no
 Trusted: no
 Blocked: no
 Connected: no
 LegacyPairing: no
 UUID: OBEX Object Push (00001105-0000-1000-8000-00805f9b34fb)
 UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb)
 UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
 UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb)
 UUID: PANU (00001115-0000-1000-8000-00805f9b34fb)
 UUID: NAP (00001116-0000-1000-8000-00805f9b34fb)
 UUID: Handsfree Audio Gateway (0000111f-0000-1000-8000-00805f9b34fb)
 UUID: Phonebook Access Server (0000112f-0000-1000-8000-00805f9b34fb)
 UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
[bluetooth]# quit
[DEL] Controller 84:DD:20:DA:B1:8F jessie-dev [default]
debian@jessie-dev:~$

Connecting to Wi-Fi Network (only Nitrogen6_Max and Nitrogen6x boards)

In the notification area (top-right corner) you can see the Network Manager applet icon (rightmost icon, it looks like a white Magnum icecream), please push it :

Debian Jessie - Network Manager applet

Debian Jessie – Network Manager applet

Select your network from the list of available Wi-Fi networks. An authentication window will pop up, asking for the password :

Debian Jessie - Wi-Fi authentication

Debian Jessie – Wi-Fi authentication

Type your password, and Wi-Fi is configured, that was all ! Simple, isn’t it ?

Other notes

We added the same indicator applets to the XFCE desktop’s bottom panel, as before : a network applet is showing download and upload speeds of the eth0 interface, and a CPU graph indicator showing the utilization of cores in percent , and the running CPU governor type, and current frequency:

Debian Jessie - Network and CPU indicators

Debian Jessie – Network and CPU indicators

You can’t set the CPU governor here, this is only an information about the available and current settings.

We added a vertical launch-bar to the right side of the desktop , you can start some demos here to check your system’s VPU and GPU acceleration. The upper camera preview works with /dev/video0 OmniVision OV564x device, if connected. For more information please check these directories for the running demo scripts :

/home/debian  and /home/debian/movie-tests

GPU development libraries

The package imx-gpu-viv-9j6-dev ( development headers and libraries for OpenGL / ESv2 / ESv3 / Khronos ) is installed by default now. 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}"

If you would like to develop with the original mesa libraries, you have to uninstall the imx-gpu-viv-9j6-dev package, at least temporarily

ubuntu@nitrogen:~$ sudo apt-get purge imx-gpu-viv-9j6-dev

 


 

As always, let us know how it goes when you try these images out.

The post Debian 8.3 Jessie for i.MX6 boards – February 2016 (kernel 3.14.28) appeared first on Boundary Devices.

Viewing all 391 articles
Browse latest View live