
    Index of Documentation for People Interested in Writing and/or

                   Understanding the Linux Kernel.

          Juan-Mariano de Goyeneche <jmseyas@dit.upm.es>

/*
 * The latest version of this document may be found at:
 *   http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html
 */

   The need for a document like this one became apparent in the
   linux-kernel mailing list as the same questions, asking for pointers
   to information, appeared again and again.
   
   Fortunately, as more and more people get to GNU/Linux, more and more
   get interested in the Kernel. But reading the sources is not always
   enough. It is easy to understand the code, but miss the concepts, the
   philosophy and design decisions behind this code.
   
   Unfortunately, not many documents are available for beginners to
   start. And, even if they exist, there was no "well-known" place which
   kept track of them. These lines try to cover this lack. All documents
   available on line known by the author are listed, while some reference
   books are also mentioned.
   
   PLEASE, if you know any paper not listed here or write a new document,
   send me an e-mail, and I'll include a reference to it here. Any
   corrections, ideas or comments are also welcomed.
   
   The papers that follow are listed in no particular order. All are
   cataloged with the following fields: the document's "Title", the
   "Author"/s, the "URL" where they can be found, some "Keywords" helpful
   when searching for specific topics, and a brief "Description" of the
   Document.
   
   Enjoy!
   
     ON-LINE DOCS:
       
     * Title: "Linux Device Drivers, Third Edition"
       Author: Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
       URL: http://lwn.net/Kernel/LDD3/
       Description: A 600-page book covering the (2.6.10) driver
       programming API and kernel hacking in general.  Available under the
       Creative Commons Attribution-ShareAlike 2.0 license.

     * Title: "The Linux Kernel"
       Author: David A. Rusling.
       URL: http://www.tldp.org/LDP/tlk/tlk.html
       Keywords: everything!, book.
       Description: On line, 200 pages book describing most aspects of
       the Linux Kernel. Probably, the first reference for beginners.
       Lots of illustrations explaining data structures use and
       relationships in the purest Richard W. Stevens' style. Contents:
       "1.-Hardware Basics, 2.-Software Basics, 3.-Memory Management,
       4.-Processes, 5.-Interprocess Communication Mechanisms, 6.-PCI,
       7.-Interrupts and Interrupt Handling, 8.-Device Drivers, 9.-The
       File system, 10.-Networks, 11.-Kernel Mechanisms, 12.-Modules,
       13.-The Linux Kernel Sources, A.-Linux Data Structures, B.-The
       Alpha AXP Processor, C.-Useful Web and FTP Sites, D.-The GNU
       General Public License, Glossary". In short: a must have.

     * Title: "Linux Device Drivers, 2nd Edition"
       Author: Alessandro Rubini and Jonathan Corbet.
       URL: http://www.xml.com/ldd/chapter/book/index.html
       Keywords: device drivers, modules, debugging, memory, hardware,
       interrupt handling, char drivers, block drivers, kmod, mmap, DMA,
       buses.
       Description: O'Reilly's popular book, now also on-line under the
       GNU Free Documentation License.
       Notes: You can also buy it in paper-form from O'Reilly. See below
       under BOOKS (Not on-line).

     * Title: "Conceptual Architecture of the Linux Kernel"
       Author: Ivan T. Bowman.
       URL: http://plg.uwaterloo.ca/
       Keywords: conceptual software architecture, extracted design,
       reverse engineering, system structure.
       Description: Conceptual software architecture of the Linux kernel,
       automatically extracted from the source code. Very detailed. Good
       figures. Gives good overall kernel understanding.

     * Title: "Concrete Architecture of the Linux Kernel"
       Author: Ivan T. Bowman, Saheem Siddiqi, and Meyer C. Tanuan.
       URL: http://plg.uwaterloo.ca/
       Keywords: concrete architecture, extracted design, reverse
       engineering, system structure, dependencies.
       Description: Concrete architecture of the Linux kernel,
       automatically extracted from the source code. Very detailed. Good
       figures. Gives good overall kernel understanding. This papers
       focus on lower details than its predecessor (files, variables...).

     * Title: "Linux as a Case Study: Its Extracted Software
       Architecture"
       Author: Ivan T. Bowman, Richard C. Holt and Neil V. Brewster.
       URL: http://plg.uwaterloo.ca/
       Keywords: software architecture, architecture recovery,
       redocumentation.
       Description: Paper appeared at ICSE'99, Los Angeles, May 16-22,
       1999. A mixture of the previous two documents from the same
       author.

     * Title: "Overview of the Virtual File System"
       Author: Richard Gooch.
       URL: http://www.mjmwired.net/kernel/Documentation/filesystems/vfs.txt
       Keywords: VFS, File System, mounting filesystems, opening files,
       dentries, dcache.
       Description: Brief introduction to the Linux Virtual File System.
       What is it, how it works, operations taken when opening a file or
       mounting a file system and description of important data
       structures explaining the purpose of each of their entries.

     * Title: "The Linux RAID-1, 4, 5 Code"
       Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza.
       URL: http://www.linuxjournal.com/article.php?sid=2391
       Keywords: RAID, MD driver.
       Description: Linux Journal Kernel Korner article. Here is its
       abstract: "A description of the implementation of the RAID-1,
       RAID-4 and RAID-5 personalities of the MD device driver in the
       Linux kernel, providing users with high performance and reliable,
       secondary-storage capability using software".

     * Title: "Dynamic Kernels: Modularized Device Drivers"
       Author: Alessandro Rubini.
       URL: http://www.linuxjournal.com/article.php?sid=1219
       Keywords: device driver, module, loading/unloading modules,
       allocating resources.
       Description: Linux Journal Kernel Korner article. Here is its
       abstract: "This is the first of a series of four articles
       co-authored by Alessandro Rubini and Georg Zezchwitz which present
       a practical approach to writing Linux device drivers as kernel
       loadable modules. This installment presents an introduction to the
       topic, preparing the reader to understand next month's
       installment".

     * Title: "Dynamic Kernels: Discovery"
       Author: Alessandro Rubini.
       URL: http://www.linuxjournal.com/article.php?sid=1220
       Keywords: character driver, init_module, clean_up module,
       autodetection, mayor number, minor number, file operations,
       open(), close().
       Description: Linux Journal Kernel Korner article. Here is its
       abstract: "This article, the second of four, introduces part of
       the actual code to create custom module implementing a character
       device driver. It describes the code for module initialization and
       cleanup, as well as the open() and close() system calls".

     * Title: "The Devil's in the Details"
       Author: Georg v. Zezschwitz and Alessandro Rubini.
       URL: http://www.linuxjournal.com/article.php?sid=1221
       Keywords: read(), write(), select(), ioctl(), blocking/non
       blocking mode, interrupt handler.
       Description: Linux Journal Kernel Korner article. Here is its
       abstract: "This article, the third of four on writing character
       device drivers, introduces concepts of reading, writing, and using
       ioctl-calls".

     * Title: "Dissecting Interrupts and Browsing DMA"
       Author: Alessandro Rubini and Georg v. Zezschwitz.
       URL: http://www.linuxjournal.com/article.php?sid=1222
       Keywords: interrupts, irqs, DMA, bottom halves, task queues.
       Description: Linux Journal Kernel Korner article. Here is its
       abstract: "This is the fourth in a series of articles about
       writing character device drivers as loadable kernel modules. This
       month, we further investigate the field of interrupt handling.
       Though it is conceptually simple, practical limitations and
       constraints make this an ``interesting'' part of device driver
       writing, and several different facilities have been provided for
       different situations. We also investigate the complex topic of
       DMA".

     * Title: "Device Drivers Concluded"
       Author: Georg v. Zezschwitz.
       URL: http://www.linuxjournal.com/article.php?sid=1287
       Keywords: address spaces, pages, pagination, page management,
       demand loading, swapping, memory protection, memory mapping, mmap,
       virtual memory areas (VMAs), vremap, PCI.
       Description: Finally, the above turned out into a five articles
       series. This latest one's introduction reads: "This is the last of
       five articles about character device drivers. In this final
       section, Georg deals with memory mapping devices, beginning with
       an overall description of the Linux memory management concepts".

     * Title: "Network Buffers And Memory Management"
       Author: Alan Cox.
       URL: http://www.linuxjournal.com/article.php?sid=1312
       Keywords: sk_buffs, network devices, protocol/link layer
       variables, network devices flags, transmit, receive,
       configuration, multicast.
       Description: Linux Journal Kernel Korner. Here is the abstract:
       "Writing a network device driver for Linux is fundamentally
       simple---most of the complexity (other than talking to the
       hardware) involves managing network packets in memory".
       
     * Title: "Writing Linux Device Drivers"
       Author: Michael K. Johnson.
       URL: http://users.evitech.fi/~tk/rtos/writing_linux_device_d.html
       Keywords: files, VFS, file operations, kernel interface, character
       vs block devices, I/O access, hardware interrupts, DMA, access to
       user memory, memory allocation, timers.
       Description: Introductory 50-minutes (sic) tutorial on writing
       device drivers. 12 pages written by the same author of the "Kernel
       Hackers' Guide" which give a very good overview of the topic.
       
     * Title: "The Venus kernel interface"
       Author: Peter J. Braam.
       URL:
       http://www.coda.cs.cmu.edu/doc/html/kernel-venus-protocol.html
       Keywords: coda, filesystem, venus, cache manager.
       Description: "This document describes the communication between
       Venus and kernel level file system code needed for the operation
       of the Coda filesystem. This version document is meant to describe
       the current interface (version 1.0) as well as improvements we
       envisage".

     * Title: "Programming PCI-Devices under Linux"
       Author: Claus Schroeter.
       URL:
       ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/pcip.ps.gz
       Keywords: PCI, device, busmastering.
       Description: 6 pages tutorial on PCI programming under Linux.
       Gives the basic concepts on the architecture of the PCI subsystem,
       as long as basic functions and macros to read/write the devices
       and perform busmastering.

     * Title: "Writing Character Device Driver for Linux"
       Author: R. Baruch and C. Schroeter.
       URL:
       ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers.ps.gz
       Keywords: character device drivers, I/O, signals, DMA, accessing
       ports in user space, kernel environment.
       Description: 68 pages paper on writing character drivers. A little
       bit old (1.993, 1.994) although still useful.

     * Title: "Design and Implementation of the Second Extended
       Filesystem"
       Author: Rémy Card, Theodore Ts'o, Stephen Tweedie.
       URL: http://web.mit.edu/tytso/www/linux/ext2intro.html
       Keywords: ext2, linux fs history, inode, directory, link, devices,
       VFS, physical structure, performance, benchmarks, ext2fs library,
       ext2fs tools, e2fsck.
       Description: Paper written by three of the top ext2 hackers.
       Covers Linux filesystems history, ext2 motivation, ext2 features,
       design, physical structure on disk, performance, benchmarks,
       e2fsck's passes description... A must read!
       Notes: This paper was first published in the Proceedings of the
       First Dutch International Symposium on Linux, ISBN 90-367-0385-9.

     * Title: "Analysis of the Ext2fs structure"
       Author: Louis-Dominique Dubeau.
       URL: http://www.nondot.org/sabre/os/files/FileSystems/ext2fs/
       Keywords: ext2, filesystem, ext2fs.
       Description: Description of ext2's blocks, directories, inodes,
       bitmaps, invariants...

     * Title: "Journaling the Linux ext2fs Filesystem"
       Author: Stephen C. Tweedie.
       URL:
       ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/journal-design.ps.gz
       Keywords: ext3, journaling.
       Description: Excellent 8-pages paper explaining the journaling
       capabilities added to ext2 by the author, showing different
       problems faced and the alternatives chosen.

     * Title: "Kernel API changes from 2.0 to 2.2"
       Author: Richard Gooch.
       URL:
       http://www.linuxhq.com/guides/LKMPG/node28.html 
       Keywords: 2.2, changes.
       Description: Kernel functions/structures/variables which changed
       from 2.0.x to 2.2.x.

     * Title: "Kernel API changes from 2.2 to 2.4"
       Author: Richard Gooch.
       Keywords: 2.4, changes.
       Description: Kernel functions/structures/variables which changed
       from 2.2.x to 2.4.x.
       
     * Title: "Linux Kernel Module Programming Guide"
       Author: Ori Pomerantz.
       URL: http://tldp.org/LDP/lkmpg/2.6/html/index.html
       Keywords: modules, GPL book, /proc, ioctls, system calls,
       interrupt handlers .
       Description: Very nice 92 pages GPL book on the topic of modules
       programming. Lots of examples.
       
     * Title: "I/O Event Handling Under Linux"
       Author: Richard Gooch.
       Keywords: IO, I/O, select(2), poll(2), FDs, aio_read(2), readiness
       event queues.
       Description: From the Introduction: "I/O Event handling is about
       how your Operating System allows you to manage a large number of
       open files (file descriptors in UNIX/POSIX, or FDs) in your
       application. You want the OS to notify you when FDs become active
       (have data ready to be read or are ready for writing). Ideally you
       want a mechanism that is scalable. This means a large number of
       inactive FDs cost very little in memory and CPU time to manage".
       
     * Title: "The Kernel Hacking HOWTO"
       Author: Various Talented People, and Rusty.
       Location: in kernel tree, Documentation/DocBook/kernel-hacking.tmpl
       (must be built as "make {htmldocs | psdocs | pdfdocs})
       Keywords: HOWTO, kernel contexts, deadlock, locking, modules,
       symbols, return conventions.
       Description: From the Introduction: "Please understand that I
       never wanted to write this document, being grossly underqualified,
       but I always wanted to read it, and this was the only way. I
       simply explain some best practices, and give reading entry-points
       into the kernel sources. I avoid implementation details: that's
       what the code is for, and I ignore whole tracts of useful
       routines. This document assumes familiarity with C, and an
       understanding of what the kernel is, and how it is used. It was
       originally written for the 2.3 kernels, but nearly all of it
       applies to 2.2 too; 2.0 is slightly different".
       
     * Title: "Writing an ALSA Driver"
       Author: Takashi Iwai <tiwai@suse.de>
       URL: http://www.alsa-project.org/~iwai/writing-an-alsa-driver/index.html
       Keywords: ALSA, sound, soundcard, driver, lowlevel, hardware.
       Description: Advanced Linux Sound Architecture for developers,
       both at kernel and user-level sides. ALSA is the Linux kernel
       sound architecture in the 2.6 kernel version.
       
     * Title: "Programming Guide for Linux USB Device Drivers"
       Author: Detlef Fliegl.
       URL: http://usb.in.tum.de/usbdoc/
       Keywords: USB, universal serial bus.
       Description: A must-read. From the Preface: "This document should
       give detailed information about the current state of the USB
       subsystem and its API for USB device drivers. The first section
       will deal with the basics of USB devices. You will learn about
       different types of devices and their properties. Going into detail
       you will see how USB devices communicate on the bus. The second
       section gives an overview of the Linux USB subsystem [2] and the
       device driver framework. Then the API and its data structures will
       be explained step by step. The last section of this document
       contains a reference of all API calls and their return codes".
       Notes: Beware: the main page states: "This document may not be
       published, printed or used in excerpts without explicit permission
       of the author". Fortunately, it may still be read...

     * Title: "Linux Kernel Mailing List Glossary"
       Author: various
       URL: http://kernelnewbies.org/glossary/
       Keywords: glossary, terms, linux-kernel.
       Description: From the introduction: "This glossary is intended as
       a brief description of some of the acronyms and terms you may hear
       during discussion of the Linux kernel".
       
     * Title: "Linux Kernel Locking HOWTO"
       Author: Various Talented People, and Rusty.
       Location: in kernel tree, Documentation/DocBook/kernel-locking.tmpl
       (must be built as "make {htmldocs | psdocs | pdfdocs})
       Keywords: locks, locking, spinlock, semaphore, atomic, race
       condition, bottom halves, tasklets, softirqs.
       Description: The title says it all: document describing the
       locking system in the Linux Kernel either in uniprocessor or SMP
       systems.
       Notes: "It was originally written for the later (>2.3.47) 2.3
       kernels, but most of it applies to 2.2 too; 2.0 is slightly
       different". Freely redistributable under the conditions of the GNU
       General Public License.

     * Title: "Global spinlock list and usage"
       Author: Rick Lindsley.
       URL: http://lse.sourceforge.net/lockhier/global-spin-lock
       Keywords: spinlock.
       Description: This is an attempt to document both the existence and
       usage of the spinlocks in the Linux 2.4.5 kernel. Comprehensive
       list of spinlocks showing when they are used, which functions
       access them, how each lock is acquired, under what conditions it
       is held, whether interrupts can occur or not while it is held...

     * Title: "Porting Linux 2.0 Drivers To Linux 2.2: Changes and New
       Features "
       Author: Alan Cox.
       URL: http://www.linux-mag.com/1999-05/gear_01.html
       Keywords: ports, porting.
       Description: Article from Linux Magazine on porting from 2.0 to
       2.2 kernels.

     * Title: "Porting Device Drivers To Linux 2.2: part II"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/238 
       Keywords: ports, porting.
       Description: Second part on porting from 2.0 to 2.2 kernels.

     * Title: "How To Make Sure Your Driver Will Work On The Power
       Macintosh"
       Author: Paul Mackerras.
       URL: http://www.linux-mag.com/id/261
       Keywords: Mac, Power Macintosh, porting, drivers, compatibility.
       Description: The title says it all.

     * Title: "An Introduction to SCSI Drivers"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/284
       Keywords: SCSI, device, driver.
       Description: The title says it all.

     * Title: "Advanced SCSI Drivers And Other Tales"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/307
       Keywords: SCSI, device, driver, advanced.
       Description: The title says it all.

     * Title: "Writing Linux Mouse Drivers"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/330
       Keywords: mouse, driver, gpm.
       Description: The title says it all.

     * Title: "More on Mouse Drivers"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/356
       Keywords: mouse, driver, gpm, races, asynchronous I/O.
       Description: The title still says it all.

     * Title: "Writing Video4linux Radio Driver"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/381
       Keywords: video4linux, driver, radio, radio devices.
       Description: The title says it all.

     * Title: "Video4linux Drivers, Part 1: Video-Capture Device"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/406
       Keywords: video4linux, driver, video capture, capture devices,
       camera driver.
       Description: The title says it all.

     * Title: "Video4linux Drivers, Part 2: Video-capture Devices"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/429
       Keywords: video4linux, driver, video capture, capture devices,
       camera driver, control, query capabilities, capability, facility.
       Description: The title says it all.

     * Title: "PCI Management in Linux 2.2"
       Author: Alan Cox.
       URL: http://www.linux-mag.com/id/452
       Keywords: PCI, bus, bus-mastering.
       Description: The title says it all.

     * Title: "Linux 2.4 Kernel Internals"
       Author: Tigran Aivazian and Christoph Hellwig.
       URL: http://www.moses.uklinux.net/patches/lki.html
       Keywords: Linux, kernel, booting, SMB boot, VFS, page cache.
       Description: A little book used for a short training course.
       Covers building the kernel image, booting (including SMP bootup),
       process management, VFS and more.

     * Title: "Linux IP Networking. A Guide to the Implementation and
       Modification of the Linux Protocol Stack."
       Author: Glenn Herrin.
       URL: http://www.cs.unh.edu/cnrg/gherrin
       Keywords: network, networking, protocol, IP, UDP, TCP, connection,
       socket, receiving, transmitting, forwarding, routing, packets,
       modules, /proc, sk_buff, FIB, tags.
       Description: Excellent paper devoted to the Linux IP Networking,
       explaining anything from the kernel's to the user space
       configuration tools' code. Very good to get a general overview of
       the kernel networking implementation and understand all steps
       packets follow from the time they are received at the network
       device till they are delivered to applications. The studied kernel
       code is from 2.2.14 version. Provides code for a working packet
       dropper example.
       
     * Title: "Get those boards talking under Linux."
       Author: Alex Ivchenko.
       URL: http://www.edn.com/article/CA46968.html
       Keywords: data-acquisition boards, drivers, modules, interrupts,
       memory allocation.
       Description: Article written for people wishing to make their data
       acquisition boards work on their GNU/Linux machines. Gives a basic
       overview on writing drivers, from the naming of functions to
       interrupt handling.
       Notes: Two-parts article. Part II is at
       URL: http://www.edn.com/article/CA46998.html
       
     * Title: "Linux PCMCIA Programmer's Guide"
       Author: David Hinds.
       URL: http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-PROG.html
       Keywords: PCMCIA.
       Description: "This document describes how to write kernel device
       drivers for the Linux PCMCIA Card Services interface. It also
       describes how to write user-mode utilities for communicating with
       Card Services.

     * Title: "The Linux Kernel NFSD Implementation"
       Author: Neil Brown.
       URL:
       http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/nfsd.html
       Keywords: knfsd, nfsd, NFS, RPC, lockd, mountd, statd.
       Description: The title says it all.
       Notes: Covers knfsd's version 1.4.7 (patch against 2.2.7 kernel).
       
     * Title: "A Linux vm README"
       Author: Kanoj Sarcar.
       URL: http://kos.enix.org/pub/linux-vmm.html
       Keywords: virtual memory, mm, pgd, vma, page, page flags, page
       cache, swap cache, kswapd.
       Description: Telegraphic, short descriptions and definitions
       relating the Linux virtual memory implementation.
       
     * Title: "(nearly) Complete Linux Loadable Kernel Modules. The
       definitive guide for hackers, virus coders and system
       administrators."
       Author: pragmatic/THC.
       URL: http://packetstormsecurity.org/docs/hack/LKM_HACKING.html
       Keywords: syscalls, intercept, hide, abuse, symbol table.
       Description: Interesting paper on how to abuse the Linux kernel in
       order to intercept and modify syscalls, make
       files/directories/processes invisible, become root, hijack ttys,
       write kernel modules based virus... and solutions for admins to
       avoid all those abuses.
       Notes: For 2.0.x kernels. Gives guidances to port it to 2.2.x
       kernels.
       
     BOOKS: (Not on-line)
   
     * Title: "Linux Device Drivers"
       Author: Alessandro Rubini.
       Publisher: O'Reilly & Associates.
       Date: 1998.
       Pages: 439.
       ISBN: 1-56592-292-1
       
     * Title: "Linux Device Drivers, 2nd Edition"
       Author: Alessandro Rubini and Jonathan Corbet.
       Publisher: O'Reilly & Associates.
       Date: 2001.
       Pages: 586.
       ISBN: 0-59600-008-1
       Notes: Further information in
       http://www.oreilly.com/catalog/linuxdrive2/

     * Title: "Linux Device Drivers, 3rd Edition"
       Authors: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
       Publisher: O'Reilly & Associates.
       Date: 2005.
       Pages: 636.
       ISBN: 0-596-00590-3
       Notes: Further information in
       http://www.oreilly.com/catalog/linuxdrive3/
       PDF format, URL: http://lwn.net/Kernel/LDD3/

     * Title: "Linux Kernel Internals"
       Author: Michael Beck.
       Publisher: Addison-Wesley.
       Date: 1997.
       ISBN: 0-201-33143-8 (second edition)
       
     * Title: "The Design of the UNIX Operating System"
       Author: Maurice J. Bach.
       Publisher: Prentice Hall.
       Date: 1986.
       Pages: 471.
       ISBN: 0-13-201757-1
       
     * Title: "The Design and Implementation of the 4.3 BSD UNIX
       Operating System"
       Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J.
       Karels, John S. Quarterman.
       Publisher: Addison-Wesley.
       Date: 1989 (reprinted with corrections on October, 1990).
       ISBN: 0-201-06196-1
       
     * Title: "The Design and Implementation of the 4.4 BSD UNIX
       Operating System"
       Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels,
       John S. Quarterman.
       Publisher: Addison-Wesley.
       Date: 1996.
       ISBN: 0-201-54979-4
       
     * Title: "Programmation Linux 2.0 API systeme et fonctionnement du
       noyau"
       Author: Remy Card, Eric Dumas, Franck Mevel.
       Publisher: Eyrolles.
       Date: 1997.
       Pages: 520.
       ISBN: 2-212-08932-5
       Notes: French.

     * Title: "Unix internals -- the new frontiers"
       Author: Uresh Vahalia.
       Publisher: Prentice Hall.
       Date: 1996.
       Pages: 600.
       ISBN: 0-13-101908-2

     * Title: "Programming for the real world - POSIX.4"
       Author: Bill O. Gallmeister.
       Publisher: O'Reilly & Associates, Inc..
       Date: 1995.
       Pages: ???.
       ISBN: I-56592-074-0
       Notes: Though not being directly about Linux, Linux aims to be
       POSIX. Good reference.

     * Title:  "UNIX  Systems  for  Modern Architectures: Symmetric
       Multiprocessing and Caching for Kernel Programmers"
       Author: Curt Schimmel.
       Publisher: Addison Wesley.
       Date: June, 1994.
       Pages: 432.
       ISBN: 0-201-63338-8

     MISCELLANEOUS:

     * Name: linux/Documentation
       Author: Many.
       URL: Just look inside your kernel sources.
       Keywords: anything, DocBook.
       Description: Documentation that comes with the kernel sources,
       inside the Documentation directory. Some pages from this document
       (including this document itself) have been moved there, and might
       be more up to date than the web version.

     * Name: "Linux Kernel Source Reference"
       Author: Thomas Graichen.
       URL: http://marc.info/?l=linux-kernel&m=96446640102205&w=4
       Keywords: CVS, web, cvsweb, browsing source code.
       Description: Web interface to a CVS server with the kernel
       sources. "Here you can have a look at any file of the Linux kernel
       sources of any version starting from 1.0 up to the (daily updated)
       current version available. Also you can check the differences
       between two versions of a file".

     * Name: "Cross-Referencing Linux"
       URL: http://lxr.linux.no/source/
       Keywords: Browsing source code.
       Description: Another web-based Linux kernel source code browser.
       Lots of cross references to variables and functions. You can see
       where they are defined and where they are used.

     * Name: "Linux Weekly News"
       URL: http://lwn.net
       Keywords: latest kernel news.
       Description: The title says it all. There's a fixed kernel section
       summarizing developers' work, bug fixes, new features and versions
       produced during the week. Published every Thursday.

     * Name: "Kernel Traffic"
       URL: http://kt.earth.li/kernel-traffic/index.html
       Keywords: linux-kernel mailing list, weekly kernel news.
       Description: Weekly newsletter covering the most relevant
       discussions of the linux-kernel mailing list.

     * Name: "CuTTiNG.eDGe.LiNuX"
       URL: http://edge.kernelnotes.org
       Keywords: changelist.
       Description: Site which provides the changelist for every kernel
       release. What's new, what's better, what's changed. Myrdraal reads
       the patches and describes them. Pointers to the patches are there,
       too.

     * Name: "New linux-kernel Mailing List FAQ"
       URL: http://www.tux.org/lkml/
       Keywords: linux-kernel mailing list FAQ.
       Description: linux-kernel is a mailing list for developers to
       communicate. This FAQ builds on the previous linux-kernel mailing
       list FAQ maintained by Frohwalt Egerer, who no longer maintains
       it. Read it to see how to join the mailing list. Dozens of
       interesting questions regarding the list, Linux, developers (who
       is ...?), terms (what is...?) are answered here too. Just read it.

     * Name: "Linux Virtual File System"
       Author: Peter J. Braam.
       URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs/
       Keywords: slides, VFS, inode, superblock, dentry, dcache.
       Description: Set of slides, presumably from a presentation on the
       Linux VFS layer. Covers version 2.1.x, with dentries and the
       dcache.

     * Name: "Gary's Encyclopedia - The Linux Kernel"
       Author: Gary (I suppose...).
       URL: http://slencyclopedia.berlios.de/index.html
       Keywords: linux, community, everything!
       Description: Gary's Encyclopedia exists to allow the rapid finding
       of documentation and other information of interest to GNU/Linux
       users. It has about 4000 links to external pages in 150 major
       categories. This link is for kernel-specific links, documents,
       sites...  This list is now hosted by developer.Berlios.de,
       but seems not to have been updated since sometime in 1999.

     * Name: "The home page of Linux-MM"
       Author: The Linux-MM team.
       URL: http://linux-mm.org/
       Keywords: memory management, Linux-MM, mm patches, TODO, docs,
       mailing list.
       Description: Site devoted to Linux Memory Management development.
       Memory related patches, HOWTOs, links, mm developers... Don't miss
       it if you are interested in memory management development!

     * Name: "Kernel Newbies IRC Channel"
       URL: http://www.kernelnewbies.org
       Keywords: IRC, newbies, channel, asking doubts.
       Description: #kernelnewbies on irc.openprojects.net. From the web
       page: "#kernelnewbies is an IRC network dedicated to the 'newbie'
       kernel hacker. The audience mostly consists of people who are
       learning about the kernel, working on kernel projects or
       professional kernel hackers that want to help less seasoned kernel
       people. [...] #kernelnewbies is on the Open Projects IRC Network,
       try irc.openprojects.net or irc.<country>.openprojects.net as your
       server and then /join #kernelnewbies". It also hosts articles,
       documents, FAQs...
       
     * Name: "linux-kernel mailing list archives and search engines"
       URL: http://vger.kernel.org/vger-lists.html
       URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html
       URL: http://marc.theaimsgroup.com/?l=linux-kernel
       URL: http://groups.google.com/group/mlist.linux.kernel
       URL: http://www.cs.helsinki.fi/linux/linux-kernel/
       URL: http://www.lib.uaa.alaska.edu/linux-kernel/
       Keywords: linux-kernel, archives, search.
       Description: Some of the linux-kernel mailing list archivers. If
       you have a better/another one, please let me know.
     _________________________________________________________________
   
   Document last updated on Sat 2005-NOV-19
