Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'd like to get into Ubuntu systems programming; to be specific - developing and debugging device drivers. However, I'm not sure about how to get started, even though I have prior experience contributing to other open source projects.

I have considerable skill/experience programming in Python(but thats going to be useless here, I guess), moderate C programming skills, good debugging skills(only user-mode programs though), decent static reversing skills(more of a hobby) and have gone through a short(but really enjoyable) kernel module programming tutorial here.

There are a few questions I'd like to ask.

  1. Any particular advice you would like to give me(something you had to learn the hard way). An abstract question, yes.
  2. I have been an Ubuntu user for a long time, but I'm not sure where I can start helping out. Given my specific interests in device drivers, any suggestions?
  3. Suggested reading material? I'm currently reading "Linux System programming - talking to the kernel and C library".
  4. Suggested reading material related to device driver debugging?


share|improve this question
probably belongs to because what you ask seems more related to linux kernel development than specially ubuntu development – Cédric Julien Jan 27 '12 at 14:17
Done - please view the question in SO here,… , thanks for your time. – uki Jan 27 '12 at 14:39
up vote 6 down vote accepted
  1. Well, as a kernel engineer, I've found in general the best lessons I learned were the hard ones. Where I was challenged to dig deep and find new and creative ways to debug an issue or solve a particular sticking point. The motivation for sticking with that really came from my invested interest in a particular sub-system. If you're not committed to seeing things through then just stop now, it's all hard, it's the intensity of the war stories that vary :).

  2. You can best help out in an area you're motivated to sustain the effort. Ask yourself how close you want to get to the HW and continue from there. For example there's a lot less applied OS concepts in general device driver development vs greater resource management issues like memory management, IO writeback, process scheduling. Device drivers after all are about banging the firmware to get what you want and then adhering to the interface for that subsystem, there are so many comparable works that it makes it relatively easy to get started there. The drawback is, you're working with HW, which is always a net drag on development.

  3. That's a userspace book, you won't need that anymore :-p. The kernel is a service driven framework, understanding the whole user/kernel interface to begin with isn't going to be very useful if you dive right into the driver development for example, as you'll be quite insulated from userspace. The Linux Device Drivers 3rd edition is freely available and is a great reference.

  4. See link below. Though most importantly, just start somewhere and hang on. It's supposed to be hard, test your patience, and commitment. Since you don't really know what you're interested in, it's the lessons learned from these skirmishes that will shape your future engagements. If you can't even do that, then kernel hacking isn't for you.

I would advise that you find a mentor that will challenge you and be there for you while you come up to speed. I haven't tried this myself, but this project might be a good start for you:

I also suggest you become familiar with the kernel trace frameworks out there like ftrace, perf, and systemtap.

Good Luck!

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.