Posts Tagged ‘device tree’

NetBSD is Now Running on Allwinner H3 Boards

July 11th, 2017 7 comments

Most people will run Linux kernel on development boards because it does the job, and that’s usually the only option. But others have been working on NetBSD kernel for Allwinner H3 boards, and it’s now running on various H3 boards with serial console, USB, Ethernet, SD card, and eMMC flash working.

Jared McNeill explains they first had to deal with low-level code to initialize the CPU and MMU, before using a U-boot layer to disguise NetBSD as the Linux kernel in order to load kernel and device tree file. The code then jumps to the generic ARM FDT implementation of initarm to relocate DTB data and perform other steps, and finally they can enumerated devices. This is explained in greater details in the aforelinked blog post on NetBSD website.

Jared tested the implementation on NanoPi NEO and Orange Pi Plus 2E, but others have reported success on various hardware based on Allwinner H3 processor. Other ARM development boards have been supported since 2015 by NetBSD 7.0 and greater with Raspberry Pi 2, ODROID-C2, BegleBone Black. Allwinner A20/A31, and others, but the work done on Allwinner H3 is different, as it’s the first implementation to use device tree, and eventually it should be possible to ship a single GENERIC evbarm kernel for all boards.

Thanks to Geokon for the tip.

Android 7.1 Nougat on Amlogic TV Boxes – A First Quick Look

March 14th, 2017 15 comments

Last year, we found out that Amlogic was working on Linux 4.4, possibly for their Android 7.0 Nougat SDK. As a developer who signed all relevant NDAs, Stane1983 has now been working on Amlogic Android 7.0 for a few day, and reported some of his findings.

First Amlogic source code is based on Android 7.1.1 R6 (NMF26Q), but still with Linux 3.14.29, possibly because Mali-T830 GPU drivers are still r11p0, and Linux 4.4 may come later. One good thing is that the Nougat SDK supports 64-bit Android OS instead of the 32-bit Android we are all currently using in our TV boxes. A not-so-good news is that internal storage partitions have changed, which means most current TV boxes are unlikely to get an update, becau it may not be possible to perform OTA updated, and instead would require an updated via Amlogic USB burning tool.

Click to Enlarge

But let’s look at the user interface and settings. The default launcher has not changed, but if you click on the Settings icon, the Settings will appear on the right of the screen. Note that this only work with the default launcher, other launchers will not be able to open Settings that way, at least in the current version of the SDK, and there are some inconsistency in the way settings are displayed with some shown “Android Marshmallow style”. Hopefully those issues will be addressed before reaching end-users.

Another new mysterious new feature is “Upgrade bluetoothremote”, which asks you to select a Bluetooth device, but it’s unclear whether it is for smartphones, or Bluetooth remote control will start selling with TV boxes.

The normal Android 7.0 Settings app will open from the app drawer, i.e. it will work with any launcher, but currently sub menus will crash, so it still needs some work.

The default browser is Browser2, basically WebView component tester. Not exactly ideal, but Nougat does not come with a browser by default, so you’ll need to install your preferred one, or maybe the manufacturers will add it themselves to their firmware.

Media playback still have some issues, but Stane did not test into details saying to “wait for CNX to get one of boxes with Nougat installed”. I guess that must be me, and I have some work to do once it is released :).

Developers will also need to be aware the way to handle remote control codes has changed. The /system/etc/remote.conf is gone, and instead Amlogic defines the codes in a specific DTSI (Device tree) file  for remote code that includes definition for 3 remotes and starts with:

It looks to be the standard way IR remote controls are handled in mainline Linux kernel, at least the top section, but it may not be so common to declare maps within a DTSI file…

Finally, Stane could also update Amlogic SDK to Android-7.1.1_r26 (NOF27C) instead of r6 (NMF26Q), so developers can always make sure the latest minor version and security patchsets are included. Based on his feedback, it may still take a few weeks or months before we see Amlogic S9xx devices sold with Android 7.0.

Linux 4.10 Release – Main Changes, ARM & MIPS Architectures

February 20th, 2017 3 comments

Linus Torvalds has just released Linux 4.10:

So there it is, the final 4.10 release. It’s been quiet since rc8, but we did end up fixing several small issues, so the extra week was all good.

On the whole, 4.10 didn’t end up as small as it initially looked. After the huge release that was 4.9, I expected things to be pretty quiet, but it ended up very much a fairly average release by modern kernel standards. So we have about 13,000 commits (not counting merges – that would be another 1200+ commits if you count those). The work is all over, obviously – the shortlog below is just the changes in the last week, since rc8.

Go out and verify that it’s all good, and I’ll obviously start pulling stuff for 4.11 on Monday. Linus

Linux 4.9 added Greybus staging support, improved security thanks to virtually mapped kernel stacks, and memory protection keys, included various file systems improvements, and many more changes.

Some newsworthy changes for Linux 4.10 include:

  • Virtual GPU support – Intel GVT-g for KVM (KVMGT) is a full GPU virtualization solution with mediated pass-through, starting from 4th generation Intel Core processors with Intel Graphics. Unlike direct pass-through alternatives, the mediated device framework allows KVMGT to offer a complete virtualized GPU with full GPU features to each one of the virtualized guests, with part of performance critical resources directly assigned, while still having performance close to native.
  • New ‘perf c2c’ tool, for cacheline contention analysis – perf c2c (for “cache to cache”) is a new tool designed to analyse and track down performance problems caused by false sharing on NUMA systems. The tool is based on x86’s load latency and precise store facility events provided by Intel CPUs. Visit C2C – False Sharing Detection in Linux Perf for more details about the tool.
  • Improved writeback management – Linux 4.10 release adds a mechanism that throttles back buffered writeback, which makes more difficult for heavy writers to monopolize the I/O requests queue, and thus provides a smoother experience in Linux desktops and shells than what people was used to. The algorithm for when to throttle can monitor the latencies of requests, and shrinks or grows the request queue depth accordingly, which means that it’s auto-tunable, and generally, a user would not have to touch the settings. Read Toward less-annoying background writeback for more details about this improvement.
  • FAILFAST support –  This release also adds “failfast” support. RAID disk with failed IOs are marked as broken quickly, and avoided in the future, which can improve latency.
  • Faster Initial WiFi Connection – Linux 4.10 adds support for using drivers with Fast Initial Link Setup as defined in IEEE 802.11ai. It enables a wireless LAN client to achieve a secure link setup within 100ms. This release covers only the FILS authentication/association functionality from IEEE 802.11ai, i.e., the other changes like scanning optimizations are not included.

