Learning Linux Embedded programming

Vishwas Rao
Hi all,

I am new to Linux space, I have 3+ years of experience in embedded firmware
development. I want to learn and develop embedded systems in Linux
environment. Can anyone guide me a suitable board to start off. Also if
there are any starters materials , it will be really helpful. A lecture,
tutorial links for familiarizing kernal space n all. 


The unit that you will get the most support here is the mini2440 and using
the Pengutronix BSP.  You might get some support for the other product as
there are some expert users around.

Depends on what you want to learn.  With about 7 years experience on the
ATMEL ATmega series I found using GPIO and SPI a steep learning curve on
the mini2440 with Linux.  I ended up using Adafruit USB add-on boards for
all the peripheral stuff as it was an easy fall-back option!

From a support point of view and if you wanted to get into all the fancy
media stuff I would suggest looking at the Odroid C1.

Download one of the Pengutronix mini2440 BSP versions, a new one just came
out, and read through the QuickStart guide.

eLinux, Beaglebone Black and the RaspberryPi sites have lots of


lots of useful reviews on this site

Vishwas Rao
Thanks Dave ,

My intention is to first understand and then to learn developing own BSP,
for that first I need to get familiarize with the environment. My intention
is to get understand basics, suggest any more boards if available.  I will
go through the Odroid C1 which you suggested. 

I need to know info about, what cross compiler to use, I had previously
used Visual DSP for my firmware development through JTAg on Blackfin
In similar lines how will it be for these boards Odroid C1 or mini 2440 in
Linux black box?

With the mini2440 some of the early tutorials were based on Code Sourcery
toolchains.  Of course there is the GCC variant that has been put together
by FriendlyArm.  ARM-GCC has good support and is FREE.  Specific cross
compiler variants usually are provided by the product manufacturer as part
of the package. 

One issue with the mini2440 is that as far as I am aware many of the
patches floating around never got into the mainline kernel. Have a look at
the patch set in the Pengutronix mini2440 BSP to get an idea of what is
required for the mini2440.

Be aware that there has been a major change in the way hardware is handled
in Linux.  Up until a few years ago many ARM variants were not included in
the Linux mainline, as it was a support nightmare. You need hardware that
is going to be supported, unless you have the skills to change/maintain

The (current) solution to that is the device tree.  Personally, I would be
looking for good community and device tree support. Although the Nano PC is
similar to many of the Odroid product I do not know if it has device tree

If you plan to work at the lower levels (DSP/hardware) maybe the BeagleBone
Black is a better choice.

I haven't kept in touch with current ARM dev boards for the last year, so
all of the above is just my limited understanding, ie my 2 cents worth!

Vishwas Rao
Yea, Thanks Dave.

I will make a study and come to a decision. 
1 more question , when we use this BSP can we edit in the kernal space , I
mean to learn can I play around in the Kernal Space. I don't want just to
use the User space, I need to understand Kernal space , how to re write the
device driver on my own. 
I hope you got my question, I just don't want to use some functions and
make the peripheral or application work , I need to understand how to make
a particular peripheral work via the driver function.

Pengutronix BSP?  Yes, you can write kernel modules.  I managed, with some
help, to get a SPI kernel module working ... to the test stage.

But, as mentioned previously it was quite a mission compared with the ATMEL
ATmega series.

There is another useful document on their site. Something like "How to
become a PTXdist Guru".  It will tell you more about the capabilities of
their BSP.

Before going with the Pengutronix BSP you need to know if it is going to
support all mini2440 variants.


I don't know the current status.  You also have to be careful which display
you get.

My two cents worth:

- USe some form of Linux distribution on your day to day computer.
- Choose a hardware platform with an active community
- Things have got considerably easier regarding toolchains : Buildroot,
Pengutronix, Yocto. 
- Perservere: it is a big forest with lots of trees. But it gets easier and
easier and you will learn to love it. 

Good luck and enjoy the journey