1 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 */ 12 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 439

