我们知道Linux上的应用程序是ELF格式的,而Windows则是PE格式
所以要解决这个问题首先二进制加载问题;其次,就是API问题,两者的API完全不同要实现兼容,就需要构建一个虚拟层,来实现两者API之间的转换
这里谈到的兼容指的是二进制兼容,即
~ Windows APP on Linux
~ Linux APP on Windows
1. Wine (Wine Is Not an Emulator)
Wine是一款Linux系统平台下的模拟器软件,其实现原理是將Windows API调用翻译成为动态的POSIX调用
2. Cygwin / MinGW
Cygwin是一个在windows平台上运行的unix模拟环境
Cygwin包括一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集
MinGW(Minimalist GNU for Windows),又称mingw32
是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件
3. Longene
Longene不同于Wine在应用层来实现转换Windows API,它是在内核里实现兼容
其原理是将Linux内核进行修改,以从内核上来实现对Windows API的兼容
更多信息,参考<Longene whitebook>
1. coLinux
CoLinux是在Windows上能够运行的linux(正确地说是Linux内核)
是Linux Kernel的一个移植版本,以在windows下一个进程运行,来支持Linux应用程序
基于从coLinux的项目有andLinux
2. atratus
Atratus可以让你在Windows下运行Linux的二进制执行文件
它包含 ELF 二进制加载器、libc 实现和一个系统调用转换器
3. LINE
LINE Is Not an Emulator
LINE executes unmodified Linux applications on Windows by intercepting Linux system calls
ReactOS: 可以说是开源版本的Windows,研究它对于理解Windows的原理是不错的选择
Contiki: 一个小型、开源、极易移植的多任务电脑操作系统,专门设计以适用于一系列的内存受限的网络系统
NuttX: 是一个实时操作系统(RTOS), 强调标准兼容和小型封装, 遵循Posix和ANSI标准, 主要用于工业控制领域
Zephyr: 是由Linux基金会托管的开源协作项目, 目标是构建一个针对资源受限设备的小型、可裁剪的实时操作系统(RTOS)
Mynewt: 是一个社区驱动的模块化操作系统, 用于资源受限嵌入式环境的操作系统应用
参考:
<IoT In five days>
<Comparison of real-time operating systems>
手机扫一扫
移动阅读更方便
你可能感兴趣的文章