Drivers, Kernel Internals, and ARM Assembly

Category: NetBSD Kernel Tags: , , , , , ,

So, I want to be a kernel programmer because the “magic” of how the hardware and software can talk to one another is fascinating. NetBSD is attractive to me to explore this because the code base is done well, the developers are super helpful and friendly, there is a lot of work to do, and there aren’t a million people working on it, so there is a spot for me to provide value.

Why ARM? Because it needs a lot of work, and there are only a couple people currently working in the space right now, with Jared McNeill being the big player right now cranking out driver after driver and support for different boards at an incredible pace. Also, there is an added perk of the hardware is super affordable.

Wanting to do something is 10% of the battle right? I wasn’t born with all this knowledge, so I have to learn it and refresh what I do happen to know.

C Programming

I was rusty and still am a bit on C, so I picked up a few books to refresh my knowledge. The ##c channel on Freenode IRC is super helpful, and using their recommendations at I got these on my Bookshelf:

  • Mastering Algorithms with C: Useful Techniques from Sorting to Encryption
  • C Traps and Pitfalls
  • C Pocket Reference
  • K&R C (2nd edition)

Writing Drivers in NetBSD

I wasn’t sure where to start, so I took any and all recommendations, and resources linked from the NetBSD website. This helped out a lot. I need to go through them again, but at least now I have a rough idea of how things fit together so I can ask the right questions.


I purchased a couple of devices: the CHIP Pro and the NEO Complete Starter Kit which will allow me to hit the ground running for cheap.

Devices are cool, and all, but I have to learn all about ARM, so I got a cool book ARM A32 Assembly Language: 32-Bit ARM, Neon, VFP, Thumb that I’m slowly working my way through. I also found blog posts ARM Architecture Basics and Device Tree Tutorial (ARM) to be helpful.

What’s next?

After I finish consuming educational materials, I will setup emulation environments with qemu and gxemul (see NetBSD emulators page) with cross-compiled kernels and userland utilities. I can then poke around drivers and ARM platform-specific code to see how it is currently setup.

Maybe there is something that doesn’t exist yet in emulation I can begin tinkering with to get to work, but most of the low hanging fruit is likely done.


This is a tinkering hobby, not a job. I just need to keep it in that frame of mind so no matter what I won’t get burnt out. Trying to not drink from the firehose.

I also will try to keep the Links page up-to-date.

Last modified on May 26, 2018.