第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
必须先将驱动程序已存在的信息通知系统,然后才能使用该驱动程序。必须使用 add_drv(1M) 实用程序来正确安装设备驱动程序。安装驱动程序之后,无需使用 add_drv 命令便可从内存中装入和卸载该驱动程序。
设备驱动程序模块的路径取决于以下三个条件:
运行驱动程序的平台
编译驱动程序时采用的体系结构
引导时是否需要该路径
设备驱动程序驻留在以下位置:
包含仅在基于 SPARC 的特定平台上运行的 64 位驱动程序。
包含仅在基于 x86 的特定平台上运行的 64 位驱动程序。
包含仅在特定平台系列上运行的 32 位驱动程序。
包含仅在基于 SPARC 的特定平台系列上运行的 64 位驱动程序。
包含仅在基于 x86 的特定平台系列上运行的 64 位驱动程序。
包含与平台无关的 32 位驱动程序。
包含基于 SPARC 的系统上与平台无关的 64 位驱动程序。
包含基于 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
使用 add_drv(1M) 命令可将驱动程序安装到系统中。如果驱动程序成功安装, add_drv 将运行 devfsadm(1M),以便在 /dev 目录中创建逻辑名称。
# add_drv xx
在本例中,设备将自身标识为 xx。设备的特殊文件具有缺省的拥有权和权限 (0600 root sys)。add_drv 命令也允许为设备指定其他名称(别名)。有关显式添加别名和设置文件权限的信息,请参见 add_drv(1M) 手册页。
如果驱动程序创建了不表示终端设备(如磁盘、磁带或者端口)的次要节点,则可以修改 /etc/devlink.tab,以使 devfsadm 在 /dev 中创建逻辑设备名称。另外,也可以通过安装驱动程序时运行的程序来创建逻辑名称。
使用 update_drv(1M) 命令可以通知系统对已安装的设备驱动程序所做的任何更改。缺省情况下,系统将会重新读取驱动程序配置文件,并重新装入驱动程序二进制模块。
要从系统中删除驱动程序,请使用 rem_drv(1M) 命令,然后从模块路径中删除驱动程序模块和配置文件。使用 add_drv(1M) 重新安装驱动程序之前,无法再使用该驱动程序。删除 SCSI HBA 驱动程序需要重新引导才能生效。