Some notable ARM architecture improvements and new features:

  • Allwinner:
    • Allwinner A23 – Audio codec driver
    • Allwinner A31/A31s – Display Driver (first pipeline), audio codec support
    • Allwinner A64 – clock driver
    • Allwinner A80 – External SDIO WiFi
    • Allwinner H3 – Audio codec driver, SPI
    • New boards support: NextThingCo CHIP Pro, Pine A64, NanoPi M1
  • Rockchip:
    • Initial support for Rockchip PX5 & PX3 automotive platforms
    • Added Rockchip RK1108 evaluation board
    • Added support for Rikomagic MK808 Android TV stick based on Rockchip RK3066
    • Update Rockchip PCI driver to support for max-link-speed
    • Rockchip rk3399,rk3066 PLL clock optimizations
  • Amlogic
    • Support for the pre-release “SCPI” firmware protocol shipped by Amlogic in their GXBB SoC
    • Initial support for Amlogic S905D, and S912 (GXM) SoCs
    • Added support for Nexbox A1 and A95X Android TV boxes
    • Cleanup for the Amlogic Meson PWM driver
    • New Amlogic Meson Graphic Controller GXBB (S905)/GXL (S905X/S905D)/GXM (S912) SoCs (meson)
    • Resets for 2nd USB PHY
    • Initial support for the SD/eMMC controller in the Amlogic S905/GX* family of SoCs
    • Updated DTS to enable support for USB, I2C, SPI, maibox/MHU, PWM, ethernet MAC & PHY, secure monitor, IR, and watchdog.
  • Samsung
    • Device Tree for Samsung Exynos5433 mobile phone platform, including an (almost) fully supported phone reference board
    • Added support for TOPEET itop/elite board based on exynos4412
    • DeviceTree  updates:
      • Add Performance Monitor Unit to Exynos7.
      • Add MFC, JPEG and Gscaler to Exynos5433 based TM2 board.
      • Cleanups and fixes for recently added TM2 and TM2E boards.
      • Enable ADC on Odroid boards
      • Remove unused Exynos4415 DTSI
  • Qualcomm
    • Add support for Qualcomm MSM8992 (Snapdragon 808) and MSM8994 (Snapdragon 810) mobile phone SoCs
    • Added support for Huawei Nexus 6P (Angler) and LG Nexus 5X (Bullhead) smartphones
    • Support for Qualcomm MDM9615 LTE baseband
    • Support for WP8548 MangOH Open Hardware platform for IOT, based on Qualcomm MDM9615
    • Other device tree changes:
      • Added SDHC xo clk and 1.8V DDR support
      • Add EBI2 support to MSM8660
      • Add SMSC ethernet support to APQ8060
      • Add support for display, pstore, iommu, and hdmi to APQ8064
      • Add SDHCI node to MSM8974 Hammerhead
      • Add Hexagon SMD/PIL nodes
      • Add DB820c PMIC pins
      • Fixup APQ8016 voltage ranges
      • Add various MSM8996 nodes to support SMD/SMEM/SMP2P
  • Mediatek
    • Added clock for Mediatek MT2701 SoCs
    • New Mediatek drivers: mtk-mdp and mtk-vcodec (VP8/VP9/H.264) for MT8173
    • Updated the Mediatek IOMMU driver to use the new struct device->iommu_fwspec member
  • Other new ARM hardware platforms and SoCs:
    • Hisilicon – Hip07 server platform and D05 board
    • NXP – LS1046A Communication processor, i.MX 6ULL SoC, UDOO Neo board, Boundary Devices Nitrogen6_SOM2 (i.MX6), Engicam i.CoreM6, Grinn i.MX6UL liteSOM/liteBoard,  Toradex Colibri iMX6 module
    • Nvidia – Early support for the Nvidia Tegra Tegra186 SoC, NVIDIA P2771 board, and NVIDIA P3310 processor module
    • Marvell – Globalscale Marvell ESPRESSOBin community board based on Armada 3700, Turris Omnia open source hardware router based on Armada 385
    • Renesas “R-Car Starter Kit Pro” (M3ULCB) low-cost automotive board, Renesas RZ/G (r8a7743 and r8a7745) application processors
    • Oxford semiconductor (now Broadcom) OX820 SoC for NAS devices, Cloud Engines PogoPlug v3 based on OX820
    • Broadcom – Various wireless devices: Netgear R8500 router, Tenda AC9 router, TP-LINK Archer C9 V1, Luxul XAP-1510 Access point
    • STMicro  – stm32f746 Cortex-M7 based microcontroller
    • Texas Instruments – DRA71x automotive processors, AM571x-IDK industrial board based on TI AM5718
    • Altera – Macnica Sodia development platform for Altera socfpga (Cyclone V)
    • Xilinx – MicroZed board based on Xilinx Zynq FPGA platforms

That’s a long list of changes and new boards and devices… Linux 4.10 only brings few MIPS changes however:

  • KVM fixes: fix host kernel crashes when receiving a signal with 64-bit userspace,  flush instruction cache on all vcpus after generating entry code (both for stable)
  • uprobes: Fix uprobes on MIPS, allow for a cache flush after ixol breakpoint creation
  • RTC updates:  Remove obsolete code and probe the jz4740-rtc driver from devicetree for jz4740, qi_lb60
  • microblaze/irqchip: Moved intc driver to irqchip. The Xilinx AXI Interrupt Controller IP block is used by the MIPS based xilfpga platform and a few PowerPC based platforms.
  • crypto: poly1305 – Use unaligned access where required, which speeds up performance on small MIPS routers.
  • MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls

You can also read Linux 4.10 changelog with comments only, generated using git log v4.9..v4.10 --stat, in order to get a full list of changes. Alternatively, you could also read Linux 4.9 changelog on

Embedded Linux Conference & IoT Summit Europe 2016 Schedule

August 2nd, 2016 4 comments

Embedded Linux Conference & IoT summit 2016 first took place in the US in April, but the events are now also scheduled in Europe on October 11 – 13 in Berlin, Germany, and the schedule has now been published. Even if you are no going to attend, it’s always interesting to find out more about the topic covered in that type of events, so I had a look, and created my own virtual schedule with some of the sessions.

Embedded_Linux_Conference_Europe_2016Tuesday, October 11

  • 10:40 – 11:30 – JerryScript: An Ultra-lightweight JavaScript Engine for the Internet of Things – Tilmann Scheller, Samsung Electronics

