Archive

Posts Tagged ‘tutorial’

Embedded Linux Conference 2014 Schedule

April 19th, 2014 No comments

The Tenth Embedded Linux Conference (ELC 2014) will take place on April 29 – May 1, 2014 at the San Jose Marriott in San Jose, California. The event will feature 90+ sessions on embedded Linux, Android and IoT with over 450 attendees expected to attend. It will also be co-located with Android Builders Summit and the AllSeen Alliance Hackfest. Even if you can’t attend it’s still interesting to see what will be discussed at the event to get a grasp of on-going developments, learn a few things about different optimization techniques, and so on. So I’ve gone through the sessions’ description, and I’ve designed my own virtual schedule with sessions that could be of interest.

Embedded_Linux_Conference_2014April 29

Linux has taken the embedded world by storm.  Billions (with a ‘B’) of devices have now shipped with a Linux kernel, and it seems unstoppable.  But will the next 10 billion devices ship with Linux or with something else?  How can Linux be specialized for deeply embedded projects, as characterized by the Internet of Things, while still maintaining the network effects of community cooperation and sharing?  Is this possible or even desirable?  The startling truth might be revealed at this keynote. Or, Tim might just rant a bit about device-tree… who knows?

The past year has seen a remarkable growth of interest in super-low-power and super-low-form-factor computing, in the form of ‘wearables’, the ‘Internet of Things’, and the release of exciting new hardware such as Intel’s Quark and Edison SoCs. Taking advantage of this super-small hardware also implies the need for super-small operating systems and applications to match. This talk will describe a super-small-footprint Linux distribution called ‘microYocto”. The main focus will be the kernel and how we achieved what we think is close to the minimal possible kernel footprint, both in terms of static text size and dynamic memory usage. We’ll talk about the tools and methodologies we used and developed to analyze the problem, such as tracing and machine simulation, and will describe the various technologies developed and applied to achieving this minimalistic system.

Many community resources exist about boot time reduction. However, few of them are up to date and share the exact time savings that can be achieved on recent systems. This talk will detail today’s most efficient techniques to reduce boot time. For each of them, figures will be shared, obtained from recent boot time reduction projects and from the preparation of Free Electrons new workshop on this topic. If you attend this talk, you will know which optimization techniques are worth using first, and will save time not exploring techniques that won’t make a significant difference in your project. Don’t tell your boss, and this will leave your more time to contribute to community projects!

In this talk, Chris will describe the internal workings of the Android graphics stack from the Application layer down through the stack to pixels on the screen. It is a fairly complex journey, taking in two different 2D rendering engines, applications calling OpenGL ES directory, passing buffers on to the system compositor, Surface Flinger, and then down to the display controller or frame buffer. All this requires careful synchronisation so that what appears on the screen is smooth, without jitter, and makes efficient use of memory, CPU, GPU and power resources.

Linux-based platforms such as the Beaglebone and Raspberry Pi are inexpensive powerhouses. But, beyond being cool on their own, what else can you do with them? This presentation will step you through the process of building a Wi-Fi enabled, Linux-based robot that you can build without breaking the bank and without special knowledge of robotics and robotic controls.

Since last year, we have been working on supporting the SoCs from Allwinner, a Chinese SoC vendor, in the mainline kernel. These SoCs are cheap, wide-spread, backed by a strong community and, until last year, only supported by an out-of-tree kernel. Through this talk, we would like to share the status of this effort: where we were a year ago, what solutions were in place, where we are currently, and what to expect from the future. We will also focus on the community around these SoCs, the work that is done there, etc.

April 30

GCC is an optimizing compiler, currently most common compiler to build software for Embedded Linux systems like Android, Yocto Project etc. This tutorial will introduce specific optimizations and features of GCC which are less known but could benefit optimizing software especially for embedded use while highlight the effect of common optimizations. While it will focus on squeezing most out of GCC, it will also cover some of “pessimizations” to avoid and will tip the developer to write code thats more conducive (compiler friendly) for general optimizations. They will also get some contrast with other compilers when needed.

Throughout the last two years, a team of engineers at Free Electrons has been involved in mainlining the support for several ARM processors from Marvell, converting the not-so-great vendor-specific BSP into mainline quality code progressively merged upstream. This effort of several hundreds working days, has led to the integration of hundreds of patches in the kernel. Through this talk we would like to share some lessons learned regarding this mainlining effort, which could be useful to other engineers involved in ARM SoC support, as well as detail the steps we have gone through, the mistakes we’ve made and how we solved them, and generally our experience on this project.

This BoFs is intended to bring together anybody that tests the Linux kernel to share best practices and brainstorm new ideas. Topics may range from .config testing, module/built-in drivers, test methods and tools for testing specific driver subsystems, VM/scheduler/interrupt stress testing, and beyond. The discussion is targeted at Linux kernel developers, test engineers, and embedded Linux product teams/consultants with the common task of testing Linux kernel integrity. Attendees should have a firm grasp of building and deploying the kernel as well as kernel/userspace kernel APIs.

Several vendors are getting ready to start enabling the upstream kernel for their upcoming 64-bit ARM platforms, and it opens up a few questions on things that are not quite sorted out yet, especially on the embedded and mobile platforms. This is an open discussion on the issues these maintainers are anticipating, and what we should do about it.

Communication between components is necessary for effective power management in mobile devices. The System Power Management Interface, also known as SPMI, is a standardized bus interface intended to provide power-management related connectivity between components. Josh Cartwright will provide a high-level architectural overview of SPMI and discuss how to leverage the Linux Kernel software interfaces (expected to land in 3.15) to communicate with devices on the bus.

May 1

While Android has been created for mobile devices — phones first and now tablets — it can, nonetheless, be used as the basis of any touch-screen system, whether it be mobile or not. Essentially, Android is a custom-built embedded Linux distribution with a very elaborate and rich set of user-space abstractions, APIs, services and virtual machine. This one-day workshop is aimed at embedded developers wanting to build embedded systems using Android. It will cover Android from the ground up, enabling developers to get a firm hold on the components that make up Android and how they need to be adapted to an embedded system. Specifically, we will start by introducing Android’s overall architecture and then proceed to peel Android’s layer one-by-one.

