The HyperNews Linux KHG Discussion Pages

Linux Kernel Hackers' Guide

Table of Contents

Tour of the Linux Kernel
This is a somewhat incomplete tour of the Linux Kernel, based on Linux 1.0.9 and the 1.1.x development series. Most of it is still relevant.
Device Drivers
The most common Linux kernel programming task is writing a new device driver. The great majority of the code in the kernel is new device drivers; between 1.2.13 and 2.0 the size of the source code more than doubled, and most of that was from adding device drivers.
Adding a filesystem to Linux doesn't have to involve magic...
Linux Memory Management
A few outdated documents, and one completely new one by David Miller on the Linux cache flush architecture.
How System Calls Work on Linux/i86
Although this was written while Linux 0.99.2 was current, it still applies. A few filenames may need updating. find is your friend--just respond with the changes and they will be added.
Other Sources of Information
The KHG is just one collection of information about the Linux kernel. There are others!

Membership and Subscription

At the bottom of the page, you will notice two hyperlinks (among several others): Subscribe and Members. Using the KHG to its fullest involves these two hyperlinks, even though you are not required to be a member to read these pages and post responses.


HyperNews membership is site-wide. That is, you only need to sign up and become a member once for the entire KHG. It doesn't take much to be a member. Each member is identified by a unique name, which can either be a nickname or an email address. We suggest using your email address; that way it will be unique and easy to remember. On the other hand, you may want to choose a nickname if you expect to be changing your email address at any time.

We also want your real name, email address, and home page (if you have one). You can give us your phone and address if you want. You will be asked to choose a password. You can change any of these items at any time by clicking on the Membership hyperlink again.


Subscribing to a page puts you on a mailing list to be sent notification of any new responses to the page to which you are subscribed. You subscribe separately to each page in which you are interested by clicking the Subscription link on the page to which you want to subscribe. You are also subscribed, by default, to pages that you write.

When you subscribe to a page, you subscribe to that page and all of its responses.


Please respond to these pages if you have something to add. Think of posting a response rather like posting to an email list, except that an editor might occasionally come along to clean things up and/or put them in the main documents' bodies. So if you would post it to an email list in a similar discussion, it is probably appropriate to post here.

In order to make reading these pages a pleasure for everyone, any incomprehensible, unrelated, outdated, abusive, or other completely unnecessary post may be removed by an administrator. So if you have a message that would be inappropriate on a mailing list, it's probably also inappropriate here.

The administrators have the final say on what's appropriate. We don't expect this to become an issue...

About the new KHG

The Linux Kernel Hackers' Guide has changed quite a bit since its original conception four years ago. I struggled along with the help of many other hackers to produce a document that lived primarily on paper, and was intended to document the kernel in much the same way that a program's user guide is intended to document the program for users.

It was less successful than most user guides, for a number of reasons:

I floundered around, trying to be helpful, and made at least one right decision: most of the people who needed to read the old KHG needed to write device drivers, and the most fully-developed part of the KHG was the device driver section.

There is a clear need for further development of the KHG, and it's clear that my making it a monolithic document stood in the way of progress. The KHG is now a series of more or less independent web pages, with places for readers to leave comments and corrections that can be incorporated in the document at the maintainer's leisure--and are available to readers before they are incorporated.

The KHG is now completely web-based. There will be no official paper version. You need kernel source code nearby to read the KHG anyway, and I want to shift the emphasis from officially documenting the Linux kernel to being a learning resource about the Linux kernel--one that may well be useful to other people who want to document one part or another of the Linux kernel more fully, as well as to people who just want to hack the kernel.

An FTP-able version of the KHG is available from You will still need a net connection to post to the KHG, but not to read it. Please keep yourself up-to-date so that you are not posting questions that others have already answered. Thanks!


Copyright (C) 1996,1997 Michael K. Johnson,

Messages Inline: 0 1 All Outline: 1 -1 +1

