- C 91.1%
- Shell 5.5%
- Makefile 3.4%
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.
|
||
|---|---|---|
| include | ||
| lddbus | ||
| misc-modules | ||
| misc-progs | ||
| pci | ||
| sbull | ||
| scull | ||
| scull-shared | ||
| scullc | ||
| sculld | ||
| scullp | ||
| scullv | ||
| short | ||
| shortprint | ||
| simple | ||
| skull | ||
| snull | ||
| tty | ||
| usb | ||
| .cproject | ||
| .gitignore | ||
| .project | ||
| init | ||
| LICENSE | ||
| Makefile | ||
| README.Debian | ||
| README.md | ||
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