add_drv(1M)
NAME
add_drv - add a new device driver to the system
SYNOPSIS
add_drv [-b basedir] [-c class_name] [ -i
'identify_name...'] [ -m 'permission','...'] [-n] [-f] [-v]
device_driver
DESCRIPTION
The add_drv command is used to inform the system about newly
installed device drivers.
Each device on the system has a name associated with it.
This name is represented by the name property for the dev-
ice. Similarly, the device may also have a list of driver
names associated with it. This list is represented by the
compatible property for the device.
The system determines which devices will be managed by the
driver being added by examining the contents of the name
property and the compatible property (if it exists) on each
device. If the value in the name property does not match the
driver being added, each entry in the compatible property is
tried, in order, until either a match occurs or there are no
more entries in the compatible property.
In some cases, adding a new driver may require a reconfi-
guration boot. See the NOTES section.
Aliases might require quoting (with double-quotes) if they
contain numbers. See EXAMPLES.
OPTIONS
-b basedir
Installs the driver on the system with a root direc-
tory of basedir rather than installing on the system
executing add_drv. This option is typically used in
package post-installation scripts when the package is
not being installed on the system executing the pkgadd
command. The system using basedir as its root direc-
tory must reboot to complete the driver installation.
-c class_name
The driver being added to the system exports the class
class_name.
-i 'identify_name'
A white-space separated list of aliases for the driver
device_driver.
-m 'permission'
Specify the file system permissions for device nodes
created by the system on behalf of device_driver.
-n Do not try to load and attach device_driver, just
modify the system configuration files for the
device_driver.
-f Normally if a reconfiguration boot is required to com-
plete the configuration of the driver into the system,
add_drv will not add the driver. The force flag forces
add_drv to add the driver even if a reconfiguration
boot is required. See the -v flag.
-v The verbose flag causes add_drv to provide additional
information regarding the success or failure of a
driver's configuration into the system. See the EXAM-
PLES section.
EXAMPLES
Example 1: Adding SUNW Example Driver to the System
The following example adds the SUNW,example driver to a 32-
bit system, with an alias name of SUNW,alias. It assumes the
driver has already been copied to /usr/kernel/drv.
example# add_drv -m '* 0666 bin bin','a 0644 root sys' \
-i 'SUNW,alias' SUNW,example
Every minor node created by the system for the SUNW,example
driver will have the permission 0666, and be owned by user
bin in the group bin, except for the minor device a, which
will be owned by root, group sys, and have a permission of
0644.
Example 2: Adding Driver to the Client /export/root/sun1
The following example adds the driver to the client
/export/root/sun1. The driver is installed and loaded when
the client machine, sun1, is rebooted. This second example
produces the same result as the first, except the changes
are on the diskless client, sun1, and the client must be
rebooted for the driver to be installed.
example# add_drv -m '* 0666 bin bin','a 0644 root sys' \
-i 'SUNW,alias' -b /export/root/sun1 \
SUNW,example
Example 3: Adding Driver for a Device Already Managed by an
Existing Driver
The following example illustrates the case where a new
driver is added for a device that is already managed by an
existing driver. Consider a device that is currently managed
by the driver dumb_framebuffer. The name and compatible pro-
perties for this device are as follows:
name="display"
compatible="whizzy_framebuffer", "dumb_framebuffer"
If add_drv is used to add the whizzy_framebuffer driver, the
following will result.
example# add_drv whizzy_framebuffer
Error: Could not install driver (whizzy_framebuffer)
Device managed by another driver.
If the -v flag is specified, the following will result.
example# add_drv -v whizzy_framebuffer
Error: Could not install driver (whizzy_framebuffer)
Device managed by another driver.
Driver installation failed because the following
entries in /devices would be affected:
/devices/iommu@f,e0000000/sbus@f,e0001000/display[:*]
(Device currently managed by driver "dumb_framebuffer")
The following entries in /dev would be affected:
/dev/fbs/dumb_framebuffer0
If the -v and -f flags are specified, the driver will be
added resulting in the following.
example# add_drv -vf whizzy_framebuffer
A reconfiguration boot must be performed to complete the
installation of this driver.
The following entries in /devices will be affected:
/devices/iommu@f,e0000000/sbus@f,e0001000/display[:*]
(Device currently managed by driver "dumb_framebuffer"
The following entries in /dev will be affected:
/dev/fbs/dumb_framebuffer0
The above example is currently only relevant to devices
exporting a generic device name.
Example 4: Use of Double Quotes in Specifying Driver Alias
The following example shows the use of double quotes in
specifying a driver alias that contains numbers.
example# add_drv -i '"pci10c5,25"' smc
EXIT STATUS
add_drv returns 0 on success and 1 on failure.
FILES
/kernel/drv
32-bit boot device drivers
/kernel/drv/sparcv9
64-bit boot device drivers
/usr/kernel/drv
other 32-bit drivers that could potentially be shared
between platforms
/usr/kernel/drv/sparcv9
other 64-bit drivers that could potentially be shared
between platforms
/platform/`uname -i`/kernel/drv
32-bit platform-dependent drivers
/platform/`uname -i`/kernel/drv/sparcv9
64-bit platform-dependent drivers
/etc/driver_aliases
driver aliases file
/etc/driver_classes
driver classes file
/etc/minor_perm
minor node permissions
/etc/name_to_major
major number binding
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | SUNWcsu |
|_____________________________|_____________________________|
SEE ALSO
boot(1M), devlinks(1M), disks(1M), drvconfig(1M),
kernel(1M), modinfo(1M), ports(1M), rem_drv(1M), tapes(1M),
driver.conf(4), system(4), attributes(5),
ddi_create_minor_node(9F)
Writing Device Drivers
NOTES
It is possible to add a driver for a device already being
managed by a different driver, where the driver being added
appears in the device's compatible list before the current
driver. In such cases, a reconfiguration boot is required
(see boot(1M) and kernel(1M)). After the reconfiguration
boot, device nodes in /devices, entries in /dev, and refer-
ences to these files may no longer be valid (see the -v
flag). If a reconfiguration boot would be required to com-
plete the driver installation, add_drv will fail unless the
-f option is specified. See Example 3 in the EXAMPLES sec-
tion.
BUGS
add_drv will accept a pathname for device_driver. However,
the kernel does not use the pathname; it only uses the final
component and searches the internal driver search path for
the driver. This can lead to the kernel loading a different
driver than expected.
For this reason, it is not recommended that you use add_drv
with a pathname. See kernel(1M) for more information on the
driver search path.
A future version of add_drv will not support full pathnames.
Man(1) output converted with
man2html