This half-day workshop is aimed at embedded developers that want to use Android in their embedded designs.

The MIPS processor cores are widely used in embedded platforms, including TVs and set-top-boxes. In most of those platforms dedicated graphics hardware exists but it may be specialized for its use in audio and video signal processing: rendering of web content has to be done in software. We implemented optimizations for the software-based QPainter renderer to improve the performance of Qt —including QtWebKit— in MIPS processors. The target platform was the modern 74kf cores, which include new SIMD instructions suitable for graphics operations (alpha blending, color space conversion and JPEG image decoding), and also for non-graphics operations: string functions were also improved. Our figures estimate that web pages are rendered up to 30% faster using hand-coded assembler fast-paths for those operations.

Software Freedom Conservancy announced last year a renewed effort for cross-project collaborative GPL compliance efforts, including copyright holders from BusyBox, Linux, and Samba. Conservancy uses an internal system of communication and collaboration to take input from stakeholders to discuss and engage in compliance activity to ensure compliance with the GPL throughout the technology industry and particularly in the embedded device market. Compliance with the GPL is the responsibility of copyright holders of the software, and Conservancy helps those copyright holders pursue the work, so those developers can focus on coding. In this talk, the President of Conservancy will discuss how Conservancy handles compliance matters, what matters it focuses on, and how the copyright holders that work with Conservancy engage in a collaborative effort to ensure compliance with the GPL.

Ubuntu Touch is the new Ubuntu-based OS for phones and tablets. Announced at the beginning of 2013, it gives a new UI and design proposal, but also a new way of developing and supporting many different devices, using either the Android HAL or the traditional Linux stack to build the platform. This talk will go over the Ubuntu Touch internals, presenting the technical decisions and also the work that was done to bootstrap this new platform (camera, radio, video decode, GLES and etc) and the future challenges to support a single stack across mobile and the traditional desktop.

These are just a few sessions out of the 90+ sessions available at the Embedded Linux Conference and Android Builder Summit. You can check the full schedule to find out which sessions are most interesting to you.

If you’d like to attend the event, you’ll need to register online.

The attendance fees have significantly gone up compared to last year, at least for hobbyists, but include entrance for both ELC and Android Builder Summit:

  • Professional Registration Fee - US$600 (Was US$500 until March 29, 2014)
  • Hobbyist Fee – US$150
  • Student FeeUS$150

After the events, many videos are usually uploaded by the Linux Foundation, and you should be able to find the list of talks with links to presentation slides oneLinux.org.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Atmel SAMA5D3 Xplained Board Unboxing and Quick Start Guide

April 16th, 2014 No comments

Atmel SAMA5D3 Xplained is an evaluation board running Linux powered by SAMA5D36 ARM Cortex A5 micro-processor with 256 MB DDR2, 256 MB flash, two Ethernet ports, 3 USB connectors, and more. This embedded board targets industrial automation, networks, robotics, control panels and wearable applications. The only video output is an LCD connector so it is reserved for headless or flat panel based applications. You can check full specs on my Atmel SAMA5D3 Xplained announcement post. The company kindly sent me a sample, so that I can share my experience with the board. I’ll first post some unboxing pictures, show how to get started with the pre-installed image, and build my own Linux image.

The board can be purchased for $79 from Atmel e-Store, as well as several distributors (P/N: ATSAMA5D3-XPLD).

Atmel SAMA5D3 Xplained Unboxing

I’ve been sent the board via DHL in the following package, which gives  a short desscription of the board, and what it is used for. There’s also a QR core, but it just returns the board name of some production numbers and dates, no links.

Atmel_SAMA5D3_Xplained_PackageIn the package you’ve got the board, a micro USB to USB cable for power and programming, and a small card entitled “Overview and Compliance Information” which gives a list of key features, a link to get started http://www.atmel.com/sama5d3xplained, which I’ll use later, and some EU compliance informations regarding RoHS2 and EMC. The board is compliant with both CE and FCC standards.

Atmel SAMA5D3 Xplained Package Content (Click to Enlarge)

Atmel SAMA5D3 Xplained Package Content (Click to Enlarge)

Let’s check the board in details.

Top of Atmel SAMA5D3 Xplained Board (Click to Enlarge)

Top of Atmel SAMA5D3 Xplained Board (Click to Enlarge)

On the top of the board, we’ll find the 2 USB host connectors, and 2 Ethernet connectors (GMAC and EMAC) on the right, the micro USB port, as well as pads to solder an external power supply and a micro SD slot on the left, reset, wake up and user buttons, as well as JTAG, LCD, and debug (serial) connectors at the bottom, and around the MPU and memories, the Arduino UNO R3 compatible headers with the names of the different pins. Bear in mind these only support 3.3V, not 5V.

Bottom of Atmel SAMA5D3 Xplained (Click to Enlarge)

Bottom of Atmel SAMA5D3 Xplained (Click to Enlarge)

On the back we’ll find the SD card slot, and again, the markings for the Arduino compatible connectors.

I’ve also shot an unboxing video for those interested.

Atmel SAMA5D3 Xplained Quick Start Guide

From the link provided on the “Overview card”, you can download SAMA5D3 MPU datasheet,  the board brief, design and manufacturing files, and user’s guide, as well as a Getting Started Guide, which I’ll try out in this post.

