Ubuntu doesn't do anything special. Your first difficulty is that you don't have the kernel source installed, only kernel headers. The authors are describing a system with a copy of the kernel source in /usr/src/linux-2.x
. If you're only compiling external modules, the headers, which are what you see on your system, are enough. Ubuntu ships kernel headers for that purpose in the linux-headers-*
packages (which you would normally install via the dependency from the linux-headers-generic
metapackage). If you need the whole source, get a compressed archive from the linux-source-2.6
binary package.
Another thing is that the directory structure has changed a little over time; architecture-dependent headers moved from include/asm-$ARCH
to arch/$ARCH/include/asm
. Furthermore the i386
and x86_64
architectures were merged into a unified x86
in 2.6.24. (More details here.) So you now need to look in arch/x86/include
rather than include/asm-i386
.
Here are a few useful resources for Linux kernel hackers:
- Linux Device Drivers (LDD3)
- LWN (news about Linux, including many technical articles about the kernel by one of the authors of LDD)
- LXR to browse and search the kernel source
- LKML (the Linux kernel mailing list), Stack Overflow to ask questions about the kernel and kernel development
And also read this thread on Unix & Linux, which explains how to locate the implementation of an existing syscall.