GStreamer 2010 conference videos

Videos from the 2010 edition of the GStreamer conference, Cambridge, UK, Oct. 26, 2010.

After releasing ELC-E videos, here are videos from the 2010 edition of the GStreamer conference. As usual, these videos are released under the terms of the Creative Commons Attribution – ShareAlike Licence version 3.0.

Jonas HolmbergVideo capture
Axis
Case study – GStreamer on Axis devices
Slides
Video (26 minutes):
full HD (223M), 450×800 (72M)

Sebastian DrögeVideo capture
Collabora Multimedia
WebM and GStreamer
Slides
Video (8 minutes):
full HD (75M), 450×800 (24M)

Florent ThieryVideo capture
UbiCast
Using gstreamer for building automated webcasting systems
Slides
Video (31 minutes):
full HD (361M), 450×800 (107M)

Zeeshan AliVideo capture
Nokia
Implementing DLNA using GStreamer
Slides
Video (29 minutes):
full HD (282M), 450×800 (88M)

Olivier CrêteVideo capture
Collabora
Integrating VideoConferencing into Everyday Applications
Slides
Video (29 minutes):
full HD (334M), 450×800 (103M)

Håvard GraffVideo capture
Tandberg
Case study – Tandberg and GStreamer
Video (61 minutes):
full HD (734M), 450×800 (212M)

Wim TaymansVideo capture
Collabora Multimedia
Keynote – GStreamer – Current and future development
Video (47 minutes):
full HD (310M), 450×800 (136M)

Rob ClarkVideo capture
Texas Instruments
GStreamer and OMAP4
Video (37 minutes):
full HD (336M), 450×800 (128M)

Martin BissonVideo capture
3D Stereoscopic and GStreamer
Video (13 minutes):
full HD (124M), 450×800 (39M)

Jan SchmidtVideo capture
Oracle Corporation
Interactivity in GStreamer pipelines
Slides
Video (20 minutes):
full HD (265M), 450×800 (76M)

Mike SmithVideo capture
Songbird
Cross platform development with GStreamer
Video (51 minutes):
full HD (542M), 450×800 (165M)

Emanuele QuacchioVideo capture
ST Microelectronics
A GStreamer based framework for adaptive streaming applications
Video (54 minutes):
full HD (592M), 450×800 (174M)

Josep TorraVideo capture
Fluendo
Intel SMD elements in GStreamer
Slides
Video (50 minutes):
full HD (371M), 450×800 (151M)

Philippe NormandVideo capture
Igalia
Webkit, HTML5 and GStreamer
Slides
Video (38 minutes):
full HD (229M), 450×800 (106M)

Edward HerveyVideo capture
Collabora Multimedia
Challenges of video editing in your pocket
Slides
Video (53 minutes):
full HD (416M), 450×800 (174M)

David SchleefVideo capture
Entropy Wave
Optimizing multimedia with Orc
Slides
Video (58 minutes):
full HD (493M), 450×800 (175M)

Luciana FujiiVideo capture
Holoscopio
Landell – live streaming for the masses
Slides
Video (21 minutes):
full HD (110M), 450×800 (58M)

Zaheer MeraliVideo capture
Flumotion and GStreamer
Video (35 minutes):
full HD (202M)

Andrey Nechypurenko and Maksym ParkachovVideo capture
Adaptive video streaming with Ice and GStreamer
Slides
Video (35 minutes):
full HD (279M), 450×800 (107M)

ELCE 2010 videos – Now in full HD

Videos from the Embedded Linux Conference Europe, Cambridge, UK, October 2010

Just a few weeks before the next edition of the Embedded Linux Conference in San Francisco, here are the videos from the previous edition in Europe a few months ago.

These videos took more time to process than expected, because of intense months on our side, but also because of the switch to the VP8 video codec. VP8 is the new Open Source and royalty free video codec, and is a successor to the codec that Theora was derived from. Unlike Theora which is now lagging behind, it is a very close competitor to H264, both in terms of quality and video size.

The switch to VP8 allowed us to release the videos in their original full HD resolution (we now have three full HD camcorders to shoot conference videos), with video files of about the same size.

You will probably need a recent GNU/Linux distribution (such as Ubuntu 10.10) to watch these videos. As this codec released by Google is taking off quickly, you should also find solutions to watch videos on Windows and MacOS X. Don’t hesitate to post comments here about your experience playing these files. You can even watch them on the Panda board, which can decode VP8 with its hardware video decoder.

