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
Ciro Santilli d0c90d4d87 Remove kernel -I include from userland example to prevent conflicting declaration errors
Before this commit building against kernel v5.10.236 (latest under v5.10 which
is the latest minor the README claims to work) was failing with errors such as:

```
cc -O2 -fomit-frame-pointer -Wall -I/home/ciro/bak/git/linux-kernel-module-cheat/submodules/ldd3/../../data/linux/v5.10/include    mapper.c   -o mapper
In file included from /usr/include/stdlib.h:514,
                 from mapper.c:27:
/usr/include/x86_64-linux-gnu/sys/types.h:42:18: error: conflicting types for ‘loff_t’; have ‘__loff_t’ {aka ‘long int’}
   42 | typedef __loff_t loff_t;
      |                  ^~~~~~
In file included from /home/ciro/bak/git/linux-kernel-module-cheat/submodules/ldd3/../../data/linux/v5.10/include/linux/limits.h:6,
                 from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38,
                 from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161,
                 from /usr/include/limits.h:195,
                 from /usr/lib/gcc/x86_64-linux-gnu/14/include/limits.h:210,
                 from /usr/lib/gcc/x86_64-linux-gnu/14/include/syslimits.h:7,
                 from /usr/lib/gcc/x86_64-linux-gnu/14/include/limits.h:34,
                 from mapper.c:26:
/home/ciro/bak/git/linux-kernel-module-cheat/submodules/ldd3/../../data/linux/v5.10/include/linux/types.h:46:33: note: previous declaration of ‘loff_t’ with type ‘loff_t’ {aka ‘long long int’}
   46 | typedef __kernel_loff_t         loff_t;
      |                                 ^~~~~~
```

because the build was adding the built kernel's include directory to the
build of userland programs, which leads to multiple incompatible
definitions of certain types.

I don't think this is ever the correct thing to do, the C standard library
should be insulated and work on any kernel new enough on the correct arch.

Removing the include it makes the build work tested on Ubuntu 24.10 GCC 14.2.0.
2025-04-28 08:54:27 -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 Fix unused variable ‘txq’ on snull 2025-04-28 06:59:12 -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