Category

Site News

warpx.io OS 1.2.0 released

By | Site News | No Comments
warpx.io OS version 1.2

warpx.io OS version 1.2 running on the warp_0x01 with the 2.2″ SPI LCD display

We are glad to announce that warpx.io OS 1.2.0 release is now available!
Main changes for this release are:

The warpx_1.2.0.swu upgrade file is available on our resources page and it can be installed on the warp_0x01 board following the instructions in the Easy OS upgrades with SWUpdate article.

To build the release on your own from sources use the meta-warpx layer on github!

If you have questions about the release meet us at the Technical Showcase at the Embedded Linux Conference Europe 2017 in Prague, October 23 – 25 or ask in our mailing list!

Warpx Team @ Embedded Linux Conference Europe 2017

By | Site News | No Comments

Hey guys, the Warpx team will be at the Embedded Linux Conference Europe 2017 at the Hilton Hotel in Prague – October 23 – 25. We’ll be at the poster session. We are looking forward to meeting the community and newcomers!

ELC is the premier vendor-neutral technical conference for companies and developers using Linux in embedded products. Now in its 12th year, the conference gathers user-space developers, product vendors, kernel and systems developers to collaborate.

If you’d like to know more about show, see the event page.

Don’t forget our Embedded Linux Conference Europe special to get warp for $99! Use code: #elc2017

Warpx Embedded Linux Conference Europe 2017 poster

Download a copy of the above ELC Europe 2017 technical information here.

Easy OS upgrades with SWUpdate

By | Site News, Tutorial | No Comments

Introduction

As we have shown at ELC2017, we integrated an easy way for warp_0x01 users to upgrade the OS installed in their boards.

Thanks to the nice features provided by SWUpdate and the integration work that we have done in our meta-warpx Yocto layer we are now able to provide straightforward complete OS upgrades in a single file through a simple web interface.

>warpx.io SWUpdate web interface

WARNING: Keep in mind the procedure wipes all the data in the storage of the warp_0x01 and flashes the latest version of the Linux distribution we built using Yocto.

Prerequisites

SWUpdate operates in the following way: a client running on the target (the warp_0x01) obtains an .swu file from the host (your PC) which is then unpacked and interpreted to flash the new OS in the storage (the eMMC).

The installation of the SWUpdate client is done by doing a raw copy of our all-in-one SWUpdate standalone OS image to the warp_0x01 storage using the U-Boot USB Mass Storage feature to export the eMMC as a USB storage. This operation thus requires:

  • a working U-Boot in the warp_0x01 board with serial console access. If you own an interposer board and haven’t intentionally hacked up U-Boot in your board this requirement is already satisfied
  • a tool for raw copy (dd in Linux and Mac OS, USB Image Tool or Win32 Disk Imager in Windows)

The transfer of the file to the target is done via a web interface exposed by SWUpdate on a fixed IP of an USB Gadget Ethernet interface. To reach the fixed IP of the target, the host computer should support RNDIS USB Ethernet: most Linux distributions include the driver out of the box, while Windows and Mac OS might require manual installation of appropriate driver, depending on the version.

We’ll not enter in the details of using raw copy tools other than dd or how to install RNDIS USB Ethernet drivers, as there are plenty of howtos available on the internet that cover those topics.

SWUpdate client installation

As anticipated, the first step to update the board is to install the SWUpdate client with the SWUpdate standalone OS image we provide. Download the file swupdate-standalone-os.img and follow instructions below.

U-Boot USB Mass Storage setup

To expose warp_0x01 eMMC storage to the host as a USB Mass Storage:

  1. open the serial console on the host computer
  2. power up the warp_0x01
  3. interrupt U-Boot autoboot countdown on the serial console
  4. export the eMMC to the host with the following command
    => ums 0 mmc 0
    UMS: LUN 0, dev 0, hwpart 0, sector 0x0, count 0x748000
    \
  5. a 4GB storage device should appear on the host

Flash of the SWUpdate standalone OS image

On the host identify the warp_0x01 4GB storage device and flash the swupdate-standalone-os.img. As an example procedure on Linux should be as follows:

# dd if=swupdate-standalone-os.img of=/dev/disk/by-id/usb-Linux_UMS_disk_0-0\:0 conv=fsync
51824+1 records in
51824+1 records out
26534293 bytes (27 MB, 25 MiB) copied, 26.748 s, 992 kB/s

Now the SWUpdate standalone OS image is flashed and ready to be booted.

Boot SWUpdate standalone OS image

Return to U-Boot and interrupt the USB Mass Storage mode with Ctrl+C.
At the U-Boot prompt enter the following commands to boot the SWUpdate standalone OS image:

=> mmc read ${initrd_addr} 0x2000 0xAA80

MMC read: dev # 0, block # 8192, count 43648 ... 43648 blocks read: OK
=> setenv initrd_high ${initrd_addr}
=> bootm ${initrd_addr}
## Booting kernel from Legacy Image at 83800000 ...
   Image Name:   Multi-file image
   Image Type:   ARM Linux Multi-File Image (gzip compressed)
   Data Size:    22339925 Bytes = 21.3 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Contents:
      Image 0: 5898480 Bytes = 5.6 MiB
      Image 1: 16408006 Bytes = 15.6 MiB
      Image 2: 33421 Bytes = 32.6 KiB
   Verifying Checksum ... OK