The board comes pre-loaded with a Linux distribution (poky) built with the Yocto Project comprised of bootloaders (AT91Bootstrap and U-boot), the Linux kernel, and a custom lightweight rootfs. To get started simply connect the micro USB to USB cable to your computer to boot the system, you should see a blue LED lit up and blink. There’s no display, but there are three ways to access the board from Linux or Windows computers:

  • Using the USB connection your PC.  In Linux, run dmesg to check the latest kernel messages:
    [92045.134415] usb 1-1.4.4: new high-speed USB device number 23 using ehci-pci
    [92045.227589] usb 1-1.4.4: New USB device found, idVendor=0525, idProduct=a4a7
    [92045.227598] usb 1-1.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [92045.227603] usb 1-1.4.4: Product: Gadget Serial v2.4
    [92045.227607] usb 1-1.4.4: Manufacturer: Linux 3.10.0-yocto-standard with atmel_usba_udc
    [92045.334096] cdc_acm 1-1.4.4:2.0: This device cannot do calls on its own. It is not a modem.
    [92045.334265] cdc_acm 1-1.4.4:2.0: ttyACM0: USB ACM device

    In my case the interface is /dev/ttyACM0. Run you favorite terminal emulator program, such as minicom, picocom, screen, PuTTY, etc… I’ve used minicom, and configured it to access /dev/TTYACM0 using 115200 8/N/1 configuration. Instructions for Windows can be found in the company’s Getting Started Guide.

  • Via a USB to Serial board connected via J23 header’s Tx, Rx and GND pins. I’ve also done this in minicom with /dev/ttyUSB0 and the same 115200 8/N/1 configuration.
  • Via SSH. The demo image in the board is running sshd, so provided you’ve connected one or two of the Ethernet ports on a LAN with a DHCP server, you should be able to connect with the IP of the board. In Linux: ssh root@ip_address

You can login with the board using the root account without password. The USB and SSH methods are the most convenience since you don’t need to connect extra hardware, but you won’t be able to access the bootloader that way, debugging the Linux kernel, if needed, will be difficult, and each time, the board is rebooted, the connection will be lost. So for development, you should really get a serial to USB debug board.

Here’s the complete boot log for reference:

AT91Bootstrap 3.6.1-00078-g5415d4e (Tue Feb  4 15:36:46 CET 2014)

NAND: ONFI flash detected
NAND: Manufacturer ID: 0x2c Chip ID: 0×32
NAND: Disable On-Die ECC
NAND: Initialize PMECC params, cap: 0×4, sector: 0×200
NAND: Image: Copy 0×80000 bytes from 0×40000 to 0x26f00000
NAND: Done to load image

U-Boot 2013.07 (Feb 04 2014 – 15:36:32)

CPU: SAMA5D36
Crystal frequency:       12 MHz
CPU clock        :      528 MHz
Master clock     :      132 MHz
DRAM:  256 MiB
NAND:  256 MiB
MMC:   mci: 0, mci: 1
*** Warning – bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   gmac0
Warning: failed to set MAC address
, macb0
Warning: failed to set MAC address

Hit any key to stop autoboot:  0

NAND read: device 0 offset 0×180000, size 0×80000
524288 bytes read: OK

NAND read: device 0 offset 0×200000, size 0×600000
6291456 bytes read: OK
Kernel image @ 0×22000000 [ 0x000000 - 0x33be28 ]
## Flattened Device Tree blob at 21000000
Booting using the fdt blob at 0×21000000
Loading Device Tree to 2bb12000, end 2bb1a046 … OK

Starting kernel …