JerryScript is a lightweight JavaScript engine designed to bring the success of JavaScript to small IoT devices like lamps, thermometers, switches and sensors. This class of devices tends to use resource-constrained microcontrollers which are too small to fit a large JavaScript engine like V8 or JavaScriptCore.

JerryScript is heavily optimized for low memory consumption and runs on platforms with less than 64KB of RAM and less than 200KB of flash memory. Despite the low footprint, JerryScript is a full-featured JavaScript engine implementing the entire ECMAScript 5.1 standard. It is actively used in production and runs already on hundreds of thousands of smartwatches!

JerryScript is an open source project and has been released under the Apache License 2.0. The talk will include a demo showing JavaScript code executing on top of JerryScript on a resource-constrained microcontroller.

  • 11:40 – 12:30 – Read-only rootfs: Theory and Practice – Chris Simmonds, 2net

Configuring the rootfs to be read-only makes embedded systems more robust and reduces the wear on flash storage. In addition, by removing all state from the rootfs it becomes easier to implement system image updates and factory reset.

In this presentation, Chris shows how to identify components that need to store some state, and to split it into volatile state that is needed only until the device shuts down and non-volatile state that is required permanently. He gives examples and shows various techniques of mapping writes onto volatile or non-volatile storage. To show how this works in practice, he uses a standard Yocto Project build and shows what changes you have to make to achieve a real-world embedded system with read-only rootfs. In the last section, Chris considers the implications for software image update. Expect a live demonstration.

  • 14:00 – 14:50 – Comparison of Linux Software Update Technologies – Matt Porter, Konsulko

The update of software in an embedded Linux system has always been an important part of any product. In the past, however, planning and design for software update was often an afterthought in system design. Further, software update mechanisms for embedded Linux products were typically implemented as ad hoc one-off projects within each product company. As the requirements for products have matured to include security updates at a frequent intervals, software update strategy has become a focal point of product development. This session will explore a number of different Linux software update technologies that are FOSS projects, comparing each for their strengths and weaknesses. In order to better understand the applicability of these technologies, we will also deep dive into both common and uncommon use cases that drive requirements for these software update mechanisms.

  • 15:00 – 15:50 – Building a Micro HTTP Server for Embedded System – Jian-Hong Pan

Apache HTTP Server, NGINX .. are famous web servers in the world. More and more web server frameworks come and follow up, like Node.js, Bottle of Python .., etc. All of them make us have the abilities to get or connect to the resources behind the web server. However, considering the limitations and portability, they may not be ported directly to the embedded system which has restricted resources. Therefore, we need to re-implement an HTTP server to fulfill that requirement.

Jian-Hong will introduce how he used the convenience of Python to implement a Micro HTTP Server prototype according to RFC 2616/HTTP 1.1. Then, re-write the codes in C to build the Micro HTTP Server and do the automated testing with Python Unit Testing Framework. Finally, he’ll explain how he combined the Micro HTTP Server with an RTOS, and lit the LEDs on an STM32F4-Discovery board.

  • 16:10 – 17:00 – Stuck in 2009 – How I Survived – Will Sheppard, Embedded Bits Limited

When developing Linux based products it’s desirable to use the latest version of the Linux kernel – however this is not always possible. In this presentation Will Sheppard will enlighten you with his experiences in developing a product based on a 2.6.28 kernel. Throughout the presentation he will share with you the reasons why you can be stuck with an old kernel, the issues this causes and the surprising and unexpected benefits that also arise. The presentation will also give you an indication as to how far the kernel has developed since 2009 and perhaps some hope if you too are also stuck working in the past.

  • 17:10 – 18:00 – Power Management Challenges in IoT and How Zephyr RTOS Meets Them – Ramesh Thomas, Intel

An OS that runs on tiny IoT devices is already meeting several challenges. These challenges are due to the limited resources in these devices and the diverse nature of the applications and the ecosystem. These same reasons make adding an effective power management infrastructure extremely complex. These devices that run on tiny batteries for extensive periods, mostly unattended, have a very critical need to conserve power.

Zephyr is a RTOS from Intel, designed for IoT and wearable devices. It is open source and supports x86, ARM and ARC SoC platforms. It has a small footprint and can run with very less memory. Power management is built in the core of its scheduling and idling design. It exports infrastructure for PM services to implement custom power policies.

This presentation will give an insight into the Zephyr power management design and the philosophies behind it.

  • 18:10 – 19:00 – BoF: Linux Device Performance Framework – Michael Turquette, BayLibre

Complex system-on-chip processors provide performance levels for their devices and peripherals. The same chips also provide interconnects with performance knobs connecting these devices. For years, Linux has not provided a way to express the relationship between a device and its performance states, nor a uniform method for drivers to change these states. There are many solutions to this in downstream vendor trees. Let’s fix that.

The purpose of this BoF is to start a discussion around the topic with a wide audience, solicit feedback on the currently proposed approach and move forward with consensus. This BoF will discuss the types of performance states that need to be modeled, existing Linux driver frameworks that can be re-used, new code that needs to be written and how Device Tree plays a role. Will we write a new DVFS or Interconnect Framework? Attend and find out!

Wednesday, October 12

  • 09:00 – 09:50 – Supporting the Camera Interface on the C.H.I.P – Maxime Ripard, Free Electrons

Every modern multimedia-oriented ARM SoC usually has some kind of camera interface to be able to capture a video (or photo) stream from an external camera. The framework of choice to support these controllers in Linux is the Video4Linux subsystem, also called v4l2.

This talk will walk through the v4l2 stack, the architecture of a v4l2 driver and the interaction between the SoC driver and its camera’s. The presentation is based on the work Free Electrons has done to develop such a driver for the Allwinner SoCs, as part of enabling the C.H.I.P platform with the upstream Linux kernel.

  • 10:00 – 10:50 – How to Develop the ARM 64bit Board, Samsung TM2 with Exynos5433 – Chanwoo Choi, Samsung Electronics

In the last period of twenty years ARM has been undisputed leader for processor’s architecture in the embedded and mobile industry. With its 64 bit platform, ARM widens up its field of applicability. The ARMv8 introduces a new register set, it is compatible with its 32 bit predecessor ARMv7 and suits best those system that try to be amongst the high end performance devices. Tizen OS is an open multi profile platform that can run on TV, mobile, cars and wearables. Samsung TM2 board based on Exynos5433, which patches has been recently posted to mainline, is an ARM 64-bit board supported by Tizen 64-bit. However, during the bring-up, the kernel developers have faced many challenges that will be presented in this session. The presentation will go through a number of issues and the way they have been solved in order to make Tizen run on a 64 bit platform.

  • 10:45 – 11:35 – Devicetree Hardware Autoconfiguration – Hans de Goede, Red Hat

