Linux.com

Home News Embedded / Mobile Mobile Linux So You Want to Be an Embedded Linux Developer

So You Want to Be an Embedded Linux Developer

Android smartphones and tablets represent only the most visible part of a larger embedded Linux ecosystem that extends throughout industries like consumer electronics, telecom, manufacturing, and transportation. As device requirements call for more intelligence and networking savvy, Linux has become the oft-hidden secret sauce in everything from set-top boxes to home automation systems to rugged field handhelds.

It's not surprising then that embedded Linux developers continue to be in high demand. But just who are these people, what skills do they need, and how do they spend their days? Are they primarily programmers writing to hardware targets or are they mechanical and electrical engineers who know some coding?

Justin WatersThe good news for developers who want to check out embedded is that software is increasingly running the show. With multi-faceted system-on-chips (SoCs) running today's gadgets, "most of the deep EE issues have been abstracted away in digital circuits," says Justin Waters, Manager, Embedded Development at Timesys, which offers its LinuxLink development platform. "The remaining issues are much more software-oriented."

Still, most embedded applications require someone with deep understanding of hardware design. In addition, many projects demand knowledge of hardware tools like soldering irons, oscilloscopes, target debuggers, and logic and network analyzers.

"It's often said that software dominates the embedded world these days, but that varies considerably according to the project and industry," says Rick Lehrbaum, a consultant and publisher of the DeviceGuru blog. Lehrbaum co-founded AmPro, now part of Adlink, and is known as the chief developer of the PC/104 embedded board form-factor.

The Job Description

Rick Lehrbaum

"Embedded development" encompasses a wide range of potential jobs, from hardware design to firmware development to COTS-based system development. Arguably, Android app programming could be included, although it often has more in common with general software development.

Developing firmware requires especially demanding skills, says Lehrbaum. "Firmware developers need to understand lower-level hardware function control," he says. "At the same time, they need to know issues like user interface design and system reliability."

Firmware developers, who often work hand in hand with hardware engineers, need a thorough knowledge of the Linux kernel and components, and possibly Android expertise as well. They also need to know at least one processor architecture. In consumer electronics, this is typically ARM, but in other areas, especially networking and industrial, x86 is far more prevalent, along with MIPS or PowerPC. Increasingly, developers are asked to optimize code for multi-core processors, which in turn demands a deeper understanding of multitasking.

Most embedded development jobs require an understanding of hardware design, prototyping, compiling, debugging and testing tools. It is also important to be able to write interfaces to multiple peripherals, including serial busses, timers, generators, DACs, and display devices. Your dreams will be filled with device drivers.

Projects based on off-the-shelf COTS hardware, using embedded module form-factors such as PC/104, COM Express, and QSeven, generally require less time and expertise than custom hardware projects. Using larger carrier-board formats with real-world ports like Mini-ITX reduces the learning curve even further.

"For COTS developers, the effort consists mostly of software development," says Lehrbaum. "But there's still the need for some knowledge of mechanical engineering, such as packaging, as well as electronic design, including custom I/O interface development."

COTS developers are facing new challenges as modules move from x86 to ARM. "The transition to ARM is a big challenge and opportunity," says Lehrbaum. "Most ARM chips are highly customized, whereas x86 is more of a well-defined system."

Team Players

Embedded projects tend to be more diverse in scope than server- or desktop-oriented projects. In consumer electronics in particular, there is a continuing churn of new platforms, applications, components, processors, peripherals, and features, any of which can trip up the others.

"The biggest challenge is the sheer size of the market," says Waters. "There are so many different architectures, operating systems, and component vendors, that it's impossible for any one person to master it all. The embedded world is so heterogeneous that it's very difficult for somebody to find a niche."

Due to the variety of hats required, embedded development is usually performed in teams, with different members playing specialized roles, says Lehrbaum. In addition, different industries and device targets often demand specific knowledge.

"Embedded development is all about the target device," says Lehrbaum. "Environmental factors and standards vary greatly depending on the industry." For example, one needs to know about SAE for automotive applications, MIL-STD for military systems, and HIPAA for medical devices, he adds.

Despite the need for specialization, all the developers need at least a basic understanding of all development facets. Even mobile app developers using a higher-level Android framework, for example, need a grounding in power management, sensors, telephony, storage, and security. For mobile devices, power management consumes a lot of development time.

Troubleshooting: Diggers Wanted

The wide variety of components, skills, and tasks required in embedded development can be maddening, but this can also make it more compelling than standard software development. In addition, many developers like the sense of fulfillment they get from a finished device.

Your satisfaction may vary, however, if you become easily bored or frustrated with debugging and testing, which always seems to take longer with embedded. Many developers relish the forensic challenge of hunting down and squashing obscure bugs while many others simply endure it as a necessary evil.

"Embedded troubleshooting often means interacting with the system at the chip-, interface-, and protocol levels," says Lehrbaum. "Developers need to understand the hardware enough to build fail-safe code and control the system so it doesn't violate parameters."

