Skip to content

stiangglanda/ldd3

 
 

Repository files navigation

ldd3: Linux Device Drivers 3 examples updated to work with recent kernels

About


Linux Device Drivers 3 (http://lwn.net/Kernel/LDD3/) book is now a few years old and most of the example drivers do not compile in recent kernels.

This project aims to keep LDD3 example drivers up-to-date with recent kernels.

The original code can be found at: http://examples.oreilly.com/9780596005900/

Compiling


The example drivers should compile against latest Linus Torvalds kernel tree:

  • git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git

To compile the drivers against a specific tree (for example Linus tree):

$ git clone git://github.com/martinezjavier/ldd3.git
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ export KERNELDIR=/path/to/linux
$ cd ldd3
$ make

Bugs, comments or patches: See https://github.com/martinezjavier/ldd3/issues

Latest Tested Kernel Builds


The kernel builds below are the versions most recently tested/supported

  • Ubuntu 18.04 kernel as of July 2020: 5.4.0-42-generic
  • Ubuntu 20.04 kernel as of July 2021: 5.4.0-73-generic
  • Yocto poky warrior branch kernel for qemu aarch64 builds: 5.0.19
  • Yocto poky hardknott branch kernel for qemu aarch64 builds: 5.10.46
  • Buildroot 2019.05 kernel for qemu builds: 4.9.16
  • Buildroot 2021.02 kernel for qemu builds: 5.10
  • Alpine 3.13 kernel as of May 2021: 5.10.29-lts, see here for detail.

Eclipse Integration

---------4 Eclipse CDT integration is provided by symlinking the correct linux source directory with the ./linux_source_cdt symlink. The .project and .cproject files were setup using instructions in this link and assuming a symlink is setup in the local project directory to point to relevant kernel headers

This can be done on a system with kernel headers installed using:

ln -s /usr/src/linux-headers-`uname -r`/ linux_source_cdt

modified scull driver

I added the capability to the driver to use an LED for hardware interaction. To make the setup easier, I decided to use one that is already built in, the Caps Lock LED. It can be activated on write and using an ioctl.

Run modified scull driver

  1. navigat to the scull directory
  2. build and insmod
make
sudo insmod scull.ko

Test using ioctl

  1. compile the test programm
gcc ToggleLedTest.c -o ToggleLedTest
  1. everytime you execute it the LED Toggles
./ToggleLedTest

Test with write

echo "blink" > /dev/scull0

This command writes to scull and thus the LED blinks

Clean up

sudo rmmod scull.ko
``

About

Linux Device Drivers 3 examples updated to work in recent kernels

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 91.2%
  • Shell 5.5%
  • Makefile 3.3%