As usual, these videos are released under the terms of the Creative Commons Attribution – ShareAlike Licence version 3.0.

As often in conferences, the videos were unfortunately shot is tough lighting conditions. The organizers usually turn off the lights to make it easier for the audience to read the screen. The consequence is a high contrast between the speaker and the screen, causing the speaker to appear very dark when we film her or him together with the screen. In a number of videos, we tried to solve this by using a beach mode provided by our camcorders. While the speaker now looks great, this unfortunately blurred the screen, causing more inconvenience than benefits. We gave up this mode in the last videos and will shoot ELC 2011 is the standard way, even if the speaker looks dark again. At least, with full HD videos, you will be able to read the slides directly on the screen.

The videos from the 2010 GStreamer conference will also be available in the next days, and to help you produce your own videos, we will release our new video processing scripts soon too.

Ruud DerwigVideo capture
Welcome speech
Video (15 minutes):
full HD (228M), 450×800 (71M)

Wolfram SangVideo capture
Pengutronix
Developer’s Diary: Supporting Maintainers
Slides
Video (46 minutes):
full HD (888M)
Rekha Kumar and Nipuna GunasekeraVideo capture
Texas Instruments
Panda board demonstration
Video (14 minutes):
full HD (373M), 450×800 (85M)

Robert SchusterVideo capture
OpenJDK
OpenJDK for Embedded Linux Devices
Slides
Video (39 minutes):
full HD (947M), 450×800 (225M)
Philippe RobinVideo capture
Linaro
Facilitating Open Source Development and Collaboration
Slides
Video (46 minutes):
full HD (548M), 450×800 (160M)
Tim BirdVideo capture
Sony
Android System Programming – Tips and Tricks
Slides
Video (40 minutes):
full HD (471M), 450×800 (142M)
Mischa Jonker and Ruud DerwigVideo capture
Synopsys
Portability is for People Who Cannot Write New Programs – GNU/Linux/OS on ARC
Slides
Video (34 minutes):
full HD (517M), 450×800 (148M)
Leif LindholmVideo capture
ARM
Software Considerations When Using High-Performance Memory Systems
Slides
Video (46 minutes):
full HD (511M), 450×800 (153M)
Ravi Sankar GunturVideo capture
Samsung
A Simple Method to Detect Memory Leaks and Buffer Overruns
Slides
Video (17 minutes):
full HD (171M), 450×800 (55M)
Will NewtonVideo capture
Imagination Technologies
Exploiting On-chip Memories in Embedded Linux Applications
Slides
Video (20 minutes):
full HD (255M), 450×800 (68M)
Andrey FedotovVideo capture
AFSoft
Linux Application in Safety-Critical Environment: A Real-Life Example
Video (39 minutes):
full HD (304M), 450×800 (111M)

Anna DushistovaVideo capture
Mentor Graphics
Eclipse and Embedded Linux Developers: What It Can and What It Cannot Do For You
Slides
Video (31 minutes):
full HD (338M), 450×800 (112M)
Yoshitake KobayashiVideo capture
Toshiba
Linux Kernel Acceleration for Long-term Testing
Slides
Video (30 minutes):
full HD (249M), 450×800 (89M)
Ralf BaechleVideo capture
Wind River
Embedded Linux – The State of the Nation
Video (40 minutes):
full HD (375M), 450×800 (128M)

Jim ZemlinVideo capture
Linux Foundation
The Linux Foundation and CELF
Video (21 minutes):
full HD (282M), 450×800 (71M)

