装入和配置可移植流环境(PSE)。
strload [ -u | -q ] [ -f File ] [ -d List ] [ -m List ]
strload 命令使系统管理员能够装入和卸装驱动程序和模块,并且查询 PSE 和它的从属的装入状态。
缺省情况下,strload 命令根据 /etc/pse.conf 文件装入 PSE。 -f 标志允许管理员使用备用的配置文件。 -d 和 -m 标志是用来指定不在配置文件中(比如正在开发新的驱动程序时)的驱动程序和模块。 -q 标志报告引用的驱动程序和模块的系统装入状态(内核的存在)。
配置文件是一个平面 ASCII、面向行的数据库。注释由 #(镑符号)引入,并继续到行尾。忽略空白行。每个记录的格式为:
attributes filename [argument [node [minor ...] ] ]
字段由空格、制表符或空格和制表符隔开。破折号(-)可以用来指定字段值,表示使用缺省值。字段定义如下:
属性 | 描述要装入的扩展名。可接受的值有: |
文件名 | 指定包含该扩展名的对象文件。如果发出的命令在要装入、卸装或查询的驱动程序或模块的文件名中有“/”(斜杠),则 strload 命令在文件名字段中明确地使用该值。如果文件名条目中没有“/”,则 strload 命令首先在当前目录中寻找该驱动程序或模块的副本。如果该驱动程序或模块不在当前目录中,strload 将在 /usr/lib/drivers/pse 目录中寻找该驱动程序或模块。 |
注:建议从根目录(/)发出 strload 命令。进行装入、卸装和查询的 strload 命令应该始终从相同的目录发出。
内核扩展名装入程序“要求”在装入、卸装和查询时必须使用相同的路径名。这个要求,加上文件名是由 strload 确定,可能会带来问题。 因为内核在寻找匹配时在文件名上执行 strcmp(),所以 strload 命令使用的路径名中的每个字节,必须与内核扩展名装入程序使用的路径名中的每个对应位置上的字节“严格”匹配。如果 strload 命令是从一个不同的目录发出以卸装该模块或驱动程序,则发生以下情况之一:
例如:
以下方案(“不”推荐)将导致卸装“spx”(也称为“A”)。这可能并不是用户期望的效果。
mkdir /tmp/foo /tmp/bar cp /usr/lib/drivers/pse/spx /tmp/foo/A cp /bin/ls /tmp/bar/A cd /tmp/foo strload -d A # 由于在当前目录中找到“A”, # 故装入程序知道“A”的路径 # 和文件名 cd /tmp/bar strload -q -d A # 由于当前路径中有“A”,故报告“yes”。 # 请注意在 /tmp/bar 中的文件“A” # 不同于 /tmp/foo 中的文件“A”, # 但装入程序并不介意, # 因为它是根据路径名 # 来识别文件的。 strload -u -d A # 卸装 spx(也称为“A”)!
以下内容是一个错误方案:
mkdir /tmp/foo2 /tmp/bar2 cp /usr/lib/drivers/pse/spx /tmp/foo2/A cd /tmp/foo2 strload -d A # 装入程序知道“A”的路径和文件名, # 因为在当前目录中 # 找到“A”。 cd /tmp/bar2 strload -q -d A # 回答“no”。/tmp/bar2 中没有文件名与“A”匹配, # 因而 strload 将路径名“/usr/lib/drivers/pse”加在“A”前。 # 未找到 # “/usr/lib/drivers/pse/A”, # 所以 strload 回答“no”。 strload -u -d A # 失败 - “A”不存在。
以下内容是一个错误方案:
cd /usr/lib/drivers/pse strload -d spx # 装入程序知道“spx”的路径和文件名, # 因为在当前目录中 # 找到“spx”。 cd / strload -q -d spx # 回答“no”。在根目录(/)里没有文件名 # 与“spx”相匹配,因而 strload 将 # 路径名“/usr/lib/drivers/pse”加在 # “spx”之前。“/usr/lib/drivers/pse/spx” # 既然存在就会被找到,因此 strload 将 # “/usr/lib/drivers/pse/spx”提供给装入程序。 # strcmp() 运行失败是由于 # “/usr/lib/drivers/pse/spx”和“spx” # 不严格匹配。 strload -u -d spx # 失败 - “spx”不存在。
如果命令行中明确地给出了配置文件的名称,则 -d 和 -m 标志不会使配置文件被忽略,情况如下:
strload -f /tmp/my.conf -d newdriver
注:-d 和 -m 标志不会覆盖配置文件。即如果使用该配置文件装入驱动程序 dgb,-d 标志将试图重新装入它,但会失败。 在 -d 和 -m 标志前处理该配置文件。
对 -d 和 -m 标志,List 变量是以逗号分隔的文件名的列表,其中每个文件名包含一个单独的 PSE 驱动程序或模块。就像在该配置文件中找到以下表单之一中的某行,进行配置处理:
d filename
m filename
-d List | 列出要装入或卸装的 PSE 设备驱动程序。List 变量指定一个以逗号分隔的驱动程序对象名的列表。 |
-f File | 根据 File 变量显示的文件中所包含的配置信息,配置 PSE。缺省的配置文件是 /etc/pse.conf。 |
-m List | 列出要装入或卸装的 PSE 模块。List 变量指定一个以逗号分隔的模块对象名的列表。 |
-q | 报告扩展名的装入状态。 |
-u | 卸装扩展名。 |
root# strload -d dgb,ssb -m ./aoot
root# strload -u -m ./aoot
root# strload -q -d spx
如果不存在,将产生以下输出:
spx : no
#示例配置文件 d dgb #行 1 d mux - - 0 #行 2 ds foo #行 3 d+ xtiso tcp /dev/xti/tcp #行 4 d+ xtiso udp /dev/xti/udp #行 5 m aoot #行 6
行 1 装入 dgb 驱动程序扩展名,作为名为 /dev/dgb 的克隆设备。传递到 dgb 配置例程的参数是 dgb。
行 2 装入 mux 驱动程序扩展名,作为名为 /dev/mux 的克隆设备,同时创建一个带有次要数字 0(零)的标准设备名 /dev/mux0。(用次要数字 0 到 4 创建的设备名不超过 5 个。)
行 3 装入 foo 驱动程序扩展名,作为一个名为 /dev/foo 的标准设备(非克隆)。次要数字是 0。
行 4 和行 5 装入 xtiso 驱动程序扩展名,并且将其配置两次:一次作为 tcp,而另一次作为 udp。创建的克隆节点是 /dev/xti/tcp 和 /dev/xti/udp。调用 xtiso 的配置例程两次:一次使用参数 tcp, 而另一次使用参数 udp。
行 6 装入 aoot 模块扩展名。不创建节点,并且将值 aoot 传递给该配置例程。
/usr/lib/drivers/pse/* | 包含 PSE 内核扩展名。 |
/etc/pse.conf | 缺省的 PSE 配置文件。 |
/usr/sbin/strload | 包含 strload 命令。 |
AIX 5L Version 5.2 Communications Programming Concepts 中的 Configuring Drivers and Modules in the Portable Streams Environment (PSE)、List of Streams Commands 和 STREAMS Overview。