Import 2.3.99pre3-7
[davej-history.git] / Documentation / kernel-docs.txt
blob8f76009c5eba1fc13fde70c84325cd20da1242b8
2        Index of Documentation for People Interested in Writing and/or
3                                       
4                       Understanding the Linux Kernel.
5                                       
6               Juan-Mariano de Goyeneche < jmseyas@dit.upm.es>
7                                       
8 /*
9  * The latest version of this document may be found at:
10  *   http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html
11  */
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.
16    
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.
21    
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.
27    
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.
31    
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
36    Document.
37    
38    Enjoy!
39    
40      ON-LINE DOCS:
41        
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.
57        
58      * Title: "The Linux Kernel Hackers' Guide"
59        Author: Michael K.Johnson and others.
60        URL: http://khg.redhat.com/HyperNews/get/khg.html
61        Keywords: everything!
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.
68        
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.
77        
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...).
87        
88      * Title: "Linux as a Case Study: Its Extracted Software
89        Architecture"
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,
93        redocumentation.
94        Description: Paper appeared at ICSE'99, Los Angeles, May 16-22,
95        1999. A mixture of the previous two documents from the same
96        author.
97        
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,
102        dentries,
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.
107        
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".
117        
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
129        installment".
130        
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,
135        autodetection,
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".
142        
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
151        ioctl-calls".
152        
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
165        DMA".
166        
167      * Title: "Network Buffers And Memory Management"
168        Author: Alan Cox.
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".
177        
178      * Title: "An Introduction to the Linux 1.3.x Networking Code"
179        Author: Vipul Gupta.
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
185        bit outdated.
186        
187      * Title: "Linux ioctl() Primer"
188        Author: Vipul Gupta.
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
193        towards sockets.
194        
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.
204        
205      * Title: "The Venus kernel interface"
206        Author: Peter J. Braam.
207        URL:
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
214        envisage".
215        
216      * Title: "Programming PCI-Devices under Linux"
217        Author: Claus Schroeter.
218        URL:
219        ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/pcip.ps
220        .gz
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.
226        
227      * Title: "Writing Character Device Driver for Linux"
228        Author: R. Baruch and C. Schroeter.
229        URL:
230        ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers
231        .ps.gz
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.
236        
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 ...
242        
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 ...
249        
250      * Title: "Kernel API changes from 2.0 to 2.2"
251        Author: Richard Gooch.
252        URL:
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
256        from 2.0.x to 2.2.x.
257        
258      * Title: "Kernel API changes from 2.2 to 2.3"
259        Author: Richard Gooch.
260        URL:
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
264        from 2.2.x to 2.3.x.
265        
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,
270        interrupt handlers .
271        Description: Very nice 92 pages GPL book on the topic of modules
272        programming. Lots of examples.
273        
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).
284        
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
289        event queues.
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".
297        
298      BOOKS: (Not on-line)
299    
300      * Title: "Linux Device Drivers"
301        Author: Alessandro Rubini.
302        Publisher: O'Reilly &Associates.
303        Date: 1998.
304        ISBN: 1-56592-292-1
305        
306      * Title: "Linux Kernel Internals"
307        Author: Michael Beck.
308        Publisher: Addison-Wesley.
309        Date: 1997.
310        ISBN: 0-201-33143-8 (second edition)
311        
312      * Title: "The Design of the UNIX Operating System"
313        Author: Maurice J. Bach.
314        Publisher: Prentice Hall.
315        Date: 1986.
316        Pages: 471.
317        ISBN: 0-13-201757-1
318        
319      * Title: "The Design and Implementation of the 4.3 BSD UNIX
320        Operating System"
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).
325        ISBN: 0-201-06196-1
326        
327      * Title: "The Design and Implementation of the 4.4 BSD UNIX
328        Operating System"
329        Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels,
330        John S. Quarterman.
331        Publisher: Addison-Wesley.
332        Date: 1996.
333        ISBN: 0-201-54979-4
334        
335      * Title: "Programmation Linux 2.0 API systeme et fonctionnement du
336        noyau"
337        Author: Remy Card, Eric Dumas, Franck Mevel.
338        Publisher: Eyrolles.
339        Date: 1997.
340        Pages: 520.
341        ISBN: 2-212-08932-5
342        Notes: French.
343        
344      * Title: "The Linux Kernel Book"
345        Author: Remy Card, Eric Dumas, Franck Mevel.
346        Publisher: John Wiley & Sons.
347        Date: 1998.
348        ISBN: 0-471-98141-9
349        Notes: English translation.
350        
351      * Title: "Linux 2.0"
352        Author: Remy Card, Eric Dumas, Franck Mevel.
353        Publisher: GestiĆ³n 2000.
354        Date: 1997.
355        Pages: 501.
356        ISBN: 8-480-88208-5
357        Notes: Spanish translation.
358        
359      * Title: "Unix internals -- the new frontiers"
360        Author: Uresh Vahalia.
361        Publisher: Prentice Hall.
362        Date: 1996.
363        Pages: 600.
364        ISBN: 0-13-101908-2
365        
366      * Title: "Linux Core Kernel Commentary. Guide to Insider's Knowledge
367        on the Core Kernel od the Linux Code"
368        Author: Scott Maxwell.
369        Publisher: ???.
370        Date: 1999.
371        Pages: 592.
372        ISBN: 1-57610-469-9
373        Notes: CD-ROM included.
374        
375      MISCELLANEOUS:
376    
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)".
387        
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.
394        
395      * Name: Linux Weekly News.
396        URL: http://lwn.net
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.
401        
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.
407        
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,
414        too.
415        
416      * Name: New linux-kernel Mailing List FAQ.
417        URL: Original site:
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.
428        
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
435        dcache.
436      _________________________________________________________________
437    
438    Document last updated on Tue Nov 30 11:20:00 CET 1999