Andrew MurrayVideo capture
MPC Data
The Right Approach to Minimal Boot Times
Slides
Video (41 minutes):
full HD (472M), 450×800 (149M)
Robert Schwebel and Sascha HauerVideo capture
Pengutronix
Barebox: Booting Linux Fast and Fancy
Slides
Video (45 minutes):
full HD (779M), 450×800 (192M)
Kevin HilmanVideo capture
Deep Root Systems
Runtime Power Management
Slides
Video (45 minutes):
full HD (780M), 450×800 (195M)
Michael OpdenackerVideo capture
Bootlin
Flash Filesystem Benchmarks
Slides
Video (47 minutes):
full HD (937M), 450×800 (229M)
Ari RauchVideo capture
Texas Instruments
The Dynamic Role of Open Linux Architectures in Today’s Mobile Landscape
Slides
Video (34 minutes):
full HD (789M), 450×800 (203M)
Benjamin GaignardVideo capture
ST-Ericsson
Android and GStreamer
Slides
Video (42 minutes):
full HD (432M), 450×800 (133M)
Hans VerkuilVideo capture
Tandberg
Supporting SoC Video Subsystems in Video4linux
Slides
Video (45 minutes):
full HD (424M), 450×800 (139M)
Benjamin ZoresVideo capture
Alcatel-Lucent
State of Multimedia in 2010’s Embedded Linux Devices
Slides
Video (45 minutes):
full HD (784M), 450×800 (219M)
Iago Toral QuirogaVideo capture
Igalia/Grilo
Grilo: Integrating Multimedia Content in Applications
Slides
Video (32 minutes):
full HD (515M), 450×800 (149M)
Jean-Paul SamanVideo capture
M2X BV
Porting VLC to TI DaVinci
Slides
Video (46 minutes):
full HD (516M), 450×800 (167M)
Stefan KostVideo capture
Nokia
Meego Multimedia
Slides
Video (37 minutes):
full HD (316M), 450×800 (105M)
Vitaly WoolVideo capture
Porting Legacy Code to Linux Userspace Driver Framework
Video (26 minutes):
full HD (400M), 450×800 (108M)

Martin MichlmayrVideo capture
Debian
Adapting Debian Installer to NAS and Other Consumer Devices
Slides
Video (21 minutes):
full HD (196M), 450×800 (62M)
Frank ScholzVideo capture
Android and Its Impact On Home Entertainment and Home Automation
Video (28 minutes):
full HD (347M), 450×800 (101M)

WookeyVideo capture
Yaffs
Yaffs updates
Slides
Video (27 minutes):
full HD (312M), 450×800 (95M)
Yann E. MorinVideo capture
Crosstool-ng
Crosstool-NG, A Cross-Toolchain Generator
Slides
Video (41 minutes):
full HD (1.1G), 450×800 (185M)
Armijn HemelVideo capture
Loohuis Consulting
Introducing the Binary Analysis Tool
Slides
Video (47 minutes):
full HD (507M), 450×800 (155M)
Kees-Jan DijkzeulVideo capture
Sioux Embedded Systems
A Gentle Introduction to Autotools
Slides
Video (41 minutes):
full HD (371M), 450×800 (124M)
Klaas Van GendVideo capture
Montavista
Deflating the Virtualization Hype in 3 Simple Steps
Slides
Video (38 minutes):
full HD (507M), 450×800 (131M)
Peter KorsgaardVideo capture
Buildroot
Do More With Less – On Driver-less Interfacing with Embedded Devices
Slides
Video (48 minutes):
full HD (529M), 450×800 (173M)
Ray KinsellaVideo capture
Intel
Xen in Embedded Systems
Slides
Video (34 minutes):
full HD (380M), 450×800 (135M)
Arnout VandecappelleVideo capture
Mind
Practical Testing of Open Source Embedded Systems
Slides
Video (51 minutes):
full HD (364M), 450×800 (160M)
Carmelo Amoroso and Rosario ContarinoVideo capture
STMicroelectronics
Lightweight Prelinker for Kernel Modules
Slides
Video (45 minutes):
full HD (302M), 450×800 (129M)
Frank RowandVideo capture
Sony
Identifying Embedded Real-Time Latency Issues: I-Cache and Locks
Slides
Video (43 minutes):
full HD (272M), 450×800 (120M)
David AndersVideo capture
Texas Instruments
Board Bringup: Methods and Utilities
Slides
Video (34 minutes):
full HD (248M), 450×800 (99M)
John OgnessVideo capture
Linutronix
IPL+UBI: Flexible and Reliable with Linux as the Bootloader
Slides
Video (27 minutes):
full HD (232M), 450×800 (89M)
Vitaly WoolVideo capture
WLAN Chips in Embedded Linux Systems
Video (23 minutes):
full HD (264M), 450×800 (82M)