115. Question: Kernel Makefile Configuration: how? by Simon Green newer
113. Question: Multiprocessor Linux by Davis Terrell new
1. More: Building an SMP kernel by Michael K. Johnson newer
111. Question: Improving event timers? by new
109. Question: measuring time to load a virtual mem page from disk by kandr
94. Note: using cli/sti() and save_flags/restore_flags() by george
93. Question: Protected Mode by ac
1. News: Advanced 80386 Programming Techniques by Michael K. Johnson
92. Question: DMA buffer sizes by
2. Sad: DMA limits by Albert Cahalan <acahalan at>
1. Feedback: Not page size, page order by Michael K. Johnson
91. Question: Problem Getting the Kernel small enough by
89. Question: How to create /proc/sys variables? by Orlando Cantieni
88. Question: Linux for NeXT black? by Dale Amon
87. Question: vremap() in kernel modules? by Liam Wickins
86. Idea: giveing compatiblity to win95 for ext2 partitions (for programmers forced to deal with both) by pharos
1. Feedback: Working on it! by ibaird
-> Question: revision by ibarid
84. Question: setsockopt() error when triying to use ipfwadm for masquerading by
1. Idea: Re: masquerading by Charles Barrasso
83. Question: reset the irq 0 timer after APM suspend by Dong Chen
1. Feedback: Re: fixed, patch for kernel 2.0.30 by Dong Chen
77. Question: Source Code in C for make Linux partitions. by Limbert Sanabria
1. None: Untitled by lolley
76. None: How can I "cheat" and change the IP address (src,dest) in the sent socket? by Rami
2. None: Untitled
1. Feedback: Do it in the kernel by Michael K. Johnson
74. Question: Where is the source file for accept() by
1. None: Here, in /usr/src/linux/net/socket.c by
72. None: How can I use RAW SOCKETS in UNIX? by Rami
1. Feedback: Re: Raw sockets by
69. None: the KHG in spanish? by Jorge Alvarado Revatta
2. Feedback: Si tenga preguntas, quisa yo pueda ayudarte. by KernelJock new
1. Feedback: No esta aqui! Pero... by Michael K. Johnson
67. Question: How to get a Memory snapshot ? by Manuel Porras Brand
1. Disagree: Why not to get a memory snapshot? by Jukka Santala
66. Question: resources hard limits by
1. None: Setting resource limits by Jukka Santala
65. Question: How to invalidate a chache page by Gerhard Uttenthaler
1. More: Read the rest of the KHG! by Michael K. Johnson
64. Question: Where are the tunable parameters of the kernel? by
1. Note: Kernel tunable parameters by Jukka Santala
62. Question: How can my device driver access data structures in user space? by Stephan Theil
61. Question: Problem in doing RAW SOCKET Programming by anjali sharma
59. Question: Tunable Kernel Parameters? by
1. Feedback: sysctl in Linux by Jukka Santala
58. Question: ELF matters by Carlos Munoz
1. Feedback: Information about ELF Internals by Pat Ekman
57. Question: Droping Packets by Charles Barrasso
1. Feedback: [Selectively] Droping Packets by Jose R. cordones
56. Question: The /proc/profile by Charles Barrasso
1. Note: readprofile systool by Jukka Santala
55. Question: Can you block or ignore ICMP packets? by
4. Feedback: ICMP send rate limit / ignoring by Jukka Santala
1. More: Omission in earlier rate-limit... by Jukka Santala
-> News: Patch worked... by Jukka Santala
3. More: Using ipfwadm by Charles Barrasso
1. None: Icmp.c and kernal ping replies by Don Thomas
52. Question: encaps documentation by Kuang-chun Cheng
51. Question: Mounting Caldrea OpenDOS formatted fs's by Trey Childs
49. Question: finding the address that caused a SIGSEGV. by Ben Shelef
47. Sad: sti() called too late. by Erik Thiele
1. None: sti() called too late. by Gadi Oxman
38. Question: Module Development Info? by Mark S. Mathews
1. None: Needed here too by ajay
2. None: Help needed here too! by ajay
35. Question: Need quicker timer than 100 ms in kernel-module by Erik Thiele
1. News: 10 ms timer patch by Reinhold J. Gerharz
-> None: Please send me the patch by Jin Hwang
34. None: Need help with finding the linked list of unacked sk_buffs in TCP by Vijay Gupta
31. Question: Partition Type by Suman Ball
30. News: New document on exception handling by Michael K. Johnson
29. Question: How to make paralelism in to the kernel? by Delian Dlechev
28. None: Kernel ioctls help needed, please! by Eugene Kanter
1. Note: controlling RS232 interface by Till Straumann
27. Question: readv/writev & other sock funcs by Dave Wreski
25. None: I'd like to see the scheduler chapter by Tim Bird
1. None: Untitled by Vijay Gupta
3. Agree: Go ahead! by Michael K. Johnson
21. Question: Unable to access KHG, port 8080 giving problem. by Srihari Nelakuditi
1. None: Get a proxy by Michael K. Johnson
20. Question: proc fs docs? by David Woodruff
18. Question: What is SOCK_RAW and how do I use it? by arkane
1. Feedback: What raw sockets are for. by Cameron MacKinnon
15. Idea: Linux kernel debugging by
2. News: GDB for Linux by David Grothe
2. News: Another kernel debugging tool by David Hinds
1. News: gdb debugging of kernel now available by David Grothe
1. Question: Device debugging by alombardİ
9. Question: Realtime mods anyone? by bill duncan
1. None: 100 ms real time should be easy by jeff millar
2. None: Realtime is already done(!) by Kai Harrekilde-Petersen
4. Feedback: POSIX.4 scheduler by Peter Monta
1. Feedback: cli()/sti() latency, hard numbers by Ingo Molnar
5. Idea: found some hacks ?!? by Mayk Langer
6. News: Hard real-time now available by Michael K. Johnson
7. News: Summary of Linux Real-Time Status by Markus Kuhn
7. Feedback: Why can't we incorporate new changes in linux kernel in KHG ? by Praveen Kumar Dwivedi
1. Agree: You can! by Michael K. Johnson
3. Idea: Kernel source code by Gabor J.Toth
1. Question: The sounds of silence... by Gabor J.Toth
1. Agree: Breaking the silence :) by Kyle Ferrio
1. More: Scribbling in the margins by Michael K. Johnson
2. Idea: It requires thought... by Michael K. Johnson
2. Note: Kernel source is already browsable online by Axel Boldt
2. None: Need easy way to download whole KHG
5. News: KHG being mirrored nightly for download! by Michael K. Johnson
2. Idea: postscript version of these documents? by Michael Stiller
1. Ok: Sure! by Michael K. Johnson
-> None: Not so Sure! by jeff millar
-> Disagree: Enough already! by Michael K. Johnson
1. Note: Mirror packages are available, but that's not really enough by Michael K. Johnson
4. None: Mirror whole KHG package, off line reading and Post to this site by Kim In-Sung
2. Note: Untitled by Jim Van Zandt
1. Note: That works. (using it now). Two tips: by Richard Braakman
2. Question: Appears to be a bug in getwww, though... by Michael K. Johnson
-> Feedback: Sucking up to the wrong site... ;) by Jukka Santala
1. Note: Help make the new KHG a success by Michael K. Johnson

to: "The Linux Kernel Hackers' Guide"

Subscribe Membership Admin Mode Show Frames Help for HyperNews 1.9.4