## Loading init Ramdisk from multi component Legacy Image at 83800000 ...
## Flattened Device Tree from multi component Image at 83800000
   Booting using the fdt at 0x84d45f08
   Uncompressing Multi-File Image ... OK
   Loading Ramdisk to 8285a000, end 837ffdc6 ... OK
   Using Device Tree in place at 84d45f08, end 84d51194

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.1.15-1.0.0_ga+g1eb0314 (yocto@ubuntu-yocto) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT
 Wed Mar 15 17:10:43 CET 2017
...

The SWUpdate standalone OS will now start and be ready in a bunch of seconds.

Firmware update file transfer and deploy

Now that the SWUpdate client is up and running on the warp_0x01 we need to setup the host to connect and reach the webpage to upload the .swu firmware update file.

Setup the RNDIS USB Ethernet interface

As the warp_0x01 USB Ethernet interface is already setup with the fixed IP 192.168.20.10 (netmask 255.255.255.0) all that is needed is to set a fixed IP on the USB Ethernet device on the host on the same network. This is a Linux example to do so:

# ip link set dev usb0 up
# ip addr add 192.168.20.11/24 dev usb0
# ping -c 1 192.168.20.10
PING 192.168.20.10 (192.168.20.10) 56(84) bytes of data.
64 bytes from 192.168.20.10: icmp_seq=1 ttl=64 time=0.466 ms

--- 192.168.20.10 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.466/0.466/0.466/0.000 ms

Upload firmware update file

Now that everything is set up, updating the OS on the warp_0x01 should be straightforward: opening a browser on the URL http://192.168.20.10:8080/ will bring you to the SWUpdate web interface.

Download the most recent .swu firmware update file provided on the >warpx.io resources download area and upload it to the warp_0x01 via the web interface. Here’s the quick link to warpx_1.1.0.swu shown in action below.

>warpx.io SWUpdate web interface showing progress of the OS upgrade

When the web interface reports “SWUPDATE successful !” in the Status Messages of the web interface the OS is successfully upgraded, and you can boot it just by pressing the “Reboot Device” button!

Whenever you want to upgrade to a newer version, you just need to go back to the “Boot SWUpdate standalone OS image” section and follow the instruction from there on!

Conclusions

We hope that the work we’ve done will help you with the task of keeping your warp_0x01 up-to-date.

We plan to make some improvements in the future to upgrade the installed version of U-Boot too and allow to easily switch from the regular OS to the SWUpdate standalone OS without having to enter commands to the U-Boot prompt. So if you have any feedback or you need a helping hand, please reach out to us in the mailing list!

Prototype a thermostat with warp_0x01

By | Site News | No Comments

In this post we present how to prototype a simple thermostat with warp_0x01 using the new 2.2” small display and the new tiny interposer. Both the display and interposer are included in the bundle, refer to this post.

A simple QT5 application has been developed in Python and you can checkout the code here. The application includes a gradle script for fast deployment of the build artifacts on the warp via ssh using the USB eth gadget. Modify the gradle script to match your local connection between your host computer and the warp.

PyQT5 is included in the warpx Yocto meta-layer. You can checkout the meta-layer from here.

As a temperature sensor we selected the MCP9808 which comes in a nice package provided by Adafruit.

Next we wire the sensor board to the interposer board as follows.

 

 

After deploying the app, (gradle deploy) you can launch it. Remember to export the display (export DISPLAY=:0) from the shell if necessary.

The application should display the ambient temperature. Enjoy!

New small-footprint display options coming to Warp

By | Site News | No Comments

One of the great features of Warp is the ability to render a fully graphical UI. Of course this requires a screen and its subsequently one of the most common questions we get: what screens are availability? Back when we originally designed Warp, we paired it with a nice, but rather expensive 1.54″ MIPI display. While it was a great display it was made obsolete so many of the product driven components out there. But, not to worry, we have some great alternatives in the works. Here’s a sneak peek!

lcd_vs_warp  Screenshot 2016-08-13 17.04.46

This first one will be based around a 2.2″ LCD with a resolution of 320 x 240 and a resistive touch screen. As one of the smaller displays this measures in at about 40mm x 55mm. To mount warp, we’re developing a carrier board that will fit behind the display, and Warp will click into it. The carrier board allows the display to be attached to warp along with the touch panel, but it’ll do more than just that. It brings out some of the common interfaces you would typically find on our much larger Interposer Development board.  The small form factor carrier board adds features like USB serial console, boot mode pin access, as well as a nice collection of I/O enabling the pair (Warp + LCD) to be extended with a custom board.

The I/O pads can be populated with either a right angle header or a vertical SMT headers making it easy to work with.

connector_composite

We’ll be getting our first batch of these in soon so keep checking back. Let us know your thoughts and what you might want to do with this LCD module!

 

WTC 2016 2.4″ LCD Module for Warp now available

By | Site News | No Comments

At WTC 2016 we showed Warp connected to a 2.4″ LCD module and got some great feedback about it. The display is pretty compact and has a nice 320×240 resolution so it is a great display for IoT projects. Even though the interface is SPI, it’s plenty fast and should work great for user interfaces. This display module is now available over at the Revotics store.

wtc2016_warp_2.4lcd_interposer   2.4_module_perspective

There is a wiring diagram (check the product page link in the store) which shows how to connect this LCD module to Warp via the Interposer Development Board. The Linux kernel that ships with Warp already has support for this display so once it’s wired up, it’ll just work.

One great way to get a UI up for your device is using Python with Qt. Qt is a popular GUI library and Warp ships with Python and the PyQt5 module so you can get something on the display with just a few lines of Python. We’ll post more about this soon.

We also have some cool developments for displays going on so keep you eyes out for that post!