Writing Your First Linux Device Driver - Part 1


Details
You've always been fascinated by operating systems and kernels. You've downloaded the Linux kernel source, and built your own kernel. Maybe you've experimented with tweaking a kernel configuration for your own needs.
Now you're looking forward to that next step: fixing a bug in a kernel device driver, or writing a new one from scratch.
If the above describes you, then this workshop series is for you! This first installment will cover:
- What is a "device"/"IP block", and what is a kernel "device driver"?
- How do modern computers integrate devices? Memory-mapped I/O, clock and power control
- The basics of the Linux device model: probing and removing devices, sysfs
- Probing devices - Device Tree, ACPI, and dynamically-probe-able bus
- Basics of the Linux kernel C API: how it differs from userspace glibc
- Creating your skeleton driver in the kernel directory tree
- Integrating your driver with the kernel build system Kbuild
- Building and test-booting your skeleton driver
We'll be using the ARM-based BeagleBone Black as our development platform:
http://beagleboard.org/Products/BeagleBone%20Black
It's the best-documented hobbyist board in its price point
on the market. You're strongly encouraged to bring one to hack on!
However, the techniques described in this workshop will be useful for any CPU architecture - x86, ARM, MIPS, you name it - and any development board - Raspberry Pi, Minnowboard Max, etc. So if you have some other development platform, please feel free to bring it.
Prerequisites (or, what we won't cover this time):
- That you're running Linux on your development computer
- That you've downloaded a copy of the Linux kernel source and built it
- That you've experimented with the Linux kernel configuration
system already (e.g., 'make menuconfig') - That you've written some C code before - doesn't have to be kernel
code; could be userspace code
That said, all are welcome.
Part 2 of this workshop (to be scheduled for a later date) will start
with the skeleton driver created in part one, and actually start
interacting with the device.
NOTE: Our Hackerspace Internet connection is slow. So we recommend
that you do the following before coming to the workshop:
-
Download a copy of the Linux kernel source from https://www.kernel.org/
-
Download and install an ARM cross-compiler toolchain - for example, from the one provided with your Linux distribution, or have downloaded one from Linaro, like this one:
http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz -
Download the AM3359 Technical Reference Manual PDF from TI via this link:
http://www.ti.com/lit/pdf/spruh73
Instructor: Paul Walmsley
Workshop cost: FREE for Solid State Depot members, or $5-$20 (sliding scale) for non-members.

Writing Your First Linux Device Driver - Part 1