One can buy 7″ android tablets for around $35 now, assuming one gets the standard Q8 Allwinner based model, these are actually supported by the mainline linux kernel now. These tablets use a standard case + SoC + display, which get paired with a different touchscreen-controller, accelerometer and wifi chip for every other batch.

This talk will outline my experience in making a single devicetree file covering all variants using an in kernel hardware auto-detection module which creates and applies devicetree changesets depending on the detected hardware. This talk will give the audience an idea what is and is not possible wrt dynamic devicetree usage as well as give does and don’ts for people who want to use dynamic devicetree themselves.

  • 11:45 – 12:35 – Wyliodrin STUDIO: An Open Source Tool for IoT Development – Alexandru Radovici, Wyliodrin

Have you been using your development board (like the Raspberry pi for example) as a glorified computer? Are you tired of needing to hookup your boards to a display and keyboard any time you want to program them?

Wyliodrin STUDIO is a software development tool especially created for the design of IoT projects. It comes as an open source Chrome extension so that programmers can use it independently of their specific OS platform and with little setup overhead.

Wyliodrin STUDIO abstract away many of the issues regarding setting up your development boards and allows programmers to directly focus on their projects. It offers a friendly programming environment with many of the features of advanced IDEs, like Eclipse. For beginners, Wyliodrin STUDIO offers a large range of tutorials to help people take their first steps in IoT development. MagPi gave Wylidorin STUDIO a 5/5 rating.

  • 14:00 – 14:50 – ASoC: Supporting Audio on an Embedded Board – Alexandre Belloni, Free Electrons

ASoC, which stands for ALSA System on Chip, is a Linux kernel subsystem created to provide better ALSA support for system-on-chip and portable audio codecs. It allows to reuse codec drivers across multiple architectures and provides an API to integrate them with the SoC audio interface.

This talk will present the typical hardware architecture of audio devices on embedded platforms, present the ASoC API and how to use it for machine drivers, which are used to glue audio codecs with the processor audio interface. Examples, common issues and debugging tips will also be discussed.

  • 15:00 – 15:50 – Cameras in Embedded Systems: Device Tree and ACPI View – Sakari Ailus, Intel

Cameras in embedded systems are often collections of different components rather than monolithic devices such as USB webcams. They consist of sensors, lenses, LED or xenon flashes and ISPs, each of which are individual devices with their specific drivers.

Once the prevalent solution for supporting hardware variation between different ARM based systems was platform data. Since around 2011 new platform data files have had hard time getting to mainline, the preferred solution being the Device tree. However, Device tree support in the V4L2 framework was not around until over a years after that, additionally help from the V4L2 async framework is also required in order to achieve the same functionality as with platform data.

This talk shows how the frameworks are used in drivers and Device tree source, reviews the status of ACPI and discuss potential future developments.

  • 16:30 – 17:20 – Swapping and Embedded: Compression is the Key – Vitaly Wool

Ever since Linux started running on embedded devices, having a swap for such had been considered a misconfiguration rather than a method for overcoming RAM shortage or performance booster. This attitude started to change with the spread of Android devices which usually don’t have a problem utilizing virtually any amount of memory. An with the introduction of ZRAM the usage of a compressed swap in RAM became more useful and more popular. This talk will give a comprehensive description of ZRAM and its counterpart, zswap, a summary of pros and cons of both. This talk will also cover a brand new z3fold compressed memory allocator which can be used for both zswap and ZRAM, of course presenting measurement results for these, obtained on various devices, ranging from set top boxes to laptops, not to forget Android phones.

Thursday, October 14

  • 09:00 – 09:50 – Time is Ready for the Civil Infrastructure Platform – Yoshitake Kobayashi, Corporate Software Engineering Center & Urs Gleim, Seimens

The Civil Infrastructure Platform (CIP) – launched in April – CIP defined and started to realize a super long-term supported open source “base layer” for industrial grade software. This base layer aims to be used for current and future industrial systems which supports machine-to-machine connectivity for digital future. This kind of systems, being the field for decades, should have long-term support for security and robustness reasons. In this talk, we will show the first steps on CIP development. This includes initial set of components for the base layer and its maintainers. Are you ready? It’s time to start your development with and for the CIP.

  • 10:00 – 10:50 – Introduction to Memory Management in Linux – Alan Ott, Signal 11 Software

All modern non-microcontroller CPUs contain a memory management unit and utilize the concept of virtual memory. This presentation will describe the different types of virtual memory spaces and mappings used in the Linux kernel, the cases in which they are useful, how they are implemented in the kernel, and how they differ from user space memory. Concepts such as the hardware memory-management unit (MMU) and translation lookaside buffer (TLB) will be discussed, as well as software concepts like kernel page tables. User space concepts such as growable stacks, memory paging, memory mapping, page faults, exceptions, and other memory-related conditions will be covered as well.

  • 11:15 – 12:15 – MinnowBoard Delta: Fishing for Easy IoT Hardware – David Anders, Intel

With the introduction of the Zephyr Project, a small scalable real-time operating system for use on resource-constrained systems, the need for an easy to use platforms to enable Internet of Things development has grown. With the idea of enabling both hardware and software developers to quickly prototype and develop proof-of-concept, as well as transitioning directly to product, the MinnowBoard Delta was designed as an open source hardware platform to highlight the Zephyr Project. This presentation will cover design considerations as well as implementation methods for creating open source hardware specifically for open source software.

  • 12:15 – 13:05 – Cloud Platforms for the Internet of Things: How Do They Stack Up? – Koustabh Dolui, Politecnico di Milano

With the advent of the Internet of Things (IoT), there has been a recent surge in the number of cloud platforms offering their services for data collection and processing from IoT devices. These platforms, open-source and closed, are diverse in terms of ease of use, architecture, data storage, privacy, security and communication protocols. However, how these cloud platforms measure up against each other, given the set of tradeoffs that they present, remains quite unexplored in existing literature. In this presentation, Koustabh will present a detailed study on the architecture that these platforms are based on and how the open source platforms compare against closed platforms. Koustabh will compare the platforms based on a real data-set generated from a sensor network deployed at the heritage site of Circo Massimo, Rome, as a part of an ongoing project at Politecnico di Milano, Italy.

  • 14:30 – 15:20 – GPIO for Engineers and Makers – Linus Walleij
