<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML ><HEAD ><TITLE >The Linux Kernel Module Programming Guide</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="NEXT" TITLE="Foreword" HREF="f25.html"></HEAD ><BODY CLASS="BOOK" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="BOOK" ><A NAME="AEN1" ></A ><DIV CLASS="TITLEPAGE" ><H1 CLASS="TITLE" ><A NAME="AEN2" ></A >The Linux Kernel Module Programming Guide</H1 ><SPAN CLASS="COLLAB" ><SPAN CLASS="COLLABNAME" >Peter Jay Salzman</SPAN ><BR></SPAN ><SPAN CLASS="COLLAB" ><SPAN CLASS="COLLABNAME" >Michael Burian</SPAN ><BR></SPAN ><SPAN CLASS="COLLAB" ><SPAN CLASS="COLLABNAME" >Ori Pomerantz</SPAN ><BR></SPAN ><P CLASS="COPYRIGHT" ><A HREF="ln16.html" >Copyright</A > © 2001 Peter Jay Salzman</P ><P CLASS="PUBDATE" >2004-05-16 ver 2.6.0<BR></P ><HR></DIV ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT ><A HREF="f25.html" >Foreword</A ></DT ><DD ><DL ><DT >1. <A HREF="x27.html" >Authorship</A ></DT ><DT >2. <A HREF="x30.html" >Versioning and Notes</A ></DT ><DT >3. <A HREF="x35.html" >Acknowledgements</A ></DT ></DL ></DD ><DT >1. <A HREF="c43.html" >Introduction</A ></DT ><DD ><DL ><DT >1.1. <A HREF="x45.html" >What Is A Kernel Module?</A ></DT ><DT >1.2. <A HREF="x49.html" >How Do Modules Get Into The Kernel?</A ></DT ></DL ></DD ><DT >2. <A HREF="c147.html" >Hello World</A ></DT ><DD ><DL ><DT >2.1. <A HREF="x149.html" >Hello, World (part 1): The Simplest Module</A ></DT ><DT >2.2. <A HREF="x209.html" >Compiling Kernel Modules</A ></DT ><DT >2.3. <A HREF="hello2.html" >Hello World (part 2)</A ></DT ><DT >2.4. <A HREF="x264.html" >Hello World (part 3): The <TT CLASS="LITERAL" >__init</TT > and <TT CLASS="LITERAL" >__exit</TT > Macros</A ></DT ><DT >2.5. <A HREF="x298.html" >Hello World (part 4): Licensing and Module Documentation</A ></DT ><DT >2.6. <A HREF="x333.html" >Passing Command Line Arguments to a Module</A ></DT ><DT >2.7. <A HREF="x365.html" >Modules Spanning Multiple Files</A ></DT ><DT >2.8. <A HREF="x419.html" >Building modules for a precompiled kernel</A ></DT ></DL ></DD ><DT >3. <A HREF="c464.html" >Preliminaries</A ></DT ><DD ><DL ><DT >3.1. <A HREF="x466.html" >Modules vs Programs</A ></DT ></DL ></DD ><DT >4. <A HREF="c606.html" >Character Device Files</A ></DT ><DD ><DL ><DT >4.1. <A HREF="x608.html" >Character Device Drivers</A ></DT ></DL ></DD ><DT >5. <A HREF="c745.html" >The /proc File System</A ></DT ><DD ><DL ><DT >5.1. <A HREF="x747.html" >The /proc File System</A ></DT ></DL ></DD ><DT >6. <A HREF="c792.html" >Using /proc For Input</A ></DT ><DD ><DL ><DT >6.1. <A HREF="x794.html" >Using /proc For Input</A ></DT ></DL ></DD ><DT >7. <A HREF="c883.html" >Talking To Device Files</A ></DT ><DD ><DL ><DT >7.1. <A HREF="x885.html" >Talking to Device Files (writes and IOCTLs)}</A ></DT ></DL ></DD ><DT >8. <A HREF="c969.html" >System Calls</A ></DT ><DD ><DL ><DT >8.1. <A HREF="x971.html" >System Calls</A ></DT ></DL ></DD ><DT >9. <A HREF="c1043.html" >Blocking Processes</A ></DT ><DD ><DL ><DT >9.1. <A HREF="x1045.html" >Blocking Processes</A ></DT ></DL ></DD ><DT >10. <A HREF="c1146.html" >Replacing Printks</A ></DT ><DD ><DL ><DT >10.1. <A HREF="x1148.html" >Replacing <TT CLASS="FUNCTION" >printk</TT ></A ></DT ><DT >10.2. <A HREF="x1181.html" >Flashing keyboard LEDs</A ></DT ></DL ></DD ><DT >11. <A HREF="c1196.html" >Scheduling Tasks</A ></DT ><DD ><DL ><DT >11.1. <A HREF="x1198.html" >Scheduling Tasks</A ></DT ></DL ></DD ><DT >12. <A HREF="interrupthandlers.html" >Interrupt Handlers</A ></DT ><DD ><DL ><DT >12.1. <A HREF="x1258.html" >Interrupt Handlers</A ></DT ></DL ></DD ><DT >13. <A HREF="c1343.html" >Symmetric Multi Processing</A ></DT ><DD ><DL ><DT >13.1. <A HREF="x1345.html" >Symmetrical Multi-Processing</A ></DT ></DL ></DD ><DT >14. <A HREF="c1369.html" >Common Pitfalls</A ></DT ><DD ><DL ><DT >14.1. <A HREF="x1371.html" >Common Pitfalls</A ></DT ></DL ></DD ><DT >A. <A HREF="a1406.html" >Changes: 2.0 To 2.2</A ></DT ><DD ><DL ><DT >A.1. <A HREF="x1408.html" >Changes between 2.0 and 2.2</A ></DT ></DL ></DD ><DT >B. <A HREF="a1535.html" >Where To Go From Here</A ></DT ><DD ><DL ><DT >B.1. <A HREF="x1537.html" >Where From Here?</A ></DT ></DL ></DD ><DT ><A HREF="doc-index.html" >Index</A ></DT ></DL ></DIV ><DIV CLASS="LOT" ><DL CLASS="LOT" ><DT ><B >List of Examples</B ></DT ><DT >2-1. <A HREF="x149.html#AEN156" >hello-1.c</A ></DT ><DT >2-2. <A HREF="x209.html#AEN217" >Makefile for a basic kernel module</A ></DT ><DT >2-3. <A HREF="hello2.html#AEN251" >hello-2.c</A ></DT ><DT >2-4. <A HREF="hello2.html#AEN256" >Makefile for both our modules</A ></DT ><DT >2-5. <A HREF="x264.html#AEN294" >hello-3.c</A ></DT ><DT >2-6. <A HREF="x298.html#AEN329" >hello-4.c</A ></DT ><DT >2-7. <A HREF="x333.html#AEN359" >hello-5.c</A ></DT ><DT >2-8. <A HREF="x365.html#AEN402" >start.c</A ></DT ><DT >2-9. <A HREF="x365.html#AEN410" >stop.c</A ></DT ><DT >2-10. <A HREF="x365.html#AEN415" >Makefile</A ></DT ><DT >4-1. <A HREF="x608.html#AEN726" >chardev.c</A ></DT ><DT >5-1. <A HREF="x747.html#AEN788" >procfs.c</A ></DT ><DT >6-1. <A HREF="x794.html#AEN875" >procfs.c</A ></DT ><DT >7-1. <A HREF="x885.html#AEN944" >chardev.c</A ></DT ><DT >7-2. <A HREF="x885.html#AEN952" >chardev.h</A ></DT ><DT >7-3. <A HREF="x885.html#AEN965" >ioctl.c</A ></DT ><DT >8-1. <A HREF="x971.html#AEN1039" >syscall.c</A ></DT ><DT >9-1. <A HREF="x1045.html#AEN1142" >sleep.c</A ></DT ><DT >10-1. <A HREF="x1148.html#AEN1177" >print_string.c</A ></DT ><DT >10-2. <A HREF="x1181.html#AEN1188" >kbleds.c</A ></DT ><DT >11-1. <A HREF="x1198.html#AEN1252" >sched.c</A ></DT ><DT >12-1. <A HREF="x1258.html#AEN1339" >intrpt.c</A ></DT ></DL ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="f25.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Foreword</TD ></TR ></TABLE ></DIV ></BODY ></HTML >