Free Electrons recorded some videos from the Embedded Linux Conference Europe, in Cambrigde, United Kingdom on October 2010 by Chris Simmonds, the founder of 2net Limited, a UK company providing training, consultancy and custom software for Linux and other embedded platforms. The videos can either be downloaded in webm HD format at http://free-electrons.com/blog/elce-2010-tutorial-videos/ or you can watch them in HD format below. The PDF slides for the three parts and the lab notes are available at http://elinux.org/images/c/cc/Linux-quick-start.tar.gz The first video (53 minutes) deals with the following key points: Genesis of a Linux project The four elements: Tool chain; boot loader; kernel; user space Element 1: Tool chain Element 2: Boot loader The second video (1h19m) focuses on: Third element: Kernel Fourth element: User space The last video (1h07m) is more practical as it shows how to use embedded Linux on an NXP LPC3250 Stick (ARM9): Description of the hardware Installing […]
HTTP Server for uCLinux
You may need a web server on your no-MMU embedded system in order to allow remote configuration or possibly provide external access to some files. Usually, you’ll need a lightweight webserver (e.g. not Apache) with the required features and in case of no-mmu system, source that can accommodates uClinux limitations such as no fork support. You’ll also take into account the programming language or the server: e.g. C/C++. Java, Ruby, Perl… If your system does not support Java or Perl for example, that may not be the best solution to add one of those only for the web server and it also depends on the resources (Flash/RAM) available. There are plenty of C/C++ lightweight http servers such as thttpd or lighttpd, however those are using fork in their code. One open source http server that is lightweight and uses vfork (instead of fork) is mathopd. At the time of writing, […]
Linaro: Embedded Linux for ARM
Linaro is a Not For Profit (NFP) engineering organisation that works on Linux based open source software and tools. The organisation focuses on the ARM platform, mainly ARM v7A architecture, for example ARM Cortex-A8 or dual-core Cortex-A9 processors and is sponsored by ARM, Freescale, IBM, Samsung, ST-Ericsson, and Texas Instruments. The purpose of Linaro is to reduce the number of different Linux kernel for the ARM platform. They plan on releasing tools and Linux kernel every 6 months. And after about 6 months of existence, with around 80 engineering staff, they managed to release their first public version: Linaro-10.11 on the 10th of November for TI OMAP4 Panda Board, IGEPv2, Freescale iMX51 and ST-E U8500 platforms. This release is based on Linux 2.6.35 kernel, GCC 4.4 toolchain and uBoot 2010.09. They released Linux 10.11 source code and tools, the hardware packs and the build instructions. Linaro also planned several technical […]
Embedded Software Books
I’m often asked what useful books software engineers should read when they start to work on embedded systems. So here’s a list of books I would recommend as starters. First, nowadays many embedded systems are written in C (although lower end systems using 8-bit MCU are still likely to be written in Assembler), so software engineers had better make themselves very familiar with C/C++ and GNU tools (gcc, libtool. automake…) with a focus on embedded systems (e.g. interrupts handling, real-time capabilities, volatile variables, processes and threads’ stack handling, , cross compilers…). Programming Embedded Systems: With C and GNU Development Tools, 2nd Edition is just the right book for that purpose. It deals with embedded Linux and eCos and provides useful examples. You may also read part of it online Once you start developing embedded systems you are likely to write device drivers at some points. Linux Device Drivers, 3rd Edition […]
uClinux kernel panic: Stack overflow
If you’re using ucLinux, you may get kernel panic errors coming out of nowhere. There may be several reasons (buffer overflow, out of memory..), but the most common is stack overflow for the process or one of the threads. To increase the stack size of a flat binary you’ll need to adjust the LDFLAGS as follows:
1 |
LDFLAGS+=-Wl,-elf2flt="-s65536" |
This will set the stack size to 64KB. To change the stack size of a thread (e.g. 32KB below), you’ll need to set the stack size attribute:
1 2 3 4 5 6 7 |
pthread_attr_init(&attr); err = pthread_attr_setstacksize(&attr, 32*1024); if (err) { printf("pthread_attr_setstacksize returned non-zero: %s\n", strerror(errno)); } err = pthread_create(&pthThread, &attr, thread, NULL); |
How to detect which thread suffers from stack overflow? First, you can check your code for recursive function calls and local variables (especially arrays) both of which will be added at runtime to the stack to estimate what should be the stack size. So if you have large arrays you may use a pointer + a call to malloc instead. If this can not fix […]