kmod_load 内核服务
用途
将对象文件装入到内核中或查询已装入的对象文件。
语法
参数
| 项 | 描述 |
|---|---|
| 帕普 | 指向一个字符串,该字符串包含要装入或查询的对象文件的路径名。 |
| 标志 | 指定一组装入程序标志,用于描述要调用的装入程序选项。 定义了以下标记:
|
| 利布塔普 | 指向一个字符串,该字符串包含要用于查找完成此装入的符号解析所需的对象文件的搜索路径。 如果该参数为空,那么将根据 帕普 参数指定的对象文件的对象文件头中的规范来设置搜索路径。 |
| 克米德普 | 指向一个区域,在该区域将返回与指定模块的此装入相关联的内核模块标识。 如果 kmod_load 服务返回非零返回码,那么此区域中的数据将无效。 |
描述
kmod_load 内核服务将由 帕普 参数指定的内核扩展对象文件装入到内核中。 此服务将返回该模块实例的内核模块标识。
您可以指定标志以请求单个装入,这将确保只将对象文件的一个副本装入到内核中。 另一个选项仅仅是查询给定的对象文件 (由 path-name 指定)。 这允许用户确定模块是否已装入,然后访问分配给它的内核模块标识。
kmod_load 服务还提供已装入模块的已导入符号的装入时符号解析。 kmod_load 服务会装入其他内核对象模块 (如果需要进行符号解析)。
装入程序符号绑定支持
从内核名称空间导入的符号将使用在装入时内核名称空间中存在的符号进行解析。 (在链接编辑时,通过将 #!/unix 字符串指定为导入列表中的第一个字段来从内核名称空间导入符号。)
内核模块也可以从其他内核对象模块导入符号。 如果需要这些其他内核对象模块来解析导入的符号,那么这些内核对象模块将与指定的对象模块一起装入。
如果 标志 参数设置了 LD_KERNELEX 标志,那么由指定内核对象模块导出的任何符号都将添加到内核名称空间。 这使符号可用于其他后续装入的内核对象模块。 以指定内核对象模块的名义装入的内核对象模块 (用于解析导入的符号) 未将其导出的符号添加到内核名称空间。
使用主模块的导出列表中的 SYSCALL 关键字指定的内核导出符号 (在链接编辑时) 将添加到系统调用表中。 这些内核导出符号可作为系统调用提供给应用程序。
查找用于解析符号引用的共享对象模块
如果 利布塔普 参数为空,那么搜索路径搜索字符串将从 帕普 参数指定的对象模块的模块头中获取。 将使用由 帕普 参数指定的对象模块的模块头。
如果模块头包含符号的未限定基本文件名 (名称中没有/[斜杠] 字符) ,那么将使用搜索字符串来查找解析导入所需的共享对象模块的位置。 此搜索字符串可以从两个位置中的一个获取。 如果对 kmod_load 服务的调用上的 利布塔普 参数不为空,那么它将指向一个字符串,该字符串指定要使用的搜索路径。 但是,如果 利布塔普 参数为空,那么将从由 帕普 参数指定的对象模块的模块头中获取搜索路径。
未使用装入以解析导入符号的对象模块中找到的搜索路径规范。 内核装入器服务不支持延迟符号解析。 如果无法解析任何导入的符号,那么内核模块的装入将终止并返回错误。
执行环境
仅可从 流程环境 调用 kmod_load 内核服务。
返回值
如果在没有错误的情况下装入对象文件,那么模块标识将在 克米德普 参数指向的位置返回,并且返回码设置为 0。
错误代码
如果发生错误,那么不会装入该模块,并且不会返回任何内核模块标识。 返回码将设置为下列其中一个返回值:
| 返回值 | 描述 |
|---|---|
| EACCES | 指示要装入的对象模块不是普通文件,或者该对象模块文件的方式拒绝只读访问。 |
| EACCES | 对路径前缀的组件的搜索许可权被拒绝。 |
| EFAULT | 指示当设置了 LD_USRPATH 标志时,调用进程没有足够的权限来访问 帕普 或 利布塔普 参数描述的数据区。 如果访问此区域中的数据时发生 I/O 错误,那么也会返回此错误代码。 |
| ENOEXEC | 指示程序文件具有相应的访问许可权,但具有 XCOFF 指示符,该指示符在其头中无效。 kmod_load 内核服务仅支持装入 XCOFF (扩展的公共对象文件格式) 对象文件。 如果装入器无法解析导入的符号,那么也会返回此错误代码。 |
| EINVAL | 指示程序文件的头中有有效的 XCOFF 指示符,但该头对于要装入该文件的机器是损坏的或不正确的。 |
| ENOMEM | 指示装入需要的内核内存超过系统施加的最大值所允许的内核内存量。 |
| ETXTBSY | 指示该对象文件当前已打开以供某个进程写入。 |
| ENOTDIR | 指示路径前缀的某个组件不是目录。 |
| ENOENT | 指示不存在此类文件或目录,或者 path-name 为空。 |
| ESTALE | 指示调用者的根目录或当前目录位于已卸装的虚拟文件系统中。 |
| ELOOP | 指示在转换 路径 或 利布塔普 参数时迂到过多的符号链接。 |
| ENAMETOOLONG | 指示路径名的组件超过了 255 个字符,或整个路径名超过了 1023 个字符。 |
| EIO | 指示在操作期间发生了 I/O 错误。 |