We will go over the changes to the GPIO subsystem in the recent years, including GPIO descriptor refactoring, new support for things like open drain, some words on device tree and ACPI hardware descriptions, and we will discuss the new userspace character device ABI for GPIO chips and how use cases such as those presented by the maker community or industrial control clients can benefit from it. We will also talk a bit about the future direction of the subsystem.
  • 15:30 – 16:20 – FDO: Magic ‘Make My Program Faster’ Compilation Option? – Pawel Moll, ARM

Feedback Driven Optimisation (FDO), also known as Profile Guided Optimisation (PGO) is a well known code optimisation technique, employed by compilers since mid XX century, yet not widely used in the wild these days. It relies on providing runtime-captured information about code execution (eg. “branch taken or not?”) during next code compilation, improving quality of decisions made by compiler heuristics.

To be fair, there were good reasons for its demise which I hope to discuss, mainly time and complexity overhead and deployment difficulties, but there is some hope on the horizon, coming with new approach, called AutoFDO and originating at Google, based on statistical profiling (namely Linux perf + extra tools) and source code level attribution. I’ll discuss existing support for it available in mainline GCC and LLVM and give examples of real-life, successful deployments.

If you’d like to attend the event, you can do so by registering online, and paying the entry fee:

  • Early Registration Fee: US$550 (through August 1, 2016)
  • Standard Registration Fee: US$650 (August 2, 2016 – September 3, 2016)
  • Late Registration Fee: US$850 (September 4, 2016 – Event)
  • Student Registration Fee: US$175 (valid student ID required)
  • Hobbyist Registration Fee: US$175

Linux 4.6 Release – Main Changes, ARM and MIPS Architectures

May 16th, 2016 2 comments

Linus Torvalds released Linux Kernel 4.6 earlier today:

It’s just as well I didn’t cut the rc cycle short, since the last week ended up getting a few more fixes than expected, but nothing in there feels all that odd or out of line. So 4.6 is out there at the normal schedule, and that obviously also means that I’ll start doing merge window pull requests for 4.7 starting tomorrow.

Since rc7, there’s been small noise all over, with driver fixes being the bulk of it, but there is minor noise all over (perf tooling, networking, filesystems,  documentation, some small arch fixes..)

The appended shortlog will give you a feel for what’s been going on during the last week. The 4.6 kernel on the whole was a fairly big release – more commits than we’ve had in a while. But it all felt fairly calm despite that.

Linux 4.5 added support for GCC’s Undefined Behavior Sanitizer flag (-fsanitize=undefined) which should make the Linux kernel even more secure,an implementation of the next generation media controller, some performance improvements for file systems, etc…

Linux 4.6 brings many changes including:

  • USB 3.1 SuperSpeedPlus (10Gbps) support  – This release adds support for the USB 3.1 SuperSpeedPlus 10 Gbps speeds for usb core and xHCI host controller, meaning that a USB 3.1 mass storage connected to a USB 3.1 capable xHCI host should work with 10Gbps speeds.
  • Improve the reliability of the Out Of Memory task killer – The OOM killer kills tasks in order to free memory, but some tasks may take a long time before freeing up the memory, for example if it is stuck into an uninterruptible state. Linux 4.6 kernel adds oom_reaper thread that tries to reclaim memory by preemptively reaping the anonymous or swapped out memory owned by the OOM victim.
  • OrangeFS, a new distributed file system – OrangeFS is an LGPL scale-out parallel storage system used in applications such as HPC, BigData, Streaming Video, Genomics, Bioinformatics. You can read The OrangeFS distributed filesystem LWN article for more details.
  • 802.1AE MAC-level encryption (MACsec)MACsec standard provides encryption for all traffic over Ethernet using GCM-AES-128.
  • BATMAN V protocol – B.A.T.M.A.N. (Better Approach To Mobile Adhoc Networking) adds support for the V protocol, which does not rely on packet loss anymore, but the estimated throughput.