Grant LikelyVideo capture
Secret Lab Technologies
ARM Flattened Device Tree Status Report
Slides
Video (40 minutes):
full HD (542M), 450×800 (173M)
Koen KooiVideo capture
OpenEmbedded
The State of OpenEmbedded and Tooling to Make Life Easier
Slides
Video (44 minutes):
full HD (308M), 450×800 (122M)
Harald WelteVideo capture
OpenBSC
Running your own GSM+GPRS network using OpenBSC, OsmoSGSN and OpenGGSN
Slides
Video (49 minutes):
full HD (402M), 450×800 (163M)
Arun RaghavanVideo capture
Collabora
PulseAudio In The Embedded World
Slides
Video (30 minutes):
full HD (204M), 450×800 (88M)
Jake EdgeVideo capture
LWN.net
Understanding Threat Models for Embedded Devices
Slides
Video (29 minutes):
full HD (186M), 450×800 (80M)
Gustavo F. PadovanVideo capture
Profusion
The Linux Bluetooth Stack
Slides
Video (30 minutes):
full HD (213M), 450×800 (87M)
Klaas van GendVideo capture
Closing session
Video (62 minutes):
full HD (1.2G), 450×800 (285M)

Chris SimmondsVideo capture
2net
The Embedded Linux Quick Start Guide – Part 1
Slides
Video (52 minutes):
full HD (397M)
Chris SimmondsVideo capture
2net
The Embedded Linux Quick Start Guide – Part 2
Slides
Video (79 minutes):
full HD (660M)
Chris SimmondsVideo capture
2net
The Embedded Linux Quick Start Guide – Part 3
Slides
Video (67 minutes):
full HD (501M)
Chris SimmondsVideo capture
2net
What else can you do with Android? – Part 1
Slides
Video (49 minutes):
full HD (432M), 450×800 (144M)
Chris SimmondsVideo capture
2net
What else can you do with Android? – Part 2
Slides
Video (31 minutes):
full HD (293M), 450×800 (94M)
Chris SimmondsVideo capture
2net
What else can you do with Android? – Part 3
Slides
Video (59 minutes):
full HD (545M), 450×800 (180M)

Here are also videos of the Embedded Linux and Android tutorials by Chris Simmonds.

ELC 2010 videos

Videos from the Embedded Linux Conference in San Francisco, April 12-14, 2010.

The 2010 edition of the Embedded Linux Conference was once again a very interesting event. For embedded Linux developers, the Embedded Linux Conference is a perfect place to learn about new technologies, profit from the experience of other developers, and to meet key software developers.

For people who couldn’t attend this conference, and for single core people who didn’t manage to attend two or three talks at the same time, here are the videos that we managed to shoot. As usual, the videos are released with a Creative Commons Attribution – ShareAlike 3.0 license.

We hope it makes you feel like joining the next edition of the conference. If you can’t wait, what about going to ELC Europe in Cambridge (UK) in late October? It has a very interesting program too. Of course, the sessions will also be recorded. I hope to see you there!

Update your WordPress site from scripts

An example Python script, which can be re-used with other website engines.

WordPress logoThe Bootlin website is proudly powered by WordPress. It is a mix of static pages and blog posts, and we are very satisfied of the way we can manage and post content.

Being the webmaster, I had an issue though. Several of our pages share the same bits of content, in particular the descriptions of our public training sessions. To avoid discrepancies between pages, I ended up writing scripts to generate the contents of these pages from common parts. However, updating those pages on the website was done with manual copying and pasting, which was time consuming and error prone.

Fortunately, after some on-line research and practical experiments, I found a simple way of automating the process of login to our WordPress site, open a page for editing, and submitting a new version of the contents.

Since this wasn’t really straightforward, I’m happy to share the update-wordpress-page Python script I came up with, hoping that it be useful to you too.

This script can only be used to modify an existing page. It just changes the contents, and doesn’t touch other attributes. Of course, you could also extend it to create new pages and posts, but this would represent much more work, having lots of input fields to fill.

Another approach would have been to open a direct database connection to the server running WordPress, and then to perform your updates directly with SQL commands. However, this requires a knowledge about WordPress databases (making the script much less generic), and the open database port also makes your website less secure.

To use my script, you will first have to find the edit URL for your page, which reveals the WordPress post id.

I suggest you to create a special WordPress user with Editor privileges. The page history will then show which changes were automated, and which were manual.

The last thing you will have to do is create a $HOME/.update-wordpress-page configuration file as follows:

[bootlin.com/fr]
user=bot
password=ERrdrsdGp8

[bootlin.com]
user=bot
password=Hgdeedxx55

You can easily tune this script to support other web content engines. You first need to identify the login page (WordPress uses cookies to authenticate a session, instead of simple http authentication). Then, you will find the names of the input forms by reading the login page HTML code.