Uncompressing Linux… done, booting the kernel.
Booting Linux on physical CPU 0×0
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys cpuacct
Linux version 3.10.0-yocto-standard (nferre@tenerife) (gcc version 4.8.1 (GCC) 4
CPU: ARMv7 Processor [410fc051] revision 1 (ARMv7), cr=50c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Atmel SAMA5 (Device Tree), model: SAMA5D3 Xplained
bootconsole [earlycon0] enabled
Memory policy: ECC disabled, Data cache writeback
AT91: Detected soc type: sama5d3
AT91: Detected soc subtype: sama5d36
AT91: sram at 0×300000 of 0×20000 mapped at 0xfef58000
CPU: All CPU(s) started in SVC mode.
Clocks: CPU 528 MHz, master 132 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(s
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
allocated 524288 bytes of page_cgroup
please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups
Memory: 256MB = 256MB total
Memory: 252736k/252736k available, 9408k reserved, 0K highmem
Virtual kernel memory layout:
vector  : 0xffff0000 – 0xffff1000   (   4 kB)
fixmap  : 0xfff00000 – 0xfffe0000   ( 896 kB)
vmalloc : 0xd0800000 – 0xff000000   ( 744 MB)
lowmem  : 0xc0000000 – 0xd0000000   ( 256 MB)
modules : 0xbf800000 – 0xc0000000   (   8 MB)
.text : 0xc0008000 – 0xc05b4fc8   (5812 kB)
.init : 0xc05b5000 – 0xc05d2d60   ( 120 kB)
.data : 0xc05d4000 – 0xc063a9f8   ( 411 kB)
.bss : 0xc063a9f8 – 0xc0663820   ( 164 kB)
NR_IRQS:16 nr_irqs:16 16
sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms
Console: colour dummy device 80×30
Calibrating delay loop… 351.43 BogoMIPS (lpj=1757184)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys blkio
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0xc0350648 – 0xc0350694
devtmpfs: initialized
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
AT91: Power Management
gpio-at91 fffff200.gpio: at address fefff200
gpio-at91 fffff400.gpio: at address fefff400
gpio-at91 fffff600.gpio: at address fefff600
gpio-at91 fffff800.gpio: at address fefff800
gpio-at91 fffffa00.gpio: at address fefffa00
pinctrl-at91 pinctrl.2: initialized AT91 pinctrl driver
bio: create slab <bio-0> at 0
at_hdmac ffffe600.dma-controller: Atmel AHB DMA Controller ( cpy slave ), 8 chas
at_hdmac ffffe800.dma-controller: Atmel AHB DMA Controller ( cpy slave ), 8 chas
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
of_dma_request_slave_channel: dma-names property missing or empty
at91_i2c f0014000.i2c: can’t get a DMA channel for tx
at91_i2c f0014000.i2c: can’t use DMA
at91_i2c f0014000.i2c: AT91 i2c bus driver.
at91_i2c f0018000.i2c: using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
at91_i2c f0018000.i2c: AT91 i2c bus driver.
at91_i2c f801c000.i2c: can’t get a DMA channel for tx
at91_i2c f801c000.i2c: can’t use DMA
at91_i2c f801c000.i2c: AT91 i2c bus driver.
media: Linux media interface: v0.10
Linux video capture interface: v2.00
Advanced Linux Sound Architecture Driver Initialized.
Bluetooth: Core ver 2.16
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
cfg80211: Calling CRDA to update world regulatory domain
Switching to clocksource tcb_clksrc
NET: Registered protocol family 2
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP: reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
msgmni has been set to 493
io scheduler noop registered (default)
f001c000.serial: ttyS1 at MMIO 0xf001c000 (irq = 23) is a ATMEL_SERIAL
f0020000.serial: ttyS2 at MMIO 0xf0020000 (irq = 24) is a ATMEL_SERIAL
f0024000.serial: ttyS5 at MMIO 0xf0024000 (irq = 25) is a ATMEL_SERIAL
ffffee00.serial: ttyS0 at MMIO 0xffffee00 (irq = 39) is a ATMEL_SERIAL
console [ttyS0] enabled, bootconsole disabled
console [ttyS0] enabled, bootconsole disabled
brd: module loaded
loop: module loaded
atmel_nand_nfc 70000000.nfc: NFC is probed.
atmel_nand: Use On Flash BBT
atmel_nand 60000000.nand: Using dma0chan2 for DMA transfers.
ONFI param page 0 valid
ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron MT29F2G08ABAEAWP), 254
atmel_nand 60000000.nand: ONFI params, minimum required ECC: 4 bits in 512 bytes
atmel_nand 60000000.nand: Initialize PMECC params, cap: 4, sector: 512
atmel_nand 60000000.nand: Using NFC Sram read and write
Bad block table found at page 131008, version 0×01
Bad block table found at page 130944, version 0×01
nand_read_bbt: bad block at 0x000000c80000
nand_read_bbt: bad block at 0x000000ca0000
8 cmdlinepart partitions found on MTD device atmel_nand
Creating 8 MTD partitions on “atmel_nand”:
0×000000000000-0×000000040000 : “bootstrap”
0×000000040000-0x0000000c0000 : “uboot”
0x0000000c0000-0×000000100000 : “env”
0×000000100000-0×000000140000 : “evn_redundent”
0×000000140000-0×000000180000 : “spare”
0×000000180000-0×000000200000 : “dtb”
0×000000200000-0×000000800000 : “kernel”
0×000000800000-0×000010000000 : “rootfs”
atmel_spi f0004000.spi: version: 0×213
atmel_spi f0004000.spi: Using dma0chan3 (tx) and dma0chan4 (rx) for DMA transfes
atmel_spi f0004000.spi: Atmel SPI Controller at 0xf0004000 (irq 18)
atmel_spi f0004000.spi: master is unqueued, this is deprecated
atmel_spi f8008000.spi: version: 0×213
atmel_spi f8008000.spi: Using dma1chan0 (tx) and dma1chan1 (rx) for DMA transfes
atmel_spi f8008000.spi: Atmel SPI Controller at 0xf8008000 (irq 28)
atmel_spi f8008000.spi: master is unqueued, this is deprecated
CAN device driver interface
at91_can f000c000.can: device registered (reg_base=d08ea000, irq=19)
at91_can f8010000.can: device registered (reg_base=d08ec000, irq=29)
macb f0028000.ethernet (unregistered net_device): invalid hw address, using ranm
libphy: MACB_mii_bus: probed
macb f0028000.ethernet eth0: Cadence GEM at 0xf0028000 irq 26 (4e:68:35:cc:0c:8)
macb f0028000.ethernet eth0: attached PHY driver [Micrel KSZ9031 Gigabit PHY] ()
macb f802c000.ethernet (unregistered net_device): invalid hw address, using ranm
libphy: MACB_mii_bus: probed
macb f802c000.ethernet eth1: Cadence MACB at 0xf802c000 irq 33 (ca:99:58:69:7f:)
macb f802c000.ethernet eth1: attached PHY driver [Micrel KSZ8081 or KSZ8091] (m)
ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
ehci-atmel: EHCI Atmel driver
atmel-ehci 700000.ehci: EHCI Host Controller
atmel-ehci 700000.ehci: new USB bus registered, assigned bus number 1
atmel-ehci 700000.ehci: irq 47, io mem 0×00700000
atmel-ehci 700000.ehci: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 3.10.0-yocto-standard ehci_hcd
usb usb1: SerialNumber: 700000.ehci
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
at91_ohci 600000.ohci: AT91 OHCI
at91_ohci 600000.ohci: new USB bus registered, assigned bus number 2
at91_ohci 600000.ohci: irq 47, io mem 0×00600000
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: AT91 OHCI
usb usb2: Manufacturer: Linux 3.10.0-yocto-standard ohci_hcd
usb usb2: SerialNumber: at91
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 3 ports detected
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
at91_rtc fffffeb0.rtc: rtc core: registered fffffeb0.rtc as rtc0
at91_rtc fffffeb0.rtc: AT91 Real Time Clock driver.
i2c /dev entries driver
Driver for 1-wire Dallas network protocol.
cpuidle: using governor ladder
leds-gpio leds.4: pins are not configured from the driver
atmel_aes f8038000.aes: version: 0×135
atmel_aes f8038000.aes: Atmel AES – Using dma1chan2, dma1chan3 for DMA transfers
atmel_tdes f803c000.tdes: version: 0×701
atmel_tdes f803c000.tdes: using dma1chan4, dma1chan5 for DMA transfers
atmel_tdes f803c000.tdes: Atmel DES/TDES
atmel_sha f8034000.sha: version: 0×410
atmel_sha f8034000.sha: using dma1chan6 for DMA transfers
atmel_sha f8034000.sha: Atmel SHA1/SHA256/SHA224/SHA384/SHA512
hidraw: raw HID events driver (C) Jiri Kosina
iio iio:device0: Resolution used: 12 bits
iio iio:device0: ADC Touch screen is disabled.
TCP: cubic registered
NET: Registered protocol family 10
sit: IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
VFP support v0.3: implementor 41 architecture 2 part 30 variant 5 rev 1
ThumbEE CPU extension supported.
Registering SWP/SWPB emulation handler
UBI: attaching mtd7 to ubi0
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 1552, bit_pos: 7, 0xf
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 315, bit_pos: 0, 0xff
UBI: scanning is finished
UBI: attached mtd7 (name “rootfs”, size 248 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
UBI: VID header offset: 2048 (aligned 2048), data offset: 4096
UBI: good PEBs: 1978, bad PEBs: 6, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 321
UBI: available PEBs: 0, total reserved PEBs: 1978, PEBs reserved for bad PEB ha4
UBI: background thread “ubi_bgt0d” started, PID 681
input: gpio_keys.3 as /devices/gpio_keys.3/input/input0
at91_rtc fffffeb0.rtc: setting system clock to 2014-02-05 09:22:13 UTC (1391592)
atmel_mci f0000000.mmc: version: 0×505
atmel_mci f0000000.mmc: using dma0chan5 for DMA transfers
atmel_mci f0000000.mmc: Atmel MCI controller at 0xf0000000 irq 17, 1 slots
atmel_mci f8000000.mmc: version: 0×505
atmel_mci f8000000.mmc: using dma1chan7 for DMA transfers
atmel_mci f8000000.mmc: Atmel MCI controller at 0xf8000000 irq 27, 1 slots
ALSA device list:
No soundcards found.
UBIFS: mounted UBI device 0, volume 0, name “rootfs”, R/O mode
UBIFS: LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2s
UBIFS: FS size: 244936704 bytes (233 MiB, 1929 LEBs), journal size 9023488 byte)
UBIFS: reserved for root: 0 bytes (0 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 5CA0915B-7DF9-4652-92C0-71B9l
VFS: Mounted root (ubifs filesystem) readonly on device 0:12.
devtmpfs: mounted
Freeing unused kernel memory: 116K (c05b5000 – c05d2000)
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 1933, bit_pos: 5, 0xb
INIT: version 2.88 booting
Starting udev
udevd[717]: starting version 182
UBI error: ubi_open_volume: cannot open device 0, volume 0, error -16
atmel_usba_udc 500000.gadget: MMIO registers at 0xf8030000 mapped at d09a8000
atmel_usba_udc 500000.gadget: FIFO at 0×00500000 mapped at d2400000
g_serial gadget: Gadget Serial v2.4
g_serial gadget: g_serial ready
UBIFS: background thread “ubifs_bgt0_0″ started, PID 782
Starting Bootlog daemon: bootlogd.
g_serial gadget: high-speed config #2: CDC ACM config
Configuring network interfaces… IPv6: ADDRCONF(NETDEV_UP): eth0: link is not y
udhcpc (v1.21.1) started
Sending discover…
macb f0028000.ethernet eth0: link up (100/Full)
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Sending discover…
Sending select for 192.168.0.108…
Lease of 192.168.0.108 obtained, lease time 7200
/etc/udhcpc.d/50default: Adding DNS 192.168.0.1
done.
Starting rpcbind daemon…done.
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
Starting atd: OK
INIT: Entering runlevel: 5
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd
done.
creating NFS state directory: done
NFS daemon support not enabled in kernel
Starting system log daemon…0
Starting kernel log daemon…0
Starting Telephony daemon
Starting Lighttpd Web Server: lighttpd.
Starting crond: OK
Stopping Bootlog daemon: bootlogd.

Poky (Yocto Project Reference Distro) 1.5.1 sama5d3_xplained /dev/ttyS0

sama5d3_xplained login: root
root@sama5d3_xplained:~#

For some reasons the Gigabit Ethernet port failed to get a link from my 10/100M switch. I had no problem with the 10/100M Ethernet port.

Let’s have a quick look at the kernel version and memory usage:

# uname -a
Linux sama5d3_xplained 3.10.0-yocto-standard #1 Wed Feb 5 10:03:20 CET 2014 armv7l GNU/Linux
# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          216M   80M  136M  37% /
ubi0:rootfs     216M   80M  136M  37% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M  112K  124M   1% /run
tmpfs           124M  112K  124M   1% /var/volatile
# free -m
             total       used       free     shared    buffers     cached
Mem:           246         21        225          0          0          8
-/+ buffers/cache:         12        234
Swap:            0          0          0

So the board runs Linux 3.10 built with Yocto, has 136M free on the rootfs, and 21MB used out of 246 MB RAM.

Building the demo image for Atmel SAMA5D3 Xplained

Atmel Getting Started document mentions the software components in the NAND Flash have been compiled following instructions found on the Linux4SAM website, but instead I’ve followed the build procedure found in github.

git clone git://git.yoctoproject.org/poky
cd poky
git checkout dora-10.0.1 -b my_branch
git clone git://git.openembedded.org/meta-openembedded
cd meta-openembedded
git checkout 6572316557e742c2dc93848e4d560242bf0c3995 -b my_branch
cd ..
git clone http://github.com/linux4sam/meta-atmel
  • Initialize the build directory
source oe-init-build-env build-atmel
  • Add meta-atmel layers conf/bblayer configuration file (Lines in bold):
BBLAYERS ?= " \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-yocto \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-yocto-bsp \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-atmel \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-openembedded/meta-oe \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-openembedded/meta-networking \
  "
  • Edit conf/local.conf to specify the SAMA5D3 Xplained board, and change the package type to ipk:
[...]
MACHINE ??= "sama5d3_xplained"
[...]
PACKAGE_CLASSES ?= "package_ipk"
  • Build the demo image
bitbake atmel-xplained-demo-image

This step will take a while, and you’ll find the binary images in tmp/deploy/images/sama5d3_xplained/ including the bootloaders, the kernel, modules, device tree files, and rootfs.

  • You can also optionally build the bootloaders separately with:
bitbake at91bootstrap
bitbake u-boot

Flashing the Image

After you’ve built the image you may want to install them. You can also download the pre-built Yocto/Poky demo. I’ll use the files I’ve built, but the scripts from the pre-built demo zip file (linux4sam-poky-sama5d3_xplained-4.3.zip), since I could not find it anywhere else.

First you’ll need to install SAM-BA tool to flash the images. In Ubuntu 64-bit:

sudo apt-get install linux-image-generic linux-headers-generic ia32-libs

Download SAM-BA 2.12 for Linux and SAM-BA 2.12 Patch 6 for Linux using your web browser (registration or form filling required), and install it as follows

unzip sam-ba_2.12.zip
cp patch6.gz sam-ba_cdc_cdc_linux/
cd sam-ba_cdc_cdc_linux/
gzip -d patch6.gz
patch -p1 --binary < patch6
chmod +x sam-ba

Add sam-ba to your PATH, e.g.:

export PATH=$PATH:~/edev/Atmel/SAMA5D3/sam-ba_cdc_cdc_linux/

You’ll then need to add yourself into the dialout group inside /etc/group:

dialout:x:20:myusername

Logout and login.

Now copy demo_linux_nandflash.sh, demo_linux_nandflash.tcl and demo_script_linux_nandflash.tcl scripts from the zip file to tmp/deploy/images/sama5d3_xplained/ directory, and if needed, edit demo_linux_nandflash.tcl to match your newly built filenames:

set bootstrapFile      "sama5d3_xplained-nandflashboot-uboot-3.6.2.bin"
set ubootFile          "u-boot-sama5d3_xplained-v2013.07-at91-r2.bin"
set kernelFile         "zImage-sama5d3_xplained.bin"
set rootfsFile         "atmel-xplained-demo-image-sama5d3_xplained.ubi"

We’ve now ready for the flash procedure itself:

  1. Make sure your board is running connected to your computer via the micro USB port
  2. Remove JP5 (NAND CS, upper left of Atmel MPU) jumper to disable NAND Flash memory access
  3. Press BP2 reset button (bottom left) to boot from on-chip Boot ROM
  4. Close JP5 to enable NAND Flash memory access
  5. Change the name of copy the device tree blob file as follows:
    cp zImage-at91-sama5d3_xplained.dtb at91-sama5d3_xplained.dtb
  6. Run the flash script:
    chmod +x demo_linux_nandflash.sh
    ./demo_linux_nandflash.sh
  7. It will take a little while, and once completed you can login to the baord and verify you’ve got a brand new kernel and rootfs:
    root@sama5d3_xplained:~# uname -a                                               
    Linux sama5d3_xplained 3.10.0-custom #1 Wed Apr 16 09:31:12 ICT 2014 armv7l GNUx
    root@sama5d3_xplained:~# cat /etc/version                                       
    201404160759

You can check the flashing log in logfile.log in case something went wrong. You can find some more info on Linux4Sam SAMA5D3 Xplained page.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Linux Command Line Guides

March 25th, 2014 1 comment

I’ve found and reshared two interesting graphical resources about the Linux command line via Google+ Linux Community, and I thought I’d also write about it here to reach a wider audience. The first graphic shows which tools to use to monitor or analyze specifics parts that may run in Linux.

Linux Analysis and Tools (Click to Enlarge)

Linux Analysis and Tools (Click to Enlarge)

The command I personally run the most in the list above are iotop for disk write/read throughput, top or htop to check overall and current processes CPU usage, as well as memory usage. Ping is also an all time favorite to check network connectivity. although I sometime use mii-tool, not listed above, to check Ethernet link status. Strace can be very useful to debug binaries, but I don’t use it that often.

The next picture, called “Linux Commands Cheat Sheet” is less specific, and can be interesting if you are not familiar with the Linux command line.

Linux_Command_Line_Cheat_SheetIf the resolution is too low, you can also download the PDF version.  A similar document is also available here.

If you want other computer related “Cheat Sheets”, but not always specific to Linux, you can check the following thread on serverfault.com with short documents for networking protocols, Vi/Vim, hardware connectors, and more.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Categories: Linux Tags: Linux, terminal, tutorial

Linux Kernel Upstreaming How-To – Linaro Connect Asia 2014

March 4th, 2014 1 comment

I’ve already written a post about submitting kernel patches to mainline based on a 2011 presentation by Greg Kroah-Hartman, but Matt Porter, Broadcom Landing Team (LT) Technical Lead at Linaro, has given two updated talks entitled “Upstreaming 101″ and “Upstreaming 201″ at Linaro Connect Asia 2014. There are many planned talked during LCA 2014, and you can get the list as well as links to presentation and videos, as they become available on LCA 14 resources page.

Upstream Code Flow

Upstream Code Flow

The first session “Upstream 101″ starts with some definitions such as “upstreaming” (basically getting your code to  kernel.org), “mainline”, etc, explains how to get information about the (912) maintainers (tip: it’s in the MAINTAINERS file), how to deal with the 2-week merge windows occurring every 10 weeks or so, but the bulk of the talk detailing the work flow required to upstream code to the Linux kernel.

There are basically 5 steps:

  1. Preparation – Read the kernel documentation, check what others are going.
  2. Creation – Follow the docs, ask questions, run checkpatch.pl, etc…
  3. Posting – Post to code the the relevant mailing list via git
  4. Feedback – You’ll most probably get feedback, asking for clarification or changes to your patch. Answer promptly.
  5. Maintenance – Once you patch is accepted you’ll have to responsibility to maintain the code.

You can download the presentation slides.

The next session “Upstream 201″ is described as “advanced course on kernel upstreaming fundamentals”, but Matt Porter spends time showing example how commit messages, mailing discussion DO and DON’T, as well as example upstreaming a new SoC (AllWinner A1X), and a new driver (Watchdog for bcm281xxx).


The presentation slide are also available for download.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Flappy Bird Sucks, Let’s Play Flappy Tux Instead! Or How to Modify APK Files

February 23rd, 2014 1 comment

Flappy Bird is a ridiculous fad, and I promised myself not to write about this silly game. I managed to resist when somebody showed off their Arduino powered real-life Flappy Bird, but then XDA developers mentioned one of their member posted instructions to customize Flappy Bird game. I thought it might be fun to personalize the game with pictures of friends or family members, and at the same time, learn how to hack apk files. Instead of real persons, I’ve replaced the original bird, by Tux, the official Linux mascot, flapping wings not included. Flappy_Tux

The instructions in XDA dev forums are mainly for Windows, but I’ve adapted them to Linux, and “created” “Flappy Tux” from Ubuntu 13.10. I’ll assume you’ve already installed OpenJDK and the Android SDK and have a working Android app development environment. I think we just need adb and aapt from android-sdk-linux/platform-tools/bin to be in the path.

You’ll also need to download apktool:

mkdir flappybird
cd flappybird
wget http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2
tar xvf apktool1.5.2.tar.bz2.1
wget http://android-apktool.googlecode.com/files/apktool-install-linux-r05-ibot.tar.bz2
tar xvf apktool-install-linux-r05-ibot.tar.bz2
cp apktool1.5.2/apktool.jar .
cp apktool-install-linux-r05-ibot/apktool .

as well as the original Flappy Bird apk.

You are now ready to install the framework file and create a workspace from the apk:

./apktool if Original\ FlappyBird.apk
./apktool d Original\ FlappyBird.apk workspace

Time for a little work in gimp, or other graphics editing software, to modify the game graphics and strings:

  • workspace/assets/gfx/atlas.png – The game sprite, where you’ll need to change about 10 flappy birds image with your own creation, and modify the title
  • workspace/res/drawable/splash.png – The splash screen
  • workspace/res/drawable-xxx/ic_launcher.png – App Icon for different resolutions / pixel densities.
  • workspace/res/values/strings.xml – File contains the strings used for the game. and you can change the name of the game, e.g.  “Flappy Bird” to “Flash Tux”. This will show under the app icon

After you’re happy with the modifications, you can recompile the app:

./apktool b workspace flappytux.apk

At first, this failed for me, as aapt was not in the path. I copied it to /usr/bin

You’ll also need to sign the apk, or Android will refuse to install it. First generate a keystore, e.g.:

keytool -genkey -v -keystore cnxsoft.keystore -alias cnxsoft -keyalg RSA -keysize 2048 -validity 10000

And sign your app:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cnxsoft.keystore flappytux.apk cnxsoft

Copy flappytux.apk to your device, install it and have fun.

You can also just download flappytux.apk if you just want to try it out.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Categories: Android, Ubuntu Tags: Android, apk, how-to, tutorial, ubuntu

Try Ubuntu Touch on Your Computer with Ubuntu Touch Emulator

February 20th, 2014 2 comments

Canonical has just announced Meizu (China) and Bq (Europe) will be the first manufacturers to launch Ubuntu Touch phones at the end of 2014. But if you want to try Ubuntu Touch, and don’t own a Google Nexus 4 or 7, or simply don’t want to flash Ubuntu Touch to your devices, you can do so using Ubuntu Touch x86 Emulator in your computer running Ubuntu , or in an Ubuntu Virtual machine in Virtualbox or VMWare.

Ubuntu Touch Emulator (Click to Enlarge)

Ubuntu Touch Emulator (Click to Enlarge)

The emulator has been available since last November, but Ricardo Salveti announced an updated version, the first public preview, with the following changes:

  1. Better TLS handling (not using the Android slots, but using pthread_set/getspecifics instead)
  2. Qt packages compatible with OpenGL ES 2.0 available at https://launchpad.net/~rsalveti/+archive/qt-gles-test

It has been tried on Ubuntu Trusty (14.04), but I could run it just fine on Ubuntu Saucy (13.10), by following the instructions below in a terminal:

  1. Download and extract the emulator:
    wget http://people.canonical.com/~rsalveti/aosp/generic_x86/emulator-x86.tar.bz2
    tar -jxvf emulator-x86.tar.bz2; cd emulator-x86
  2. Download the rootfs (~350 MB) and create the sd card image with:
    ./build-emulator-sdcard.sh
  3. Start the emulator
    ./run-emulator.sh

After about a minute, I could access the emulator, and enter a small tutorial teaching how how to swipe the screen edges to access the different options / menus. My main display is 1920×1080 and it nearly takes the full height, although the emulator itself is cut, the emulator’s “screen” is still visible on my secondary display (1280×1024), but if your resolution is lower than that you may have issues. I did not have to install anything else to run it, but if something goes wrong you may want to check Ubuntu Touch emulator wiki to check for dependencies.

The few apps I’ve tried (Browser, Setting, Facebook, Dialer, Contact…) appear to work, except the gallery app (known bug), and the camera app which is not usable in an emulator anyway… More apps can be installed from the marketplace.

You can access the terminal via adb:

adb shell
root@ubuntu-phablet:/# uname -a
Linux ubuntu-phablet 3.4.0-2-goldfish #13-Ubuntu PREEMPT Thu Feb 13 20:47:44 UTC 2014 i686 athlon i686 GNU/Linux
root@ubuntu-phablet:/#

or ssh (password: phablet):

adb forward tcp:9999 tcp:22
ssh phablet@localhost -p 9999
phablet@localhost's password: 
Welcome to Ubuntu Trusty Tahr (development branch) (GNU/Linux 3.4.0-2-goldfish i686)

 * Documentation:  https://help.ubuntu.com/
Last login: Thu Feb 20 03:29:05 2014 from localhost.localdomain
phablet@ubuntu-phablet:~$

By default the memory is set to 512MB, but if you need more you can change the -memory argument in run-emulator.sh.

Watch the video below to see Ubuntu Touch running in its x86 emulator.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

How to Convert Your HDTV into a Massive Touchscreen Enabled Android Tablet

February 11th, 2014 8 comments

Thanks to Android mini PCs, it’s now very easy and cheap to run Android on your HDTV, but most of the time touchscreen functionality is missing. There are already full products such as AIO Android PCs, and Smart Displays that brings Android to large display with touchscreen, and PQ Labs iStick A200 HDMI TV stick supports directly their overlay touch frames so you can “touchscreenize” your TV with their mini-PC and correct frame connected via USB. If you’d rather use another model of infrared touch frame for your TV and own Android device, Hardkernel has just explained how to do in the February edition of ODROID magazine using their ODROID-XU development board.

Minecraft_on_42_inch_touchscreen

Playing Minecraft with ODROID-XU Connected to a 42″ Monitor. Source: Youtube

In the magazine, they explain some details about the difference between capacitive and infrared touchscreens, and provide instructions to choose the right IR touch frame, how-to modify the software if necessary, and how to connect the touch frame to the monitor. I’ll provide a summary of the practical step, but you can check the article for more details.

Selecting an IR Touch Frame

Let’s get started. First you’ll need to choose an IR touch frame that support your operating system, in this case Linux / Android. There are basically three possibilities:

  1. If your touch frame is listed in the Linux multi-touch compatibility table, it should just be plug-n-play, unless the Linux kernel is not built with HID multitouch support (See step 3 in the next section).
  2. If your touch frame is Windows 8 compatible, it can also be supported after some changes in kernel drivers and input configuration files
  3. Your touch frame comes with specific Android drivers, and the source code is available, you should follow the manufacturer’s instructions.

Hardkernel could not easily source a Linux compatible touch frame locally, and some Chinese touch frame did come with open source drivers that were not really usable. So they chose a Windows 8 HID-compliant Plug & Play touch frame.

Software Configuration for Windows 8 Compliant Touchscreens

Four steps are involved in making a “Windows 8″ IR touchscreen works with Android:

  1. Get the vendor ID and product ID in a Linux or Windows PC.
    In Linux, you can use lsusb command in a terminal before and after connecting the touch frame to read the USB PID & VID from a line looking like:

    Bus 002 Device 073: ID 03fc:05d8 Elitegroup Computer Systems

    In the case above, the VID is 03FC, and the PID 05D8 for a 23″ touch screen from Elite Computer Systems. The 42″ overlay touch screen used in the picture above is manufactured by Nexio Co. Ltd with VID:PID: 1870:0119.

    In Windows, you’d have to go to the Device Manager to find the VID / PID for the frame.

  2. Modify HID drivers in Linux
    You’ll need to edit drivers/hid/hid-ids.h in the kernel source code and add your touch frame VID & PID. For example:

    /* Elitegroup Computer Systems */
    #define USB_VENDOR_ID_ELITEGROUP         0x03fc
    #define USB_DEVICE_ID_ELITEGROUP_TOUCH   0x05d8

    /* Nexio Co., Ltd */
    #define USB_VENDOR_ID_NEXIO              0×1870
    #define USB_DEVICE_ID_NEXIO_TOUCH        0×0119
    #endif

    You’ll also need to add your overlay touch screen to the mt_devices structure in drivers/hid/hid-multitouch.c. Using the example above:

    static const struct hid_device_id mt_devices [] = {
    
    /* Elitegroup Computer Systems */
    { .driver_data = MT_CLS_DEFAULT,
                     HID_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
                                    USB_DEVICE_ID_ELITEGROUP_TOUCH) },
    /* Nexio Co. Ltd */
    { .driver_data = MT_CLS_DEFAULT,
                     HID_USB_DEVICE(USB_VENDOR_ID_NEXIO,
                                    USB_DEVICE_ID_NEXIO_TOUCH) },
    
    /* 3M Panels */
  3. Configure and build the kernel with HID Multitouch support
    Type make menuconfig, and go to Device Drivers->HID Devices->Special HID Drivers->HID Multitouch panels (CONFIG_HID_MULTITOUCH), and enabled as a built-in driver (*), not a kernel module. Do the same for Device Drivers->Input device support->Touchscreens->USB Touchscreen Driver (CONFIG_TOUCHSCREEN_USB_COMPOSITE) and Device Drivers->Input device support->Touchscreens->GeneralTouch Touchscreen device support (CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH)Save, type make to build the kernel for your target, and flash it to your board or device.
  4. Create an IDC (Input Device Configuration) file
    Input device configuration files (.idc files) are Android specific files that contain device-specific configuration properties that affect the behavior of input devices. You’ll need to create a file using the VID & PID of your frame(s), and copy them to /system/usr/idc/ in your Android device. Using the previous example: Vendor_03fc_Product_05d8.idc and Vendor_1870_Product_0119.idc.The article in ODROID magazine does not mention the content of the file, but according to a forum thread on Freaktab, it should be something like (including an extra white line):

    touch.deviceType=touchScreen
    device.internal=1

    Now you can reboot your Android device, and the software setup is complete.

Touchcreen Assembly

The final step is to attach the touch frame to your TV. Hardkernel provides some pictures in the magazine to show how to do, but basically you need to put strong double sided tape or velcro to the touch frame, align it to your TV screen, and press the frame against the TV for a good fit.

23" Monitor and Overlay Touchscreen

23″ Monitor and Overlay Touchscreen

There are at least two kinds of infrared touchscreens: Overlay touch frames and integration frames using PeauProduction’s “jargon”. The former ones come with a glass, and the latter ones are without glass, with smaller bezel, lighter, and cheaper, but requires a little more steps to assemble. They are also cheaper to ship due to the lighter weight.

I’ve looked in to the price for this type of item, and there’s basically nothing on Chinese websites except for 15″ and 17″ monitors, and generally speaking larger sizes seems hard to find. The only options I’ve found are the NEXIO touchscreen used by Hardkernel for 32″ to 71″ TVs, and PQ Labs frames for 32″ to 84″ TVs. Both companies can also provide custom frames over 100″.  I could not find where to buy NEXIO products, but PQ Labs are available via PeauProductions. The 42″ overlay touch frame sells for $582, and the 42″ integration kit for $480. not including shipping.

[Update: I did not look enough... There's a 32" IR touchscreen with two touch points support on Aliexpress for $164 including shipping, and larger ones, e.g. 50", for $450 also including shipping (6 touch points), and many more from DEFI touch system on Aliexpress. Having said that, I don't really recommend buying this type of device, a if something goes wrong shipping costs may not make it worthwhile to return].

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter