|
Unix 到 Linux 上的移植方法
背景介绍:
随着Linux的普及,很多朋友在做从Unix到Linux的移植。
Unix主要流行的平台主要为Solaris,AIX,HP-Unix和SCO Unix,其中SCO Unix
包括Unixware和Openserver两个平台,在金融和证券行业用的比较多。
谈到移植,没有做过的同事都有点“望而生畏”。其实,通过我给朋友做咨询的经验而讲,
就四个字“知己知彼”。
如果你对要移植的系统和将要移植的目标系统Linux都很熟悉,找出他们的不同点和总结出共同点,
那就没有什么难的了。"Migration Is Easy"
在这个文章中,我给大家讲一些移植的思路和移植方法。最后给大家几个链接,作为大家移植中的
详细参考文献。这里的Linux,适合任何目前主流的发行版。希望能起到抛砖引玉的作用.
文章目录:
SCO Unix与Linux共同点分析
Linux针对软件开发的基石(工具介绍)
SCO Unix到Linux移植的关键因素
SCO Unix到Linux移植策略和方法
SCO Unix到Linux移植规划
重要的参考文献
原创:史应生 [email protected]
1) SCO Unix与RHEL共同点分析
*硬件体系:都是x86架构
*操作系统标准
SCO Unix 通过了Unix 版权持有者的一致性测试(conformance test)
Linux的设计是遵循Unix的标准的
所以,在移植中,90%代码不需要修改。如果需要移植的程序使用的是标准的Unix接口集
那么,二进制代码格式相同,这样就不需要移植了
2) Linux针对软件开发的基石(工具介绍),主要是为移植者在Linux开发时,奠定信心。
*开发GUI工具
KDevelop(C,C++,Script), Eclipse(Java)
*系统调试器
gdb/KDbg,Frysk,ddd
*性能分析工具(用于在程序运行中,出现问题时,找出程序的瓶颈)
SystemTap, Oprofile, Gprofile
*软件包管理工具
RPM,YUM,RHN
*源代码和版本管理工具
CVS, SubVersion
*系统崩溃或者运行错误分析工具(用于在程序运行中,导致系统崩溃和运行错误时,core dump的分析)
Kdump,Netdump,Diskdump,Crash
3) SCO Unix到Linux移植的关键因素一
移植中最主要的因素一是:两个平台上使用的开发工具(编译器和连接器)是不同的,那么我们从两者的:
*如何使用?
*命令行构成?
*语言的支持?
三个方面分析。
我们知道:
SCO Unix有自己的C编译器(默认安装),C++编译器并不是默认安装
Linux 的编译器为GCC(GNU Compiler collection ), glibc, libstdc++, 和libgcj实现
Linux 支持C, C++, FORTRAN, Java语言
SCO Unix 对于FORTRAN和JAVA不提供编译器
4) SCO Unix到Linux移植的关键因素(二)
除了编译器和连接器的差异,我们还要考虑:
*两者编程接口是有差异的
*但遵循相同的标准-POSIX.2
*两者有不同的实现方法
*两者有不同的实现状态
*两者有各自的扩展
5) SCO Unix到Linux移植策略
5.1) C编译器特性
如何使用编译器(命令行选项决定了工作模式,优化)?
我们发现两者:相同的C编译器选项 (19项)
不同的C编译器选项 (40项)
语言扩展特性不同,主要是体现在扩展形式的不同
#pragmas与#define __attribute__(ignore)的对应
两者的内嵌汇编语言不同
5.2) C连接器特性
如何使用编译器(命令行选项决定最终的格式)?
我们发现两者:不同的连接器选项(24项)
6) 对于系统接口(由函数库定义-libc,libm,libpthread)
* 和Unix相比较,Linux只有一小部分函数库和个别函数没有和不同
* SCO Unix是非POSIX线程库,而Linux符合Posix标准ISO 9945-1和9945-2(IEEE1003.1,IEEE1003.2)
* SCO Unix和Linux POSIX线程库的映射表(我们找出有44项映射关系)
* SCO Unix和Linux POSIX信号量库的映射表(我们找出有5项映射关系)
* 网络程序接口
* SCO Unix使用STREAMS和TLI网络接口
* Linux使用POSIX 套接字网络接口
* STREAMS接口(逐渐被淘汰)
* 没有进程共享异步对象(不同进程)
* 互斥体,信号量,条件变量
* 自旋锁
* 线程程序的信号量的处理
* Linux进程和线程对于内核的无差别化
7) 在Linux开发中,要注意环境名字空间问题
干净,与自己定义的标准的兼容
在包含第一个头文件时,设置C预编译宏 (6个宏)
从软件工程的角度,我给出SCO Unix到Linux的移植规划
* 计划和评估
移植目标(低成本,安全,性能和可靠性等等)
自己开发的代码的可移植性分析
相应的第三方应用和中间件的移植分析
自己开发代码和第三方应用的资源协调
基于业务的层次的移植还是基于应用的移植
制定关键的移植里程碑
移植周期的计划
* 实施
编程语言C, C++,Java 等等.
体系结构IA-32, IA-64, AMD64, IA-32E
代码移植
数据移植
性能和功能测试
* 部署
移植好的程序进行打包
生产环境测试
认证
可用性分析
* 管理
安全补丁和系统勘误通知
自动更新
自动升级
9) 推荐的参考资料
* UNIX to Linux Porting: A Comprehensive Reference
By Alfredo Mendoza, Chakarat Skawratananond, Artis Walker
* Producing Open Source Software |
|