The second step is to open the page editing URL, and find out the name of the input form used for the page contents.

We don’t offer official support for our script, but I hope that this working code example will help you to make your own scripts, and to get you started faster. Python’s urllib2 and ClientForm really make this easy to do. What I especially like with ClientForm is its ability to modify the value of a given form, without having to read and fill any other input forms in the page, to keep their default content.

Recruiting in Toulouse, France

Penguin worksFor the French speaking readers, we are looking for a graduate engineer to open a new office in Toulouse, France.

All the details are available on our French blog.

This job is not only open to French applicants. Everyone ready to relocate in Toulouse is welcome, but we need someone with a good command of the French language. This will be needed to serve local customers.

ELC Europe 2010 sessions announced

List of sessions and speakers at ELC Europe in Cambridge, UK

Cambridge, UKBeing a member of the organization committee of the Embedded Linux Conference Europe, I get access to fresh news about this yearly conference. The call for presentations is now over and we have just announced the list of sessions.

Note that this list is not the final one yet. Some speakers haven’t confirmed their participation or haven’t sent their biographies yet. There are also two or three speakers added at the last minute who are not listed yet.

The conference will happen in Cambridge, UK, on October 27-28, 2010. Keep an eye on the website (or on our blog). Registration should open in a few days from now, and all practical details will be given then.

See also the agenda of the GStreamer conference which will happen at the same location on the day before.

How to find the root device?

How to find which device corresponds to your root filesystem

I recently found something I was looking for for quite a long time. If you use the mount command in Linux, you can see that the root device is not listed like the other mounted filesystems:

/dev/root on / type ext3 (rw)
/dev/mmcblk0p1 on /mmcboot type vfat (rw)
proc on /proc type proc (rw)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /dev type tmpfs (rw,mode=0755)
...

For the / mount point, you are just told that it corresponds to /dev/root, which is not the real device you are looking for.

Of course, you can look at the kernel command line and see on which initial root filesystem Linux was instructed to boot (root parameter):

$ cat /proc/cmdline
mem=512M console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait

However, this doesn’t mean that what you see is the current root device. Many Linux systems boot on intermediate root filesystems (like initramdisks and initramfs), which are just used to access the final one.

I explored the contents of /proc, but didn’t find any file revealing what the root device is.

Fortunately, I eventually found a command to find the root device:

$ rdev
/dev/mmcblk0p2 /

But how does this work? How could we find such information by ourselves? Use the Source, Luke!

When you ask yourself questions like this one, the best is to look at the BusyBox sources which implement this command. These sources are usually simpler than the ones for the same GNU command.

Here is what BusyBox rdev does… It first runs the stat system call on the / directory. Let’s run the stat command that corresponds to it:

$ stat /
  File: `/'
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: b302h/45826d	Inode: 2           Links: 23
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-07-21 22:00:01.000000000 +0200
Modify: 2010-06-13 15:04:37.000000000 +0200
Change: 2010-06-13 15:04:37.000000000 +0200

What’s interesting is the Device field. It means that the device corresponding to / has the major number b3 in hexadecimal (179 in decimal), and minor number 02. Bingo, this corresponds to /dev/mmcblk0p2:

$ ls -l /dev/mmcblk0p2 
brw-rw---- 1 root disk 179, 2 Jan  1  1970 /dev/mmcblk0p2

Therefore, what BusyBox rdev does is walk through /dev and its subdirectories to find a device file matching the major and minor numbers.

This is not a completely generic solution though. On some very simple embedded systems, you don’t even need to create device files for all existing devices. In particular, the device file for the root filesystem doesn’t have to exist. In such a case, rdev wouldn’t be able to find the root device.

A more generic solution could be to walk through /sys/block which enumerates all the block devices present on a system (even if not all of them have an entry in /dev/. This would allow to find the device with the matching major and minor numbers:

$ cat /sys/block/mmcblk0/mmcblk0p1/dev
179:1

Through this example, you can see how useful it can be to study the sources of system commands to understand how the system works. BusyBox sources, implementing simplified versions of GNU utilities, make this even easier.

Ubuntu 10.04 on the IGEPv2 board

Installing Ubuntu 10.04 on the IGEPv2 board. Using the board as a small server.

IGEPv2 boardLast year, folks at Texas Instruments told me about the IGEP v2 board. This board is similar to the Beagle board, but also features 512 MB of RAM and NAND flash (instead of 256 for the Beagle), on board Ethernet (RJ45), Wi-Fi and Bluetooth, all this for only 145 €! Its fast ARM CPU (TI OMAP 3530 running at 720 MHz) and graphical capabilities allow it to be used in for services usually performed by desktop or server CPUs.

At the Bootlin main office, we needed a server to share files, create backups and upload these backups to our servers on the Internet. I decided to use the Ubuntu 10.04 distribution on ARM, based on Debian GNU/Linux. As I didn’t find all the details I needed on the IGEP community website, here are the steps that I took. Several details were found on the http://labs.igep.es/index.php/How_to_get_the_Ubuntu_distribution page though.

This page assumes that you are familiar with building the Linux kernel, controlling an embedded board from a serial line and booting it, and using the GNU/Linux system in general (see the training materials from our embedded Linux course). Beginners may be lost because we don’t give all the details, but more experienced developers should just find the board specific details that they need.

First, get an SD card (at least 2 GB), and prepare its partitions with the mkcard.sh utility.

To compile your kernel, get a CodeSourcery toolchain for ARM. I used the 2010q1 release. Install it in /usr/local/CodeSourcery/arm-2010q1/ (for example)

Get the kernel sources:

$ mkdir $HOME/igep
$ cd $HOME/igep
$ git clone git://git.igep.es/pub/scm/linux-omap-2.6.git
$ cd linux-omap-2.6/

Let’s switch to the latest stable version:

$ git tag
v2.6.28.10-3
v2.6.28.10-igep0020b-0
v2.6.28.10-igep0020b-1
v2.6.28.10-igep0020b-2
v2.6.33.2-0
v2.6.33.4-0
$ git checkout -b v2.6.33.4-0 v2.6.33.4-0
Checking out files: 100% (13116/13116), done.
Switched to a new branch 'v2.6.33.4-0'

Now, set the environment variables for cross-compiling the kernel sources to the arm architecture:

$ export PATH=/usr/local/CodeSourcery/arm-2010q1/bin:$PATH
$ export ARCH=arm
$ export CROSS_COMPILE=arm-none-linux-gnueabi-

Now, take the default configuration for the board and build your kernel:

$ make help | grep igep
$ make igep0020_defconfig
$ make -j 4
$ make uImage

It’s time to build your Ubuntu filesystem, using the Rootstock utility:

$ tar zxvf rootstock-0.1.99.3.tar.gz
$ cd rootstock-0.1.99.3
$ sudo ./rootstock --fqdn igepv2 --login mike --password letmein \
  --imagesize 2G --seed build-essential,openssh-server --dist lucid

Copy the kernel to the first partition of your SD card:

cp arch/arm/boot/uImage /media/boot/
cp .config /media/boot/config-2.6.33.4

Install the root filesystem on the second partition of your SD card:

$ cd /media/rootfs/
$ sudo tar zxvf $HOME/igep/rootstock-0.1.99.3/armel-rootfs-201006102239.tgz

Configure the rootfs to let you log in on the serial console (ttyS2 with OMAP). Do this by copying etc/init/tty1.conf to etc/init/ttyS2.conf and replacing tty1 by ttyS2 in this file.

Install kernel modules manually for the first time:

$ mkdir -p /lib/modules
$ cd $HOME/igep/linux-omap-2.6/
$ make INSTALL_MOD_PATH=/media/rootfs modules_install

In the Rootstock version I tested, the specified user didn’t get created (bug report). To be able to log in, I had to disable the root password by removing the first * character in the root entry in etc/shadow:

We are now ready to boot our new system. First, unmount your SD card partitions:

$ sudo umount /media/boot
$ sudo umount /media/rootfs

Insert your SD card in the slot on your board, connect your serial cable and in the U-boot prompt on the serial line, configure the kernel boot parameters:

$ setenv bootargs mem=512M console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait
$ setenv bootcmd 'mmc init 0 ; fatload mmc 0 80000000 uImage ; bootm 80000000'
$ setenv autostart yes
$ saveenv
$boot

You should see your Linux kernel boot and get to a login shell. Log in as root with no password.

It is now time for the final tweaks. First, create a non root user (remember the Rootstock bug), allow it to run the sudo command, and choose a root password too:

adduser mike
adduser mike sudo
passwd

Let’s cope with a last Rootstock bug. Add the updates and security repositories to /etc/apt/sources.list:

deb http://ports.ubuntu.com/ubuntu-ports lucid-updates main
deb http://ports.ubuntu.com/ubuntu-ports lucid-security main

Without this, you would miss package updates and security releases, and your packages would never change!

If you use the IGEP board as a server as I do, you may need your server to have a fixed MAC address. The trouble is the e2prom storing the MAC address is not populated by default, and every time you boot, the kernel gives you a random MAC address.

The easiest fix I found was to choose an arbitrary MAC address (you can take the first random one that you get), and force it in /etc/network/interfaces:

auto eth0
iface eth0 inet dhcp
hwaddress ether 00:01:04:1b:2C:1F

As the IGEPv2 board doesn’t have a battery by default, it won’t be able to keep the correct time. You can use the ntp daemon to address this:

sudo apt-get install ntp

Your configuration should now be complete. You can now use your IGEPv2 board as a tiny, ultra low power server with Ubuntu server. All the rest is ordinary Debian / Ubuntu server administration. Of course, you can also install desktop packages and use your board as a desktop replacement (you may need to add kernel command line settings for graphics). Have fun!

By the way, the IGEPv2 board is not the best solution if you all you need is a server. The amazing graphical capabilities of the OMAP chip would just be useless. For a server, better, cheaper and more powerful alternatives are the SheevaPlug and GuruPlug. Don’t miss these very nice devices!

Embedded Linux Opportunities – Keynote in Eindhoven

Fontys UniversityIf you live near Eindhoven in the Netherlands, or if you can easily get there, you may be interested in the seminar organized by Fontys University on June 25, 2010.

I will be in Eindhoven on that week to give our Embedded Linux System Development course. The session is organized by Fontys University and Alten PTS, and Fontys invited me to give a keynote at their seminar on Friday.

The seminar topic is: “Embedded Linux for SMEs” – A guide to professional development:

  • Ruud Ermers (Fontys) – A Guide to professional development
  • Gerben Blom (Alten PTS) – Android for SMEs
  • Michael Opdenacker (Bootlin) – Embedded Linux Opportunities. Ideas and advise for the Open Minded.
  • The grand race, between arm9 controlled vehicles.
  • Technical demos

Here is the abstract for my speech:

Michael Opdenacker created Bootlin in 2004, a company that is best known worldwide for the technical resources it shares with the embedded Linux community. The more this company shares (in the true sense of sharing: giving and receiving), the more successful it gets.

That’s why Michael will come to exchange ideas and experience on building successful embeddded Linux systems and businesses. Just make sure you send him a SIGSTOP signal at the end of his timeslot.

To water your mouth, this talk will show a few things which are possible with embedded Linux and free software building blocks. You will see how you can turn an idea into something that could keep you busy during your whole life if you are not careful.

So, if you are in the Eindhoven area, this could be a nice opportunity to meet. I hope to see you there!

Issues with changing Ethernet device names

Beagle boardNo eth0 interface in your system!

If you are using Ubuntu or Debian on ARM, as I am doing at the moment, you may be surprised to see that your system has an eth1 interface (or even eth5), but no eth0!.

This also happens on x86, of course, and probably with other distributions. I faced and understood this problem when I migrated a KVM virtual machine from a regular network interface card to a virtio one. eth0 was gone, and because my network settings were bound to this interface, I couldn’t connect to my virtual machine anymore.

In recent releases of Ubuntu, this happens because of some udev rules, which try to make sure that each network card always gets bound to the same ethx device. So, every time the system see a new network card, the /etc/udev/rules.d/70-persistent-net.rules file gets updated as follows:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x14e4:0x167a (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:8b:87:52:12", ATTR{type}=="1",
KERNEL=="eth*", NAME="eth0"

# USB device 0x:0x (asix)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:00:eb:eb:26", ATTR{type}=="1", KERNEL=="eth*",  NAME="eth1"

This can happen if you replace a USB to Ethernet dongle by another one with a different MAC address, or if you reuse a filesystem built on another board. Even if the board and Ethernet device are the same, you will get eth1 instead of eth0. This can be annoying if you configured your network through /etc/network/interfaces or if you bring up your network with your own scripts.

A clean solution for this problem is simply to remove the /etc/udev/rules.d/70-persistent-net.rules file. The next time you boot, you will get back to a normal eth0 network device.

I checked that these persistent net naming rules are not part of udev releases. In other distributions, you could have udev without such rules.