Understanding Boot Time Variability with the Zynq ZC702

One of the challenges of boot time reduction is understanding why the boot time of a device may vary with each reboot, this is important because we strive not only for minimal boot times but for consistently minimal boot times. This post uses a Xilinx Zynq platform to demonstrate how we can measure, understand and find the causes of boot time variability. We’ll also provide an insight into how we use automation at Embedded Bits to improve the process.

To explore boot time variability we’ll be using Xilinx’s Zynq-7000 based ZC702 evaluation kit. The Zynq range of SoC’s cleverly combine a dual-core Cortex A9 MPCore with programmable logic (Artix-7 FPGA). The ZC702 is provided with a ‘Base Targeted Reference Design (TRD)‘ (a Linux distribution on an SD card) – we’ll use this to perform our investigation against.

By its very nature, the only way to measure variability is to measure the boot time over and over again during successive runs (time consuming!). At Embedded Bits where possible we install development boards into our board farm – along with providing benefits such as board sharing and collaborative working, it crucially provides automation – we’ll take advantage of this as we explore boot time variability. We’ll start by instructing the farm to repeatedly reboot the board whilst capturing boot logs.

Continue Reading →

Embedded Bits Joins ARM® Connected Community®

Bournemouth – 11th November, 2013 – Embedded Bits, a leading provider of optimized embedded solutions today announced it is a new member in the ARM Connected Community, the industry’s largest ecosystem of ARM-based technology and services. As part of the ARM Connected Community, Embedded Bits will gain access to a full range of resources to help it market and deploy innovative solutions that will enable developers to get their ARM Powered® products to market faster.

Continue Reading →

One Second Cold Linux Boot with OpenCV

As a means to demonstrate our boot time reduction skills, last November we put together a demo which shows an Embedded Linux device cold-booting in less than a second.

The demo consists of an ARM Cortex-A9 based device connected to a camera, 7-segment display and HDMI display. The device uses the camera along with OpenCV based software to count the number of yellow balls present on the table beneath and display the count on the 7-segment display. The device also outputs the camera image and ball detection illustration on the LCD display.

The device is able to do all this within one second of software reset, here is the video:

We’ve put lots of information on how we achieved this on our Boot Time Demos page which can be found here.

Continue Reading →

Scripted Modification of Kernel Configs

Whilst recently making changes to an embedded Linux distribution I came across a modest but very powerful feature of the kernel’s tried and test Kconfig system. What I discovered was a script that allows for scripted modification of kernel configuration files, i.e. .config and *_defconfig files.

The script, which first appeared in the 2.6.29 kernel can be found in the kernel’s scripts/ directory and its usage is very straight forward. Here are some examples:

# Enable timing information on printk's
./scripts/config --enable CONFIG_PRINTK_TIME

# Change the path of the initramfs
./scripts/config --set-str CONFIG_INITRAMFS_SOURCE ../fs

# Increase the size of the kernel log buffer
./scripts/config --set-val CONFIG_LOG_BUF_SHIFT 14

# Enable LZO compression for SquashFS in ~/test_defconfig
./scripts/config --file ~/test_defconfig --enable CONFIG_SQUASHFS
Continue Reading →

Boot Time Reduction Training Courses

Embedded Bits is proud to announce that we will soon be offering public training events which teach the skills required to reduce the cold boot time of embedded Linux devices. This is offered as a one-day public training event or can be held on-site at your offices and customised for your needs. The course teaches everything you need to start making a big difference to your boot time.

We believe that having in house boot time reduction skills can provide a cost effective means to reducing and maintaining small boot times on your current and future projects.

For more information see our training page or register your interest by emailing training@embedded-bits.co.uk

Continue Reading →

A nasty string initialization bug in C

Today I encountered a bug that was quite difficult to find regarding strings. In order for strings to work they must be null-terminated, and this implies that an array of characters can contain a string with a length equal to the array size minus one, because there must be space for the null character. I found out that, when initializing array of chars with strings, the compiler does not complain if just the null character doesn’t fit.

Continue Reading →

embedded-bits.co.uk embraces Twitter!

Embedded-bits.co.uk embraces Twitter

Embedded-bits.co.uk embraces Twitter

Embedded-bits.co.uk has joined Twitter! I thought it would be a great way to get to know my readers and to share with you the blog posts I write.

When it comes to developing for embedded devices – it can be quite difficult to find good documentation or informative articles on the things we really need to know. I’m hoping that we can use Twitter to share links to the useful nuggets of information that we come across during our travels across the internet.

I will look forward to seeing you on Twitter! [© 2011 embedded-bits.co.uk]

Continue Reading →

Turning on an ARM MMU and Living to tell the Tale: Some Theory

MMU Enabled

MMU Enabled

In my last post I wrote some bare metal code which ran on a BeagleBoard xM as an MLO – I’d like to extend this by running this code with the MMU switched on. I want to write the absolute minimum amount of code required to turn on an ARM MMU and to come out the other side in one piece. This post describes the basic principles of operation of an MMU – we’ll come on to writing code in my next post.

One of the most fundamental tasks of an MMU is to translate virtual addresses into physical addresses. How virtual addresses map onto physical addresses is entirely a matter of software design – the ARM MMU design provides great flexibility for helping you in this area. Just to illustrate this and to demonstrate the capability of these MMUs, I’ve come up with some perfectly valid schemes (though some of which at first may seem nonsensical):

Continue Reading →

Contributors Wanted!

Your Country Needs You

Your Country Needs You

To improve the broadness and frequency of articles on this site – I’m looking for contributors willing to write blog posts for embedded-bits.co.uk. I believe this will make the site a much more attractive place on the internet and a more useful resource for those in interested in our field.

If you are a systems integrator or work in the field of making hardware and stubborn software do something useful – or generally feel you have something to offer (it doesn’t have to be Linux) then I would love to hear from you. As long as you can demonstrate you can write high-quality, original and interesting articles that others will want to read and are willing to do it for nothing but fun – then drop me an email at blog@embedded-bits.co.uk – feel free to ask any questions in the comments sections. [© 2011 embedded-bits.co.uk]

Continue Reading →

Software Environment for a BeagleBoard XM with JTAG

Code Composer Studio

In my last blog post I described my rationale for buying a BeagleBoard XM and a compatible JTAG emulator – the XDS100v2. This post follows on from that and describes the steps required for setting up TI’s Code Composer Studio such that you can use the XDS100v2 with the BeagleBoard XM to find out what the board is doing.

Continue Reading →