1.. _kernel_docs: 2 3Index of Documentation for People Interested in Writing and/or Understanding the Linux Kernel 4============================================================================================= 5 6 Juan-Mariano de Goyeneche <jmseyas@dit.upm.es> 7 8The need for a document like this one became apparent in the 9linux-kernel mailing list as the same questions, asking for pointers 10to information, appeared again and again. 11 12Fortunately, as more and more people get to GNU/Linux, more and more 13get interested in the Kernel. But reading the sources is not always 14enough. It is easy to understand the code, but miss the concepts, the 15philosophy and design decisions behind this code. 16 17Unfortunately, not many documents are available for beginners to 18start. And, even if they exist, there was no "well-known" place which 19kept track of them. These lines try to cover this lack. All documents 20available on line known by the author are listed, while some reference 21books are also mentioned. 22 23PLEASE, if you know any paper not listed here or write a new document, 24send me an e-mail, and I'll include a reference to it here. Any 25corrections, ideas or comments are also welcomed. 26 27The papers that follow are listed in no particular order. All are 28cataloged with the following fields: the document's "Title", the 29"Author"/s, the "URL" where they can be found, some "Keywords" helpful 30when searching for specific topics, and a brief "Description" of the 31Document. 32 33Enjoy! 34 35.. note:: 36 37 The documents on each section of this document are ordered by its 38 published date, from the newest to the oldest. 39 40Docs at the Linux Kernel tree 41----------------------------- 42 43The Sphinx books should be built with ``make {htmldocs | pdfdocs | epubdocs}``. 44 45 * Name: **linux/Documentation** 46 47 :Author: Many. 48 :Location: Documentation/ 49 :Keywords: text files, Sphinx. 50 :Description: Documentation that comes with the kernel sources, 51 inside the Documentation directory. Some pages from this document 52 (including this document itself) have been moved there, and might 53 be more up to date than the web version. 54 55On-line docs 56------------ 57 58 * Title: **Linux Kernel Mailing List Glossary** 59 60 :Author: various 61 :URL: https://kernelnewbies.org/KernelGlossary 62 :Date: rolling version 63 :Keywords: glossary, terms, linux-kernel. 64 :Description: From the introduction: "This glossary is intended as 65 a brief description of some of the acronyms and terms you may hear 66 during discussion of the Linux kernel". 67 68 * Title: **Tracing the Way of Data in a TCP Connection through the Linux Kernel** 69 70 :Author: Richard Sailer 71 :URL: https://archive.org/details/linux_kernel_data_flow_short_paper 72 :Date: 2016 73 :Keywords: Linux Kernel Networking, TCP, tracing, ftrace 74 :Description: A seminar paper explaining ftrace and how to use it for 75 understanding linux kernel internals, 76 illustrated at tracing the way of a TCP packet through the kernel. 77 :Abstract: *This short paper outlines the usage of ftrace a tracing framework 78 as a tool to understand a running Linux system. 79 Having obtained a trace-log a kernel hacker can read and understand 80 source code more determined and with context. 81 In a detailed example this approach is demonstrated in tracing 82 and the way of data in a TCP Connection through the kernel. 83 Finally this trace-log is used as base for more a exact conceptual 84 exploration and description of the Linux TCP/IP implementation.* 85 86 * Title: **On submitting kernel Patches** 87 88 :Author: Andi Kleen 89 :URL: http://halobates.de/on-submitting-kernel-patches.pdf 90 :Date: 2008 91 :Keywords: patches, review process, types of submissions, basic rules, case studies 92 :Description: This paper gives several experience values on what types of patches 93 there are and how likely they get merged. 94 :Abstract: 95 [...]. This paper examines some common problems for 96 submitting larger changes and some strategies to avoid problems. 97 98 * Title: **Linux Device Drivers, Third Edition** 99 100 :Author: Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman 101 :URL: https://lwn.net/Kernel/LDD3/ 102 :Date: 2005 103 :Description: A 600-page book covering the (2.6.10) driver 104 programming API and kernel hacking in general. Available under the 105 Creative Commons Attribution-ShareAlike 2.0 license. 106 :note: You can also :ref:`purchase a copy from O'Reilly or elsewhere <ldd3_published>`. 107 108 * Title: **Writing an ALSA Driver** 109 110 :Author: Takashi Iwai <tiwai@suse.de> 111 :URL: http://www.alsa-project.org/~iwai/writing-an-alsa-driver/index.html 112 :Date: 2005 113 :Keywords: ALSA, sound, soundcard, driver, lowlevel, hardware. 114 :Description: Advanced Linux Sound Architecture for developers, 115 both at kernel and user-level sides. ALSA is the Linux kernel 116 sound architecture in the 2.6 kernel version. 117 118 * Title: **Linux PCMCIA Programmer's Guide** 119 120 :Author: David Hinds. 121 :URL: http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-PROG.html 122 :Date: 2003 123 :Keywords: PCMCIA. 124 :Description: "This document describes how to write kernel device 125 drivers for the Linux PCMCIA Card Services interface. It also 126 describes how to write user-mode utilities for communicating with 127 Card Services. 128 129 * Title: **Linux Kernel Module Programming Guide** 130 131 :Author: Ori Pomerantz. 132 :URL: https://tldp.org/LDP/lkmpg/2.6/html/index.html 133 :Date: 2001 134 :Keywords: modules, GPL book, /proc, ioctls, system calls, 135 interrupt handlers . 136 :Description: Very nice 92 pages GPL book on the topic of modules 137 programming. Lots of examples. 138 139 * Title: **Global spinlock list and usage** 140 141 :Author: Rick Lindsley. 142 :URL: http://lse.sourceforge.net/lockhier/global-spin-lock 143 :Date: 2001 144 :Keywords: spinlock. 145 :Description: This is an attempt to document both the existence and 146 usage of the spinlocks in the Linux 2.4.5 kernel. Comprehensive 147 list of spinlocks showing when they are used, which functions 148 access them, how each lock is acquired, under what conditions it 149 is held, whether interrupts can occur or not while it is held... 150 151 * Title: **A Linux vm README** 152 153 :Author: Kanoj Sarcar. 154 :URL: http://kos.enix.org/pub/linux-vmm.html 155 :Date: 2001 156 :Keywords: virtual memory, mm, pgd, vma, page, page flags, page 157 cache, swap cache, kswapd. 158 :Description: Telegraphic, short descriptions and definitions 159 relating the Linux virtual memory implementation. 160 161 * Title: **Video4linux Drivers, Part 1: Video-Capture Device** 162 163 :Author: Alan Cox. 164 :URL: http://www.linux-mag.com/id/406 165 :Date: 2000 166 :Keywords: video4linux, driver, video capture, capture devices, 167 camera driver. 168 :Description: The title says it all. 169 170 * Title: **Video4linux Drivers, Part 2: Video-capture Devices** 171 172 :Author: Alan Cox. 173 :URL: http://www.linux-mag.com/id/429 174 :Date: 2000 175 :Keywords: video4linux, driver, video capture, capture devices, 176 camera driver, control, query capabilities, capability, facility. 177 :Description: The title says it all. 178 179 * Title: **Linux IP Networking. A Guide to the Implementation and Modification of the Linux Protocol Stack.** 180 181 :Author: Glenn Herrin. 182 :URL: http://www.cs.unh.edu/cnrg/gherrin 183 :Date: 2000 184 :Keywords: network, networking, protocol, IP, UDP, TCP, connection, 185 socket, receiving, transmitting, forwarding, routing, packets, 186 modules, /proc, sk_buff, FIB, tags. 187 :Description: Excellent paper devoted to the Linux IP Networking, 188 explaining anything from the kernel's to the user space 189 configuration tools' code. Very good to get a general overview of 190 the kernel networking implementation and understand all steps 191 packets follow from the time they are received at the network 192 device till they are delivered to applications. The studied kernel 193 code is from 2.2.14 version. Provides code for a working packet 194 dropper example. 195 196 * Title: **How To Make Sure Your Driver Will Work On The Power Macintosh** 197 198 :Author: Paul Mackerras. 199 :URL: http://www.linux-mag.com/id/261 200 :Date: 1999 201 :Keywords: Mac, Power Macintosh, porting, drivers, compatibility. 202 :Description: The title says it all. 203 204 * Title: **An Introduction to SCSI Drivers** 205 206 :Author: Alan Cox. 207 :URL: http://www.linux-mag.com/id/284 208 :Date: 1999 209 :Keywords: SCSI, device, driver. 210 :Description: The title says it all. 211 212 * Title: **Advanced SCSI Drivers And Other Tales** 213 214 :Author: Alan Cox. 215 :URL: http://www.linux-mag.com/id/307 216 :Date: 1999 217 :Keywords: SCSI, device, driver, advanced. 218 :Description: The title says it all. 219 220 * Title: **Writing Linux Mouse Drivers** 221 222 :Author: Alan Cox. 223 :URL: http://www.linux-mag.com/id/330 224 :Date: 1999 225 :Keywords: mouse, driver, gpm. 226 :Description: The title says it all. 227 228 * Title: **More on Mouse Drivers** 229 230 :Author: Alan Cox. 231 :URL: http://www.linux-mag.com/id/356 232 :Date: 1999 233 :Keywords: mouse, driver, gpm, races, asynchronous I/O. 234 :Description: The title still says it all. 235 236 * Title: **Writing Video4linux Radio Driver** 237 238 :Author: Alan Cox. 239 :URL: http://www.linux-mag.com/id/381 240 :Date: 1999 241 :Keywords: video4linux, driver, radio, radio devices. 242 :Description: The title says it all. 243 244 * Title: **I/O Event Handling Under Linux** 245 246 :Author: Richard Gooch. 247 :URL: https://web.mit.edu/~yandros/doc/io-events.html 248 :Date: 1999 249 :Keywords: IO, I/O, select(2), poll(2), FDs, aio_read(2), readiness 250 event queues. 251 :Description: From the Introduction: "I/O Event handling is about 252 how your Operating System allows you to manage a large number of 253 open files (file descriptors in UNIX/POSIX, or FDs) in your 254 application. You want the OS to notify you when FDs become active 255 (have data ready to be read or are ready for writing). Ideally you 256 want a mechanism that is scalable. This means a large number of 257 inactive FDs cost very little in memory and CPU time to manage". 258 259 * Title: **(nearly) Complete Linux Loadable Kernel Modules. The definitive guide for hackers, virus coders and system administrators.** 260 261 :Author: pragmatic/THC. 262 :URL: http://packetstormsecurity.org/docs/hack/LKM_HACKING.html 263 :Date: 1999 264 :Keywords: syscalls, intercept, hide, abuse, symbol table. 265 :Description: Interesting paper on how to abuse the Linux kernel in 266 order to intercept and modify syscalls, make 267 files/directories/processes invisible, become root, hijack ttys, 268 write kernel modules based virus... and solutions for admins to 269 avoid all those abuses. 270 :Notes: For 2.0.x kernels. Gives guidances to port it to 2.2.x 271 kernels. 272 273 * Name: **Linux Virtual File System** 274 275 :Author: Peter J. Braam. 276 :URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs/ 277 :Date: 1998 278 :Keywords: slides, VFS, inode, superblock, dentry, dcache. 279 :Description: Set of slides, presumably from a presentation on the 280 Linux VFS layer. Covers version 2.1.x, with dentries and the 281 dcache. 282 283 * Title: **The Venus kernel interface** 284 285 :Author: Peter J. Braam. 286 :URL: http://www.coda.cs.cmu.edu/doc/html/kernel-venus-protocol.html 287 :Date: 1998 288 :Keywords: coda, filesystem, venus, cache manager. 289 :Description: "This document describes the communication between 290 Venus and kernel level file system code needed for the operation 291 of the Coda filesystem. This version document is meant to describe 292 the current interface (version 1.0) as well as improvements we 293 envisage". 294 295 * Title: **Design and Implementation of the Second Extended Filesystem** 296 297 :Author: Rémy Card, Theodore Ts'o, Stephen Tweedie. 298 :URL: https://web.mit.edu/tytso/www/linux/ext2intro.html 299 :Date: 1998 300 :Keywords: ext2, linux fs history, inode, directory, link, devices, 301 VFS, physical structure, performance, benchmarks, ext2fs library, 302 ext2fs tools, e2fsck. 303 :Description: Paper written by three of the top ext2 hackers. 304 Covers Linux filesystems history, ext2 motivation, ext2 features, 305 design, physical structure on disk, performance, benchmarks, 306 e2fsck's passes description... A must read! 307 :Notes: This paper was first published in the Proceedings of the 308 First Dutch International Symposium on Linux, ISBN 90-367-0385-9. 309 310 * Title: **The Linux RAID-1, 4, 5 Code** 311 312 :Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza. 313 :URL: http://www.linuxjournal.com/article.php?sid=2391 314 :Date: 1997 315 :Keywords: RAID, MD driver. 316 :Description: Linux Journal Kernel Korner article. 317 :Abstract: *A description of the implementation of the RAID-1, 318 RAID-4 and RAID-5 personalities of the MD device driver in the 319 Linux kernel, providing users with high performance and reliable, 320 secondary-storage capability using software*. 321 322 * Title: **Linux Kernel Hackers' Guide** 323 324 :Author: Michael K. Johnson. 325 :URL: https://www.tldp.org/LDP/khg/HyperNews/get/khg.html 326 :Date: 1997 327 :Keywords: device drivers, files, VFS, kernel interface, character vs 328 block devices, hardware interrupts, scsi, DMA, access to user memory, 329 memory allocation, timers. 330 :Description: A guide designed to help you get up to speed on the 331 concepts that are not intuitively obvious, and to document the internal 332 structures of Linux. 333 334 * Title: **Dynamic Kernels: Modularized Device Drivers** 335 336 :Author: Alessandro Rubini. 337 :URL: http://www.linuxjournal.com/article.php?sid=1219 338 :Date: 1996 339 :Keywords: device driver, module, loading/unloading modules, 340 allocating resources. 341 :Description: Linux Journal Kernel Korner article. 342 :Abstract: *This is the first of a series of four articles 343 co-authored by Alessandro Rubini and Georg Zezchwitz which present 344 a practical approach to writing Linux device drivers as kernel 345 loadable modules. This installment presents an introduction to the 346 topic, preparing the reader to understand next month's 347 installment*. 348 349 * Title: **Dynamic Kernels: Discovery** 350 351 :Author: Alessandro Rubini. 352 :URL: http://www.linuxjournal.com/article.php?sid=1220 353 :Date: 1996 354 :Keywords: character driver, init_module, clean_up module, 355 autodetection, mayor number, minor number, file operations, 356 open(), close(). 357 :Description: Linux Journal Kernel Korner article. 358 :Abstract: *This article, the second of four, introduces part of 359 the actual code to create custom module implementing a character 360 device driver. It describes the code for module initialization and 361 cleanup, as well as the open() and close() system calls*. 362 363 * Title: **The Devil's in the Details** 364 365 :Author: Georg v. Zezschwitz and Alessandro Rubini. 366 :URL: http://www.linuxjournal.com/article.php?sid=1221 367 :Date: 1996 368 :Keywords: read(), write(), select(), ioctl(), blocking/non 369 blocking mode, interrupt handler. 370 :Description: Linux Journal Kernel Korner article. 371 :Abstract: *This article, the third of four on writing character 372 device drivers, introduces concepts of reading, writing, and using 373 ioctl-calls*. 374 375 * Title: **Dissecting Interrupts and Browsing DMA** 376 377 :Author: Alessandro Rubini and Georg v. Zezschwitz. 378 :URL: https://www.linuxjournal.com/article.php?sid=1222 379 :Date: 1996 380 :Keywords: interrupts, irqs, DMA, bottom halves, task queues. 381 :Description: Linux Journal Kernel Korner article. 382 :Abstract: *This is the fourth in a series of articles about 383 writing character device drivers as loadable kernel modules. This 384 month, we further investigate the field of interrupt handling. 385 Though it is conceptually simple, practical limitations and 386 constraints make this an ''interesting'' part of device driver 387 writing, and several different facilities have been provided for 388 different situations. We also investigate the complex topic of 389 DMA*. 390 391 * Title: **Device Drivers Concluded** 392 393 :Author: Georg v. Zezschwitz. 394 :URL: https://www.linuxjournal.com/article.php?sid=1287 395 :Date: 1996 396 :Keywords: address spaces, pages, pagination, page management, 397 demand loading, swapping, memory protection, memory mapping, mmap, 398 virtual memory areas (VMAs), vremap, PCI. 399 :Description: Finally, the above turned out into a five articles 400 series. This latest one's introduction reads: "This is the last of 401 five articles about character device drivers. In this final 402 section, Georg deals with memory mapping devices, beginning with 403 an overall description of the Linux memory management concepts". 404 405 * Title: **Network Buffers And Memory Management** 406 407 :Author: Alan Cox. 408 :URL: https://www.linuxjournal.com/article.php?sid=1312 409 :Date: 1996 410 :Keywords: sk_buffs, network devices, protocol/link layer 411 variables, network devices flags, transmit, receive, 412 configuration, multicast. 413 :Description: Linux Journal Kernel Korner. 414 :Abstract: *Writing a network device driver for Linux is fundamentally 415 simple---most of the complexity (other than talking to the 416 hardware) involves managing network packets in memory*. 417 418 * Title: **Analysis of the Ext2fs structure** 419 420 :Author: Louis-Dominique Dubeau. 421 :URL: https://teaching.csse.uwa.edu.au/units/CITS2002/fs-ext2/ 422 :Date: 1994 423 :Keywords: ext2, filesystem, ext2fs. 424 :Description: Description of ext2's blocks, directories, inodes, 425 bitmaps, invariants... 426 427Published books 428--------------- 429 430 * Title: **Linux Treiber entwickeln** 431 432 :Author: Jürgen Quade, Eva-Katharina Kunst 433 :Publisher: dpunkt.verlag 434 :Date: Oct 2015 (4th edition) 435 :Pages: 688 436 :ISBN: 978-3-86490-288-8 437 :Note: German. The third edition from 2011 is 438 much cheaper and still quite up-to-date. 439 440 * Title: **Linux Kernel Networking: Implementation and Theory** 441 442 :Author: Rami Rosen 443 :Publisher: Apress 444 :Date: December 22, 2013 445 :Pages: 648 446 :ISBN: 978-1430261964 447 448 * Title: **Embedded Linux Primer: A practical Real-World Approach, 2nd Edition** 449 450 :Author: Christopher Hallinan 451 :Publisher: Pearson 452 :Date: November, 2010 453 :Pages: 656 454 :ISBN: 978-0137017836 455 456 * Title: **Linux Kernel Development, 3rd Edition** 457 458 :Author: Robert Love 459 :Publisher: Addison-Wesley 460 :Date: July, 2010 461 :Pages: 440 462 :ISBN: 978-0672329463 463 464 * Title: **Essential Linux Device Drivers** 465 466 :Author: Sreekrishnan Venkateswaran 467 :Published: Prentice Hall 468 :Date: April, 2008 469 :Pages: 744 470 :ISBN: 978-0132396554 471 472.. _ldd3_published: 473 474 * Title: **Linux Device Drivers, 3rd Edition** 475 476 :Authors: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman 477 :Publisher: O'Reilly & Associates 478 :Date: 2005 479 :Pages: 636 480 :ISBN: 0-596-00590-3 481 :Notes: Further information in 482 http://www.oreilly.com/catalog/linuxdrive3/ 483 PDF format, URL: https://lwn.net/Kernel/LDD3/ 484 485 * Title: **Linux Kernel Internals** 486 487 :Author: Michael Beck 488 :Publisher: Addison-Wesley 489 :Date: 1997 490 :ISBN: 0-201-33143-8 (second edition) 491 492 * Title: **Programmation Linux 2.0 API systeme et fonctionnement du noyau** 493 494 :Author: Remy Card, Eric Dumas, Franck Mevel 495 :Publisher: Eyrolles 496 :Date: 1997 497 :Pages: 520 498 :ISBN: 2-212-08932-5 499 :Notes: French 500 501 * Title: **The Design and Implementation of the 4.4 BSD UNIX Operating System** 502 503 :Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, 504 John S. Quarterman 505 :Publisher: Addison-Wesley 506 :Date: 1996 507 :ISBN: 0-201-54979-4 508 509 * Title: **Unix internals -- the new frontiers** 510 511 :Author: Uresh Vahalia 512 :Publisher: Prentice Hall 513 :Date: 1996 514 :Pages: 600 515 :ISBN: 0-13-101908-2 516 517 * Title: **Programming for the real world - POSIX.4** 518 519 :Author: Bill O. Gallmeister 520 :Publisher: O'Reilly & Associates, Inc 521 :Date: 1995 522 :Pages: 552 523 :ISBN: I-56592-074-0 524 :Notes: Though not being directly about Linux, Linux aims to be 525 POSIX. Good reference. 526 527 * Title: **UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers** 528 529 :Author: Curt Schimmel 530 :Publisher: Addison Wesley 531 :Date: June, 1994 532 :Pages: 432 533 :ISBN: 0-201-63338-8 534 535 * Title: **The Design and Implementation of the 4.3 BSD UNIX Operating System** 536 537 :Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J 538 Karels, John S. Quarterman 539 :Publisher: Addison-Wesley 540 :Date: 1989 (reprinted with corrections on October, 1990) 541 :ISBN: 0-201-06196-1 542 543 * Title: **The Design of the UNIX Operating System** 544 545 :Author: Maurice J. Bach 546 :Publisher: Prentice Hall 547 :Date: 1986 548 :Pages: 471 549 :ISBN: 0-13-201757-1 550 551Miscellaneous 552------------- 553 554 * Name: **Cross-Referencing Linux** 555 556 :URL: https://elixir.bootlin.com/ 557 :Keywords: Browsing source code. 558 :Description: Another web-based Linux kernel source code browser. 559 Lots of cross references to variables and functions. You can see 560 where they are defined and where they are used. 561 562 * Name: **Linux Weekly News** 563 564 :URL: https://lwn.net 565 :Keywords: latest kernel news. 566 :Description: The title says it all. There's a fixed kernel section 567 summarizing developers' work, bug fixes, new features and versions 568 produced during the week. Published every Thursday. 569 570 * Name: **The home page of Linux-MM** 571 572 :Author: The Linux-MM team. 573 :URL: https://linux-mm.org/ 574 :Keywords: memory management, Linux-MM, mm patches, TODO, docs, 575 mailing list. 576 :Description: Site devoted to Linux Memory Management development. 577 Memory related patches, HOWTOs, links, mm developers... Don't miss 578 it if you are interested in memory management development! 579 580 * Name: **Kernel Newbies IRC Channel and Website** 581 582 :URL: https://www.kernelnewbies.org 583 :Keywords: IRC, newbies, channel, asking doubts. 584 :Description: #kernelnewbies on irc.oftc.net. 585 #kernelnewbies is an IRC network dedicated to the 'newbie' 586 kernel hacker. The audience mostly consists of people who are 587 learning about the kernel, working on kernel projects or 588 professional kernel hackers that want to help less seasoned kernel 589 people. 590 #kernelnewbies is on the OFTC IRC Network. 591 Try irc.oftc.net as your server and then /join #kernelnewbies. 592 The kernelnewbies website also hosts articles, documents, FAQs... 593 594 * Name: **linux-kernel mailing list archives and search engines** 595 596 :URL: http://vger.kernel.org/vger-lists.html 597 :URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html 598 :URL: http://groups.google.com/group/mlist.linux.kernel 599 :Keywords: linux-kernel, archives, search. 600 :Description: Some of the linux-kernel mailing list archivers. If 601 you have a better/another one, please let me know. 602 603------- 604 605Document last updated on Tue 2016-Sep-20 606 607This document is based on: 608 https://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html 609