Linux Device Drivers 3 examples updated to work in recent kernels http://examples.oreilly.com/9780596005900/
  • C 91.1%
  • Shell 5.5%
  • Makefile 3.4%
Find a file
Yu-An Chen 522fb1da4f snull: free a pending in-flight priv->skb on teardown
priv->skb holds the tx skb between snull_tx() handing it off and the
matching SNULL_TX_INTR being processed. Normally that window closes
synchronously within the same snull_hw_tx() call, so it never
survives until teardown.

But when the lockup simulation fires, snull_hw_tx() deliberately
skips calling snull_interrupt() and just stops the queue instead.
priv->skb is left pending, to be freed later by the interrupt that
snull_tx_timeout() fires once the watchdog trips. If snull_cleanup()
(rmmod) runs in that window, before the watchdog has fired, nothing
ever frees priv->skb and it leaks permanently.

This is only safe now that snull_regular_interrupt() guards its
dev_kfree_skb(priv->skb) call and zeroes the pointer afterward.
Without that fix priv->skb would be a dangling non-NULL pointer left
over from the last processed TX_INTR, and this would double-free on
every normal teardown.
2026-08-27 11:54:18 -06:00
include proc_ops_version: wrapper for newer kernels (>=5.6) 2020-08-29 19:00:44 -06:00
lddbus Fix static BUS_ATTR_RO(version); first arg is now const 2025-04-28 07:01:28 -06:00
misc-modules Use correct arguments for insmod in module_load 2025-04-27 14:03:42 -06:00
misc-progs Remove kernel -I include from userland example to prevent conflicting declaration errors 2025-04-28 08:54:27 -06:00
pci make clean for built-in.a 2020-12-01 13:32:48 -07:00
sbull port for kernel 5.10 2020-12-01 13:32:48 -07:00
scull Turn all the DEBUG off. 2020-12-01 13:32:48 -07:00
scull-shared Additional 5.0 kernel fixes 2019-09-28 16:10:43 -06:00
scullc make clean for built-in.a 2020-12-01 13:32:48 -07:00
sculld fix compilation error on gcc7.5 2021-03-20 10:31:23 -06:00
scullp fix compilation error on gcc7.5 2021-03-20 10:31:23 -06:00
scullv fix compilation error on gcc7.5 2021-03-20 10:31:23 -06:00
short Handle ioremap error in short example 2025-04-27 14:01:41 -06:00
shortprint Support Linux kernel 5.9 2020-11-27 11:52:58 -07:00
simple fix compilation error on gcc7.5 2021-03-20 10:31:23 -06:00
skull Linux Device Drivers 3 examples 2010-11-27 07:49:17 +01:00
snull snull: free a pending in-flight priv->skb on teardown 2026-08-27 11:54:18 -06:00
tty tiny_tty: cleanup so module can be loaded & rm'd 2022-05-13 17:23:41 -06:00
usb make clean for built-in.a 2020-12-01 13:32:48 -07:00
.cproject Add eclipse cdt support 2019-09-28 14:14:01 -06:00
.gitignore Merge remote-tracking branch 'ldd3/master' into aesd-f20 2020-08-29 18:25:15 -06:00
.project Add eclipse cdt support 2019-09-28 14:14:01 -06:00
init Added init script 2020-04-18 01:36:45 +02:00
LICENSE Linux Device Drivers 3 examples 2010-11-27 07:49:17 +01:00
Makefile Fixes for builds on 5.4 kernels 2020-08-31 23:22:57 -06:00
README.Debian Proposial of README.Debian file that explains Debian users how to build 2013-12-07 15:46:22 +04:00
README.md Update README.md 2021-07-17 18:02:43 -06:00

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