Differences between version 3 and previous revision of HowToModuleHOWTO.
Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Tuesday, October 26, 2004 10:26:07 am | by AristotlePagaltzis | Revert |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:06 am | by perry | Revert |
@@ -1,6087 +1 @@
-Linux Loadable Kernel Module HOWTO
-!!!Linux Loadable Kernel Module HOWTO
-!Bryan Henderson
-
-21 May 2002
-
-
-__Revision History__Revision v1.022002-05-21Revised by: bjhCorrect 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.012001-08-18Revised by: bjhAdd material on various features created in the last few
-years: kernel module loader, ksymoops symbols,
-kernel-version-dependent LKM file location.Revision v1.002001-06-14Revised by: bjhInitial 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.
-
-
-
-
-
-----; __Table of Contents__; 1. Preface; 2. Introduction to Linux Loadable Kernel Modules: ; 2.1. Terminology; 2.2. History of Loadable Kernel Modules; 2.3. The Case For Loadable Kernel Modules; 2.4. What LKMs Can't Do; 2.5. What LKMs Are Used For; 3. Making Loadable Kernel Modules; 4. LKM Utilities; 5. How To Insert And Remove LKMs: ; 5.1. Could Not Find Kernel Version...; 5.2. Intelligent Loading Of LKMs - Modprobe; 5.3. Automatic LKM Loading and Unloading; 5.4. /proc/modules; 5.5. Where Are My LKM Files On My System?; 6. Unresolved Symbols: ; 6.1. Some LKMs Prerequire Other LKMs; 6.2. An LKM Must Match The Base Kernel; 6.3. If You Run Multiple Kernels; 6.4. SMP symbols; 6.5. You Are Not Licensed To Access The Symbol; 6.6. An LKM Must Match Prerequisite LKMs; 7. How To Boot Without A Disk Device Driver; 8. About Module Parameters; 9. Persistent Data; 10. Technical Details: ; 10.1. How They Work; 10.2. The .modinfo Section; 10.3. The __ksymtab And .kstrtab Sections; 10.4. Ksymoops Symbols; 10.5. Other Symbols; 10.6. Memory Allocation For Loading; 10.7. Linux internals; 11. Writing Your Own Loadable Kernel Module: ; 11.1. bug in hello.c; 11.2. Rubini Corbet: Linux Device Drivers; 11.3. Improving On Use Counts; 12. Related Documentation; 13. Individual Modules: ; 13.1. Executable Interpreters; 13.2. Block Device Drivers; 13.3. SCSI Drivers; 13.4. Network Device Drivers; 13.5. CDROM Device Drivers; 13.6. Filesystem Drivers; 13.7. Miscellaneous Device Driver; 13.8. Serial Device Drivers; 13.9. Parallel Device Drivers; 13.10. Bus Mouse Device Drivers; 13.11. Tape Device Drivers; 13.12. Watchdog Timers; 13.13. Sound Device Drivers; 14. Maintenance Of This Document; 15. History; 16. Copyright
-!!!1. Preface
-
-Copyright and license information, as well as credits, are at the end
-of this document.
-
-
-
-This HOWTO is maintained by Bryan Henderson, bryanh@giraffe-data.com.
-It was released May 31, 2001. You can get the current version of
-this HOWTO from
-the Linux Documentation Project.
-
-----
-!!!2. Introduction to Linux Loadable Kernel Modules
-
-If you want to add code to a Linux kernel, the most basic way to do
-that is to add some source files to the kernel source tree and
-recompile the kernel. In fact, the kernel configuration process
-consists mainly of choosing which files to include in the kernel to be
-compiled.
-
-
-
-But you can also add code to the Linux kernel while it is running. A
-chunk of code that you add in this way is called a loadable kernel
-module. These modules can do lots of things, but they typically are
-one of three things: 1) device drivers; 2) filesystem drivers; 3)
-system calls. The kernel isolates certain functions, including these,
-especially well so they don't have to be intricately wired into the
-rest of the kernel.
-
-----
-!!2.1. Terminology
-
-Loadable kernel modules are often called just kernel modules or just
-modules, but those are rather misleading terms because there are lots
-of kinds of modules in the world and various pieces built into the
-base kernel can easily be called modules. We use the term loadable
-kernel module or LKM for the particular kinds of modules this HOWTO is
-about.
-
-
-
-Some people think of LKMs as outside of the kernel. They speak of
-LKMs communicating with the kernel. This is a mistake; LKMs (when
-loaded) are very much part of the kernel. The correct term for the
-part of the kernel that is bound into the image that you boot, i.e.
-all of the kernel ''except'' the LKMs, is "base
-kernel." LKMs communicate with the base kernel.
-
-
-
-In some other operating systems, the equivalent of a Linux LKM is
-called a "kernel extension."
-
-
-
-Now what is "Linux"? Well, first of all, the name is used for
-two entirely different things, and only one of them is really relevant
-here:
-
-
-
-
-
-#
-
-The kernel and related items distributed as a package by Linus Torvalds.
-
-
-#
-#
-
-A class of operating systems that traditionally are based on the Linux
-kernel.
-
-
-#
-
-
-
-Only the first of these is really useful in discussing LKMs. But even
-choosing this definition, people are often confused when it comes to
-LKMs. Is an LKM part of Linux or not? Though an LKM is always part
-of the kernel, it is part of Linux if it is distributed in the Linux
-kernel package, and not otherwise. Thus, if you have loaded into your
-kenel a device driver LKM that came with your device, you can't,
-strictly speaking, say that your kernel is Linux. Rather, it's a
-slight extension of Linux.
-As you might expect, it is commonplace to use the name "Linux"
-approximately -- Lots of variations on Linux are in use and are widely
-distributed, and referred to as "Linux." In this document,
-though, we will stick to the strictest definition in the interest of
-clarity.
-
-----
-!!2.2. History of Loadable Kernel Modules
-
-LKMs did not exist in Linux in the beginning. Anything we use an LKM
-for today was built into the base kernel at kernel build time instead.
-LKMs have been around at least since Linux 1.2 (1995).
-
-
-
-Device drivers and such were always quite modular, though. When LKMs
-were invented, only a small amount of work was needed on these modules
-to make them buildable as LKMs. However, it had to be done on each
-and every one, so it took some time. Since about 2000, virtually
-everything that makes sense as an LKM has at least had the option of
-being an LKM.
-
-----
-!!2.3. The Case For Loadable Kernel Modules
-
-You often have a choice between putting a module into the kernel by
-loading it as an LKM or binding it into the base kernel. LKMs have a
-lot of advantages over binding into the base kernel and I recommend
-them wherever possible.
-
-
-
-One advantage is that you don't have to rebuild your kernel as often.
-This saves you time and spares you the possibility of introducing an
-error in rebuilding and reinstalling the base kernel. Once you have a
-working base kernel, it is good to leave it untouched as long as
-possible.
-
-
-
-Another advantage is that LKMs help you diagnose system problems. A
-bug in a device driver which is bound into the kernel can stop your
-system from booting at all. And it can be really hard to tell which
-part of the base kernel caused the trouble. If the same device driver
-is an LKM, though, the base kernel is up and running before the device
-driver even gets loaded. If your system dies after the base kernel is
-up and running, it's an easy matter to track the problem down to the
-trouble-making device driver and just not load that device driver
-until you fix the problem.
-
-
-
-LKMs can save you memory, because you have to have them loaded
-only when you're actually using them. All parts of the base kernel stay
-loaded all the time. And in real storage, not just virtual storage.
-
-
-
-LKMs are much faster to maintain and debug. What would require a full
-reboot to do with a filesystem driver built into the kernel, you can
-do with a few quick commands with LKMs. You can try out different
-parameters or even change the code repeatedly in rapid succession,
-without waiting for a boot.
-
-
-
-LKMs are not slower, by the way, than base kernel modules. Calling
-either one is simply a branch to the memory location where it resides.
-
[[1
]
-
-
-
-Sometimes you ''have'' to build something into the
-base kernel instead of making it an LKM. Anything that is necessary
-to get the system up far enough to load LKMs must obviously be built
-into the base kernel. For example, the driver for the disk drive that
-contains the root filesystem must be built into the base kernel.
-
-----
-!!2.4. What LKMs Can't Do
-
-There is a tendency to think of LKMs like user space programs. They
-do share a lot of their properties, but LKMs are definitely not user
-space programs. They are part of the kernel. As such, they have free
-run of the system and can easily crash it.
-
-----
-!!2.5. What LKMs Are Used For
-
-There are six main things LKMs are used for:
-
-
-
-
-
-*
-
-Device drivers. A device driver is designed for a specific piece of
-hardware. The kernel uses it to communicate with that piece of
-hardware without having to know any details of how the hardware works.
-For example, there is a device driver for ATA disk drives. There is
-one for NE2000 compatible Ethernet cards. To use any device, the
-kernel must contain a device driver for it.
-
-
-*
-*
-
-Filesystem drivers. A filesystem driver interprets the contents of a
-filesystem (which is typically the contents of a disk drive) as files
-and directories and such. There are lots of different ways of storing
-files and directories and such on disk drives, on network servers, and
-in other ways. For each way, you need a filesystem driver. For
-example, there's a filesystem driver for the ext2 filesystem type used
-almost universally on Linux disk drives. There is one for the MS-DOS
-filesystem too, and one for NFS.
-
-
-*
-*
-
-System calls. User space programs use system calls to get services
-from the kernel. For example, there are system calls to read a file,
-to create a new process, and to shut down the system. Most system
-calls are integral to the system and very standard, so are always
-built into the base kernel (no LKM option). But you can invent a
-system call of your own and install it as an LKM. Or you can decide
-you don't like the way Linux does something and override an existing
-system call with an LKM of your own.
-
-
-*
-*
-
-Network drivers. A network driver interprets a network protocol. It
-feeds and consumes data streams at various layers of the kernel's
-networking function. For example, if you want an IPX link in your
-network, you would use the IPX driver.
-
-
-*
-*
-
-TTY line disciplines. These are essentially augmentations of device
-drivers for terminal devices.
-
-
-*
-*
-
-Executable interpreters. An executable interpreter loads and runs an
-executable. Linux is designed to be able to run executables in
-various formats, and each must have its own executable interpreter.
-
-
-*
-
-----
-!!!3. Making Loadable Kernel Modules
-
-An LKM lives in a single ELF object file (normally named like
-"serial.o"). You typically keep all your LKM object files in a
-particular directory (near your base kernel image makes sense). When
-you use the __insmod__ program to insert an LKM into
-the kernel, you give the name of that object file.
-
-
-
-For the LKMs that are part of Linux, you build them as part of the
-same kernel build process that generates the base kernel image. See
-the README file in the Linux source tree. In short, after you make
-the base kernel image with a command such as
-__make zImage__,
-you will make all the LKMs with the command
-
-make modules
-
-
-
-This results in a bunch of LKM object files (*.o) throughout the Linux
-source tree. (In older versions of Linux, there would be symbolic
-links in the modules directory of the Linux source
-tree pointing to all those LKM object files). These LKMs are ready to
-load, but you probably want to install them in some appropriate
-directory. The conventional place is described in Section 5.5. The command
-__make modules_install__
-will copy them all over to the conventional locations.
-
-
-
-Part of configuring the Linux kernel (at build time) is choosing which
-parts of the kernel to bind into the base kernel and which parts to
-generate as separate LKMs. In the basic question-and-answer
-configuration (__make config__), you are asked, for
-each optional part of the kernel, whether you want it bound into the
-kernel (a "Y" response), created as an LKM (an "M" response), or just
-skipped completely (an "N" response). Other configuration methods are
-similar.
-
-
-
-As explained in Section 2.3, you should have
-only the bare minimum bound into the base kernel. And only skip
-completely the parts that you're sure you'll never want. There is
-very little to lose by building an LKM that you won't use. Some
-compile time, some disk space, some chance of a problem in the code
-killing the kernel build. That's it.
-
-
-
-As part of the configuration dialog you also must choose whether to
-use symbol versioning or not. This choice affects building both the
-base kernel and the LKMs and it is crucial you get it right. See
-Section 6.
-
-
-
-LKMs that are not part of Linux (i.e. not distributed with the Linux kernel)
-have their own build procedures which I will not cover. The goal of any
-such procedure, though, is always to end up with an ELF object file.
-
-
-
-You don't necessarily have to rebuild all your LKMs and your base
-kernel image at the same time (e.g. you could build just the base
-kernel and use LKMs you built earlier with it) but it is always a good
-idea. See Section 6.
-
-----
-!!!4. LKM Utilities
-
-The programs you need to load and unload and otherwise work with LKMs
-are in the package modutils. You can find
-this package in
-this directory.
-
-
-
-This package contains the following programs to help you use LKMs:
-
-
-
-
-; insmod:
-
-Insert an LKM into the kernel.
-
-; rmmod:
-
-Remove an LKM from the kernel.
-
-; depmod:
-
-Determine interdependencies between LKMs.
-
-; kerneld:
-
-Kerneld daemon program
-
-; ksyms:
-
-Display symbols that are exported by the kernel for
-use by new LKMs.
-
-; lsmod:
-
-List currently loaded LKMs.
-
-; modinfo:
-
-Display contents of .modinfo section in an
-LKM object file.
-
-; modprobe:
-
- Insert or remove an LKM or set
-of LKMs intelligently. For example, if you must load A before
-loading B, Modprobe will automatically load A when you tell it
-to load B.
-
-
-
-
-
-
-Changes to the kernel often require changes to
-modutils, so be sure you're using a current
-version of modutils whenever you upgrade
-your kernel. modutils is always backward
-compatible (it works with older kernels), so there's no such thing as
-having too new a modutils.
-
-
-
-Warning: __modprobe__ invokes __insmod__
-and has its location hardcoded as /sbin/insmod.
-There may be other instances in modutils of
-the PATH not being used to find programs. So either modify the source
-code of modutils before you build it, or
-make sure you install the programs in their conventional directories.
-
-----
-!!!5. How To Insert And Remove LKMs
-
-The basic programs for inserting and removing LKMs are
-__insmod__ and
-__rmmod__. See their man pages for details.
-
-
-
-Inserting an LKM is conceptually easy: Just type, as superuser, a
-command like
-
-insmod serial.o
-(serial.o contains the device driver for serial
-ports (UARTs)).
-
-
-
-However, I would be misleading you if I said the command just works. It
-is very common, and rather maddening, for the command to fail either with
-a message about a module/kernel version mismatch or a pile of unresolved
-symbols.
-
-
-
-If it does work, though, the way to prove to yourself that you know what
-you're doing is to look at /proc/modules as
-described in Section 5.4.
-
-
-
-Now lets look at a more difficult insertion. If you try
-
-insmod msdos.o
-you will probably get a raft of error messages like:
-
- msdos.o: unresolved symbol fat_date_unix2dos
-msdos.o: unresolved symbol fat_add_cluster1
-msdos.o: unresolved symbol fat_put_super
-...
-
-
-
-This is because msdos.o contains external symbol references to the
-symbols mentioned and there are no such symbols exported by the kernel.
-To prove this, do a
-
-cat /proc/ksyms
-to list every symbol that is exported by the kernel (i.e. available
-for binding to LKMs). You will see that 'fat_date_unix2dos' is
-nowhere in the list.
-
-
-
-How do you get it into the list? By loading another LKM, one which
-defines those symbols and exports them. In this case, it is the LKM
-in the file fat.o. So do
-
- insmod fat.o
-and then see that "fat_date_unix2dos" is in
-/proc/ksyms. Now redo the
-
-insmod msdos.o
-and it works. Look at
-/proc/modules and see that both LKMs are loaded
-and one depends on the other:
-
-msdos 5632 0 (unused)
-fat 30400 0 [[msdos]
-
-
-
-How did I know fat.o was the module I was
-missing? Just a little ingenuity. A more robust way to address this
-problem is to use __depmod__ and
-__modprobe__ instead of
-__insmod__, as discussed below.
-
-
-
-When your symbols look like "fat_date_unix2dos_R83fb36a1",
-the problem may be more complex than just getting prerequisite LKMs
-loaded. See Section 6.
-
-
-
-When the error message is "kernel/module version mismatch," see
-Section 6.
-
-
-
-Often, you need to pass parameters to the LKM when you insert it. For
-example, a device driver wants to know the address and IRQ of the
-device it is supposed to drive. Or the network driver wants to know
-how much diagnostic tracing you want it to do. Here is an example of
-that:
-
-
-insmod ne.o io=0x300 irq=11
-
-Here, I am loading the device driver for my NE2000-like Ethernet adapter
-and telling it to drive the Ethernet adapter at IO address 0x300, which
-generates interrupts on IRQ 11.
-
-
-
-There are no standard parameters for LKMs and very few conventions.
-Each LKM author decides what parameters __insmod__ will
-take for his LKM. Hence, you will find them documented in the
-documentation of the LKM. This HOWTO also compiles a lot of LKM
-parameter information in Section 13. For general
-information about LKM parameters, see Section 8.
-
-
-
-To remove an LKM from the kernel, the command is like
-
-rmmod ne
-
-
-
-There is a command __lsmod__ to list the
-currently loaded LKMs, but all it does is dump the contents of
-/proc/modules, with column headings, so you may
-just want to go to the horse's mouth and forget about
-__lsmod__.
-
-----
-!!5.1. Could Not Find Kernel Version...
-
-A common error is to try to insert an object file which is not an LKM.
-For example, you configure your kernel to have the USB core module
-bound into the base kernel instead of generated as an LKM. In that
-case, you end up with a file usbcore.o, which looks
-pretty much the same as the usbcore.o you would get if
-you built it as an LKM. But you can't __insmod__ that
-file.
-
-
-
-So do you get an error message telling you that you should have
-configured the kernel to make USB core function an LKM? Of course not.
-This is Unix, and explanatory error messages are seen as a sign of
-weakness. The error message is
-
-$ insmod usbcore.o
-usbcore.o: couldn't find the kernel version this module was compiled for
-
-
-
-What __insmod__ is telling you is that it looked in
-usbcore.o for a piece of information any legitimate
-LKM would have -- the kernel version with which the LKM was intended
-to be used -- and it didn't find it. We know now that the reason it
-didn't find it is that the file isn't an LKM. See
-Section 10.2.
-
-----
-!!5.2. Intelligent Loading Of LKMs - Modprobe
-
-Once you have module loading and unloading figured out using
-__insmod__ and __rmmod__, you can let
-the system do more of the work for you by using the higher level
-program __modprobe__. See the
-__modprobe__ man page for details.
-
-
-
-The main thing that __modprobe__ does is automatically
-load the prerequisites of an LKM you request. It does this with the
-help of a file that you create with __depmod__ and keep
-on your system.
-
-
-
-Example:
-
-modprobe msdos
-
-
-
-This performs an __insmod__ of
-msdos.o, but before that does an
-__insmod__ of fat.o, since you
-have to have fat.o loaded before you can load
-msdos.o.
-
-
-
-The other major thing __modprobe__ does for you is to
-find the object module containing the LKM given just the name of the
-LKM. For example, __modprobe msdos__ might load
-/lib/2.4.2-2/fs/msdos.o. Check out the man pages
-for __modprobe__ and the configuration file
-modules.conf (usually
-/etc/modules.conf) for details on the search
-rules __modprobe__ uses.
-
-
-
-__depmod__ scans your LKM object files (typically all
-the .o files in the appropriate /lib/modules subdirectory) and figures
-out which LKMs prerequire (refer to symbols in) other LKMs. It
-generates a dependency file (typically named
-modules.dep), which you normally keep in
-/lib/modules for use by
-__modprobe__.
-
-
-
-You can use __modprobe__ to remove stacks of LKMs as
-well.
-
-
-
-Via the LKM configuration file (typically
-/etc/modules.conf), you can fine tune the
-dependencies and do other fancy things to control LKM selections. And
-you can specify programs to run when you insert and remove LKMs, for
-example to initialize a device driver.
-
-
-
-If you are maintaining one system and memory is not in short supply,
-it is probably easier to avoid __modprobe__ and the
-various files and directories it needs, and just do raw
-__insmod__s in a startup script.
-
-----
-!!5.3. Automatic LKM Loading and Unloading
-!5.3.1. Automatic Loading
-
-You can cause an LKM to be loaded automatically when the kernel first
-needs it. You do this with either a kerneld daemon
-or with the more recent invention, the kernel module loader, which is
-part of Linux.
-
-
-
-As an example, let's say you run a program that executes an open
-system call for a file in an MS-DOS filesystem. But you don't have a
-filesystem driver for the MS-DOS filesystem either bound into your
-base kernel or loaded as an LKM. So the kernel does not know how to
-access the file you're opening on the disk.
-
-
-
-The kernel recognizes that it has no filesystem driver for MS-DOS, but
-that one of the two automatic module loading facilities are available
-and uses it to cause the LKM to be loaded. The kernel then proceeds
-with the open.
-
-
-
-Both kerneld and the kernel module loader use
-__modprobe__, ergo __insmod__, to insert
-LKMs.
-
-----__5.3.1.1. Kerneld__
-
-kerneld is explained at length in the Kerneld
-mini-HOWTO, available from the Linux
-Documentation Project.
-
-
-
-kerneld is a user process, which runs the
-kerneld program from the
-modutils package. kerneld
-sets up an IPC message channel with the kernel. When the kernel needs
-an LKM, it sends a message on that channel to kerneld
-and kerneld runs __modprobe__
-to load the LKM, then sends a message back to the kernel to say that it
-is done.
-
-----__5.3.1.2. Kernel Module Loader__
-
-There is some documentation of the kernel module loader in the file
-Documentation/kmod.txt in the Linux source tree.
-As of this writing, this section is more complete and accurate than
-that file. You can also look at its source code in
-kernel/kmod.c.
-
-
-
-The kernel module loader is an optional part of the Linux kernel. You
-get it if you select the CONFIG_KMOD feature when you configure the
-kernel at build time.
-
-
-
-When a kernel that has the kernel module loader needs an LKM, it
-creates a user process (owned by the superuser, though) that executes
-__modprobe__ to load the LKM, then exits. By default,
-it finds __modprobe__ as
-/sbin/modprobe, but you can set up any program
-you like as __modprobe__ by writing its file name to
-/proc/sys/kernel/modprobe. For example:
-
-$ echo "sbin/mymodprobe" b/proc/sys/kernel/modprobe
-
-
-
-The kernel module loader passes the following arguments to
-__modprobe__: Argument Zero is the full file name of
-__modprobe__. The regular arguments are
--s, -k, and the name of the LKM
-that the kernel wants. -s is the user-hostile
-form of --syslog; -k is the
-cryptic way to say --autoclean. I.e. messages
-from __modprobe__ will go to syslog and the loaded
-LKM will have the "autoclean" flag set.
-
-
-
-The kernel module loader runs __modprobe__ with the
-following environment variables (only): HOME=/;
-TERM=linux;
-PATH=/sbin:/usr/sbin:/bin:/usr/bin.
-
-
-
-The kernel module loader was new in Linux 2.2 and was designed to take
-the place of kerneld. It does not, however, have all
-the features of kerneld.
-
-
-
-In Linux 2.2, the kernel module loader creates the above mentioned
-process directly. In Linux 2.4, the kernel module loader submits the
-module loading work to Keventd and it runs as a child process of
-Keventd.
-
-
-
-The kernel module loader is a pretty strange beast. It violates
-layering as Unix programmers generally understand it and consequently
-is inflexible, hard to understand, and not robust. Many system
-designers would bristle just at the fact that it has the PATH
-hardcoded. You may prefer to use kerneld instead,
-or not bother with automatic loading of LKMs at all.
-
-----
-!5.3.2. Automatic Unloading - Autoclean__5.3.2.1. The Autoclean Flag__
-
-Each loaded LKM has an autoclean flag which can be set or unset.
-You control this flag with parameters to the
-init_module system call. Assuming you do that via
-__insmod__, you use the --autoclean
-option.
-
-
-
-You can see the state of the autoclean flag in
-/proc/modules. Any LKM that has the flag set has
-the legend autoclean next to it.
-
-----__5.3.2.2. Removing The Autoclean LKMs__
-
-The purpose of the autoclean flag is to be let you automatically
-remove LKMs that haven't been used in a while (typically 1 minute).
-So by using automatic module loading and unloading, you can keep only
-parts of the kernel that are presently needed loaded, and save memory.
-
-
-
-This is less important than it once was, with memory being much
-cheaper. If you don't need to save memory, you shouldn't bother with
-the complexity of module loader processes. Just load everything you
-might need via an initialization script and keep it loaded.
-
-
-
-There is a form of the delete_module system call that
-says, "remove all LKMs that have the autoclean flag set and haven't
-been used in a while." Kerneld typically calls this once per
-minute. You can call it explicitly with an __rmmod --all__
-command.
-
-
-
-As the kernel module loader does not do any removing of LKMs, if you
-use that you might want to have a cron job that does a __rmmod
---all__ periodically.
-
-----
-!!5.4. /proc/modules
-
-To see the presently loaded LKMs, do
-
-cat /proc/modules
-
-
-
-You see a line like
-
-
-serial 24484
-
-The left column is the name of the LKM, which is normally the name of
-the object file from which you loaded it, minus the ".o" suffix.
-You can, however, choose any name you like with an option on
-__insmod__.
-
-
-
-The "24484" is the size in bytes of the LKM in memory.
-
-
-
-The "" is the use count. It tells how many things presently depend
-on the LKM being loaded. Typical "things" are open devices
-or mounted fileystems. It is important because you cannot remove an
-LKM unless the use count is zero. The LKM itself maintains this
-count, but the module manager uses it to decide whether to permit an
-unload.
-
-
-
-There is an exception to the above description of the use count. You
-may see -1 in the use count column. What that means is that this LKM
-does not use use counts to determine when it is OK to unload.
-Instead, the LKM has registered a subroutine that the module manager
-can call that will return an indication of whether or not it is OK to
-unload the LKM. In this case, the LKM ought to provide you with some
-custom interface, and some documentation, to determine when the LKM is
-free to be unloaded.
-
-----
-!!5.5. Where Are My LKM Files On My System?
-
-The LKM world is flexible enough that the files you need to load could
-live just about anywhere on your system, but there is a convention
-that most systems follow: The LKM .o files are in the directory
-/lib/modules, divided
-into subdirectories. There is one subdirectory for each version of
-the kernel, since LKMs are specific to a kernel (see Section 6). Each subdirectory contains a complete set
-of LKMs.
-
-
-
-The subdirectory name is the value you get from the __uname
---release__ command, for example 2.2.19.
-Section 6.3 tells how you control that value.
-
-
-
-When you build Linux, a standard __make modules__ and
-__make modules_install__ should install all the LKMs
-that are part of Linux in the proper release subdirectory.
-
-
-
-If you build a lot of kernels, another organization may be more
-helpful: keep the LKMs together with the base kernel and other kernel-related
-files in a subdirectory of /boot. The only drawback of this is that you
-cannot have /boot reside on a tiny disk partition. In some systems, /boot
-is on a special tiny "boot partition" and contains only enough files
-to get the system up to the point that it can mount other filesystems.
-
-----
-!!!6. Unresolved !SymbolsThe most common and most frustrating failure in loading an LKM is a bunch
-of error messages about unresolved symbols, like this:
-
- msdos.o: unresolved symbol fat_date_unix2dos
-msdos.o: unresolved symbol fat_add_cluster1
-msdos.o: unresolved symbol fat_put_super
-...There are actually a bunch of different problems that result in this
-symptom. In any case, you can get closer to the problem by looking at
-/proc/ksymsand confirming that the symbols in the
-message are indeed not in the list.
-----
-!!6.1. Some LKMs Prerequire Other LKMsOn reason you get this is because you have not loaded another
-LKM that contains instructions or data that your LKM needs to access.
-A primary purpose of __modprobe__is to avoid this
-failure. See Section 5.2.----
-!!6.2. An LKM Must Match The Base Kernel
-
-The designers of loadable kernel modules realized there would be a
-problem with having the kernel in multiple files, possibly distributed
-independently of one another. What if the LKM
-mydriver.o was written and compiled to work with
-the Linux 1.2.1 base kernel, and then someone tried to load it into a
-Linux 1.2.2 kernel? What if there was a change between 1.2.1 and
-1.2.2 in the way a kernel subroutine that
-mydriver.o calls works? These are internal
-kernel subroutines, so what's to stop them from changing from one
-release to the next? You could end up with a broken kernel.
-
-
-
-To address this problem, the creators of LKMs endowed them with a
-kernel version number. The special .modinfo
-section of the mydriver.o object file in this example has
-"1.2.1" in it because it was compiled using header files from Linux
-1.2.1. Try to load it into a 1.2.2 kernel and
-__insmod__ notices the mismatch and fails,
-telling you you have a kernel version mismatch.
-
-
-
-But wait. What's the chance that there really is an incompatibility
-between Linux 1.2.1 and 1.2.2 that will affect
-mydriver.o? mydriver.o only
-calls a few subroutines and accesses a few data structures. Surely
-they don't change with every minor release. Must we recompile every
-LKM against the header files for the particular kernel into which we
-want to insert it?
-
-
-
-To ease this burden, __insmod__ has a
-''-f'' option that "forces"
-__insmod__ to ignore the kernel version
-mismatch and insert the module anyway. Because it is so unusual for
-there to be a significant difference between any two kernel versions,
-I recommend you always use ''-f''. You will, however,
-still get a warning message about the mismatch. There's no way to
-shut that off.
-
-
-
-But LKM designers still wanted to address the problem of incompatible
-changes that do occasionally happen. So they invented a very clever
-way to allow the LKM insertion process to be sensitive to the actual
-content of each kernel subroutine the LKM uses. It's called symbol
-versioning (or sometimes less clearly, "module versioning."). It's
-optional, and you select it when you configure the kernel via the
-"CONFIG_MODVERSIONS" kernel configuration option.
-
-
-
-When you build a base kernel or LKM with symbol versioning, the
-various symbols exported for use by LKMs get defined as macros. The
-definition of the macro is the same symbol name plus a hexadecimal
-hash value of the parameter and return value types for the subroutine
-named by the symbol (based on an analysis by the program
-__genksyms__ of the source code for the subroutine).
-So let's look at the register_chrdev subroutine.
-register_chrdev is a subroutine in the base
-kernel that device driver LKMs often call. With symbol versioning,
-there is a C macro definition like
-
-
- #define register_chrdev register_chrdev_Rc8dc8350
-
-This macro definition is in effect both in the C source file that
-defines register_chrdev and in any C source file
-that refers to register_chrdev, so while your
-eyes see register_chrdev as you read the code,
-the C preprocessor knows that the function is really called
-register_chrdev_Rc8dc8350.
-
-
-
-What is the meaning of that garbage suffix? It is a hash of the data
-types of the parameters and return value of
-register_chrdev. No two combinations of
-parameter and return value types have the same hash value.
-
-
-
-So let's say someone adds a paramater to
-register_chrdev between Linux 1.2.1 and Linux
-1.2.2. In 1.2.1, register_chrdev is a macro for
-register_chrdev_Rc8dc8350, but in 1.2.2, it is a
-macro for register_chrdev_R12f8dc01. In
-mydriver.o, compiled with Linux 1.2.1 header
-files, there is an external reference to
-register_chrdev_Rc8dc8350, but there is no such
-symbol exported by the 1.2.2 base kernel. Instead, the 1.2.2 base
-kernel exports a symbol register_chrdev_R12f8dc01.
-
-
-
-So if you try to insmod this 1.2.1 mydriver.o
-into this 1.2.2 base kernel, you will fail. And the error message
-isn't one about mismatched kernel versions, but simply "unresolved
-symbol reference."
-
-
-
-As clever as this is, it actually works against you sometimes. The
-way __genksyms__ works, it often generates different
-hash values for parameter lists that are essentially the same.
-
-
-
-And symbol versioning doesn't even guarantee compatibility. It
-catches only a small subset of the kinds of changes in the definition
-of a function that can make it not backward compatible. If the way
-register_chrdev interprets one of its parameters
-changes in a non-backward-compatible way, its version suffix won't
-change -- the parameter still has the same C type.
-
-
-
-And there's no way an option like ''-f'' on
-__insmod__ can get around this.
-
-
-
-So it is generally not wise to use symbol versioning.
-
-
-
-Of course, if you have a base kernel that was compiled with symbol
-versioning, then you must have all your LKMs compiled likewise, and
-vice versa. Otherwise, you're guaranteed to get those "unresolved
-symbol reference" errors.
-
-----
-!!6.3. If You Run Multiple Kernels
-
-Now that we've seen how you often have different versions of an LKM
-for different base kernels, the question arises as to what to do
-about a system that has multiple kernel versions (i.e. you can
-choose a kernel at boot time). You want to make sure that the
-LKMs built for Kernel A get inserted when you boot Kernel A, but
-the LKMs built for Kernel B get inserted when you boot Kernel B.
-
-
-
-In particular, whenever you upgrade your kernel, if you're smart,
-you keep both the new kernel and the old kernel on the system
-until you're sure the new one works.
-
-
-
-The most common way to do this is with the LKM-hunting feature of
-__modprobe__. __modprobe__
-understands the conventional LKM file organization described in
-Section 5.5 and loads LKMs from the appropriate
-subdirectory depending on the kernel that is running.
-
-
-
-You set the __uname --release__ value, which is the
-name of the subdirectory in which __modprobe__ looks,
-by editing the main kernel makefile when you build the kernel and
-setting the VERSION, PATCHLEVEL, SUBLEVEL, and EXTRAVERSION variables
-at the top.
-
-----
-!!6.4. SMP symbolsBesides the checksum mentioned above, the symbol version prefix contains
-"smp" if the symbol is defined in or referenced by code that was
-built for symmetric multiprocessing (SMP) machines. That means it was
-built for use on a system that may have more than one CPU. You choose
-whether to build in SMP capability or not via the Linux kernel configuration
-process (__make config__, etc.), to wit with the
-CONFIG_SMP configuration option.
-So if you use symbol versioning, you will get unresolved symbols if the
-base kernel was built with SMP capability and the LKM you're inserting was
-not, or vice versa.
-If you don't use symbol versioning, never mind.
-Note that there's generally no reason to omit SMP capability from a
-kernel, even if you have only one CPU. Just because the capability is
-there doesn't mean you have to have multiple CPUs. However, there are
-some machines on which the SMP-capable kernel will not boot because it
-reaches the conclusion that there are zero CPUs!----
-!!6.5. You Are Not Licensed To Access The !SymbolThe copyright owners of some kernel code license their programs to the
-public to make and use copies, but only in restricted ways. For
-example, the license may say you may only call your copy of the
-program from a program which is similarly licensed to the public.
-(Is that confusing? Here's an example: Bob writes an LKM that provides
-data compression subroutines to other LKMs. He licenses his program
-to the public under the GNU Public License (GPL). According to some
-interpretations, that license says if you make a copy of Bob's LKM,
-you can't allow Mary's LKM to call its compression subroutines
-if Mary does not supply her source code to the world too. The idea is to
-encourage Mary to open up her source code).
-To support and enforce such a license, the licensor can cause his
-program to export symbols that contain the string "GPLONLY".
-The Linux interface header files are set up so that they will not
-generate references to GPLONLY symbols unless the programmer who
-includes the header files puts something in his code to state
-explicitly that he licenses his program under the GPL (General Public
-License) or equivalent.
-You shouldn't ordinarily see this failure. It means the LKM source code
-was written in a way that it will never load into any Linux kernel, so
-there would be no point in the author distributing it.----
-!!6.6. An LKM Must Match Prerequisite LKMs
-
-The same ways an LKM must be compatible with the base kernel, it must
-be compatible with any LKMs which it accesses (e.g. the first LKM calls a
-subroutine in the second). The preceding sections limit their discussions
-to the base kernel just to keep it simple.
-
-----
-!!!7. How To Boot Without A Disk Device Driver
-
-For most systems, the ATA disk device driver must be bound into the
-base kernel because the root filesystem is on an ATA disk
-[[2] and the kernel cannot mount the
-root filesystem, much less read any LKMs from it, without the ATA disk
-driver. But if you really want the device driver for your root
-filesystem to be an LKM,
here's how to do it with Initrd:
-
-
-
-"Initrd" is the name of the "initial ramdisk" feature of Linux. With
-this, you have your loader (probably LILO) load a filesystem into
-memory (as a ramdisk) before starting the kernel. When it starts the
-kernel, it tells it to mount the ramdisk as the root filesystem. You
-put the disk device driver for your real root filesystem and all the
-software you need to load it in that ramdisk filesystem. Your startup
-programs (which live in the ramdisk) eventually mount the real (disk)
-filesystem as the root filesystem. Note that a ramdisk doesn't
-require any device driver.
-
-
-
-This does not free you, however, from having to bind into the base
-kernel 1) the filesystem driver for the filesystem in your ramdisk,
-and 2) the executable interpreter for the programs in the ramdisk.
-
-----
-!!!8. About Module Parameters
-
-It is useful to compare parameters that get passed to LKMs and parameters
-that get passed to modules that are bound into the base kernel, especially
-since modules often can be run either way.
-
-
-
-We've seen above that you pass parameters to an LKM by specifying
-something like io=0x300 on the
-__insmod__ command. For a module that is bound into
-the base kernel, you pass parameters to it via the kernel boot
-parameters. One common way to specify kernel boot parameters is at a
-__lilo__ boot prompt. Another is with an
-append statement in the __lilo__
-configuration file.
-
-
-
-The kernel initializes an LKM at the time you load it. It initializes
-a bound-in module at boot time.
-
-
-
-Since there is only one string of kernel boot parameters, you need
-some way within that string to identify which parameters go to which
-modules. The rule for this is that if there is a module named
-xyz, then a kernel boot parameter named
-''xyz'' is for that module. The value of a kernel
-boot parameter is an arbitrary string that makes sense only to the
-module.
-
-
-
-This is why you sometimes see an LKM whose only parameter is its own
-name. E.g. you load the Mitsumi CDROM driver with a command like
-
- insmod mcd mcd=0x340
-It seems ridiculous to have the parameter named
-''mcd'' instead of, say, ''io'',
-but this is done for consistency with the case where you bind
-mcd into the base kernel, in which case you would
-select the I/O port address with the characters
-''mcd=0x340'' in the kernel boot parameters.
-
-----
-!!!9. Persistent Data
-
-Some LKMs are set up to retain information from one load to the next.
-This is called persistent data. When you remove one of these LKMs
-with __rmmod__, __rmmod__ extracts
-certain values from the LKM's working storage and stores them in a
-file. When you next insert the LKM with __insmod__,
-__insmod__ reads the persistent data from the file and
-inserts it into the LKM.
-
-
-
-See the ''--persist'' option on
-__insmod__ and __rmmod__.
-
-
-
-Persistent data was introduced in November 2000.
-
-----
-!!!10. Technical Details
-!!10.1. How They Work
-
-__insmod__ makes an init_module
-system call to load the LKM into kernel memory. Loading it is the
-easy part, though. How does the kernel know to use it? The answer is
-that the init_module system call invokes the
-LKM's initialization routine right after it loads the LKM.
-__insmod__ passes to init_module
-the address of the subroutine in the LKM named
-init_module as its initialization routine.
-
-
-
-(This is confusing -- every LKM has a subroutine named
-init_module, and the base kernel has a system
-call by that same name, which is accessible via a subroutine in the
-standard C library also named init_module).
-
-
-
-The LKM author set up init_module to call a
-kernel function that registers the subroutines that the LKM contains.
-For example, a character device driver's
-init_module subroutine might call the kernel's
-register_chrdev subroutine, passing the major and
-minor number of the device it intends to drive and the address of its
-own "open" routine among the arguments.
-register_chrdev records in base kernel tables
-that when the kernel wants to open that particular device, it should
-call the open routine in our LKM.
-
-
-
-But the astute reader will now ask how the LKM's
-init_module subroutine knew the address of the
-base kernel's register_chrdev subroutine. This
-is not a system call, but an ordinary subroutine bound into the base
-kernel. Calling it means branching to its address. So how does our
-LKM, which was not compiled anywhere near the base kernel, know that
-address? The answer to this is __insmod__ relocation.
-__insmod__ functions as a relocating linker/loader.
-The LKM object file contains an external reference to the symbol
-register_chrdev. __insmod__ does a
-query_module system call to find out the
-addresses of various symbols that the existing kernel exports.
-register_chrdev is among these.
-query_module returns the address for which
-register_chrdev stands and
-__insmod__ patches that into the LKM where the LKM
-refers to register_chrdev.
-
-
-
-If you want to see the kind of information __insmod__
-can get from a query_module system call, look at
-the contents of /proc/ksyms.
-
-
-
-Note that some LKMs call subroutines in other LKMs. They can do this
-because of the __ksymtab and
-.kstrtab sections in the LKM object files. These
-sections together list the external symbols within the LKM object file
-that are supposed to be accessible by other LKMs inserted in the
-future. __insmod__ looks at
-__ksymtab and .kstrtab and tells
-the kernel to add those symbols to its exported kernel symbols table.
-
-
-
-To see this for yourself, insert the LKM msdos.o
-and then notice in /proc/ksyms the symbol
-fat_add_cluster (which is the name of a subroutine
-in the fat.o LKM). Any subsequently inserted LKM
-can branch to fat_add_cluster, and in fact
-msdos.o does just that.
-
-----
-!!10.2. The .modinfo Section
-
-An ELF object file consists of various named sections. Some of them
-are basic parts of an object file, for example the
-.text section contains executable code that a
-loader loads. But you can make up any section you want and have it
-used by special programs. For the purposes of Linux LKMs, there is
-the .modinfo section. An LKM doesn't have to have
-a section named .modinfo to work, but the macros
-you're supposed to use to code an LKM cause one to be generated, so
-they generally do.
-
-
-
-To see the sections of an object file, including the
-.modinfo section if it exists, use the
-__objdump__ program. For example:
-
-
-
-To see all the sections in the object file for the msdos LKM:
-
-objdump msdos.o --section-headers
-To see the contents of the .modinfo section:
-
-objdump msdos.o --full-contents --section=.modinfo
-
-
-
-You can use the __modinfo__ program to interpret the
-contents of the .modinfo section.
-
-
-
-So what is in the .modinfo section and who uses it?
-__insmod__ uses the .modinfo section
-for the following:
-
-
-
-
-
-*
-
-It contains the kernel release number for which the module was built.
-I.e. of the kernel source tree whose header files were used in
-compiling the module.
-
-
-
-__insmod__ uses that information as explained in
-Section 6.
-
-
-*
-*
-
-It describes the form of the LKM's parameters.
-__insmod__ uses this information to format the
-parameters you supply on the __insmod__ command line
-into data structure initial values, which __insmod__
-inserts into the LKM as it loads it.
-
-
-*
-
-----
-!!10.3. The __ksymtab And .kstrtab Sections
-
-Two other sections you often find in an LKM object file are named
-__ksymtab and .kstrtab.
-Together, they list symbols in the LKM that should be accessible
-(exported) to other parts of the kernel. A symbol is just a text name
-for an address in the LKM. LKM A's object file can refer to an
-address in LKM B by name (say, getBinfo"). When
-you insert LKM A, after having inserted LKM B,
-__insmod__ can insert into LKM A the actual address
-within LKM B where the data/subroutine named
-getBinfo is loaded.
-
-
-
-See Section 10.1 for more mind-numbing details of symbol binding.
-
-----
-!!10.4. Ksymoops Symbols
-
-__insmod__ adds a bunch of exported symbols to the LKM
-as it loads it. These symbols are all intended to help
-__ksymoops__ do its job. __ksymoops__
-is a program that interprets and "oops" display. And
-"oops" display is stuff that the Linux kernel displays when
-it detects an internal kernel error (and consequently terminates a
-process). This information contains a bunch of addresses in the
-kernel, in hexadecimal.
-
-
-
-__ksymoops__ looks at the hexadecimal addresses, looks
-them up in the kernel symbol table (which you see in
-/proc/ksyms, and translates the addresses in the
-oops message to symbolic addresses, which you might be able to look
-up in an assembler listing.
-
-
-
-So lets say you have an LKM crash on you. The oops message contains
-the address of the instruction that choked, and what you want
-__ksymoops__ to tell you is 1) in what LKM is that
-instruction, and 2) where is the instruction relative to an assembler
-listing of that LKM? Similar questions arise for the data addresses
-in the oops message.
-
-
-
-To answer those questions, __ksymoops__ must be able to
-get the loadpoints and lengths of the various sections of the LKM from
-the kernel symbol table.
-
-
-
-Well, __insmod__ knows those addresses, so it just
-creates symbols for them and includes them in the symbols it loads
-with the LKM.
-
-
-
-In particular, those symbols are named (and you can see this for
-yourself by looking at /proc/ksyms):
-
-
-
-__insmod_name_Ssectionname_Llength
-
-
-
-name is the LKM name (as you would see in
-/proc/modules.
-
-
-
-sectionname is the section name, e.g. .text
-(don't forget the leading period).
-
-
-
-length is the length of the section, in decimal.
-
-
-
-The value of the symbol is, of course, the address of the section.
-
-
-
-Insmod also adds a pretty useful symbol that tells from what file
-the LKM was loaded. That symbol's name is
-
-
-
-__insmod_name_Ofilespec_Mmtime_Vversion
-
-
-
-name is the LKM name, as above.
-
-
-
-filespec is the file specification that was used to
-identify the file containing the LKM when it was loaded. Note that it
-isn't necessarily still under that name, and there are multiple
-file specifications that might have been used to refer to the same
-file. For example, ../dir1/mylkm.o and
-/lib/dir1/mylkm.o.
-
-
-
-mtime is the modification time of that file, in
-the standard Unix representation (seconds since 1969), in hexadecimal.
-
-
-
-version tells the kernel version level for which
-the LKM was built (same as in the .modinfo section).
-It is the value of the macro LINUX_VERSION_CODE
-in Linux's linux/version.h file. For example,
-132101.
-
-
-
-The value of this symbol is meaningless.
-
-----
-!!10.5. Other Symbols
-
-__insmod__
-adds another symbol, similar to the __ksymoops__
-symbols. This one tells where the persistent data lives in the
-LKM, which __rmmod__ needs to know in order to save
-the persistent data.
-
-
-
-__insmod_name_Plength
-
-----
-!!10.6. Memory Allocation For Loading
-
-This section is about how Linux allocates memory in which to load an LKM.
-It is not about how an LKM dynamically allocates memory, which is the same
-as for any other part of the kernel.
-
-
-
-The memory where an LKM resides is a little different from that where
-the base kernel resides. The base kernel is always loaded into one
-big contiguous area of real memory, whose real addresses are equal to
-is virtual addresses. That's possible because the base kernel is the
-first thing ever to get loaded (besides the loader) -- it has a wide
-open empty space in which to load. And since the Linux kernel is not
-pageable, it stays in it's homestead forever.
-
-
-
-By the time you load an LKM, real memory is all fragmented -- you
-can't simply add the LKM to the end of the base kernel. But the LKM
-needs to be in contiguous virtual memory, so Linux uses
-vmalloc to allocate a contiguous area of virtual
-memory (in the kernel address space), which is probably not contiguous
-in real memory. But ''the memory is still not
-pageable''. The LKM gets loaded into real page frames from
-the start, and stays in those real page frames until it gets unloaded.
-
-
-
-Some CPUs can take advantage of the properties of the base kernel to
-effect faster access to base kernel memory. For example, on one
-machine, the entire base kernel is covered by one page table entry
-and consequently one entry in the translation lookaside buffer (TLB).
-Naturally, that TLB entry is virtually always present. For LKMs on
-this machine, there is a page table entry for each memory page into
-which the LKM is loaded. Much more often, the entry for a page is not
-in the TLB when the CPU goes to access it, which means a slower access.
-
-
-
-This effect is probably trivial.
-
-
-
-It is also said that PowerPC Linux does something with its address
-translation so that transferring between accessing base kernel memory
-to accessing LKM memory is costly. I don't know anything solid about
-that.
-
-
-
-The base kernel contains within its prized contiguous domain a large
-expanse of reusable memory -- the kmalloc pool. In Linux 2.4, at
-the end of 2001, there was a proposal to make the module loader try
-first to get contiguous memory from that pool into which to load an
-LKM and only if a large enough space was not available, go to the
-vmalloc space. That function may be in some versions of Linux.
-
-----
-!!10.7. Linux internals
-
-If you're interested in the internal workings of the Linux kernel with
-respect to LKMs, this section can get you started. You should not need
-to know any of this in order to develop, build, and use LKMs.
-
-
-
-The code to handle LKMs is in the source files
-kernel/module.c in the Linux source tree.
-
-
-
-The kernel module loader (see Section 5.3) lives in
-kernel/kmod.c.
-
-
-
-(Ok, that wasn't much of a start, but at least I have a framework here
-for adding this information in the future).
-
-----
-!!!11. Writing Your Own Loadable Kernel Module
-
-''The Linux Kernel
-Module Programming Guide'' by Ori Pomerantz is a
-complete explanation of writing your own LKM. This book is also
-available in print.
-
-
-
-It is, however, a little out of date and contains an error or two.
-Here are a few things about writing an LKM that aren't in there.
-
-----
-!!11.1. bug in hello.c
-
-The simple hello.c program has a small bug that
-causes it to generate a warning about an implicit declaration of
-printk(). The warning is innocuous.
-
-
-
-The program is also more complicated than it needs to be with current
-Linux and depends on your having kernel messaging set up a certain way
-on your system to see it work. Finally, the program requires you to
-include ''-D'' options on your compile command to
-work, because it does not define some macros in the source code, where
-the definitions belong.
-
-
-
-Here is an improved version of hello.c. Compile
-this with the simple command
-
-$ gcc -c -Wall hello.c
-
-/* hello.c
-*
-* "Hello, world" - the loadable kernel module version.
-*
-* Compile this with
-*
-* gcc -c hello.c -Wall
-*/
-/* Declare what kind of code we want from the header files */
-#define __KERNEL__ /* We're part of the kernel */
-#define MODULE /* Not a permanent part, though. */
-/* Standard headers for LKMs */
-#include `linux/modversions.hb
-#include `linux/module.hb
-#define _LOOSE_KERNEL_NAMES
-/* With some combinations of Linux and gcc, tty.h will not compile if
-you don't define _LOOSE_KERNEL_NAMES. It's a bug somewhere.
-*/
-#include `linux/tty.hb /* console_print() interface */
-/* Initialize the LKM */
-int init_module()
-{
-console_print("Hello, world - this is the kernel speaking\n");
-/* More normal is printk(), but there's less that can go wrong with
-console_print(), so let's start simple.
-*/
-/* If we return a non zero value, it means that
-* init_module failed and the LKM can't be loaded
-*/
-return ;
-}
-/* Cleanup - undo whatever init_module did */
-void cleanup_module()
-{
-console_print("Short is the life of an LKM\n");
-}
-
-----
-!!11.2. Rubini Corbet: Linux Device Drivers
-
-The most popular book on writing device drivers is O'Reilly's
-''Linux Device Drivers'' by Alessandro
-Rubini and Jonathan Corbet.
-
-
-
-Even if you're writing an LKM that isn't a device driver, you can learn
-a lot from this book that will help you.
-
-
-
-The first edition of this book covers Linux 2., with notes about
-differences in 2.2. The second edition (June 2001) covers Linux 2.4.
-
-
-
-This book is available under the FDL. You can read it at
-http://www.xml.com/ldd/chapter/book/.
-
-----
-!!11.3. Improving On Use Counts
-
-In the original design, the LKM increments and decrements its use
-count to tell the module manager whether it is OK to unload it. For
-example, if it's a filesystem driver, it would increment the use count
-when someone mounts a filesystem of the type it drives, and decrement
-it at unmount time.
-
-
-
-Now, there is a more flexible alternative. Your LKM can register a
-function that the module manager will call whenever it wants to know
-if it is OK to unload the module. If the function returns a
-true value, that means the LKM is busy and cannot
-be unloaded. If it returns a false value, the LKM
-is idle and can be unloaded. The module manager holds the big kernel
-lock from before calling the module-busy function until after its
-cleanup subroutine returns or sleeps, and unless you've done something
-odd, that should mean that your LKM cannot become busy between the
-time that you report "not busy" and the time you clean up.
-
-
-
-So how do you register the module-busy function? By putting its
-address in the unfortunately named can_unload field
-in the module descriptor ("struct module"). The name is truly
-unfortunate because the boolean value it returns is the exact opposite
-of what "can unload" means: true if the module manager
-''cannot'' unload the LKM.
-
-
-
-The module manager ensures that it does not attempt to unload the
-module before its initialization subroutine has returned or sleeps, so
-you are safe in setting the can_unload field
-anywhere in the initialization subroutine except after a sleep.
-
-----
-!!!12. Related Documentation
-
-For modules that are part of Linux (i.e. distributed with the base
-kernel), you can sometimes find documentation in the Documentation subdirectory of the Linux
-source code.
-
-
-
-Many LKMs can be alternatively bound into the base kernel. If you do
-that, you will pass parameters to them via the kernel "command line,"
-which in its most basic form means via a prompt at boot time.
-''The !BootPrompt HOWTO'' by Paul Gortmaker
-`Paul.Gortmaker@anu.edu.aub will help you with that. It
-is available from the Linux
-Documentation Project.
-
-
-
-Don't forget that the source code of Linux and any LKM is always the
-documentation of last resort, and the most trustworthy.
-
-----
-!!!13. Individual Modules
-
-In this chapter, I document individual LKMs. Where possible, I do this
-by reference to more authoritative documentation for the particular LKM
-(probably maintained by the same person who maintains the LKM code).
-
-----
-!!13.1. Executable Interpreters
-
-You must have at least one executable interpreter bound into the
-base kernel, because in order to load an executable interpreter LKM,
-you have to run an executable and something has to interpret that
-executable.
-
-
-
-That one bound-in executable interpreter is almost certainly the ELF
-interpreter, since virtually all executables in a Linux system are
-ELF.
-
-
-
-Historical note: Before ELF existed on Linux (c. 1995), the normal
-executable format was a.out. For a while, part ELF/part a.out
-systems were common. Some still exist.
-
-----
-!13.1.1. binfmt_aout: executable interpreter for a.out format
-
-a.out is the venerable executable format that was common in Unix's
-early history and originally Linux's only executable format. To this
-day, the default name of the executable output file of the GNU
-compiler is a.out (regardless of what it's format
-is).
-
-
-
-If you try to run an a.out executable without this, your
-exec system call fails with a "cannot execute
-binary file" error.
-
-
-
-There are no LKM parameters.
-
-
-
-Example:
-
-modprobe binfmt_aout
-
-----
-!13.1.2. binfmt_elf: executable interpreter for ELF format
-
-ELF is the normal executable format on Linux systems.
-
-
-
-It's almost inconceivable that you wouldn't have this executable
-interpreter bound into the base kernel (if for no other reason that
-your __insmod__ is probably an ELF executable).
-However, it is conceptually possible to leave it out of the base
-kernel and insert it as an LKM.
-
-
-
-There are no LKM parameters.
-
-
-
-Example:
-
-modprobe binfmt_elf
-
-----
-!13.1.3. binfmt_java: executable interpreter for Java bytecode
-
-Java is a relatively modern object oriented programming language.
-Java programs are traditionally compiled into "Java bytecode" which is
-meant to be interpreted by a Java bytecode interpreter. The point of
-this new object language is that the bytecode object files are
-portable: Although different systems require different object formats,
-as long as each system has a bytecode interpreter, it can run bytecode
-object files. (This only works for a while, of course. If
-portability were that easy, all systems today would use the same
-object format anyway).
-
-
-
-While the intent was that the bytecode interpreter would run as a user
-space program, with this LKM you can make the Linux kernel interpret
-Java bytecode like any other executable format. So you can run a
-program compiled from Java the same as you would run a program
-compiled from C (e.g. type its name at a command shell prompt).
-
-
-
-In practice, the advantages of the intermediate bytecode language have
-not been proven and it is quite common to compile Java directly to a
-more traditional executable format, such as ELF. If you do that, you
-don't need __binfmt_java__.
-
-
-
-There are no LKM parameters.
-
-
-
-Example:
-
-modprobe binfmt_java
-
-----
-!!13.2. Block Device Drivers
-!13.2.1. floppy: floppy disk driver
-
-This is the device driver for floppy disks. You need this in order to
-access a floppy disk in any way.
-
-
-
-This LKM is documented in the file README.fd in
-the linux/drivers/block
-directory of the Linux source tree. For detailed up to date
-information refer directly to this file.
-
-
-
-Note that if you boot (or might boot) from a floppy disk or with a
-root filesystem on a floppy disk, you must have this driver bound into
-the base kernel, because your system will need it before it has a
-chance to insert the LKM.
-
-
-
-Example:
-
-
-modprobe floppy 'floppy="daring two_fdc ,thinkpad 0x8,fifo_depth"'
-
-
-
-There is only one LKM parameter: ''floppy''. But
-it contains many subparameters. The reason for this unusual parameter
-format is to be consistent with the way you would specify the same
-things in the kernel boot parameters if the driver were bound into the
-base kernel.
-
-
-
-The value of ''floppy'' is a sequence of
-blank-delimited words. Each of those words is one of the following
-sequences of comma-delimited words:
-
-
-
-
-
-; asus_pci:
-
- Sets the bit mask of allowed drives to allow only units 0 and
-1. Obsolete, as this is the default setting anyways
-
-
-; daring:
-
- Tells the floppy driver that you have a well behaved floppy
-controller. This allows more efficient and smoother
-operation, but may fail on certain controllers. This may
-speed up certain operations.
-
-
-; ,daring:
-
- Tells the floppy driver that your floppy controller should be used
-with caution.
-
-
-; one_fdc:
-
- Tells the floppy driver that you have only floppy controller
-(default).
-
-
-; address,two_fdc:
-
- Tells the floppy driver that you have two floppy
-controllers. The second floppy controller is assumed to be
-at address. This option is not needed if
-the second controller is at address 0x370, and if you use
-the 'cmos' option
-
-
-; two_fdc:
-
- Like above, but with default address
-
-
-; thinkpad:
-
- Tells the floppy driver that you have an IBM Thinkpad model
-notebook computer. Thinkpads use an inverted convention for
-the disk change line.
-
-
-; ,thinkpad:
-
- Tells the floppy driver that you don't have a Thinkpad.
-
-
-; nodma:
-
- Tells the floppy driver not to use DMA for data transfers.
-This is needed on HP Omnibooks, which don't have a workable
-DMA channel for the floppy driver. This option is also
-useful if you frequently get "Unable to allocate DMA
-memory" messages. Indeed, DMA memory needs to be
-continuous in physical memory, and is thus harder to find,
-whereas non-DMA buffers may be allocated in virtual
-memory. However, I advise against this if you have an FDC
-without a FIFO (8272A or 82072). 82072A and later are
-OK). You also need at least a 486 to use nodma. If you use
-nodma mode, I suggest you also set the FIFO threshold to 10
-or lower, in order to limit the number of data transfer
-interrupts.
-
-
-
-
- If you have a FIFO-able FDC, the floppy driver
-automatically falls back on non DMA mode if it can't find
-any DMA-able memory. If you want to avoid this, explicitly
-specify "yesdma".
-
-
-; omnibook:
-
- Same as ''nodma''.
-
-
-; yesdma:
-
- Tells the floppy driver that a workable DMA channel is available
-(the default).
-
-
-; nofifo:
-
- Disables the FIFO entirely. This is needed if you get "Bus
-master arbitration error" messages from your Ethernet card (or
-from other devices) while accessing the floppy.
-
-
-; fifo:
-
- Enables the FIFO (default)
-
-
-; threshold,fifo_depth:
-
- Sets the FIFO threshold. This is mostly relevant in DMA
-mode. If this is higher, the floppy driver tolerates more
-interrupt latency, but it triggers more interrupts (i.e. it
-imposes more load on the rest of the system). If this is
-lower, the interrupt latency should be lower too (faster
-processor). The benefit of a lower threshold is fewer
-interrupts.
-
-
-
-
- To tune the fifo threshold, switch on over/underrun
-messages using 'floppycontrol --messages'. Then access a
-floppy disk. If you get a huge amount of "Over/Underrun -
-retrying" messages, then the fifo threshold is too low.
-Try with a higher value, until you only get an occasional
-Over/Underrun.
-
-
-
-
- The value must be between 0 and 0xf, inclusive.
-
-
-
-
- As you insert and remove the LKM to try different values,
-remember to redo the 'floppycontrol --messages' every time
-you insert the LKM. You shouldn't normally have to tune
-the fifo, because the default (0xa) is reasonable.
-
-
-; drive,type,cmos:
-
- Sets the CMOS type of drive to
-type. This is mandatory if you have
-more than two floppy drives (only two can be described in
-the physical CMOS), or if your BIOS uses non-standard CMOS
-types. The CMOS types are:
-
-
-
-
-; :
-
- Use the value of the physical CMOS
-
-
-; 1:
-
-5 1/4 DD
-
-; 2:
-
-5 1/4 HD
-
-; 3:
-
-3 1/2 DD
-
-; 4:
-
-3 1/2 HD
-
-; 5:
-
-3 1/2 ED
-
-; 6:
-
-3 1/2 ED
-
-; 16:
-
-unknown or not installed
-
-
-
-
-
-
- (Note: there are two valid types for ED drives. This is
-because 5 was initially chosen to represent floppy
-''tapes'', and 6 for ED drives. AMI
-ignored this, and used 5 for ED drives. That's why the
-floppy driver handles both)
-
-
-; unexpected_interrupts:
-
- Print a warning message when an unexpected interrupt is received.
-(default behavior)
-
-
-; no_unexpected_interrupts:
-
- Don't print a message when an unexpected interrupt is
-received. This is needed on IBM L40SX laptops in certain
-video modes. (There seems to be an interaction between
-video and floppy. The unexpected interrupts only affect
-performance, and can safely be ignored.)
-
-
-; L40SX:
-
- Same as ''no_unexpected_interrupts''.
-
-
-; broken_dcl:
-
- Don't use the disk change line, but assume that the disk
-was changed whenever the device node is reopened. Needed
-on some boxes where the disk change line is broken or
-unsupported. This should be regarded as a stopgap measure,
-indeed it makes floppy operation less efficient due to
-unneeded cache flushings, and slightly more unreliable.
-Please verify your cable, connection and jumper settings if
-you have any DCL problems. However, some older drives, and
-also some laptops are known not to have a DCL.
-
-
-; debug:
-
- Print debugging messages
-
-
-; messages:
-
- Print informational messages for some operations (disk change
-notifications, warnings about over and underruns, and about
-autodetection)
-
-
-; silent_dcl_clear:
-
- Uses a less noisy way to clear the disk change line (which
-doesn't involve seeks). Implied by daring.
-
-
-; nr,irq:
-
- Tells the driver to expect interrupts on IRQ
-nr instead of the conventional IRQ 6.
-
-
-; nr,dma:
-
- Tells the driver to use DMA channel nr
-instead of the
-conventional DMA channel 2.
-
-
-; slow:
-
- Use PS/2 stepping rate: PS/2 floppies have much slower step
-rates than regular floppies. It's been recommended that
-take about 1/4 of the default speed in some more extreme
-cases.
-
-
-; mask,allowed_drive_mask:
-
- Sets the bitmask of allowed drives to mask.
-By default,
-only units 0 and 1 of each floppy controller are allowed.
-This is done because certain non-standard hardware (ASUS
-PCI motherboards) mess up the keyboard when accessing units
-2 or 3. This option is somewhat obsoleted by the 'cmos'
-option.
-
-
-; all_drives:
-
- Sets the bitmask of allowed drives to all drives. Use this
-if you have more than two drives connected to a floppy
-controller.
-
-
-----
-!13.2.2. loop: loop device driver
-
-This module lets you mount a filesystem that is stored in a regular
-file (in another filesystem). One use of this is to test an ISO 9660
-filesystem before irreversibly burning it onto a CD. You build the
-filesystem in a 650 MB regular file. That file will be the input to
-the CD burning program. But you can define that file as a loopback
-device and then mount the filesystem right from the file. It can also
-give you a handy way to transmit collections of files over a network.
-It's like a tar file, only you don't have to pack and unpack it -- you
-just mount the original file.
-
-
-
-You can also encrypt or compress the file. To do that, you need a
-recent version of mount and other patches for DES and IDEA. They can
-
-
-
-Do not confuse these loop devices with the "loopback device"
-used for network connections from the machine to itself. That isn't
-actually a device at all - it's a network interface.
-
-
-
-Example:
-
-modprobe loop
-
-
-
-The module has no parameters.
-
-----
-!13.2.3. linear: linear (non-RAID) disk array device driver
-
-This driver lets you combine several disk partitions into one
-logical block device.
-
-
-
-If you use this, then your multiple devices driver will be able to use
-the so-called linear mode, i.e. it will combine the disk
-partitions by simply appending one to the other.
-
-
-
-See ''Software-RAID-HOWTO''.
-
-
-
-Example:
-
-modprobe linear
-
-
-
-There are no module parameters.
-
-----
-!13.2.4. raid0: RAID-0 device driver
-
-This driver lets you combine several disk partitions into one logical
-block device.
-
-
-
-If you use this, then your multiple devices driver will be able to use
-the so-called raid0 mode, i.e. it will combine the disk partitions
-into one logical device in such a fashion as to fill them up evenly,
-one chunk here and one chunk there. This will increase the throughput
-rate if the partitions reside on distinct disks.
-
-
-
-See ''Software-RAID-HOWTO''.
-
-
-
-Example:
-
-modprobe raid0
-
-
-
-There are no module parameters.
-
-----
-!13.2.5. rd: ramdisk device driver
-
-A ramdisk is a block device whose storage is composed of system memory
-(real memory; not virtual). You can use it like a very fast disk
-device and also in circumstances where you need a device, but don't
-have traditional hardware devices to play with.
-
-
-
-A common example of the latter is for a rescue system -- a system
-you use to diagnose and repair your real system. Since you don't
-want to mess with your real disks, you run off ramdisks. You might
-load data into these ramdisks from external media such as floppy
-disks.
-
-
-
-Sometimes, you have your boot loader (e.g. __lilo__)
-create a ramdisk and load it with data (perhaps from a floppy disk).
-Of course, if you do this, you cannot use the LKM version of the
-ramdisk driver because the driver will have to be in the kernel at
-boot time.
-
-
-
-A ramdisk is actually conceptually simple in Linux. Disk devices
-operate through memory because of the buffer cache. The only
-difference with a ramdisk is that you never actually get past the
-buffer cache to a real device. This is because with a ramdisk, 1)
-when you first access a particular block, Linux just assumes it is
-all zeroes; and 2) the device's buffer cache blocks are never
-written to the device, ergo never stolen for use with other devices.
-This means reads and writes are always to the buffer cache and never
-reach the device.
-
-
-
-There is additional information about ramdisks in the file
-Documentation/ramdisk.txt in the Linux source
-tree.
-
-
-
-Example:
-
- modprobe rd
-
-
-
-There are no module parameters that you can supply to the LKM, but
-if you bind the module into the base kernel, there are kernel parameters
-you can pass to it. See ''!BootPrompt-HOWTO''.
-
-----
-!13.2.6. xd: XT disk device driver
-
-Very old 8 bit hard disk controllers used in the IBM XT computer. No,
-the existence of XT disk support does NOT mean that you can run Linux
-on an IBM XT :).
-
-
-
-Example:
-
-modprobe xd
-
-
-
-There are no module parameters.
-
-----
-!!13.3. SCSI Drivers
-
-Detailed information about SCSI drivers is in
-''SCSI-2.4-HOWTO''.
-
-
-
-Linux's SCSI function is implemented in three layers, and there are
-LKMs for all of them.
-
-
-
-In the middle is the mid-level driver or SCSI core. This consists of
-the __scsi_mod__ LKM. It does all those things that
-are common among SCSI devices regardless of what SCSI adapter you use
-and what class of device (disk, scanner, CD-ROM drive, etc.) it is.
-
-
-
-There is a low-level driver for each kind of SCSI adapter --
-typically, a different driver for each brand. For example, the
-low-level driver for Advansys adapters (made by the company which is
-now Connect.com) is named __advansys__. (If you are
-comparing ATA (aka IDE) and SCSI disk devices, this is a major
-difference -- ATA is simple and standard enough that one driver works
-with all adapters from all companies. SCSI is less standard and as a
-result you should have less confidence in any particular adapter being
-perfectly compatible with your system).
-
-
-
-High-level drivers present to the rest of the kernel an interface
-appropriate to a certain class of devices. The SCSI high-level driver
-for tape devices, __st__, for example, has ioctls to
-rewind. The high-level SCSI driver for CD-ROM drives,
-__sr__, does not.
-
-
-
-Note that you rarely need a high-level driver specific to a certain
-brand of device. At this level, there is little room for one brand to
-be distinguishable from another.
-
-
-
-One SCSI high-level driver that deserves special mention is
-__sg__. This driver, called the "SCSI generic" driver,
-is a fairly thin layer that presents a rather raw representation of
-the SCSI mid-level driver to the rest of the kernel. User space
-programs that operate through the SCSI generic driver (because they
-access device special files whose major number is the one registered
-by __sg__ (to wit, 21)) have a detailed understanding
-of SCSI protocols, whereas user space programs that operate through
-other SCSI high-level drivers typically don't even know what SCSI is.
-''SCSI-Programming-HOWTO'' has complete
-documentation of the SCSI generic driver.
-
-
-
-The layering order of the SCSI modules belies the way the LKMs depend
-upon each other and the order in which they must be loaded. You
-always load the mid-level driver first and unload it last. The
-low-level and high-level drivers can be loaded and unloaded in any
-order after that, and they hook themselves into and establish
-dependency on the mid-level driver at both ends. If you don't have a
-complete set, you will get a "device not found" error when you try to
-access a device.
-
-
-
-Most SCSI low-level (adapter) drivers don't have LKM parameters; they
-do generally autoprobe for card settings. If your card responds to
-some unconventional port address you must bind the driver into the
-base kernel and use kernel "command line" options. See
-''!BootPrompt-HOWTO''. Or you can twiddle The
-Source and recompile.
-
-
-
-Many SCSI low-level drivers have documentation in the drivers/scsi directory in the Linux
-source tree, in files called README.*.
-
-----
-!13.3.1. scsi_mod: SCSI mid-level driver
-
-Example:
-
-modprobe scsi_mod
-
-
-
-There are no module parameters.
-
-----
-!13.3.2. sd_mod: SCSI high-level driver for disk devices
-
-Example:
-
-modprobe sd_mod
-
-
-
-There are no module parameters.
-
-----
-!13.3.3. st: SCSI high-level driver for tape devices
-
-Example:
-
-modprobe st
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-----
-!13.3.4. sr_mod: SCSI high-level driver for CD-ROM drives
-
-Example:
-
-modprobe sr_mod
-
-
-
-There are no module parameters.
-
-----
-!13.3.5. sg: SCSI high-level driver for generic SCSI devices
-
-See the explanation of this special high-level driver above.
-
-
-
-Example:
-
-modprobe sg
-
-
-
-There are no module parameters.
-
-----
-!13.3.6. wd7000: SCSI low-level driver for 7000FASST
-
-Example:
-
-modprobe wd7000
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver atoprobes the card and requires installed BIOS.
-
-----
-!13.3.7. aha154x: SCSI low-level driver for Adaptec AHA152X/2825
-
-Example:
-
-modprobe aha154x
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver atoprobes the card and requires installed BIOS.
-
-----
-!13.3.8. aha1542: SCSI low-level driver for Adaptec AHA1542
-
-Example:
-
-modprobe aha1542
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card at 0x330 and 0x334 only.
-
-----
-!13.3.9. aha1740: SCSI low-level driver for Adaptec AHA1740 EISA
-
-Example:
-
-modprobe aha1740
-
-
-
-There are no module parameters.
-
-
-
-This driver autoprobes the card.
-
-----
-!13.3.10. aic7xxx: SCSI low-level driver for Adaptec AHA274X/284X/294X
-
-Example:
-
-modprobe aic7xxx
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card and BIOS must be enabled.
-
-----
-!13.3.11. advansys: SCSI low-level driver for !AdvanSys/Connect.com
-
-Example:
-
-modprobe advansys asc_iopflag=1 asc_ioport=0x110,0x330 asc_dbglvl=1
-
-
-
-Module Parameters:
-
-
-
-
-; asc_iopflag:
-
-
-
-; 1:
-
-enable port scanning
-
-; :
-
-disable port scanning
-
-; asc_ioport:
-
-I/O port addresses to scan for Advansys SCSI adapters
-
-; asc_dbglvl:
-
- debugging level:
-
-
-
-
-; :
-
-Errors only
-
-; 1:
-
-High level tracing
-
-; 2-N:
-
-Verbose tracing
-
-
-
-
-
-
-
-
-If you bind this driver into the base kernel, you can pass parameters
-to it via the kernel boot parameters. See
-''!BootPrompt-HOWTO''.
-
-----
-!13.3.12. in2000: SCSI low-level driver for Always IN2000
-
-Example:
-
-modprobe in2000
-
-
-
-There are no module parameters.
-
-
-
-This driver autoprobes the card. No BIOS is required.
-
-----
-!13.3.13. !BusLogic: SCSI low-level driver for !BusLogic
-
-The list of !BusLogic cards this driver can drive is long. Read file
-drivers/scsi/README.!BusLogic in the Linux source
-tree to get the total picture.
-
-
-
-Example:
-
-modprobe !BusLogic
-
-
-
-There are no module parameters.
-
-
-
-If you bind this driver into the base kernel, you can pass parameters
-to it via the kernel boot parameters. See
-''!BootPrompt-HOWTO''.
-
-----
-!13.3.14. dtc: SCSI low-level driver for DTC3180/3280
-
-Example:
-
-modprobe dtc
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card.
-
-----
-!13.3.15. eata: SCSI low-level driver for EATA ISA/EISA
-
-This driver handles DPT PM2011/021/012/022/122/322.
-
-
-
-Example:
-
-modprobe eata
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-----
-!13.3.16. eata_dma: SCSI low-level driver for EATA-DMA
-
-This driver handles DPT, NEC, AT8T, SNI, AST, Olivetti, and Alphatronix.
-
-
-
-This driver handles DPT Smartcache, Smartcache III and SmartRAID.
-
-
-
-Example:
-
-modprobe eata_dma
-
-
-
-There are no module parameters.
-
-
-
-Autoprobe works in all configurations.
-
-----
-!13.3.17. eata_pio: SCSI low-level driver for EATA-PIO
-
-This driver handles old DPT PM2001, PM2012A.
-
-
-
-Example:
-
- modprobe eata_pio
-
-
-
-There are no module parameters.
-
-----
-!13.3.18. fdomain: SCSI low-level driver for Future Domain 16xx
-
-Example:
-
-modprobe fdomain
-
-
-
-There are no module parameters.
-
-
-
-This driver autoprobes the card and requires installed BIOS.
-
-----
-!13.3.19. NCR5380: SCSI low-level driver for NCR5380/53c400
-
-Example:
-
-modprobe NCR5380 ncr_irq=xx ncr_addr=xx ncr_dma=xx ncr_5380=1 \
-ncr_53c400=1
-for a port mapped NCR5380 board:
-
-modprobe g_NCR5380 ncr_irq=5 ncr_addr=0x350 ncr_5380=1
-for a memory mapped NCR53C400 board with interrupts disabled:
-
-modprobe g_NCR5380 ncr_irq=255 ncr_addr=0xc8000 ncr_53c400=1
-
-
-
-Parameters:
-
-
-
-
-; ncr_irq:
-
- the irq the driver is to service. 255 means no or DMA interrupt.
-254 to autoprobe for an IRQ line if overridden on the command line.
-
-
-; ncr_addr:
-
- the I/O port address or memory mapped I/O address, whichever
-is appropriate, that the driver is to drive
-
-
-; ncr_dma:
-
- the DMA channel the driver is to use
-
-
-; ncr_5380:
-
- 1 = set up for a NCR5380 board
-
-
-; ncr_53c400:
-
- 1 = set up for a NCR53C400 board
-
-
-
-
-
-
-If you bind this driver into the base kernel, you can pass parameters
-to it via the kernel boot parameters. See
-''!BootPrompt-HOWTO''.
-
-----
-!13.3.20. NCR53c406a: SCSI low-level driver for NCR53c406a
-
-Example:
-
-modprobe NCR53c406a
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-----
-!13.3.21. 53c7,8xx.o: SCSI low-level driver for NCR53c7,8xx
-
-Example:
-
-modprobe 53c7,8xx
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card and requires installed BIOS.
-
-----
-!13.3.22. ncr53c8xx: SCSI low-level driver for PCI-SCS NCR538xx family
-
-Example:
-
-modprobe ncr53c8xx
-
-
-
-There are no module parameters.
-
-----
-!13.3.23. ppa: low-level SCSI driver for IOMEGA parallel port ZIP drive
-
-See the file drivers/scsi/README.ppa in the Linux
-source tree for details.
-
-
-
-Example:
-
-modprobe ppa ppa_base=0x378 ppa_nybble=1
-
-
-
-Parameters:
-
-
-
-
-; ppa_base:
-
- Base address of the PPA's I/O port. Default 0x378.
-
-
-; ppa_speed_high:
-
- Delay used in data transfers, in microseconds. Default is 1.
-
-
-; ppa_speed_low:
-
- Delay used in other operations, in microseconds. Default is 6.
-
-
-; ppa_nybble:
-
- 1 = Use 4-bit mode. 0 = don't. Default is .
-
-
-
-
-----
-!13.3.24. pas16: SCSI low-level driver for PAS16
-
-Example:
-
-modprobe pas16
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card. No BIOS is required.
-
-----
-!13.3.25. qlogicfas: SCSI low-level driver for Qlogic FAS
-
-Example:
-
-modprobe qlogicfas
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-----
-!13.3.26. qlogicisp: SCSI low-level driver for Qlogic ISP
-
-Example:
-
-modprobe qlogicisp
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-Requires firmware.
-
-----
-!13.3.27. seagate: SCSI low-level driver for Seagate, Future Domain
-
-This driver is for Seagate ST-02 and Future Domain TMC-8xx.
-
-
-
-Example:
-
- modprobe seagate
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes for address only. The IRQ is fixed at 5.
-The driver requires installed BIOS.
-
-----
-!13.3.28. t128: SCSI low-level driver for Trantor T128/T128F/T228
-
-Example:
-
- modprobe t128
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card. The driver requires installed BIOS.
-
-----
-!13.3.29. u14-34f: SCSI low-level driver for !UltraStor 14F/34F
-
-Example:
-
- modprobe u14-34f
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-
-
-This driver autoprobes the card, but ''not'' the
-0x310 port. No BIOS is required.
-
-----
-!13.3.30. ultrastor: low-level SCSI driver for !UltraStor
-
-Example:
-
-modprobe ultrastor
-
-
-
-There are no module parameters for the LKM, but if you bind this module
-into the base kernel, you can pass some parameters via the Linux boot
-parameters. See ''!BootPrompt-HOWTO''.
-
-----
-!!13.4. Network Device Drivers
-!13.4.1. bsd_comp: optional BSD compressor for PPP
-
-Example:
-
-modprobe bsd_comp
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __ppp__.
-
-----
-!13.4.2. slhc: SLHC compressor for PPP
-
-This module contains routines to compress and uncompress tcp packets
-(for transmission over low speed serial lines).
-
-
-
-These routines are required by PPP (also ISDN-PP) and SLIP protocols,
-and are used by the LKMs that implement those protocols.
-
-
-
-Example:
-
-modprobe slhc
-
-
-
-There are no module parameters.
-
-----
-!13.4.3. dummy: Dummy network interface driver
-
-This is said to be a bit-bucket device (i.e. traffic you send to this
-device is consigned into oblivion) with a configurable IP address. It
-is most commonly used in order to make your currently inactive SLIP
-address seem like a real address for local programs.
-
-
-
-However, it also functions as a sort of loopback device. You
-configure it for a particular IP address and any packet you send to
-that IP address via this interface comes back and appears as a packet
-received by that interface for that IP address. This is especially
-handy for an IP address that would normally be reflected by another
-interface (a PPP interface, perhaps), but that interface is down right
-now.
-
-
-
-You can have multiple dummy interfaces. They are named
-dummy0, dummy1,
-etc.
-
-
-
-Example:
-
-modprobe dummy
-
-
-
-There are no module parameters.
-
-----
-!13.4.4. eql: serial line load balancer
-
-If you have two serial connections to some other computer (this
-usually requires two modems and two telephone lines) and you use PPP
-(a protocol for sending internet traffic over telephone lines) or SLIP
-(an older alternative to PPP) on them, you can make them behave like
-one double speed connection using this driver.
-
-
-
-Example:
-
-modprobe eql
-
-
-
-There are no module parameters.
-
-----
-!13.4.5. dlci: frame relay DLCI driver
-
-This implements the frame relay protocol; frame relay is a fast
-low-cost way to connect to a remote internet access provider or to
-form a private wide area network. The one physical line from your box
-to the local "switch" (i.e. the entry point to the frame relay
-network) can carry several logical point-to-point connections to other
-computers connected to the frame relay network. To use frame relay,
-you need supporting hardware (FRAD) and certain programs from the net-
-tools package as explained in
-Documentation/networking/framerelay.txt in the
-Linux source tree.
-
-
-
-Example:
-
-modprobe dlci
-
-
-
-There are no module parameters.
-
-----
-!13.4.6. sdla: Sangoma S502A FRAD driver
-
-This is a driver for the Sangoma S502A, S502E and S508 Frame Relay
-Access Devices. These are multi-protocol cards, but this driver can
-drive only frame relay right now. Please read
-Documentation/networking/framerelay.txt in the
-Linux source tree.
-
-
-
-Example:
-
-modprobe sdla
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __dlci__.
-
-----
-!13.4.7. plip: PLIP network interface driver
-
-PLIP (Parallel Line Internet Protocol) is used to create a mini
-network consisting of two (or, rarely, more) local machines. The
-parallel ports (the connectors virtually all ISA-descendant computers
-have that are normally used to attach printers) are connected using
-"null printer" or "Turbo Laplink" cables which can transmit 4 bits at
-a time or using special PLIP cables, to be used on bidirectional
-parallel ports only, which can transmit 8 bits at a time. The cables
-can be up to 15 meters long. This works also if one of the machines
-runs DOS/Windows and has some PLIP software installed, e.g. the
-Crynwr PLIP packet driver and winsock or
-NCSA's __telnet__.
-
-
-
-See ''PLIP-Install-HOWTO''.
-
-
-
-Example:
-
-modprobe plip io=0x378 irq=7
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Port address of parallel port driver is to drive.
-
-
-; irq:
-
- IRQ number of IRQ driver is to service. Default is IRQ 5 for
-port at 0x3bc, IRQ 7 for port at 0x378, and IRQ 9 for port
-at 0x278.
-
-
-
-If you don't specify the ''io'' parameter, the
-driver probes addresses 0x278, 0x378, and 0x3bc.
-
-----
-!13.4.8. ppp: PPP network protocol driver
-
-PPP (Point to Point Protocol) is the most common protocol to use over
-a serial port (with or without a modem attached) to create an IP
-network link between two computers.
-
-
-
-Along with this kernel driver, you need the user space program
-__pppd__ running.
-
-
-
-See ''PPP-HOWTO''.
-
-
-
-Example:
-
-modprobe ppp
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __slhc__.
-
-
-
-The module also accesses serial devices, which are driven by the
-__serial__ module, so it depends on that module too.
-This dependency is not detected by __depmod__, so you
-either have to declare it manually or load __serial__
-explicitly.
-
-----
-!13.4.9. slip: SLIP network protocol driver
-
-SLIP (Serial Line Internet Protocol) is like PPP, only older and simpler.
-
-
-
-Example:
-
-modprobe slip slip_maxdev=1
-
-
-
-Parameters:
-
-
-
-
-; slip_maxdev:
-
- Maximum number of devices the driver may use at one time. Default
-is 256.
-
-
-
-
-
-
-This module depends on module __slhc__.
-
-
-
-The module also accesses serial devices, which are driven by the
-__serial__ module, so it depends on that module too.
-This dependency is not detected by __depmod__, so you
-either have to declare it manually or load __serial__
-explicitly.
-
-----
-!13.4.10. baycom: BAYCOM AX.25 amateur radio driver
-
-This is a driver for Baycom style simple amateur radio modems that
-connect to either a serial interface or a parallel interface. The
-driver works with the ser12 and par96 designs.
-
-
-
-For more information, see http://www.baycom.org/~tom.
-
-
-
-Example:
-
-modprobe baycom modem=1 iobase=0x3f8 irq=4 options=1
-
-
-
-Parameters:
-
-
-
-
-; major:
-
- major number the driver should use; default 60
-
-
-; modem:
-
-
-modem type of the first channel (minor ):
-
-
-
-
-; 1:
-
-ser12
-
-; 2:
-
-par96/par97
-
-
-
-
-; iobase:
-
- base address of the port the driver is to drive. Common
-values are for ser12 0x3f8, 0x2f8, 0x3e8, 0x2e8 and for
-par96/par97 0x378, 0x278, 0x3bc.
-
-
-; irq:
-
- IRQ the driver is to service. Common values are 3 and 4 for ser12
-and 7 for for par96/par97.
-
-
-; options:
-
-
-
-; :
-
-use hardware DCD
-
-; 1:
-
-use software DCD
-
-
-
-----
-!13.4.11. strip: STRIP (Metricom starmode radio IP) driver
-
-STRIP is a radio protocol developed for the !MosquitoNet project to
-send Internet traffic using Metricom radios. Metricom radios are
-small, battery powered, 100kbit/sec packet radio transceivers, about
-the size and weight of a wireless telephone. (You may also have heard
-them called "Metricom modems" but we avoid the term "modem" because it
-misleads many people into thinking that you can plug a Metricom modem
-into a phone line and use it as a modem.) You can use STRIP on any
-Linux machine with a serial port, although it is obviously most useful
-for people with laptop computers.
-
-
-
-Example:
-
-modprobe strip
-
-
-
-There are no module parameters.
-
-----
-!13.4.12. wavelan: WaveLAN driver
-
-WaveLAN card are for wireless ethernet-like networking. This driver
-drives AT8T GIS and NCR WaveLAN cards.
-
-
-
-Example:
-
-modprobe wavelan io=0x390 irq=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. Default is 0x390. You can set
-a different address on the card, but it is not recommended.
-
-
-; irq:
-
- IRQ the driver is to service. Default is . Any other value
-is ignored and the card still services IRQ .
-
-
-
-
-----
-!13.4.13. wic: WIC Radio IP bridge driver
-
-This is a driver for the WIC parallel port radio bridge.
-
-
-
-Example:
-
-modprobe wic
-
-
-
-It appears that devices wic0,
-wic1 and wic2 are directly
-related to corresponding lpN
-ports.
-
-----
-!13.4.14. scc: Z8530 SCC kiss emulation driver
-
-These cards are used to connect your Linux box to an amateur radio in
-order to communicate with other computers. If you want to use this,
-read Documentation/networking/z8530drv.txt in the
-Linux kernel source tree and ''HAM-HOWTO''.
-
-
-
-Example:
-
-modprobe scc
-
-
-
-There are no module parameters.
-
-----
-!13.4.15. 8390: General NS8390 Ethernet driver core
-
-This is driver code for the 8390 Ethernet chip on which many Ethernet
-adapters are based. This is not a complete interface driver; the
-routines in this module are used by drivers for particular Ethernet
-adapters, such as __ne__ and __3c503__.
-
-
-
-Example:
-
-
-modprobe 8390
-
-
-
-There are no module parameters.
-
-----
-!13.4.16. ne: NE2000/NE1000 driver
-
-This is a driver for the venerable NE2000 Ethernet adapter, its
-NE1000 forerunner, and all the generic Ethernet adapters that emulate
-this de facto standard card.
-This is an ISA bus card. For the PCI version, see the ne2k-pci module.
-
-
-
-Example:
-
-modprobe ne io=0x300 irq=11
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. This parameter is mandatory,
-but you may specify 0x000 to have the driver autoprobe 0x300,
-0x280, 0x320, 0x340, and 0x360.
-
-
-; irq:
-
- IRQ the driver is to service. If you don't specify this, the
-driver determines it by autoIRQ probing.
-
-
-; bad:
-
- The value 0xBAD means to assume the card is poorly designed in
-that it does not acknowledge a reset or does not have a valid
-0x57,0x57 signature. If you have such a card and do not specify
-this option, the driver will not recognize it.
-
-
-
-
- With any other value, the option has no effect.
-
-
-
-
-
-
-You can repeat the options to specify additional cards. The
-nth occurence of an option applies to the
-nth card.
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.17. ne2k-pci: NE2000 PCI Driver
-
-This is a driver for the PCI version of the venerable NE2000 Ethernet
-adapter, and all the generic Ethernet adapters that emulate this de
-facto standard card.
-
-
-
-Example:
-
-modprobe ne io=0x300 irq=11
-
-
-
-Parameters:
-
-
-
-
-; debug:
-
- Level of debug messages. 0 means no messages. 1 is the default.
-Higher numbers mean more debugging messages.
-
-
-; options:
-
- The value of this option determines what options are set in the
-network adapter. Each bit of the value, expressed as a binary
-number, controls one option. The only option defined is full
-duplex, which is the 6th least significant bit. It is much
-easier to use the ''full_duplex'' option
-instead.
-
-
-; full_duplex:
-
- A "1" value sets the adapter in full duplex mode.
-A "" value sets it in half duplex mode. If you include
-the full duplex flag in the flags you specify with the
-''options'' parameter, the
-''full_duplex'' has no effect.
-
-
-
-
-
-
-You may repeat the ''options'' and
-''full_duplex''
-
-parameters once per network
-adapter, for up to 8 network adapter.
-
-
-This driver can drive the following chipsets:
-
-
-
-
-
-*
-
-!RealTek RTL-8029
-
-
-*
-*
-
-Winbond 89C940
-
-
-*
-*
-
-Winbond W89C940F
-
-
-*
-*
-
-KTI ET32P2
-
-
-*
-*
-
-!NetVin NV5000SC
-
-
-*
-*
-
-Via 86C926
-
-
-*
-*
-
-!SureCom NE34
-
-
-*
-*
-
-Holtek HT80232
-
-
-*
-*
-
-Holtek HT80229
-
-
-*
-*
-
-Compex RL2000
-
-
-*
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.18. 3c501: 3COM 3c501 Ethernet driver
-
-This is a driver for 3COM's 3c501 Ethernet adapter.
-
-
-
-Example:
-modprobe 3c501 io=0x280 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-
-; irq:
-
- IRQ the driver is to service. Default is 5.
-
-
-
-If you don't specify an I/O port, the driver probes addresses 0x280
-and 0x300.
-
-----
-!13.4.19. 3c503: 3COM 3c503 driver
-
-This is a driver for 3COM's 3c503 Ethernet adapter.
-
-
-
-Example:
-
-modprobe 3c503 io=0x300 irq=5 xcvr=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-; xcvr:
-
- Determines whether to use external tranceiver.
-
-
-
-
-; :
-
- no
-
-
-; 1:
-
- yes
-
-
-
-
-
-
-If you don't specify an I/O port, the driver probes addresses 0x300,
-0x310, 0x330, 0x350, 0x250, 0x280, 0x2A0, and 0x2E0.
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.20. 3c505: 3COM 3c505 driver
-
-This is a driver for 3COM's 3c505 Ethernet adapter.
-
-
-
-Example:
-
-modprobe 3c503 io=0x300 irq=5 xcvr=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-If you don't specify an I/O port, the driver probes addresses 0x300,
-0x280, and 0x310.
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.21. 3c507: 3COM 3c507 driver
-
-This is a driver for 3COM's 3c507 Ethernet adapter.
-
-
-
-Example:
-
-modprobe 3c503 io=0x300 irq=5 xcvr=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-If you don't specify an I/O port, the driver probes addresses 0x300,
-0x320, 0x340, and 0x280.
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.22. 3c509: 3COM 3c509/3c579 driver
-
-This is a driver for 3COM's 3c507 and 3c579 Ethernet adapters.
-
-
-
-Example:
-
-modprobe 3c503 io=0x300 irq=5 xcvr=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-
-
-
-Module load-time probing Works reliably only on EISA, ISA ID-PROBE IS
-NOT RELIABLE! Bind this driver into the base kernel for now, if you
-need it auto-probing on an ISA-bus machine.
-
-----
-!13.4.23. 3c59x: 3COM 3c590 series "Vortex" driver
-
-This is a driver for the following 3COM Ethernet adapters:
-
-
-
-
-
-*
-
-3c590 Vortex 10Mbps.
-
-
-*
-*
-
-3c595 Vortex 100baseTX.
-
-
-*
-*
-
-3c595 Vortex 100baseT4.
-
-
-*
-*
-
-3c595 Vortex 100base-MII.
-
-
-*
-*
-
-EISA Vortex 3c597.
-
-
-*
-
-
-
-Example:
-
-modprobe 3c59x debug=1 options=,,12
-
-
-
-Parameters:
-
-
-
-
-; debug:
-
- A number selecting the level of debug messages.
-
-
-; options:
-
- This is a string of options numbers separated by commas.
-There is one option number for each adapter that the driver
-drives (for the case that you have multiple Ethernet adapters
-in the system of types driven by this driver). The order of
-the option numbers is the order of the cards assigned by the
-PCI BIOS.
-
-
-
-
- Each number represents a binary value. In that value, the
-lower 3 bits is the media type:
-
-
-
-
-
-
-; :
-
-10baseT
-
-; 1:
-
-10Mbs AUI
-
-; 2:
-
-undefined
-
-; 3:
-
-10base2 (BNC)
-
-; 4:
-
-100base-TX
-
-; 5:
-
-100base-FX
-
-; 6:
-
-MII (not yet available)
-
-; 7:
-
-Use default setting
-
-
-
- The next bit (the "8" bit) is on for full duplex, off for half.
-
-
-
-
-
-The next bit (the "16" bit) is on to enable bus-master, which is
-for experimental use only.
-
-
-
-
-
-
-
-Details of the device driver implementation are at the top of the
-source file.
-
-----
-!13.4.24. wd: Western Digital/SMC WD80*3 driver
-
-This is a driver for the Western Digital WD80*3 Ethernet adapters.
-
-
-
-Example:
-
-modprobe wd io=0x300 irq=5 mem=0x0D0000 mem_end=0x0D8000
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card.
-
-; irq:
-
- IRQ the driver is to service.
-
-; mem:
-
- Shared memory address
-
-; mem_end:
-
- End of shared memory (address of next byte after it).
-
-
-
-
-
-If you don't specify an I/O port, the driver probes 0x300, 0x280, 0x380,
-and 0x240.
-
-
-
-If you don't specify an IRQ, the driver reads it from the adapter's EEPROM
-and with ancient cards that don't have it, the driver uses autoIRQ.
-
-
-
-The driver depends on module __8390__.
-
-----
-!13.4.25. smc-ultra: SMC Ultra/EtherEZ driver
-
-This is a driver for the Western Digital WD80*3 Ethernet adapters.
-
-
-
-Example:
-
-modprobe smc-ultra io=0x200 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x200, 0x220, 0x240, 0x280, 0x300, 0x340,
-and 0x380.
-
-
-; irq:
-
- IRQ the driver is to service. Default is the value read from the
-adapter's EEPROM.
-
-
-
-
-
-
-This driver depends on module __8390__.
-
-----
-!13.4.26. smc9194: SMC 9194 driver
-
-This is a driver for SMC's 9000 series of Ethernet cards.
-
-
-
-Example:
-
-modprobe smc9194 io=0x200 irq=5 ifport=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x200, 0x220, etc. up through 0x3E0.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-; ifport:
-
- Type of Ethernet.
-
-
-
-
-; :
-
-autodetect
-
-; 1:
-
-TP
-
-; 2:
-
-AUI (or 10base2)
-
-
-
-
-
-
-
-
-The debug level is settable in the source code.
-
-----
-!13.4.27. at1700: AT1700 driver
-
-This is a driver for the AT1700 Ethernet adapter.
-
-
-
-Example:
-
-modprobe at1700 io=0x260 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320,
-0x380, and 0x300.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-
-----
-!13.4.28. e2100: Cabletron E21xx driver
-
-Example:
-
-modprobe e2100 io=0x300 irq=5 mem=0xd0000 xcvr=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x300, 0x280, 0x380, and 0x220.
-
-
-; irq:
-
- IRQ the card is to generate and the driver is to service. (The
-driver sets this value in the card).
-
-
-; mem:
-
- shared memory address. Default is 0xd0000.
-
-
-; xcvr:
-
-
-
-; :
-
- Don't select external transceiver
-
-
-; 1:
-
- Select external transceiver
-
-
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.29. depca: DEPCA, DE10x, DE200, DE201, DE202, DE422 driver
-
-This is a driver for the DEPCA, DE10x, DE200, DE201, DE202, and DE422
-Ethernet adapters.
-
-
-
-Example:
-
-modprobe depca io=0x200 irq=7
-
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x300, and 0x200 on an ISA machine or
-0x0c00 on an EISA machine.
-
-
-; irq:
-
- IRQ the driver is to service. Default is 7.
-
-
-----
-!13.4.30. ewrk3: EtherWORKS 3 (DE203, DE204, DE205) driver
-
-This is a driver for the EtherWORKS 3 (DE203, D3204, and DE205)
-Ethernet adapters.
-
-
-
-Example:
-
-modprobe ewrk3 io=0x300 irq=5
-
-
-
-
-
-; io:
-
- Address of I/O port on the card. Default is 0x300.
-
-
-; irq:
-
- IRQ the driver is to service. Default is 5.
-
-
-
-
-On an EISA bus, this driver does EISA probing.
-
-
-
-On an ISA bus, this driver does no autoprobing when loaded as an LKM.
-However, if you bind it into the base kernel, it probes addresses
-0x100, 0x120, etc. up through 0x3C0 except 0x1E0 and 0x320.
-
-----
-!13.4.31. eexpress: !EtherExpress 16 driver
-
-This is a driver for the !EtherExpress 16 Ethernet adapter.
-
-
-
-Example:
-
-modprobe eexpress io=0x300 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x300, 0x270, 0x320, and 0x340.
-1
-
-; irq:
-
- IRQ the driver is to service. The default is the value read
-from the adapter's EEPROM.
-
-
-
-
-----
-!13.4.32. eepro: !EtherExpressPro driver
-
-This is a driver for the !EtherExpressPro Ethernet adapter.
-
-
-
-Example:
-
-modprobe eepro io=0x200 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340,
-and 0x360.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-
-----
-!13.4.33. fmv18k: Fujitsu FMV-181/182/183/184 driver
-
-This is a driver for the Fujitsu FMV-181, FMV-182, FMV-183, FMV-183,
-and FMV-184 Ethernet adapters.
-
-
-
-Example:
-
-modprobe fmv18x io=0x220 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0,
-0x300, and 0x340.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-
-
-----
-!13.4.34. hp-plus: HP PCLAN+ (27247B and 27252A) driver
-
-This is a driver for HP's PCLAN+ (27247B and 27252A) Ethernet adapters.
-
-
-
-Example:
-
-modprobe hp-plus io=0x200 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, and
-0x340.
-
-
-; irq:
-
- IRQ the driver is to service. The default is the value the driver
-reads from the adapter's configuration register.
-
-
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.35. hp: HP PCLAN (27245, 27xxx) driver
-
-This is a driver for HP's PCLAN (27245 and other 27xxx series) Ethernet
-adapters.
-
-
-
-Example:
-
-modprobe hp io=0x300 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes 0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200,
-and 0x240.
-
-
-; irq:
-
- IRQ the driver is to service. If you don't specify this, the
-driver determines it by autoIRQ probing.
-
-
-
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.36. hp100: HP 10/100VG PCLAN (ISA, EISA, PCI) driver
-
-This is a driver for HP's 10/100VG PCLAN Ethernet adapters. It works with
-the ISA, EISA, and PCI versions.
-
-
-
-Example:
-
-modprobe hp100 hp100_port=0x100
-
-
-
-Parameters:
-
-
-
-
-; hp100_port:
-
- Base address of I/O ports on the card. If you don't specify this,
-the driver autoprobes 0x100, 0x120, etc. up through 0x3E0 on an
-ISA bus. It does EISA probing on an EISA bus.
-
-
-
-
-----
-!13.4.37. eth16i: ICL !EtherTeam 16i/32 driver
-
-This is a driver for ICL's !EtherTeam 16i (eth16i) and 32i (eth32i)
-Ethernet adapters.
-
-
-
-Example:
-
-modprobe eth16i io=0x2a0 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- Address of I/O port on the card. If you don't specify this,
-the adapter probes the following adddresses. For the eth16i
-adapter: 0x260, 0x280, 0x2A0, 0x340, 0x320, 0x380, and 0x300.
-For the eth32i: 0x1000, 0x2000, 0x3000, 0x4000, 0x5000,
-0x6000, 0x7000, 0x8000, 0x9000, 0xA000, 0xB000, 0xC000,
-0xD000, 0xE000, and 0xF000.
-
-
-; irq:
-
- IRQ the driver is to service. If you don't specify this, the
-driver determines it by autoIRQ probing.
-
-
-
-
-----
-!13.4.38. ni52: NI5210 driver
-
-This is a driver for the NI5210 Ethernet adapter.
-
-
-
-Example:
-
-modprobe ni52 io=0x360 irq=9 memstart=0xd0000 memend=0xd4000
-
-----
-!13.4.39. ac3200: Ansel Communications EISA 3200 driver
-
-This is a driver for the Ansel Communications EISA 3200 Ethernet
-adapter.
-
-
-
-Example:
-
-modprobe ac3200
-
-
-
-This module depends on module __8390__.
-
-----
-!13.4.40. apricot: Apricot Xen-II on board ethernet driver
-
-Example:
-
-modprobe apricot io=0x300 irq=10
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- address of base I/O port on card.
-
-
-; irq:
-
- IRQ that driver is to service.
-
-
-
-
-----
-!13.4.41. de4x5: DE425, DE434, DE435, DE450, DE500 driver
-
-This is a driver for the DE425, DE434, DE435, DE450, and DE500
-Ethernet adapters.
-
-
-
-Example:
-
-
-modprobe de4x5 io=0x000b irq=10 is_not_dec=
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- address of base I/O port.
-
-
-; irq:
-
- IRQ the driver is to service.
-
-
-; is_not_dec:
-
- For a non-DEC card using the DEC 21040, 21041, or 21140 chip,
-set this to 1.
-
-
-
-
-----
-!13.4.42. tulip: DECchip Tulip (dc21x4x) PCI driver
-
-Example:
-
-modprobe tulip
-
-
-
-Read Documentation/networking/tulip.txt in the Linux
-source tree.
-
-----
-!13.4.43. dgrs: Digi Intl !RightSwitch SE-X driver
-
-This is a driver for the Digi International !RightSwitch SE-X EISA and
-PCI boards. These boards have a 4 (EISA) or 6 (PCI) port Ethernet
-switch and a NIC combined into a single board.
-
-
-
-There is a tool for setting up input and output packet filters on each
-port, called __dgrsfilt__.
-
-
-
-The management tool lets you watch the performance graphically, as
-well as set the SNMP agent IP and IPX addresses, IEEE Spanning Tree,
-and Aging time. These can also be set from the command line when the
-driver is loaded.
-
-
-
-There is also a companion management tool, called
-__xrightswitch__.
-
-
-
-Examples:
-
-modprobe dgrs debug=1 dma=0 spantree=0 hashexpire=300 ipaddr=199,86,8,221
-modprobe ipxnet=111
-
-
-
-Parameters:
-
-
-
-
-; debug:
-
- Level of debugging messages to print
-
-
-; dma:
-
-
-
-; :
-
- Disable DMA on PCI card
-
-
-; 1:
-
- Enable DMA on PCI card
-
-
-; spantree:
-
-
-
-; :
-
- Disable IEEE spanning tree
-
-
-; 1:
-
- Enable IEEE spanning tree
-
-
-; hashexpire:
-
- Change address aging time, in seconds. Defaults is 300.
-
-
-; ipaddr:
-
- SNMP agent IP address. Value is IP address in dotted decimal
-notation, except with commas instead of periods.
-
-
-; ipxnet:
-
- SNMP agent IPX network number
-
-
-
-
-----
-!13.4.44. de600: D-Link DE600 pocket adapter driver
-
-This is a driver for the D-Link DE600 pocket Ethernet adapter.
-
-
-
-Example:
-
-modprobe de600 de600_debug=
-
-
-
-Parameters:
-
-
-
-
-; de600_debug:
-
- The driver expects the adapter to be at port 0x378 and
-generate IRQ 7. This is the same as the DOS
-lpt1 device. These are compile time
-options.
-
-
-
-
-----
-!13.4.45. de620: D-Link DE620 pocket adapter driver
-
-This is a driver for the D-Link DE620 pocket Ethernet adapter.
-
-
-
-Example:
-
-modprobe de620 bnc=0 utp=0 io=0x378 irq=7
-
-
-
-Parameters:
-
-
-
-
-; bnc:
-
-
-
-; 1:
-
- Network is 10Base2
-
-
-; :
-
- Network is not 10Base2
-
-
-; utp:
-
-
-
-; 1:
-
- Network is 10BaseT
-
-
-; :
-
- Network is not 10BaseT
-
-
-; io:
-
- I/O port address of port driver is to drive. Default is 0x378.
-
-
-; irq:
-
- IRQ driver is to service. Default is 7.
-
-
-
-
-
-
-You can't specify both ''bnc=1'' and
-''utp=1''.
-
-----
-!13.4.46. ibmtr: Tropic chipset based token ring adapter driver
-
-Example:
-
-
-
-
-modprobe ibmtr io=0xa20 irq=5
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- I/O port address of port driver is to drive. Default is 0xa20.
-
-
-; irq:
-
- IRQ driver is to service. By default, the driver determines the
-IRQ by autoIRQ probing.
-
-
-
-
-----
-!13.4.47. arcnet: ARCnet driver
-
-Read The Fine Information in
-Documentation/networking/arcnet.txt in the Linux
-source tree. Also Arcnet hardware information
-arcnet-hardware.txt is found in same place.
-
-
-
-Example:
-
-modprobe arcnet io=0x300 irq=2 shmem=0xd0000 device=arc1
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- I/O port address of port driver is to drive. If you don't
-specify this, the driver probes addresses 0x300, 0x2E0, 0x2F0,
-0x2D0, 0x200, 0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270,
-0x280, 0x290, 0x2A0, 0x2B0, 0x2C0, 0x310, 0x320, 0x330, 0x340,
-0x350, 0x360, 0x370, 0x380, 0x390, 0x3A0, 0x3E0, and 0x3F0.
-
-
-; irq:
-
- IRQ driver is to service. By default, the driver determines the
-IRQ by autoIRQ probing.
-
-
-; device:
-
- device name.
-
-
-
-
-----
-!13.4.48. isdn: basic ISDN functions
-
-This module provides ISDN functions used by ISDN adapter drivers.
-
-
-
-Setting up ISDN networking is a complicated task. Read documentation
-found in Documentation/isdn in the Linux source
-tree.
-
-
-
-Example:
-
-modprobe isdn
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __slhc__.
-
-----
-!13.4.49. icn: ICN 2B and 4B driver
-
-This is a driver for the ICN 2B and ICN 4B ISDN adapters.
-
-
-
-Example:
-
-modprobe icn portbase=0x320 membase=0xd0000 icn_id=idstring icn_id2=idstring2
-
-
-
-Parameters:
-
-
-
-
-; portbase:
-
- Address of the base I/O port on the adapter. Defaults is 0x320.
-
-
-; membase:
-
- Address of shared memory. Default is 0xd0000.
-
-
-; icn_id:
-
- idstring for the first adapter. Must start with a character!
-This parameter is required.
-
-
-; icn_id2:
-
- idstring for the second adapter. Must start with a character!
-This parameter is required with the double card.
-
-
-
-
-
-
-This module depends on module __isdn__.
-
-----
-!13.4.50. pcbit: PCBIT-D driver
-
-This is a driver for the PCBIT-D ISDN adapter driver.
-
-
-
-Example:
-
-modprobe pcbit mem=0xd0000 irq=5
-
-
-
-Parameters:
-
-
-
-
-; mem:
-
- Shared memory address. Default is 0xd0000
-
-
-; irq:
-
- IRQ the driver is to service. Default is 5.
-
-
-
-
-
-
-This module depend on module __isdn__.
-
-----
-!13.4.51. teles: Teles/NICCY1016PC/Creatix driver
-
-This is a driver for the Teles/NICCY1016PC/Creatix ISDN adapter.
-It can drive up to 16 cards.
-
-
-
-Example:
-
-modprobe teles io=0xd0000,15,0xd80,2 teles_id=idstring
-
-
-
-Parameters:
-
-
-
-
-; io:
-
- This is a whole collection of parameters in one. It's syntax is
-''io=''card1options
-[['',''card2options
-'',''...]
-where card1options is a set of options
-for the first card, etc.
-
-
-
-
-
-The syntax of card1options, etc. is
-sharedmem'',''
-irq'',''
-portbase'',''
-dprotocol
-
-
-
-
-; sharedmem:
-
- Address of shared memory. Default 0xd0000
-
-
-; irq:
-
- IRQ driver is to service.
-
-
-; portbase:
-
- Address of base I/O port.
-
-
-; dprotocol:
-
- D-channel protocol of the card
-
-
-
-
-; 1:
-
-1TR6
-
-; 2:
-
- EDSS1. This is the default.
-
-
-
-
-
-
-
-
-; teles_id:
-
- Driver ID for accessing with utilities and identification
-when using a line monitor. Value must start with a
-character! Default: none.
-
-
-
-
-
-
-The driver determines the type of card from the port, irq and shared
-memory address:
-
-
-
-
-
-*
-
-port == , shared memory != 0 -b Teles S0-8
-
-
-
-*
-*
-
-port != , shared memory != 0 -b Teles S0-16.
-
-
-
-*
-*
-
-port != , shared memory == 0 -b Teles S0-16.3
-
-
-
-*
-
-
-
-This module depends on module __isdn__.
-
-----
-!!13.5. CDROM Device Drivers
-!13.5.1. axtcd: Aztech/Orchid/Okano/Wearnes/TXC/CDROM driver
-
-This is a driver for the Aztech, Orchid, Okano, Wearnes, TXC, and
-CDROM devices (which have special non-SCSI non-ATA interfaces).
-
-
-
-Example:
-
- modprobe aztcd aztcd=0x340
-
-
-
-Parameters:
-
-
-
-
-; aztcd:
-
- address of base I/O port
-
-
-
-
-
-
-Read Documentation/cdrom/aztcd in the Linux
-source tree for full information.
-
-----
-!13.5.2. gscd: Goldstar R420 CDROM driver
-
-This is a driver for the Goldstar R420 CDROM drive, which does not use
-either an ATA or SCSI interface.
-
-
-
-Example:
-
-modprobe gscd gscd=0x340
-
-
-
-Parameters:
-
-
-
-
-; gscd:
-
- address of base I/O port. Default is 0x340, which will
-work for most applications. You select the address of the
-drive with the PN801-1 through PN801-4 jumpers on the
-Goldstar Interface Card. Appropriate settings are: 0x300,
-0x310, 0x320, 0x330, 0x340, 0x350, 0x360, 0x370, 0x380,
-0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, and 0x3F0.
-
-
-
-
-----
-!13.5.3. sbpcd: Sound Blaster CDROM driver
-
-This is a driver for the Matsushita, Panasonic, Creative, Longshine, and
-TEAC CDROM drives that don't attach via ATA or SCSI.
-
-
-
-Example:
-
-modprobe sbpcd sbpcd=0x340
-
-
-
-Parameters:
-
-
-
-
-; sbpcd:
-
- address of base I/O port
-
-
-
-
-
-
-An additional parameter is an SBPRO setting, as described in
-Documentation/cdrom/sbpcd in the Linux source tree.
-
-----
-!13.5.4. mcd: Mitsumi CDROM driver
-
-This is a driver for Mitsumi CDROM drives that don't attach via ATA
-or SCSI. It does not handle XA or multisession.
-
-
-
-Example:
-
-modprobe mcd mcd=0x300,11,0x304,5
-
-
-
-Parameters:
-
-
-
-
-; mcd:
-
- This is a comma separated list of i/o base addresses and IRQs,
-in pairs.
-
-
-
-
-----
-!13.5.5. mcdx: Mitsumi XA/!MultiSession driver
-
-This driver is like __mcd__, only it has XA and
-multisession functions.
-
-
-
-Example:
-
-modprobe mcdx mcdx=0x300,11,0x304,5
-
-----
-!13.5.6. optcd: Optics Storage DOLPHIN 8000AT CDROM driver
-
-This is the driver for the so-called "dolphin" CDROM drive form Optics
-Storage, with the 34-pin Sony-compatible interface. For the
-ATA-compatible Optics Storage 8001 drive, you will want the ATAPI
-CDROM driver. The driver also seems to work with the Lasermate
-CR328A.
-
-
-
-Example:
-
-modprobe optcd optcd=0x340
-
-
-
-Parameters:
-
-
-
-
-; optcd:
-
- address of base I/O port
-
-
-
-
-----
-!13.5.7. cm206: Philips/LMS CM206 CDROM driver
-
-This is the driver for the Philips/LMS cm206 CDROM drive in
-combination with the cm260 host adapter card.
-
-
-
-Example:
-
-modprobe cm206 cm206=0x300,11
-
-
-
-Parameters:
-
-
-
-
-; cm206:
-
- The address of the base I/O port the driver is to drive and
-the IRQ the driver is to service, separated by a comma. It doesn't
-matter what order you put them in, and you may specify just one,
-in which case the other defaults.
-
-
-
-
-----
-!13.5.8. sjcd: Sanyo CDR-H94A CDROM driver
-
-Example:
-
-modprobe sjcd sjcd_base=0x340
-
-
-
-Parameters:
-
-
-
-
-; sjcd_base:
-
- address of the base I/O port the driver is to drive.
-Default is 0x340.
-
-
-
-
-
-
-The driver uses no IRQ and no DMA channel.
-
-----
-!13.5.9. isp16: ISP16/MAD16/Mozart soft configurable cdrom driver
-
-This is a driver for the ISP16 or MAD16 or Mozart soft configurable
-cdrom interface.
-
-
-
-Example:
-
-modprobe isp16 isp16_cdrom_base=0x340 isp16_cdrom_irq=3
-isp16_cdrom_dma=0 isp16_cdrom_type=Sanyo
-
-
-
-Parameters:
-
-
-
-
-; isp16_cdrom_base:
-
- address of base I/O port the driver is to drive. Valid values
-are 0x340, 0x320, 0x330, and 0x360.
-
-
-; isp16_cdrom_irq:
-
-
-IRQ the driver is to service. Valid values are , 3, 5, 7, 9, 10,
-and 11.
-
-
-; isp16_cdrom_dma:
-
- DMA channel the driver is to use with the device. Valid
-values are , 3, 5, 6, and 7.
-
-
-; isp16_cdrom_type:
-
-
-Type of device being driven. Valid values are
-noisp16, Sanyo,
-Panasonic, Sony and
-Mitsumi. Note that these values are
-case sensitive.
-
-
-
-
-----
-!13.5.10. cdu31a: Sony CDU31A/CDU33A CDROM driver
-
-Example:
-
- modprobe cdu31a cdu31a_port=0x340 cdu31a_irq=5
-
-
-
-Parameters:
-
-
-
-
-; cdu31a_port:
-
- address of base I/O port the driver is to drive. This parameter
-is mandatory.
-
-
-; cdu31a_irq:
-
-
-IRQ the driver is to service. If you don't specify this,
-the driver does not use interrupts.
-
-
-
-
-----
-!13.5.11. sonycd535: Sony CDU535 CDROM driver
-
-Example:
-
-modprobe sonycd535 sonycd535=0x340
-
-
-
-Parameters:
-
-
-
-
-; sonycd535:
-
- address of the base I/O port the driver is to drive.
-
-
-
-
-----
-!!13.6. Filesystem Drivers
-!13.6.1. minix: Minix filesystem driver
-
-Example:
-
-modprobe minix
-
-
-
-There are no module parameters.
-
-----
-!13.6.2. ext: "Extended" filesystem driver
-
-Example:
-
-modprobe ext
-
-
-
-There are no module parameters.
-
-----
-!13.6.3. ext2: "Second extended" filessystem driver
-
-Example:
-
-modprobe ext2
-
-
-
-There are no module parameters.
-
-----
-!13.6.4. xiafs: xiafs filesystem driver
-
-Example:
-
-modprobe xiafs
-
-
-
-There are no module parameters.
-
-----
-!13.6.5. fat: DOS FAT filesystem functions
-
-This module provides services for use by the MSDOS and VFAT
-filesystem drivers.
-
-
-
-Example:
-
-modprobe fat
-
-
-
-There are no module parameters.
-
-----
-!13.6.6. msdos: MSDOS filesystem driver
-
-Example:
-
-modprobe msdos
-
-
-
-There are no module parameters.
-
-
-
-This module depends on the module __fat__.
-
-----
-!13.6.7. vfat: VFAT (Windows-95) filesystem driver
-
-Example:
-
-modprobe vfat
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __fat__.
-
-----
-!13.6.8. umsdos: UMSDOS filesystem driver
-
-This is a driver for the UMSDOS filesystem type, which is a unix style
-filesystem built on top of an MSDOS FAT filesystem.
-
-
-
-Example:
-
-modprobe vfat
-
-
-
-There are no module parameters.
-
-
-
-This module depends on the __fat__ and
-__msdos__ modules.
-
-----
-!13.6.9. nfs: NFS filesystem driver
-
-Example:
-
-modprobe nfs
-
-
-
-There are no module parameters.
-
-----
-!13.6.10. smbfs: SMB filesystem driver
-
-SMBFS is a filesystem type which has an SMB protocol interface. This
-is the protocol Windows for Workgroups, Windows NT or Lan Manager use
-to talk to each other. SMBFS was inspired by Samba, the program
-written by Andrew Tridgell that turns any unix host into a file server
-for DOS or Windows clients. See ftp://nimbus.anu.edu.au/pub/tridge/samba/ for this interesting
-program suite and lots of more information on SMB and NetBIOS over
-TCP/IP. There you also find explanation for concepts like netbios name
-or share.
-
-
-
-To use SMBFS, you need a special mount program, which can be found
-in the ksmbfs package, found on
-ftp://ibiblio.org/pub/Linux/system/Filesystems/smbfs.
-
-
-
-Example:
-
-modprobe smbfs
-
-
-
-There are no module parameters
-
-----
-!13.6.11. ncpfs: NCP (Netware) filesystem driver
-
-NCPFS is a filesystem type which has an NCP protocol interface,
-designed by the Novell Corporation for their !NetWare product. NCP is
-functionally similar to the NFS used in the TCP/IP community. To
-mount a Netware filesystem, you need a special mount program, which
-can be found in the ncpfs package.
-Homesite for ncpfs is
-ftp.gwdg.de/pub/linux/misc/ncpfs, but Ibiblio and its many
-mirrors will have it as well.
-
-
-
-Related products are Linware and
-Mars_nwe, which will give Linux partial
-!NetWare Server functionality.
-
-
-
-Mars_nwe can be found on ftp.gwdg.de/pub/linux/misc/ncpfs.
-
-
-
-Example:
-
-modprobe ncpfs
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __ipx__.
-
-----
-!13.6.12. isofs: ISO 9660 (CDROM) filesystem driver
-
-Example:
-
-modprobe isofs
-
-
-
-There are no module parameters.
-
-----
-!13.6.13. hpfs: OS/2 HPFS filesystem driver
-
-This filesystem driver for OS/2's HPFS filesystem provides only read-only
-access.
-
-
-
-Example:
-
-modprobe hpfs
-
-
-
-There are no module parameters.
-
-----
-!13.6.14. sysv: System V and Coherent filesystem driver
-
-This is the implementation of the SystemV/Coherent filesystem type for
-Linux.
-
-
-
-It implements all of
-
-
-
-
-
-*
-
-Xenix FS
-
-
-*
-*
-
-SystemV/386 FS
-
-
-*
-*
-
-Coherent FS
-
-
-*
-
-
-
-Example:
-
-modprobe sysv
-
-
-
-There are no module parameters.
-
-----
-!13.6.15. affs: Amiga FFS filesystem driver
-
-Example:
-
-modprobe affs
-
-
-
-There are no module parameters.
-
-----
-!13.6.16. ufs: UFS filesystem driver
-
-Apparently for mounting disks with FreeBSD and/or Sun partitions. No
-documentation exists, apart from The Source.
-
-
-
-This filesystem driver provides only read-only access.
-
-
-
-Example:
-
-modprobe ufs
-
-
-
-There are no module parameters.
-
-----
-!!13.7. Miscellaneous Device Driver
-!13.7.1. misc: device driver for "miscellaneous" character devices
-
-A whole bunch of device types that don't appear in large enough numbers on
-a system to deserve major numbers of their own share Major Number 10 and
-are collectively called "miscellaneous" character devices. This module
-provides the common interface to serve that major number, but there are
-individual drivers for the specific device types. Those drivers register
-themselves with this driver.
-
-
-
-Example:
-
-modprobe misc
-
-
-
-There are no module parameters.
-
-----
-!!13.8. Serial Device Drivers
-!13.8.1. serial: serial communication port (UART) device driver
-
-This driver drives conventional serial ports (UARTs), but not some
-of the specialized high performance multi-port devices.
-
-
-
-NOTE: __serial__ is required by other modules, such as
-__ppp__ and __slip__. Also it is
-required by serial mice and accordingly by
-gpm. However this isn't the regular kind
-of dependency that is detected by module handling tools, so you must
-load __serial__ manually.
-
-
-
-Example:
-
-modprobe serial
-
-
-
-There are no module parameters.
-
-----
-!13.8.2. cyclades: Cyclades async mux device driver
-
-Example:
-
- modprobe cyclades
-
-
-
-There are no module parameters.
-
-
-
-The intelligent boards also need to have their firmware code
-downloaded to them. This is done via a user level application supplied
-in the driver package called
-stlload. Compile this program where ever
-you dropped the package files, by typing __make__. In
-its simplest form you can then type __stlload__ in this
-directory and that will download firmware into board 0 (assuming board
-0 is an !EasyConnection 8/64 board). To download to an ONboard, Brumby
-or Stallion do:
-
-
-
-Read the information in the file
-Documentation/stallion.txt in the Linux source
-tree.
-
-----
-!13.8.3. stallion: Stallion EasyIO or EC8/32 device driver
-
-The intelligent boards also need to have their firmware code
-downloaded to them. This is done via a user level application supplied
-in the driver package called stlload.
-
-
-
-Read the information in the file
-Documentation/stallion.txt in the Linux source
-tree.
-
-
-
-Example:
-
- modprobe stallion
-
-
-
-There are no module parameters.
-
-----
-!13.8.4. istallion: Stallion EC8/64, ONboard, Brumby device driver
-
-The intelligent boards also need to have their firmware code
-downloaded to them. This is done via a user level application supplied
-in the driver package called stlload.
-
-
-
-Read the information at /usr/src/linux/drivers/char/README.stallion.
-
-
-
-Example:
-
-modprobe istallion
-
-
-
-There are no module parameters.
-
-----
-!13.8.5. riscom8: SDL RISCom/8 card device driver
-
-Example:
-
-modprobe riscom8 iobase=0xXXX iobase1=0xXXX iobase2=...
-
-
-
-This driver can drive up to 4 boards at time.
-
-----
-!!13.9. Parallel Device Drivers
-!13.9.1. lp: Parallel printer device driver
-
-Example:
-
- modprobe lp.o io=0x378 irq=
-
-
-
-This driver probes ports 0x278, 0x378, and 0x3bc.
-
-
-
-Note: loading __lp__ without any parameters will
-grab all parallel ports.
-
-----
-!!13.10. Bus Mouse Device Drivers
-!13.10.1. atixlmouse: ATIXL busmouse driver
-
-Example:
-
-modprobe atixlmouse
-
-
-
-There are no parameters.
-
-
-
-This module depends on module __misc__.
-
-----
-!13.10.2. busmouse: Logitech busmouse driver
-
-Example:
-
-modprobe busmouse
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __misc__.
-
-
-----
-!13.10.3. msbusmouse: Microsoft busmouse driver
-
-Example:
-
-modprobe msbusmouse
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __misc__.
-
-----
-!13.10.4. psaux: PS/2 mouse (aka "auxiliary device") driver
-
-Example:
-
-modprobe psaux
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __misc__.
-
-----
-!!13.11. Tape Device Drivers
-
-For SCSI tape device drivers, see Section 13.3. There are no
-LKMs for QIC-02 tape devices, but there is a device driver you can
-bind into the base kernel.
-
-----
-!13.11.1. ftape: floppy tape (QIC-80/Travan) device driver
-
-Example:
-
-modprobe ftape tracing=3
-
-
-
-Optional parameter ''tracing'' can take following
-values
-
-
-
-
-; :
-
-bugs
-
-; 1:
-
-+ errors
-
-; 2:
-
-+ warnings
-
-; 3:
-
-+ information
-
-; 4:
-
-+ more information
-
-; 5:
-
-+ program flow
-
-; 6:
-
-+ fdc/dma info
-
-; 7:
-
-+ data flow
-
-; 8:
-
-+ everything else
-
-
-
-
-
-The default is 3.
-
-----
-!!13.12. Watchdog Timers
-!13.12.1. WDT: WDT Watchdog timer device driver
-
-Example:
-
-modprobe wdt
-
-
-
-There are no module parameters.
-
-
-
-The device address is hardcoded as 0x240. The IRQ is hardcoded as 14.
-
-
-
-This module depends on module __misc__.
-
-----
-!13.12.2. softdog: Software Watchdog Timer
-
-Example:
-
- modprobe softdog
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __misc__.
-
-----
-!13.12.3. pcwd: Berkshire Products PC Watchdog Driver
-
-Example:
-
-modprobe pcwd
-
-
-
-There are no module parameters.
-
-
-
-This module depends on module __misc__.
-
-----
-!!13.13. Sound Device Drivers
-
-Configuring sound is a complex task. Read the files in
-directory Documention/sound in
-the Linux source tree.
-
-
-
-Example:
-
-modprobe sound
-
-
-
-Option: dma_buffsize=32768
-
-----
-!!!14. Maintenance Of This Document
-
-This HOWTO is enthusiastically maintained by Bryan Henderson
-`bryanh@giraffe-data.comb. If you find something
-incorrect or incomplete or can't understand something, Bryan wants to
-know so maybe the next reader can be saved the trouble you had.
-
-
-
-The source for this document is !DocBook SGML, and is available from
-the Linux Documentation
-Project.
-
-----
-!!!15. History
-
-I have derived this (in 2001) from the HOWTO of the same name by
-Laurie Tischler, dated 1997. While I have kept all of the information
-from that original document (where it is still useful), I have
-rewritten the presentation entirely and have added a lot of other
-information. The original HOWTO's primary purpose was to document
-LKM parameters.
-
-
-
-The original HOWTO was first released (Release 1.) June 20, 1996,
-with a second release (1.1) October 20, 1996.
-
-
-
-The first release of Bryan's rewrite was in June 2001.
-
-----
-!!!16. Copyright
-
-Here is Lauri Tischler's copyright notice from the original document
-from which this is derived:
-
-
-
-This document is Copyright 1996(c) by Lauri Tischler. Permisson is
-granted to make and distribute verbatim copies of this manual provided
-the copyright notice and this permission notice are preserved on all
-copies.
-
-
-
-Permission is granted to copy and distribute modified versions of this
-document under the conditions for verbatim copying, provided that this
-copyright notice is included exactly as in the original, and that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-
-
-Permission is granted to copy and distribute translations of this
-document into another language, under the above conditions for
-modified versions.
-
-
-
-Bryan Henderson, the current maintainer and contributing author of
-this document, licenses it under the same terms as above. His work is
-Copyright 2001(c).
-
-
-!Notes
-[[1]
-
-For the pedantic, see Section 10.6.
-
-[[2]
-
-You probably know this type of disk as
-"IDE". Strictly speaking, IDE is an incorrect appelation.
-IDE refers to the "Integrated Drive Electronics" which all
-modern disk drives, notably all SCSI disk drives, use. The first IDE
-drives in common usage were ATA, and the names kind of got confused.
-ATA, like SCSI, is a precise specification of electrical signals,
-commands, etc
.
+Describe
[HowToModuleHOWTO
] here.