ARM architecture improvements and new features:

  • Allwinner:
    • Allwinner A83T support – Initial bringup; timer, watchdog and reboot
    • Allwinner H3 – R_PIO support
    • Allwinner A64 – Initial support
    •  NAND – ECC layout definition rework (partially) and randomizer support. Note: For devices that use eMMC, old device trees may no longer work with this version (i.e. you have to rebuild your .dtb files). Expect eMMC I/O errors otherwise.
    • ASoC – A10/A20 SPDIF driver
    • AXP223 PMIC support
    • Added board – Allwinner A83TDevBoard, Cubietruck Plus, Itead Ibox, Lamobo R1
  • Rockchip:
    • Rockchip rk3399 support for the rockchip-io-domain adaptive voltage scaling (AVS) driver
    • Rockchip rk3368 gains power domain support
    • Add Rockchip mailbox drive
    • pl330 updates to support DMAFLUSHP for Rockchip platforms
    • SPI controller bug fixes
    • Add driver for rockchip Display Port PHY
    • Add driver for the Rockchip SoC internal eMMC PHY
    • Add usb-uart functionality in rockchip-usb
  • Amlogic
    • Support for Amlogic S905 SoC and Tronsmart  Vega S95 boxes
    • Enable Amlogic Meson GXBaby platform
  • Samsung
    • Samsung exynos5433 updates for clk id errors, HDMI support, suspend/resume simplifications
    • Enable Samsung MFD and related configs
    • Fix for the Samsung I2S driver locking
    • Samsung Exynos ARM64 improvements – Remove separate ARCH_EXYNOS7 symbol and consolidate it into one ARCH_EXYNOS
    • Samsung Exynos (and older platforms) improvements
      • Split out Exynos PMU driver implementation from arm/mach-exynos to the drivers/soc/samsung which will allow re-use of it on ARM64.
      • Use generic DT cpufreq driver on Exynos542x/5800.
      • Minor cleanups.
    • Device tree updates
      • Split common reboot/poweroff node to separate DTSI
      • Don’t overheat Odroid XU3 by cooling CPU with cpufreq
      • Add SROM controller device nodes.
      • Add Ethernet chip as child of SROM controller on SMDK5410.
      • Allow simultaneous usage exynos-rng and s5p-sss drivers on Exynos5.
      • Cleanup CPU configuration on Exynos542x/5800.
      • Add necessary nodes for cpufreq-dt driver on Exynos542x/5800 (OPPs, regulator supplies) which allows frequency and voltage scaling of this SoC.
      • Minor cleanups
  • Qualcomm
    • ARM64 – Added support for Qualcomm MSM8996 SoC support, updates & cleanups for Qualcomm APQ8064, MSM8974, MSM8916, and others
    • Revert of patches for the Qualcomm BAM, these need to be reworked for 4.7 to avoid breaking boards other than the one they were intended for
    • Add Qualcomm NAND controller driver
    • ASoC capture support for Qualcomm drivers
    • Add Qualcomm Technologies HIDMA channel & HIDMA management drivers
    • Qualcomm IPQ4019 support in pinctrl
    • Qualcomm ARM Based Device Tree Updates:
      • Add documentation for Kryo
      • Add RPMCC node for APQ8064
      • Updates for MSM8974
      • Add board clocks
      • Add support for Nexus7 device
      • Fixup pmic reg properties
      • Various updates/cleanups for APQ8064 based boards
  • Mediatek
    • Added support for  Mediatek MT7623 SoC
    • SMP support for Mediatek mt2701
    • Revert part of the power domain initialization changes that broke mt8173-evb
    • Introduce Mediatek thermal driver
    • New Mediatek IOMMU driver
    • ASoC – New machine driver for Mediatek systems with RT5650 CODECs
    •  Add Mediatek MT8173 EFUSE driver
  • Texas Instruments
    • Improved support for Nokia N900 and other OMAP machines
    •  DaVinci & OMAP now uses the new DMA engine dma_slave_map
  • Other new ARM hardware or SoCs – 96Boards Husky board, AMD Overdrive board, Annapurna Labs Alpine family and development board, Broadcom Vulcan servers, Broadcom Northstar 2 SoC, Marvell Armada 3700 family and development board,   Axis Artpec-6 SoC, TI Keystone K2G SoC, ST Microelectronics stm32f469, ARM Juno R2,  Buffalo Linkstation LS-QVL and LS-GL, D-Link DIR-885L, ARM RealView PB1176 and PB11MPCore,  Google Nexus 7, Homlet v2,  LG Optimus Black, Logicpd DM3730, Raspberry Pi Model A, NXP i.MX6QP

MIPS pull request included the following changes:

  • Fix spelling mistakes all over arch/mips
  • Provide __bswapsi2 so XZ kernel compression will build with older GCC
  • ATH79 clock fixes.
  • Fix clock-rated copy-paste erros in ATH79 DTS.
  • Fix gisb-arb compatible string for 7435 BMIPS
  • Enable NAND and UBIFS support in CI20.
  • Fix BUG() assertion caused by inapropriate smp_processor_id() use.
  • Fix exception handling issues for the sake of debuggers
  • Fix the last remaining instance of irq_to_gpio in the db1xxx_ss PCMCIA code
  • Fix MSA unaligned load failures
  • Panic if kernel is configured for a not TLB-supported page size
  • Bail out on unsupported relocs in modules.
  • Partial fix for Qemu breakage after recent IPI rewrite
  • Wire up the preadv2 and pwrite2 syscalls
  • Fix the ar724x clock calculation

I’ve generated Linux 4.6 changelog with comments only using git log v4.5..v4.6 --stat, but you might as well as just read the changelog on which is also detailed and includes links to relevant articles.

Embedded Linux Conference 2016 and OpenIoT Summit 2016 Schedule

March 4th, 2016 2 comments

The Embedded Linux Conference 2016 and the OpenIoT summit 2016 will take place on April 4 – 6, 2016 in San Diego, California, and over 800 attended will meet including kernel & system developers, userspace developers, and product vendors. The Linux Foundation has recently published the schedule, so I’ve had a look at some of the talks, and designed my own virtual schedule to find out more the current development focus although I won’t attend.

Embedded_Linux_Conference_2016Monday April 4

  • 10:40am – 11:30am – Linux Connectivity for IoT by Marcel Holtmann, Intel OTC

There are many connectivity solutions that available for IoT. For example Bluetooth Low Energy, 802.15.4, Zigbee, OIC, Thread and others. This presentation will provide and overview of the existing technology and upcoming standard and how they tie into the Linux kernel and its ecosystem.

  • 11:40 – 12:30 – BoF: A Million Kernel Boots and Counting by Kevin Hilman, BayLibre

The project is currently over 1500 kernel boot tests per day for upstream kernels on a wide variety of hardware. This BoF will provide a very brief overview of and then be a forum for discussion and feature requests, how to participate and next steps.

  • 14:00 – 14:50 – Hello, Brillo by Dave Smith, NewCircle

Brillo is Google’s latest embedded offering, based on Android, intended for low-power devices in the IoT market. But what does “based on Android” really mean? In this session, we will compare the Brillo stack to Android, examining what has been added as well as removed. You will learn how Google attempts to bring secure solutions to IoT using Brillo and Weave—Google’s IoT connectivity protocol. We will also discuss the current status of user space application development on the platform.

  • 15:00 – 15:50 – Reducing the Memory Footprint of Android by Bernhard Rosenkränzer, Linaro

The Android team inside the Linaro Mobile Group has been working on reducing the memory footprint of the Android system – cutting around 70 MB off the memory used by a newly booted AOSP build on Nexus 7.

This talk describes what techniques we have used to save memory without having too much of a negative impact on performance.

  • 16:10 – 17:00 – Bringing Display and 3D to the C.H.I.P Computer by Maxime Ripard, Free Electrons

Every modern multimedia-oriented ARM SoC usually has a bunch of display controllers, to drive a screen or an LCD panel, and a GPU, to provide 3D acceleration. The framework of choice to support these controllers in Linux is the DRM subsystem.

This talk will walk through the DRM stack, the architecture of a DRM/KMS driver and the interaction between the display and GPU drivers. The presentation is based on the work we have done to develop a DRM driver for the Allwinner SoCs display controller, as part of enabling the C.H.I.P platform with the upstream Linux kernel. The work done to make the ARM Mali OpenGL driver work on top of a mainline DRM/KMS driver will also be detailed.

  • 17:10 – 18:00 – Bluetooth on Modern Linux by Szymon Janc

