Linux Loadable Kernel Module HOWTO
Total Page:16
File Type:pdf, Size:1020Kb
Linux Loadable Kernel Module HOWTO Bryan Henderson 21 May 2002 Revision History Revision v1.02 2002−05−21 Revised by: bjh 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. Revision v1.01 2001−08−18 Revised by: bjh Add material on various features created in the last few years: kernel module loader, ksymoops symbols, kernel−version−dependent LKM file location. Revision v1.00 2001−06−14 Revised by: bjh Initial release. 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. Linux Loadable Kernel Module HOWTO Table of Contents 1. Preface..............................................................................................................................................................1 2. Introduction to Linux Loadable Kernel Modules........................................................................................2 2.1. Terminology......................................................................................................................................2 2.2. History of Loadable Kernel Modules...............................................................................................2 2.3. The Case For Loadable Kernel Modules..........................................................................................3 2.4. What LKMs Can't Do.......................................................................................................................3 2.5. What LKMs Are Used For................................................................................................................3 3. Making Loadable Kernel Modules................................................................................................................5 4. LKM Utilities...................................................................................................................................................6 5. How To Insert And Remove LKMs..............................................................................................................7 5.1. Could Not Find Kernel Version........................................................................................................8 5.2. Intelligent Loading Of LKMs − Modprobe......................................................................................8 5.3. Automatic LKM Loading and Unloading.........................................................................................9 5.3.1. Automatic Loading...........................................................................................................9 5.3.2. Automatic Unloading − Autoclean.................................................................................11 5.4. /proc/modules..................................................................................................................................11 5.5. Where Are My LKM Files On My System?...................................................................................12 6. Unresolved Symbols......................................................................................................................................13 6.1. Some LKMs Prerequire Other LKMs.............................................................................................13 6.2. An LKM Must Match The Base Kernel.........................................................................................13 6.3. If You Run Multiple Kernels..........................................................................................................14 6.4. SMP symbols..................................................................................................................................15 6.5. You Are Not Licensed To Access The Symbol..............................................................................15 6.6. An LKM Must Match Prerequisite LKMs......................................................................................15 7. How To Boot Without A Disk Device Driver.............................................................................................17 8. About Module Parameters...........................................................................................................................18 9. Persistent Data..............................................................................................................................................19 10. Technical Details.........................................................................................................................................20 10.1. How They Work...........................................................................................................................20 10.2. The .modinfo Section....................................................................................................................20 10.3. The __ksymtab And .kstrtab Sections..........................................................................................21 10.4. Ksymoops Symbols......................................................................................................................21 10.5. Other Symbols..............................................................................................................................22 10.6. Memory Allocation For Loading..................................................................................................22 10.7. Linux internals..............................................................................................................................23 11. Writing Your Own Loadable Kernel Module..........................................................................................24 11.1. bug in hello.c.................................................................................................................................24 11.2. Rubini Corbet: Linux Device Drivers.......................................................................................25 i Linux Loadable Kernel Module HOWTO Table of Contents 11.3. Improving On Use Counts............................................................................................................25 12. Related Documentation..............................................................................................................................26 13. Individual Modules.....................................................................................................................................27 13.1. Executable Interpreters.................................................................................................................27 13.1.1. binfmt_aout: executable interpreter for a.out format....................................................27 13.1.2. binfmt_elf: executable interpreter for ELF format.......................................................27 13.1.3. binfmt_java: executable interpreter for Java bytecode.................................................28 13.2. Block Device Drivers....................................................................................................................28 13.2.1. floppy: floppy disk driver.............................................................................................28 13.2.2. loop: loop device driver................................................................................................32 13.2.3. linear: linear (non−RAID) disk array device driver......................................................33 13.2.4. raid0: RAID−0 device driver........................................................................................33 13.2.5. rd: ramdisk device driver..............................................................................................33 13.2.6. xd: XT disk device driver.............................................................................................34 13.3. SCSI Drivers.................................................................................................................................34 13.3.1. scsi_mod: SCSI mid−level driver.................................................................................35 13.3.2. sd_mod: SCSI high−level driver for disk devices........................................................35 13.3.3. st: SCSI high−level driver for tape devices..................................................................36 13.3.4. sr_mod: SCSI high−level driver for CD−ROM drives.................................................36 13.3.5. sg: SCSI high−level driver for generic SCSI devices...................................................36 13.3.6. wd7000: SCSI low−level driver for 7000FASST.........................................................36 13.3.7. aha154x: SCSI low−level driver for Adaptec AHA152X/2825...................................37 13.3.8. aha1542: SCSI low−level driver for Adaptec AHA1542.............................................37 13.3.9. aha1740: SCSI low−level driver for Adaptec AHA1740 EISA...................................37 13.3.10. aic7xxx: SCSI low−level driver for Adaptec AHA274X/284X/294X.......................37 13.3.11. advansys: SCSI low−level driver for AdvanSys/Connect.com..................................38 13.3.12. in2000: SCSI low−level driver