---
name: "DRIVER_MODULE"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/DRIVER_MODULE"
---

# DRIVER\_MODULE(9)

kernel driver declaration macro

## NAME

**DRIVER\_MODULE** – kernel driver declaration macro

## SYNOPSIS

**#include \<sys/param.h\>**

**#include \<sys/kernel.h\>**

**#include \<sys/bus.h\>**

**#include \<sys/module.h\>**

**DRIVER\_MODULE**(*name*, *busname*, *driver\_t driver*, *devclass\_t devclass*, *modeventhand\_t evh*, *void \*arg*);

**MULTI\_DRIVER\_MODULE**(*name*, *busname*, *driver\_t drivers\[\]*, *devclass\_t devclass*, *modeventhand\_t evh*, *void \*arg*);

## DESCRIPTION

The **DRIVER\_MODULE**() macro declares a kernel driver. **DRIVER\_MODULE**() expands to the real driver declaration, where the phrase *name* is used as the naming prefix for the driver and its functions. Note that it is supplied as plain text, and not a char or char \*.

*busname* is the parent bus of the driver (PCI, ISA, PPBUS and others), e.g. ‘pci’, ‘isa’, or ‘ppbus’.

The identifier used in **DRIVER\_MODULE**() can be different from the driver name. Also, the same driver identifier can exist on different busses, which is a pretty clean way of making front ends for different cards using the same driver on the same or different busses. For example, the following is allowed:

**DRIVER\_MODULE**(*foo*, *isa*, *foo\_driver*, *foo\_devclass*, *NULL*, *NULL*);

**DRIVER\_MODULE**(*foo*, *pci*, *foo\_driver*, *foo\_devclass*, *NULL*, *NULL*);

*driver* is the driver of type driver\_t, which contains the information about the driver and is therefore one of the two most important parts of the call to **DRIVER\_MODULE**().

The *devclass* argument contains the kernel-internal information about the device, which will be used within the kernel driver module.

The *evh* argument is the event handler which is called when the driver (or module) is loaded or unloaded (see [module(9)](/module/9.md)).

The *arg* is unused at this time and should be a NULL pointer.

**MULTI\_DRIVER\_MODULE**() is a special version of **DRIVER\_MODULE**(), which takes a list of drivers instead of a single driver instance.

## SEE ALSO

[device(9)](/device/9.md), [driver(9)](/driver/9.md), [module(9)](/module/9.md)

## AUTHORS

This manual page was written by Alexander Langer ⟨alex@FreeBSD.org⟩.