This presentation will help audience to better understand how Linux supports fast changing and evolving technology as Bluetooth. It will provide comprehensive guide on BlueZ 5 Bluetooth stack architecture demystifying transition from BlueZ 4 systems. This includes integration with external components like PulseAudio or NetworkManager. Audience will also have good overview of how Bluetooth on Linux can help building Internet of Things by supporting bleeding edge features like LE Connection Oriented Channels, 6LowPAN, LE Secure Connections and more.

  • 18:10 – 19:00 – BoF: Device Tree by Frank Rowand

The Linux kernel Device Tree continues to evolve. The presentation portion of the BoF will include improvements completed over the last year, the status of partially completed projects, and plans for the coming year. Suggestions for changes and improvements to Device Tree will be solicited from the participants. Come meet Device Tree maintainers and contributors.

Please bring questions, complaints, solutions, reports of what is not working for you, and wish-lists.

Tuesday April 5

  • 9:00 – 9:50 – Implementing Miniature Smart Home by Constantin Musca, Intel

We are at the beginning of a new era of technologies computing where almost every device communicates with each other or communicates with their environment. It is about the so called Internet of things (IoT).

A major line of investigation is the smart home and the benefits of having one and what it takes to make a home “smart”. These solutions are to make life easier and free more time. How cool is to be able to control the temperature, lights, music or garage door remotely.

The smart house system runs on a Brillo OS device which exposes standard peripherals’ APIs and can be controlled through the standard Weave interface using your Google account with commands like: open_garaje_door, set_living_temperature, play_song or close_curtains.

For the moment we only implemented this solution on a miniature house, but we are looking forward to extend it to a larger scale and use it in real

I’ve found a demo of the project, and they’ve actually used a house as big as “standard” apartment… Maybe it’s only considered miniature if you live in the US…

  • 10:00 – 10:50 – Developing a Standard Interface for Drones by Tully Foote, Open Source Robotics Foundation

With the proliferation of a huge variety of drones it is becoming more important to develop standard interfaces which can enable software to be reused across whole classes of airframes. In his work on ROS (the Robot Operating System), Tully Foote has been actively involved in many standard interface proposals and refinements and is the maintainer of many of the core message definitions. In this talk he will review the important aspects of designing standard interfaces using examples from indoor robotics, autonomous cars, and more. The talk will conclude with a proposed standard interface for drones with the hope of sparking further discussion in the greater drone community.

  • 11:20 – 12:10 – Linux Power Management Optimization on the Nvidia Jetson Platform by Merlin Friesen, Golden Gate Research

Powerful cellular System on Chip (SoC) Application Processors with multiple ARM cores and a vast array of peripherals are now readily available for non cellular applications and are finding use in areas such as vision processing, robotics and drones. These devices, due to their use in mobile smart phones and tablets, have highly optimized power management features and come with Linux kernels that complement the hardware.

The Linux based Nvidia Jetson platform is used in this presentation to give developers a hands on overview of SoC power management and techniques they can use to monitor and improve power consumption in their own designs.

  • 14:00 – 14:50 – libiio – Access to Sensor Devices Made Easy by Lars-Peter Clausen, Analog Devices

The Linux IIO (Industrial IO) framework is tasked with handling configuration and data aggregation from and to all sorts of sensors and data converters including ADCs, DACs, temperature sensors, accelerators, chemical analysis, light sensors, lifestyle sensor and many more. libiio is a system library hides the low-level details of the IIO kernel ABI and provides a simple yet complete programming interface. It implements functionality often required by applications which want to access IIO sensor devices.

This presentation will give an introduction to the core concepts of libiio, it’s API and how it can be used in applications to access sensor devices, enabling attendees to develop their own applications being able to access sensor devices fast and efficiently. In addition it will discuss the existing infrastructure and tools that have been built around libiio.

  • 15:00 – 15:50 – Communication for IoT: MQTT Development and Integration by Rodrigo Chiossi, Intel

MQTT is a lightweight publish/subscribe protocol intended for small sensors and mobile devices. It is designed to work with high-latency and unreliable networks and is the protocol of choice of many IoT solutions, such as IBM Bluemix and Amazon AWS IoT. MQTT is also one of the communication protocols of the Soletta Project, which uses Mosquitto, a compact open source implementation of MQTT, as backend.

This technical talk is focused on the integration between Mosquitto and Soletta. The Soletta MQTT API will be presented along with the process of integrating Mosquitto into Soletta’s mainloop. We then discuss the main limitations and problems of this process, and present the solutions applied. Lastly, we take a look at live demos of Soletta MQTT working with IBM Bluemix and Amazon AWS, with code snippets and development guidelines for those platforms.

Wednesday April 6

  • 9:00 – 9:50 – Static Code Checking in the Linux Kernel by Arnd Bergmann, Linaro

As a maintainer of the arm-soc tree, Arnd is responsible for the quality of a lot of new code that gets merged each release. His dirty secret is that he never runs any of it on real hardware, but that makes static compile-time checking at even more important.

In this presentation, Arnd shows his setup for finding and fixing bugs, and gives an overview of many of the available tools, including kernelc, sparse, coccinelle, clang, checkpatch and coverity.

  • 10:00 – 10:50 – HDMI CEC: What? Why? How?  by Hans Verkuil, Cisco Systems Norway

The HDMI connector features a CEC (Consumer Electronics Control) pin that allows connected devices to detect and control one another. This talk describes what CEC is, why you would want to implement support for it, and how you can use a new kernel framework and API to support this HDMI feature.

This talk will include a short introduction of the upcoming CEC framework and the utilities that use it.

  • 11:05 – 11:55 – Embedded Linux 3D Sensing: Minnowboard Meets RealSense by Miguel Bernal Marin, Intel

Robots and Drones use sensing devices (like cameras, lasers range-finders, ultrasonic sonars) to get information from external environment and it is used avoid obstacles or create maps. The use of 3D depth cameras helps to do these task easily. But the current 3D depth cameras in the market are heavy to load on a drone or the smaller doesn’t have Linux support. In this presentation, Miguel will explain how to use the Intel RealSense 3D camera in a Linux environment using a Minnowboard Max, a small 3D camera that can be used in outdoors. In addition, Miguel will go into detail on how to use it using the Clear Linux Project for Intel Architecture.

  • 13:35 – 14:25 – Survey of Open Hardware 2016 by John Hawley, Intel

This is a generalized talk where we’ll generally compare, contrast and discuss various things that have happened in the last year regarding Open Hardware. In 2016 this will cover things that happened at the last OSHWA meeting, various new devices that are on the market, and generally focus on devices capable of running and operating system, and not micro-controllers.

  • 14:35 – 15:25 – Zephyr Project: An RTOS to change the face of IoT by Anas Nashif

