当运行 Oracle Solaris OS 的系统升级时,可能会安装新版本的驱动程序。在升级过程中,系统中的 driver.conf 文件也将更新。driver.conf 文件由供应商和系统管理员进行定制。在系统升级期间,系统先前的配置将继续与新驱动程序、供应商的 driver.conf 文件和管理员的 driver.conf 文件一起使用。
在 Oracle Solaris 11 发行版中,驱动程序编写者可以选择提供单独的 driver.conf 文件来包含供应商提供的驱动程序数据。新的 driver.conf 文件存储在 /etc/driver/drv 目录中。这使得系统能够保留对该文件所做的任何管理更改。如果在两个配置文件中都发现了某个驱动程序,系统将合并文件并提供包含组合后的属性的文件。供应商的 driver.conf 文件的格式与管理员的驱动程序配置文件格式相同。
现在可以通过新接口显式使供应商和管理配置数据可供驱动程序使用。这使得驱动程序编写者能够在驱动程序中直接编写合并逻辑代码,而不是在类操作脚本或安装前脚本以及安装后脚本中进行编写。对管理文件的定制将持久保留并且驱动程序可以决定新值与旧值的相关性。
为了让驱动程序确保以上模型正常工作,驱动程序开发者必须考虑以下事项:
使所设计的驱动程序有一组有规程的、可配置的选项可用。
在驱动程序文档和手册页中全面描述驱动程序的选项和模型。
如果驱动程序更改了其配置选项以致管理员设置失效或被取代,驱动程序应该确保接受先前的管理设置。要查找先前的配置,驱动程序可以在属性类型设置为 DDI_PROP_VENDOR 或 DDI_PROP_ADMIN 的情况下使用 ddi_prop_lookup(9F) 接口。
例如,如果驱动程序支持以秒为单位的超时配置,并且新版本的驱动程序当前支持以毫秒为单位的更精细的超时粒度。对新属性进行命名时应当使其能够与先前的属性相区分。然后,驱动程序应在管理列表中查找先前的属性,如果存在,驱动器将继续接受它。以下驱动程序代码阐释了超时示例。
* Has the timeout been locally configured using the + * prior option of timeout in units of seconds? + */ + if (ddi_prop_lookup_int(DDI_DEV_T_ANY, dip, + DDI_PROP_ADMIN, "timeout",&ivalues,&n) == + DDI_PROP_SUCCESS) { + if (n != 1) { + ddi_prop_free(ivalues); + return (EINVAL); + } + /* yes - convert our working timeout accordingly */ + dip->ms_timeout = 1000 * ivalues[0]; + /* record the new parameter setting for confirmation */ + (void) ddi_prop_update_int(DDI_DEV_T_NONE, + dip, "ms-timeout", dip->ms_timeout); + ddi_prop_free(ivalues); + }
prtconf(1M) 命令显示驱动程序属性,可以使用新的 –u 选项来显示原来的属性值和更改后的属性值。