(本文转载于网上)
cygwin是个在windows平台上运行的unix模拟环境,是cygnus solutions公司研发的免费软件(该公司研发了很多好东西,著名的更有eCos,但是现已被Redhat收购)。他对于学习unix/linux操作环境,或从unix到windows的应用程式移植,或进行某些特别的研发工作,尤其是使用gnu工具集在windows上进行嵌入式系统研发,很有用。随着嵌入式系统研发在国内日渐流行,越来越多的研发者对cygwin产生了兴趣。本文将对其作一介绍。
1 引言
cygwin是个在windows平台上运行的unix模拟环境,是cygnus solutions公司研发的免费软件(该公司研发了很多好东西,著名的更有eCos,但是现已被Redhat收购)。他对于学习unix/linux操作环境,或从unix到windows的应用程式移植,或进行某些特别的研发工作,尤其是使用gnu工具集在windows上进行嵌入式系统研发,很有用。随着嵌入式系统研发在国内日渐流行,越来越多的研发者对cygwin产生了兴趣。本文将对其作一介绍。
根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
1 引言
cygwin是个在windows平台上运行的unix模拟环境,是cygnus solutions公司研发的免费软件(该公司研发了很多好东西,著名的更有eCos,但是现已被Redhat收购)。他对于学习unix/linux操作环境,或从unix到windows的应用程式移植,或进行某些特别的研发工作,尤其是使用gnu工具集在windows上进行嵌入式系统研发,很有用。随着嵌入式系统研发在国内日渐流行,越来越多的研发者对cygwin产生了兴趣。本文将对其作一介绍。
2 机理
cygnus当初首先把gcc,gdb,gas等研发工具进行了改进,使他们能够生成并解释win32的目标文档。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就能够使用unix主机上的交叉编译器来生成能够在windows平台上运行的工具集。以这些移植到windows平台上的研发工具为基础,cygnus又逐步把其他的工具(几乎无需对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和研发工具、用户工具,感觉似乎在unix上工作。
关于cygwin实现的更周详描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html.
3 安装配置cygwin
3.1 安装
要安装网络版的cygwin,能够到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程式,用他能下载一个完整的cygwin。按照每一屏的指示能够方便的进行安装。
3.2 环境变量
开始运行bash之前,应该配置一些环境变量。cygwin提供了一个.bat文档,里面已配置好了最重要的环境变量。通过他来启动bash是最安全的办法。这个.bat文档安装在cygwin所在的根目录下。 能够随意编辑该文档。
CYGWIN变量用来针对cygwin运行时系统进行多种全局配置。开始时,能够不配置CYGWIN或在执行bash前用类似下面的格式在dos框下把他设为tty
C:\> set CYGWIN=tty notitle glob
PATH变量被cygwin应用程式作为搜索可知性文档的路径列表。当一个cygwin进程启动时,该变量被从windows格式(e.g. C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g., /WinNT/system32:/WinNT)。假如想在不运行bash的时候也能够使用cygwin工具集,PATH起码应该包含x:\cygwin\bin,其中x:\cygwin 是您的系统中的cygwin目录。
HOME变量用来指定主目录,推荐在执行bash前定义该变量。当cygwin进程启动时,该变量也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:\(dos命令set HOME就能够看到他的值,set HOME=XXX能够进行配置),在bash中用echo $HOME看,其值为/cygdrive/c.
TERM变量指定终端型态。假如美对他进行配置,他将自动设为cygwin。
LD_LIBRARY_PATH被cygwin函数dlopen()作为搜索.dll文档的路径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用程式不使用dlopen,因而无需该变量。
3.3 改变cygwin的最大存储容量
Cygwin程式缺省能够分配的内存不超过384 MB(program data)。多数情况下无需修改这个限制。然而,假如需要更多实际或虚拟内存,应该修改注册表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mb并把他的值设为需要的内存限制,单位是十进制MB。也能够用cygwin中的regtool完成该配置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
4 使用cygwin
这一段讲一下cygwin和传统unix系统的不同之处。
4.1 映射路径名
4.1.1 引言
cygwin同时支持win32和posix风格的路径,路径分隔符能够是正斜杠也能够是反斜杠。还支持UNC路径名。(在网络中,UNC是一种确定文档位置的方法,使用这种方法用户能够不关心存储设备的物理位置,方便了用户使用。在Windows操作系统,Novell Netware和其他操作系统中,都已使用了这种规范以取代本地命名系统。在UNC中,我们不用关心文档在什么盘(或卷)上,不用关心这个盘(或卷)所在服务器在什么地方。我们只要以下面格式就能够访问文档:
\服务器名\共享名\路径\文档名
共享名有时也被称为文档所在卷或存储设备的逻辑标识,但使用他的目的是让用户不必关心这些卷或存储设备所在的物理位置。)
符合posix标准的操作系统(如linux)没有盘符的概念。任何的绝对路径都以一个斜杠开始,而不是盘符(如c:)。任何的文档系统都是其中的子目录。例如,两个硬盘,其中之一为根,另一个可能是在/disk2路径下。
因为许多unix系统上的程式假定存在单一的posix文档系统结构,所以cygwin专门维护了一个针对win32文档系统的内部posix视图,使这些程式能够在windows下正确运行。在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




