2 Index of Documentation for People Interested in Writing and/or
4 Understanding the Linux Kernel.
6 Juan-Mariano de Goyeneche < jmseyas@dit.upm.es>
9 * The latest version of this document may be found at:
10 * http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html
13 The need for a document like this one became apparent in the
14 linux-kernel mailing list as the same questions, asking for pointers
15 to information, appeared again and again.
17 Fortunately, as more and more people get to GNU/Linux, more and more
18 get interested in the Kernel. But reading the sources is not always
19 enough. It is easy to understand the code, but miss the concepts, the
20 philosophy and design decisions behind this code.
22 Unfortunately, not many documents are available for beginners to
23 start. And, even if they exist, there was no "well-known" place which
24 kept track of them. These lines try to cover this lack. All documents
25 available on line known by the author are listed, while some reference
26 books are also mentioned.
28 PLEASE, if you know any paper not listed here or write a new document,
29 send me an e-mail, and I'll include a reference to it here. Any
30 corrections, ideas or comments are also welcomed.
32 The papers that follow are listed in no particular order. All are
33 cataloged with the following fields: the document's "Title", the
34 "Author"/s, the "URL" where they can be found, some "Keywords" helpful
35 when searching for specific topics, and a brief "Description" of the
42 * Title: "The Linux Kernel"
43 Author: David A. Rusling.
44 URL: http://sunsite.unc.edu/linux/LDP/tlk/tlk.html
45 Keywords: everything!, book.
46 Description: On line, 200 pages book describing most aspects of
47 the Linux Kernel. Probably, the first reference for beginners.
48 Lots of illustrations explaining data structures use and
49 relationships in the purest Richard W. Stevens' style. Contents:
50 "1.-Hardware Basics, 2.-Software Basics, 3.-Memory Management,
51 4.-Processes, 5.-Interprocess Communication Mechanisms, 6.-PCI,
52 7.-Interrupts and Interrupt Handling, 8.-Device Drivers, 9.-The
53 File system, 10.-Networks, 11.-Kernel Mechanisms, 12.-Modules,
54 13.-The Linux Kernel Sources, A.-Linux Data Structures, B.-The
55 Alpha AXP Processor, C.-Useful Web and FTP Sites, D.-The GNU
56 General Public License, Glossary". In short: a must have.
58 * Title: "The Linux Kernel Hackers' Guide"
59 Author: Michael K.Johnson and others.
60 URL: http://khg.redhat.com/HyperNews/get/khg.html
62 Description: No more Postscript book-like version. Only HTML now.
63 Many people have contributed. The interface is similar to web
64 available mailing lists archives. You can find some articles and
65 then some mails asking questions about them and/or complementing
66 previous contributions. A little bit anarchic in this aspect, but
67 with some valuable information in some cases.
69 * Title: "Conceptual Architecture of the Linux Kernel"
70 Author: Ivan T. Bowman.
71 URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a1.html
72 Keywords: conceptual software arquitecture, extracted design,
73 reverse engineering, system structure.
74 Description: Conceptual software arquitecture of the Linux kernel,
75 automatically extracted from the source code. Very detailed. Good
76 figures. Gives good overall kernel understanding.
78 * Title: "Concrete Architecture of the Linux Kernel"
79 Author: Ivan T. Bowman, Saheem Siddiqi, and Meyer C. Tanuan.
80 URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a2.html
81 Keywords: concrete arquitecture, extracted design, reverse
82 engineering, system structure, dependencies.
83 Description: Concrete arquitecture of the Linux kernel,
84 automatically extracted from the source code. Very detailed. Good
85 figures. Gives good overall kernel understanding. This papers
86 focus on lower details than its predecessor (files, variables...).
88 * Title: "Linux as a Case Study: Its Extracted Software
90 Author: Ivan T. Bowman, Richard C. Holt and Neil V. Brewster.
91 URL: http://plg.uwaterloo.ca/~itbowman/papers/linuxcase.html
92 Keywords: software architecture, architecture recovery,
94 Description: Paper appeared at ICSE'99, Los Angeles, May 16-22,
95 1999. A mixture of the previous two documents from the same
98 * Title: "Overview of the Virtual File System"
99 Author: Richard Gooch.
100 URL: http://www.atnf.csiro.au/~rgooch/linux/vfs.txt
101 Keywords: VFS, File System, mounting filesystems, opening files,
103 dcache. Description: Brief introduction to the Linux Virtual File
104 System. What is it, how it works, operations taken when opening a
105 file or mounting a file system and description of important data
106 structures explaining the purpose of each of their entries.
108 * Title: "The Linux RAID-1, 4, 5 Code"
109 Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza.
110 URL: http://www.ssc.com/lj/issue44/2391.html
111 Keywords: RAID, MD driver.
112 Description: Linux Journal Kernel Korner article. Here is it's
113 abstract: "A description of the implementation of the RAID-1,
114 RAID-4 and RAID-5 personalities of the MD device driver in the
115 Linux kernel, providing users with high performance and reliable,
116 secondary-storage capability using software".
118 * Title: "Dynamic Kernels: Modularized Device Drivers"
119 Author: Alessandro Rubini.
120 URL: http://www.ssc.com/lj/issue23/1219.html
121 Keywords: device driver, module, loading/unloading modules,
122 allocating resources.
123 Description: Linux Journal Kernel Korner article. Here is it's
124 abstract: "This is the first of a series of four articles
125 co-authored by Alessandro Rubini and Georg Zezchwitz which present
126 a practical approach to writing Linux device drivers as kernel
127 loadable modules. This installment presents an introduction to the
128 topic, preparing the reader to understand next month's
131 * Title: "Dynamic Kernels: Discovery"
132 Author: Alessandro Rubini.
133 URL: http://www.ssc.com/lj/issue24/kk24.html
134 Keywords: character driver, init_module, clean_up module,
136 mayor number, minor number, file operations, open(), close().
137 Description: Linux Journal Kernel Korner article. Here is it's
138 abstract: "This article, the second of four, introduces part of
139 the actual code to create custom module implementing a character
140 device driver. It describes the code for module initialization and
141 cleanup, as well as the open() and close() system calls".
143 * Title: "The Devil's in the Details"
144 Author: Georg v. Zezschwitz and Alessandro Rubini.
145 URL: http://www.ssc.com/lj/issue25/kk25.html
146 Keywords: read(), write(), select(), ioctl(), blocking/non
147 blocking mode, interrupt handler.
148 Description: Linux Journal Kernel Korner article. Here is it's
149 abstract: "This article, the third of four on writing character
150 device drivers, introduces concepts of reading, writing, and using
153 * Title: "Dissecting Interrupts and Browsing DMA"
154 Author: Alessandro Rubini and Georg v. Zezschwitz.
155 URL: http://www.ssc.com/lj/issue26/interrupt.html
156 Keywords: interrupts, irqs, DMA, bottom halves, task queues.
157 Description: Linux Journal Kernel Korner article. Here is it's
158 abstract: "This is the fourth in a series of articles about
159 writing character device drivers as loadable kernel modules. This
160 month, we further investigate the field of interrupt handling.
161 Though it is conceptually simple, practical limitations and
162 constraints make this an ``interesting'' part of device driver
163 writing, and several different facilities have been provided for
164 different situations. We also investigate the complex topic of
167 * Title: "Network Buffers And Memory Management"
169 URL: http://www.ssc.com/lj/issue30/kk30.html
170 Keywords: sk_buffs, network devices, protocol/link layer
171 variables, network devices flags, transmit, receive,
172 configuration, multicast.
173 Description: Linux Journal Kernel Korner. Here is the abstract:
174 "Writing a network device driver for Linux is fundamentally
175 simple---most of the complexity (other than talking to the
176 hardware) involves managing network packets in memory".
178 * Title: "An Introduction to the Linux 1.3.x Networking Code"
180 URL: http://anchor.cs.binghamton.edu/courses/cs628/linux-net.html
181 Keywords: files, sk_buffs.
182 Description: A short description of files under the net/
183 directory. Each file has a one or two lines paragraph description.
184 sk_buffs explained, too, with some beautiful pictures. A little
187 * Title: "Linux ioctl() Primer"
189 URL: http://anchor.cs.binghamton.edu/courses/cs628/ioctl.html
190 Keywords: ioctl, socket.
191 Description: Little description and examples on the use and
192 implementation of the ioctl() system call. A little bit biased
195 * Title: "Writing Linux Device Drivers"
196 Author: Michael K. Johnson.
197 URL: http://www.redhat.com/~johnsonm/devices.html
198 Keywords: files, VFS, file operations, kernel interface, character
199 vs block devices, I/O access, hardware interrupts, DMA, access to
200 user memory, memory allocation, timers.
201 Description: Introductory 50-minutes (sic) tutorial on writing
202 device drivers. 12 pages written by the same author of the "Kernel
203 Hackers' Guide" which give a very good overview of the topic.
205 * Title: "The Venus kernel interface"
206 Author: Peter J. Braam.
208 http://www.coda.cs.cmu.edu/doc/html/kernel-venus-protocol.html
209 Keywords: coda, filesystem, venus, cache manager.
210 Description: "This document describes the communication between
211 Venus and kernel level file system code needed for the operation
212 of the Coda filesystem. This version document is meant to describe
213 the current interface (version 1.0) as well as improvements we
216 * Title: "Programming PCI-Devices under Linux"
217 Author: Claus Schroeter.
219 ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/pcip.ps
221 Keywords: PCI, device, busmastering.
222 Description: 6 pages tutorial on PCI programming under Linux.
223 Gives the basic concepts on the architecture of the PCI subsystem,
224 as long as basic functions and macros to read/write the devices
225 and perform busmastering.
227 * Title: "Writing Character Device Driver for Linux"
228 Author: R. Baruch and C. Schroeter.
230 ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers
232 Keywords: character device drivers, I/O, signals, DMA, accesing
233 ports in user space, kernel environment.
234 Description: 68 pages paper on writing character drivers. A little
235 bit old (1.993, 1.994) although still useful.
237 * Title: "The Second Extended Filesystem"
238 Author: Matthew Wilcox.
239 URL: http://pocket.fluff.org/~mrw/linux/ext2.txt
240 Keywords: ext2, filesystem.
241 Description: Description of ext2's blocks, directories, inodes ...
243 * Title: "Analysis of the Ext2fs structure"
244 Author: Louis-Dominique Dubeau.
245 URL: http://step.polymtl.ca/~ldd/ext2fs/ext2fs_toc.html
246 Keywords: ext2, filesystem, ext2fs.
247 Description: Description of ext2's blocks, directories, inodes,
248 bitmaps, invariants ...
250 * Title: "Kernel API changes from 2.0 to 2.2"
251 Author: Richard Gooch.
253 http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html
254 Keywords: 2.2, changes.
255 Description: Kernel functions/structures/variables which changed
258 * Title: "Kernel API changes from 2.2 to 2.3"
259 Author: Richard Gooch.
261 http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html
262 Keywords: 2.3, changes.
263 Description: Kernel functions/structures/variables which changed
266 * Title: "Linux Kernel Module Programming Guide"
267 Author: Ori Pomerantz.
268 URL: http://www.linuxdoc.org/LDP/lkmpg/mpg.html
269 Keywords: modules, GPL book, /proc, ioctls, system calls,
271 Description: Very nice 92 pages GPL book on the topic of modules
272 programming. Lots of examples.
274 * Title: "Device File System (devfs) Overview"
275 Author: Richard Gooch.
276 URL: http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.txt
277 Keywords: filesystem, /dev, devfs, dynamic devices, major/minor
278 allocation, device management.
279 Description: Document describing Richard Gooch's controversial
280 devfs, which allows for dynamic devices, only shows present
281 devices in /dev, gets rid of major/minor numbers allocation
282 problems, and allows for hundreds of identical devices (which some
283 USB systems might demand soon).
285 * Title: "I/O Event Handling Under Linux"
286 Author: Richard Gooch.
287 URL: http://www.atnf.csiro.au/~rgooch/linux/docs/io-events.html
288 Keywords: IO, I/O, select(2), poll(2), FDs, aio_read(2), readiness
290 Description: From the Introduction: "I/O Event handling is about
291 how your Operating System allows you to manage a large number of
292 open files (file descriptors in UNIX/POSIX, or FDs) in your
293 application. You want the OS to notify you when FDs become active
294 (have data ready to be read or are ready for writing). Ideally you
295 want a mechanism that is scalable. This means a large number of
296 inactive FDs cost very little in memory and CPU time to manage".
300 * Title: "Linux Device Drivers"
301 Author: Alessandro Rubini.
302 Publisher: O'Reilly &Associates.
306 * Title: "Linux Kernel Internals"
307 Author: Michael Beck.
308 Publisher: Addison-Wesley.
310 ISBN: 0-201-33143-8 (second edition)
312 * Title: "The Design of the UNIX Operating System"
313 Author: Maurice J. Bach.
314 Publisher: Prentice Hall.
319 * Title: "The Design and Implementation of the 4.3 BSD UNIX
321 Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J.
322 Karels, John S. Quarterman.
323 Publisher: Addison-Wesley.
324 Date: 1989 (reprinted with corrections on October, 1990).
327 * Title: "The Design and Implementation of the 4.4 BSD UNIX
329 Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels,
331 Publisher: Addison-Wesley.
335 * Title: "Programmation Linux 2.0 API systeme et fonctionnement du
337 Author: Remy Card, Eric Dumas, Franck Mevel.
344 * Title: "The Linux Kernel Book"
345 Author: Remy Card, Eric Dumas, Franck Mevel.
346 Publisher: John Wiley & Sons.
349 Notes: English translation.
352 Author: Remy Card, Eric Dumas, Franck Mevel.
353 Publisher: GestiĆ³n 2000.
357 Notes: Spanish translation.
359 * Title: "Unix internals -- the new frontiers"
360 Author: Uresh Vahalia.
361 Publisher: Prentice Hall.
366 * Title: "Linux Core Kernel Commentary. Guide to Insider's Knowledge
367 on the Core Kernel od the Linux Code"
368 Author: Scott Maxwell.
373 Notes: CD-ROM included.
377 * Name: Linux Source Driver.
378 URL: http://lsd.linux.cz
379 Keywords: Browsing source code.
380 Description: "Linux Source Driver (LSD) is an application, which
381 can make browsing source codes of Linux kernel easier than you can
382 imagine. You can select between multiple versions of kernel (e.g.
383 0.01, 1.0.0, 2.0.33, 2.0.34pre13, 2.0.0, 2.1.101 etc.). With LSD
384 you can search Linux kernel (fulltext, macros, types, functions
385 and variables) and LSD can generate patches for you on the fly
386 (files, directories or kernel)".
388 * Name: Cross-Referencing Linux.
389 URL: http://lxr.linux.no/source/
390 Keywords: Browsing source code.
391 Description: Another web-based Linux kernel source code browser.
392 Lots of cross references to variables and functions. You can see
393 where they are defined and where they are used.
395 * Name: Linux Weekly News.
397 Keywords: latest kernel news.
398 Description: The title says it all. There's a fixed kernel section
399 summarizing developers' work, bug fixes, new features and versions
400 produced during the week. Published every Thursday.
402 * Name: Kernel Traffic.
403 URL: http://kt.linuxcare.com
404 Keywords: linux-kernel mailing list, weekly kernel news.
405 Description: Weekly newsletter covering the most relevant
406 discussions of the linux-kernel mailing list.
408 * Name: CuTTiNG.eDGe.LiNuX.
409 URL: http://edge.kernelnotes.org
410 Keywords: changelist.
411 Description: Site which provides the changelist for every kernel
412 release. What's new, what's better, what's changed. Myrdraal reads
413 the patches and describes them. Pointers to the patches are there,
416 * Name: New linux-kernel Mailing List FAQ.
418 http://www.altern.org/andrebalsa/doc/lkml-faq.html
419 URL: U.S. mirror site:
420 http://www.ececs.uc.edu/~rreilova/linux/lkml-faq.html
421 Keywords: linux-kernel mailing list FAQ.
422 Description: linux-kernel is a mailing list for developers to
423 communicate. This FAQ builds on the previous linux-kernel mailing
424 list FAQ maintained by Frohwalt Egerer, who no longer maintains
425 it. Read it to see how to join the mailing list. Dozens of
426 interesting questions regarding the list, Linux, developers (who
427 is ...?), terms (what is...?) are answered here too. Just read it.
429 * Name: "Linux Virtual File System"
430 Author: Peter J. Braam.
431 URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs
432 Keywords: slides, VFS, inode, superblock, dentry, dcache.
433 Description: Set of slides, presumably from a presentation on the
434 Linux VFS layer. Covers version 2.1.x, with dentries and the
436 _________________________________________________________________
438 Document last updated on Tue Nov 30 11:20:00 CET 1999