编写设备驱动程序

安装、更新和删除驱动程序

必须先将驱动程序已存在的信息通知系统,然后才能使用该驱动程序。必须使用 add_drv(1M) 实用程序来正确安装设备驱动程序。安装驱动程序之后,无需使用 add_drv 命令便可从内存中装入和卸载该驱动程序。

将驱动程序复制到模块目录

设备驱动程序模块的路径取决于以下三个条件:

设备驱动程序驻留在以下位置:

/platform/`uname -i`/kernel/drv

包含仅在特定平台上运行的 32 位驱动程序。

/platform/`uname -i`/kernel/drv/sparcv9

包含仅在基于 SPARC 的特定平台上运行的 64 位驱动程序。

/platform/`uname -i`/kernel/drv/amd64

包含仅在基于 x86 的特定平台上运行的 64 位驱动程序。

/platform/`uname -m`/kernel/drv

包含仅在特定平台系列上运行的 32 位驱动程序。

/platform/`uname -m`/kernel/drv/sparcv9

包含仅在基于 SPARC 的特定平台系列上运行的 64 位驱动程序。

/platform/`uname -m`/kernel/drv/amd64

包含仅在基于 x86 的特定平台系列上运行的 64 位驱动程序。

/usr/kernel/drv

包含与平台无关的 32 位驱动程序。

/usr/kernel/drv/sparcv9

包含基于 SPARC 的系统上与平台无关的 64 位驱动程序。

/usr/kernel/drv/amd64

包含基于 x86 的系统上与平台无关的 64 位驱动程序。

要安装 32 位驱动程序,必须将驱动程序及其配置文件复制到模块路径中的 drv 目录。例如,要将驱动程序复制到 /usr/kernel/drv,请键入:


$ su
# cp xx /usr/kernel/drv
# cp xx.conf /usr/kernel/drv

要安装 SPARC 驱动程序,请将驱动程序复制到模块路径中的 drv/sparcv9 目录。将驱动程序配置文件复制到模块路径中的 drv 目录。例如,要将驱动程序复制到 /usr/kernel/drv,应键入:


$ su
# cp xx /usr/kernel/drv/sparcv9
# cp xx.conf /usr/kernel/drv

要安装 64 位 x86 驱动程序,请将驱动程序复制到模块路径中的 drv/amd64 目录。将驱动程序配置文件复制到模块路径中的 drv 目录。例如,要将驱动程序复制到 /usr/kernel/drv,应键入:


$ su
# cp xx /usr/kernel/drv/amd64
# cp xx.conf /usr/kernel/drv

注 –

所有驱动程序配置文件 (.conf 文件)都必须放入模块路径中的 drv 目录。不能将 .conf 文件放入 drv目录的任何子目录。


使用 add_drv 安装驱动程序

使用 add_drv(1M) 命令可将驱动程序安装到系统中。如果驱动程序成功安装, add_drv 将运行 devfsadm(1M),以便在 /dev 目录中创建逻辑名称。


# add_drv xx

在本例中,设备将自身标识为 xx。设备的特殊文件具有缺省的拥有权和权限 (0600 root sys)。add_drv 命令也允许为设备指定其他名称(别名)。有关显式添加别名和设置文件权限的信息,请参见 add_drv(1M) 手册页。


注 –

请勿使用 add_drv 命令安装 STREAMS 模块。有关详细信息,请参见《STREAMS Programming Guide》


如果驱动程序创建了不表示终端设备(如磁盘、磁带或者端口)的次要节点,则可以修改 /etc/devlink.tab,以使 devfsadm/dev 中创建逻辑设备名称。另外,也可以通过安装驱动程序时运行的程序来创建逻辑名称。

更新驱动程序信息

使用 update_drv(1M) 命令可以通知系统对已安装的设备驱动程序所做的任何更改。缺省情况下,系统将会重新读取驱动程序配置文件,并重新装入驱动程序二进制模块。

删除驱动程序

要从系统中删除驱动程序,请使用 rem_drv(1M) 命令,然后从模块路径中删除驱动程序模块和配置文件。使用 add_drv(1M) 重新安装驱动程序之前,无法再使用该驱动程序。删除 SCSI HBA 驱动程序需要重新引导才能生效。