AIX Version 6 中的简化内核扩展
背景知识
IBM AIX® 操作系统过去提供 32 位和 64 位内核,并要求内核扩展开发人员提供 32 位和 64 位内核扩展。为帮助开发人员管理多个内核扩展,AIX 操作系统提供了双模式 存档方法,该存档方法在同一存档文件中同时允许 32 位和 64 位内核扩展。在加载时,系统加载器加载相应位的内核扩展。
从 AIX Version 6 开始,AIX 操作系统通过仅 提供 64 位内核简化其内核环境。AIX Version 6 将根据 AIX 二进制兼容性所定义的方式维护与先前 AIX 版本的二进制兼容性(请参见参考资料)。
简化的内核扩展环境
由于 AIX Version 6 去除了 32 位内核,因此大大减少了内核扩展的开发工作。内核扩展开发人员将无法在 AIX Version 6 上构建甚至测试 32 位内核扩展。内核环境的减少意味着提高了投资回报率,同时减少了开发、构建、测试、打包和管理内核扩展所需的资源。
为支持 AIX Version 6 上的 64 位内核扩展,从内核库和内核导入文件删除了对构建 32 位内核扩展的支持。修改了 <sys/types.h> 头文件,这样,如果定义 _KERNEL,而不定义 __64BIT__,则会出现编译错误。由于仅能构建 64 位内核扩展,可能需要更改某些内核扩展构建环境来避免构建错误。
仅 64 位内核的效果
使用此简化的内核环境需要注意以下事项:
将影响仅提供 32 位内核扩展的应用程序。
在 AIX Version 6 上构建内核扩展时,将影响提供 32 位和 64 位内核扩展的应用程序构建环境。
直接或间接通过第三方代码要求仅支持 32 位内核扩展的应用程序将无法加载内核扩展。根据应用程序逻辑,无法加载内核扩展可能导致应用程序在 AIX Version 6 上无法使用或严重受阻。这不是 AIX 二进制兼容性语句的破坏,而是不支持 32 位内核扩展。
提供 32 位和 64 位内核扩展的应用程序需要在 AIX Version 6 构建环境中稍微进行更改。由于在 AIX Version 6 中去除了 32 位内核和 32 位内核扩展构建环境,因此需要修改构建 32 位和 64 位内核扩展的自动化构建环境,以适应单一的 64 位内核扩展环境。
没有从 AIX Version 6 去除对双模式内核扩展的支持,删除 32 位内核并不影响二进制兼容性。在 AIX Version 5 上构建的双模式内核扩展可继续在 AIX Version 6 上运行,但仅能在 64 位模式下运行。
下面的部分提供了转换到 AIX Version 6 的两个解决方案。
解决方案 I
现在,构建 32 位和 64 位内核扩展的自动化构建环境在构建 32 位内核扩展之前必须检查操作系统版本。简单检查一下即可,如:
#!/bin/ksh
Version='uname –v'
if [ $Version –gt "5" ]
then
# Build 64-bit kernel extension only
else
# Build both 32-bit and 64-bit kernel extensions
fi
上面的逻辑将在 AIX Version 5 上构建 32 位和 64 位内核扩展,而对于 AIX Version 6,仅构建 64 位内核扩展。
解决方案 II
可以修改支持构建 32 位和 64 位内核扩展的 Makefile。用于构建双模式内核扩展的典型 Makefile 文件包含的行类似于以下代码:
kext: kext32 kext64:
ar –X32_64 –crf kext kext32 kext64
kext32: …
ld –b32 –o $@ …
kext64: …
ld –b64 –o $@ …
other-makefile-lines
可以将此内容转换为 Makefile 文件,并通过修改为以下行构建仅 64 位内核扩展:
kext: …
ld –b64 –o $@ …
other-makefile-lines
使用此解决方案,内核扩展的名称没有改变,因此无需进行修改,可以继续使用现有的配置方法。
总结
减少 AIX Version 6 支持的内核数可以为 IBM 和内核扩展提供商降低开发成本。开发、构建、测试、打包和维护多个内核和内核扩展的资源减少进而可以带来成本的节约和投资回报的提高。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
很好