old-www/HOWTO/Module-HOWTO/index.html

657 lines
9.3 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML
><HEAD
><TITLE
>Linux Loadable Kernel Module HOWTO</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REL="NEXT"
TITLE="Preface"
HREF="x64.html"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2"
></A
>Linux Loadable Kernel Module HOWTO</H1
><H3
CLASS="AUTHOR"
><A
NAME="AEN4"
>Bryan Henderson</A
></H3
><P
CLASS="PUBDATE"
>2006-09-24<BR></P
><DIV
CLASS="REVHISTORY"
><TABLE
WIDTH="100%"
BORDER="0"
><TR
><TH
ALIGN="LEFT"
VALIGN="TOP"
COLSPAN="3"
><B
>Revision History</B
></TH
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.09</TD
><TD
ALIGN="LEFT"
>2006-09-24</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Fix typos.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.08</TD
><TD
ALIGN="LEFT"
>2006-03-03</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Add copyright information.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.07</TD
><TD
ALIGN="LEFT"
>2005-07-20</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Add some 2.6 info and disclaimers.
Update references to Linux Device Drivers
book, Linux Kernel Module Programming Guide.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.06</TD
><TD
ALIGN="LEFT"
>2005-01-12</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Cover Linux 2.6 briefly.
Update hello.c and reference to Lkmpg.
Add information about perils of unloading.
Mention dmesg as way to see kernel messages.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.05</TD
><TD
ALIGN="LEFT"
>2004-01-05</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Add information on module.h and -DMODULE.
Fix tldb.org to tldp.org.
Add information on kallsyms.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.04</TD
><TD
ALIGN="LEFT"
>2003-10-10</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Fix typo: AHA154x should be AHA152x
Add information on what module names the kernel module loader
calls for. Add information on what an LKM does when you first
load it. Add information on loop module. Change linuxdoc.org
to tldp.org.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.03</TD
><TD
ALIGN="LEFT"
>2003-07-03</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Update on kernels that don't load into vmalloc space.
Add explanation of "deleted" state of an LKM.
Explain GPLONLY.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.02</TD
><TD
ALIGN="LEFT"
>2002-05-21</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Correct explanation of symbol versioning.
Correct author of Linux Device Drivers.
Add info about memory allocation penalty of LKM vs bound-in.
Add LKM-to-LKM symbol matching requirement.
Add open source licensing issue in LKM symbol resolution.
Add SMP symbol versioning info.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.01</TD
><TD
ALIGN="LEFT"
>2001-08-18</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Add material on various features created in the last few
years: kernel module loader, ksymoops symbols,
kernel-version-dependent LKM file location.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v1.00</TD
><TD
ALIGN="LEFT"
>2001-06-14</TD
><TD
ALIGN="LEFT"
>Revised by: bjh</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Initial release.</TD
></TR
></TABLE
></DIV
><DIV
><DIV
CLASS="ABSTRACT"
><A
NAME="AEN62"
></A
><P
></P
><P
>This is the HOWTO for Linux loadable kernel modules (LKMs). It
explains what they are and how to use and create them. It also
includes documentation of parameters and other details of use of some
particular modules.</P
><P
></P
></DIV
></DIV
><HR></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
>1. <A
HREF="x64.html"
>Preface</A
></DT
><DT
>2. <A
HREF="x73.html"
>Introduction to Linux Loadable Kernel Modules</A
></DT
><DD
><DL
><DT
>2.1. <A
HREF="x73.html#AEN77"
>Terminology</A
></DT
><DT
>2.2. <A
HREF="x73.html#AEN90"
>History of Loadable Kernel Modules</A
></DT
><DT
>2.3. <A
HREF="x73.html#THECASE"
>The Case For Loadable Kernel Modules</A
></DT
><DT
>2.4. <A
HREF="x73.html#AEN107"
>What LKMs Can't Do</A
></DT
><DT
>2.5. <A
HREF="x73.html#AEN110"
>What LKMs Are Used For</A
></DT
></DL
></DD
><DT
>3. <A
HREF="x126.html"
>Making Loadable Kernel Modules</A
></DT
><DT
>4. <A
HREF="x146.html"
>LKM Utilities</A
></DT
><DT
>5. <A
HREF="x197.html"
>How To Insert And Remove LKMs</A
></DT
><DD
><DL
><DT
>5.1. <A
HREF="x197.html#AEN248"
>Could Not Find Kernel Version...</A
></DT
><DT
>5.2. <A
HREF="x197.html#AEN269"
>What Happens When An LKM Loads</A
></DT
><DT
>5.3. <A
HREF="x197.html#INTELLIGENT"
>Intelligent Loading Of LKMs - Modprobe</A
></DT
><DT
>5.4. <A
HREF="x197.html#AUTOLOAD"
>Automatic LKM Loading and Unloading</A
></DT
><DT
>5.5. <A
HREF="x197.html#PROCMODULES"
>/proc/modules</A
></DT
><DT
>5.6. <A
HREF="x197.html#MODLOCATION"
>Where Are My LKM Files On My System?</A
></DT
></DL
></DD
><DT
>6. <A
HREF="basekerncompat.html"
>Unresolved Symbols</A
></DT
><DD
><DL
><DT
>6.1. <A
HREF="basekerncompat.html#AEN502"
>Some LKMs Prerequire Other LKMs</A
></DT
><DT
>6.2. <A
HREF="basekerncompat.html#AEN507"
>An LKM Must Match The Base Kernel</A
></DT
><DT
>6.3. <A
HREF="basekerncompat.html#MULTIPLEKERNELS"
>If You Run Multiple Kernels</A
></DT
><DT
>6.4. <A
HREF="basekerncompat.html#AEN567"
>SMP symbols</A
></DT
><DT
>6.5. <A
HREF="basekerncompat.html#AEN574"
>You Are Not Licensed To Access The Symbol</A
></DT
><DT
>6.6. <A
HREF="basekerncompat.html#AEN586"
>An LKM Must Match Prerequisite LKMs</A
></DT
></DL
></DD
><DT
>7. <A
HREF="x589.html"
>How To Boot Without A Disk Device Driver</A
></DT
><DT
>8. <A
HREF="parm.html"
>About Module Parameters</A
></DT
><DT
>9. <A
HREF="x615.html"
>Persistent Data</A
></DT
><DT
>10. <A
HREF="x627.html"
>Technical Details</A
></DT
><DD
><DL
><DT
>10.1. <A
HREF="x627.html#HOWTHEYWORK"
>How They Work</A
></DT
><DT
>10.2. <A
HREF="x627.html#MODINFO"
>The .modinfo Section</A
></DT
><DT
>10.3. <A
HREF="x627.html#AEN712"
>The __ksymtab And .kstrtab Sections</A
></DT
><DT
>10.4. <A
HREF="x627.html#AEN722"
>Ksymoops Symbols</A
></DT
><DT
>10.5. <A
HREF="x627.html#AEN782"
>Other Symbols</A
></DT
><DT
>10.6. <A
HREF="x627.html#AEN793"
>Debugging Symbols</A
></DT
><DT
>10.7. <A
HREF="x627.html#MEMALLOC"
>Memory Allocation For Loading</A
></DT
><DT
>10.8. <A
HREF="x627.html#AEN830"
>Linux internals</A
></DT
></DL
></DD
><DT
>11. <A
HREF="x839.html"
>Writing Your Own Loadable Kernel Module</A
></DT
><DD
><DL
><DT
>11.1. <A
HREF="x839.html#AEN846"
>Simpler hello.c</A
></DT
><DT
>11.2. <A
HREF="x839.html#AEN870"
>Using the Kernel Build System</A
></DT
><DT
>11.3. <A
HREF="x839.html#AEN876"
>Rubini et al: Linux Device Drivers</A
></DT
><DT
>11.4. <A
HREF="x839.html#USECOUNT"
>Module Use Counts</A
></DT
></DL
></DD
><DT
>12. <A
HREF="linuxversions.html"
>Differences Between Versions Of Linux</A
></DT
><DD
><DL
><DT
>12.1. <A
HREF="linuxversions.html#AEN911"
>Linux 2.4 - Linux 2.6</A
></DT
></DL
></DD
><DT
>13. <A
HREF="copyright.html"
>Copyright Considerations With LKMs</A
></DT
><DT
>14. <A
HREF="x973.html"
>Related Documentation</A
></DT
><DT
>15. <A
HREF="individual.html"
>Individual Modules</A
></DT
><DD
><DL
><DT
>15.1. <A
HREF="individual.html#AEN985"
>Executable Interpreters</A
></DT
><DT
>15.2. <A
HREF="individual.html#AEN1016"
>Block Device Drivers</A
></DT
><DT
>15.3. <A
HREF="individual.html#SCSI"
>SCSI Drivers</A
></DT
><DT
>15.4. <A
HREF="individual.html#AEN1555"
>Network Device Drivers</A
></DT
><DT
>15.5. <A
HREF="individual.html#AEN2553"
>CDROM Device Drivers</A
></DT
><DT
>15.6. <A
HREF="individual.html#AEN2694"
>Filesystem Drivers</A
></DT
><DT
>15.7. <A
HREF="individual.html#AEN2813"
>Miscellaneous Device Driver</A
></DT
><DT
>15.8. <A
HREF="individual.html#AEN2821"
>Serial Device Drivers</A
></DT
><DT
>15.9. <A
HREF="individual.html#AEN2868"
>Parallel Device Drivers</A
></DT
><DT
>15.10. <A
HREF="individual.html#AEN2877"
>Bus Mouse Device Drivers</A
></DT
><DT
>15.11. <A
HREF="individual.html#AEN2907"
>Tape Device Drivers</A
></DT
><DT
>15.12. <A
HREF="individual.html#AEN2955"
>Watchdog Timers</A
></DT
><DT
>15.13. <A
HREF="individual.html#AEN2979"
>Sound Device Drivers</A
></DT
></DL
></DD
><DT
>16. <A
HREF="x2986.html"
>Maintenance Of This Document</A
></DT
><DT
>17. <A
HREF="history.html"
>History</A
></DT
><DT
>18. <A
HREF="x2997.html"
>Copyright</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"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x64.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Preface</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>