An increasing number of developers need a scalable, real-time operating system designed specifically for small-footprint IoT devices. It needs to be affordable, easy to use and built with input from the developers using it. An open source RTOS can’t just be called “open” – it must live and breathe “the open source way.” Developers should have influence over the direction of the project and be able to impact its software and hardware architecture support. The OS should also maximize interconnectivity between other devices, contain powerful development tools and come with customizable capabilities. The Zephyr Project offers just that.

This class will give an overview of Zephyr Project. Zephyr is a small, scalable, real-time operating system designed specifically for small-footprint IoT edge devices. Its modular design allows you to create an IoT solution that meets all of your device needs, regardless of architecture. It is also embedded with powerful development tools that will, over time, enable developers to customize its capabilities.

Launched in partnership with the Linux Foundation, the Zephyr project is a truly open source solution focused on empowering community development. The goal of Zephyr is to allow commercial and open source developers alike to define and develop IoT solutions best suited for their needs.

There are so many other interested talks that I did not mention in my list, but that’s what happens when you do a schedule.

You can register online to attend both Embedded Linux Conference and OpenIOT Summit 2016. The fees are as follows:

  • Early Registration Fee – US$550 through February 21, 2016
  • Standard Registration Fee – US$650 through March 13, 2016
  • Late Registration Fee – US$850 after March 14, 2015
  • Student Registration Fee – US$175
  • Hobbyist Registration Fee – US$175. You’ll need to contact events [at] to receive a discount code, and you must pay for the fee yourself.


How to extract kernel.img with mkboot script

December 7th, 2015 1 comment

As I tried instructions to install Linux on Amlogic S905 Android TV boxes yesterday, I wanted to extract kernel.img file found in Android firmware, but Google did not help that much until I found mkboot part of mkbootimg_tools scripts.

But first let’s see how kernel.img is created… Google provide a Python script called mkbootimg that combine the kernel image (e,.g. zImage), a rootfs/ramdisk and the device tree (DTB) file with a command line that looks like:

However, AFAIK the company does not provide a “unmkbootimg” script, and mkbootimg can only be used to create kernel.img, not decompile it. But that’s what mkboot does, and it works for kernel.img and recovery.img. Let’s retrieve the necessary files first:

mkboot is a bash script so we can use it right away:

So it can be used both for unpacking and repacking kernel.img to/from the output directory. Let’s run the command with an actual kernel.img file:

The script has indeed decompiled kernel.img with the kernel itself, the ramdisk (compressed and decompressed), and second.img that’s the DTB file. img_info contains the information shown during extraction above.

second.img and second.img.tmp files differ in size, so I ran through dtc to get the readable device tree file,. and the resulting files are identical:

So the tmp files must have had some padding, that the script stripped to create second.img.

In theory, you can change the kernel files, randisk or device tree, and repack everything with:

but it did not quite work here:

If we look a the first ./mkbootimg command in this post we can see some different offset in the decompile image, so I changed img_info as per the first command line, with base=0, kernel_offset=0x01080000, and ramdisk_offset=0x01000000, and it all worked out OK:

How to Run Headless Linux on Amlogic S905 Devices Such as MINI MX or K1 Plus

December 6th, 2015 118 comments

A few week ago, I had been informed that Amlogic S905 U-boot and Linux source code was released, and one person use the code and other resources to load a minimal Ubuntu 14.04 image to his K1 Plus TV box and released the installation instructions and the image (Thanks olin!). I also have K1 Plus here, but since I’ve just finished reviewing Beelink MINI MX, I decided to use the latter instead. The instructions below boot Linux from the (micro) SD card, and can still boot Android if you remove the SD card.

Modifying U-boot environment

The instructions include opening the box, and connecting or soldering a USB to TTL debug board to access U-boot and change some parameters. But later once an image with network is working, you could also build and load fw_setenv and fw_saveenv, and do the same steps with an Android shell and without the need to open the device.

Click to Enlarge

Serial connection to MINI MX (Click to Enlarge)

K1 Plus has the UART headers populated so you don’t have to solder anything, but MINI MX requires a little bit a soldering on the clearly marked Tx, Rx, GND pins.

Connect your USB to TTL debug board to your computer, configure minicom / putty / screen to 115200 8N1, start the board, and press the space bar to interrupt the boot:

You may want to run printenv in order to back the default settings:

Now you can change some settings in U-boot in order to allow for Linux to boot from SD card. If you are doing so directly in Android terminal via adb, you can replace setenv and saveenv by fw_setenv and fw_saveenv (no present in MINI MX firmware):

Flash Ubuntu image to the SD card

First download the Ubuntu image: ubuntu-14.04-headless-arm64.7z.

I’ve done this step in an Ubuntu computer, but you could also perform the same steps in Windows with 7pzip and Win32DiskImager. Install required tools and uncompress the image.

Insert the micro SD card (2GB or greater) in your computer, check the device with lsblk, and flash the image to your SD card by replacing /dev/sdX in the command below by your actual device.

Get the Device Tree File for Your device

If you are trying this on K1 Plus, you can skip that step, but if you are using another device, in my case Beelink MINI MX replacing the device tree file in /boot/dtb.img might be a good idea. For example, MINI MX would only get a Fast Ethernet connection with K1 Plus device tree file, but once I extracted the one from the Android firmware I got an Gigabit Ethernet connection.

If you’ll need to get boot.img either from some firmware update file, or directly from the NAND flash. I don’t have firmwre for MINI NX, so I dumped the boot partition with an adb shell:

Then I followed the instructions to extract a device tree file from Android, until I get boot.img-second.gz file, which I copied to the boot partition in the SD card with Ubuntu

Run Ubuntu in MINI MX

You may want to extend the rootfs partition in the SD card with gparted, or you’ll only have a small part of your SD card used. Now insert the SD into your Amlogic S905 TV box, and connect the power.

After some time getting wasted waiting for the network, you should be able to access to command line by logging in with user debian and password temppwd:

That’s a minimal image so there’s plenty of free space and memory:

All four cores are shown when I check the cpuinfo:

The kernel is build with Android’s option “CONFIG_ANDROID_PARANOID_NETWORK“, so all network configuration must be done with root:

So there’s some work to be done, but at least that’s a start.

[Update: It’s easy to put the case together with the serial wires by cutting the plastic case a little.