According to Waters, embedded debugging is the largest missing skillset among entry-level developers. "Most college coursework focuses on software development using a full-fledged debugger, but with all of the moving parts of a low-level system, these tools aren't terribly useful," he says. "A developer needs to truly understand how the pieces interact and come up with specialized ways to find the source of an issue. It's important to be able to 'think around' difficult problems and function outside of a traditional debugging environment."

This heuristic, trial-and-error process tends to self-select for a particular embedded hacker temperament. "The most successful embedded developers I know are what I call 'diggers'," says Waters. "They have the patience to dig in to a difficult problem and get down to the basics of what could be going wrong; they have the desire to peel away the abstractions. By contrast, for a higher-level programmer, this can be a distraction -- it's often helpful for them to ignore the implementation."

Open Source Challenges and Benefits

logo trainingDue to the crazy-quilt nature of open source and distributed resources, embedded Linux development tends to be more complex compared to a proprietary OS. Yet, open source more than pays for that complexity in other ways, say Waters and Lehrbaum.

"The wealth of sample open source code for all types of devices is invaluable," says Waters. "It allows developers to leverage existing code with minimal changes. There's also a large focus on portability and standardized interfaces."

The open source community is another great asset. "Chances are, you aren't the only one having the same problem," says Waters. "Unless you're on the bleeding edge, there's a good chance the issue has already been fixed."

To get more information on what it takes to be a Linux developer, check out the Linux Foundation's Linux training site

 

5 signs you might like embedded development:

- You're a software developer with a deep knowledge of hardware design.
- You like working on a team.
- Building devices gives you a sense of accomplishment. 
- You have the patience to dig into difficult problems to get to the root cause.
- You like the challenge of juggling a wide variety of components, skills and tasks.

 

 

Comments

Subscribe to Comments Feed
  • Jefro Said:

    Excellent discussion of the many issues surrounding embedded Linux development. There are also some newer attempts to mature the development process, particularly the Yocto Project (http://yoctoproject.org), a Linux Foundation workgroup/lab with over 200 contributors, which builds on and co-maintains portions of code with OpenEmbedded.

  • Sample job descriptiions Said:

    Good discussion on the Linux development!! These platform has wide number of jobs!! This is an open sources so it has many benefits!! Sample job descriptions

  • Robert Berger Said:

    @Eric: What I like most about embedded is that a software mistake does not end up just in a "blue screen of death" or a "core dump", but things might explode. I've even see car engines jumping out of cars. So you might be a bit more careful about writing your code than writing "just for the desktop" - the Linuxfoundation offers trainings! @Jefro: Of course whoever does not use Yocto for Embedded work nowadays might certainly want to have a look into it. Regards, Robert

  • Alexandre Mulatinho Said:

    It is nice to see some articles like that, as a unix developer I want to know how to get more involved with linux kernel and embedded designs, thanks for your time to explain a little more about that :)

  • dashesy Said:

    A very interesting article, although I think it is getting harder to define what embedded means. It used to refer to small micro controllers with LEDs for debugging, now may refer to a SoC with 1GHz processor or more, that can be debugged in Eclipse via JTag very easily. However low level understanding of the hardware and critical thinking in digging bugs are more important than tools, especially in the early stages of a design when JTags may not work yet.

  • catherinalucy@gmail.com Said:

    Linux is one of the most booming subject in the IT industry.Once we got trained on this ,Our future will be bright. http://www.resumeformat.org/

  • Prathyaksh Said:

    Hi All, I am very much interested in learning Linux from scratch but I am not finding any good institutes which offers the required skills in India. So is there any online learning's and certifications which i can start from. Or please suggest me books to start my career in this field. Any suggestions on this is much appreciated.Thanks!!

  • shyni Said:

    sir i want to become a linux embedded system developer programmer. i completed msc electronics(embedded systems). please sir tel me which course i join and what books are reffer from basic please sir tel me

  • Sangeetha Said:

    sir i completed M.s.c Electronics embedded systems in 2013 year. my aim is i want to get job in linux embedded systems programmer.buy i have no minimum knowledge about linux. befor 1 month i joined in linux device driver embedded systems course but i did't get it .iam hard worker . my aim is i want to be a good linux programmer please sir which skills are needed and which topics/subject are needed for this job please sir tel me. i have no outer knowledge. iam coming from village background and middle class family.i want to be in higher stage. please sir how can i reach please any one help

Upcoming Linux Foundation Courses

  1. LFS426 Linux Performance Tuning
    21 Apr » 24 Apr - Virtual
    Details
  2. LFS520 OpenStack Cloud Architecture and Deployment
    05 May » 09 May - Virtual
    Details
  3. LFD320 Linux Kernel Internals and Debugging
    12 May » 16 May - Virtual
    Details

View All Upcoming Courses

Become an Individual Member
Check out the Friday Funnies

Sign Up For the Linux.com Newsletter


Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board