cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的unix模擬環(huán)境,是cygnus solutions公司開發(fā)的自由軟件。它對(duì)于學(xué)習(xí)unix/linux操作環(huán)境,或者從unix到windows的應(yīng)用程序移植,或者進(jìn)行某些特殊的開發(fā)工作,尤其是使用gnu工具集在windows上進(jìn)行嵌入式系統(tǒng)開發(fā),非
常有用。隨著嵌入式系統(tǒng)開發(fā)在國(guó)內(nèi)日漸流行,越來越多的開發(fā)者對(duì)cygwin產(chǎn)生了興趣。
Cygwin能做什么?
Windows的Dos Scripts功能非常薄弱,命令行工具也非常少;如果您對(duì)Linux比較熟悉,那么Cygwin可以幫助您在Windows下面使用強(qiáng)大的Bash,以及使用數(shù)量繁多的Linux命令,通過Scripts,可以更加高效的完成系統(tǒng)管理工作 [站長(zhǎng)維護(hù)的Windows服務(wù)器上都安裝有Cygwin,所有的系統(tǒng)維護(hù),數(shù)據(jù)備份,SCP自動(dòng)同步,都是在Cygwin下面處理的。]
如果您剛進(jìn)入Linux的世界,使用Cygwin可以讓你在Windows下面練習(xí)Linux的Bash,以及常用工具。而不需要安裝Linux,也不用擔(dān)心Windows被破壞。
機(jī)理
cygnus當(dāng)初首先把gcc,gdb,gas等開發(fā)工具進(jìn)行了改進(jìn),使他們能夠生成并解釋win32的目標(biāo)文件。然后,他們要把這些工具移植到windows平臺(tái)上去。一種方案是基于win32 api對(duì)這些工具的源代碼進(jìn)行大幅修改,這樣做顯然需要大量工作。因此,他們采取了一種不同的方法——他們寫了一個(gè)共享庫(就是cygwin dll),把win32 api中沒有的unix風(fēng)格的調(diào)用(如fork,spawn,signals,select,sockets等)封裝在里面,也就是說,他們基于win32 api寫了一個(gè)unix系統(tǒng)庫的模擬層。這樣,只要把這些工具的源代碼和這個(gè)共享庫連接到一起,就可以使用unix主機(jī)上的交叉編譯器來生成可以在windows平臺(tái)上運(yùn)行的工具集。以這些移植到windows平臺(tái)上的開發(fā)工具為基礎(chǔ),cygnus又逐步把其他的工具(幾乎不需要對(duì)源代碼進(jìn)行修改,只需要修改他們的配置腳本)軟件移植到windows上來。這樣,在windows平臺(tái)上運(yùn)行bash和開發(fā)工具、用戶工具,感覺好像在unix上工作。
怎么安裝和使用Cygwin?
Cygwin所有的軟件包都在互聯(lián)網(wǎng)上,您需要先下載一個(gè)安裝程序,根據(jù)安裝程序的提示,從互聯(lián)網(wǎng)上下載您需要的軟件包。
請(qǐng)點(diǎn)擊導(dǎo)航欄的“安裝”,查看整個(gè)安裝過程。
環(huán)境變量
開始運(yùn)行bash之前,應(yīng)該設(shè)置一些環(huán)境變量。cygwin提供了一個(gè).bat文件,里面已經(jīng)設(shè)置好了最重要的環(huán)境變量。通過它來啟動(dòng)bash是最安全的辦法。這個(gè).bat文件安裝在cygwin所在的根目錄下。 可以隨意編輯該文件。
CYGWIN變量用來針對(duì)cygwin運(yùn)行時(shí)系統(tǒng)進(jìn)行多種全局設(shè)置。開始時(shí),可以不設(shè)置CYGWIN或者在執(zhí)行bash前用類似下面的格式在dos框下把它設(shè)為tty
C:\> set CYGWIN=tty notitle glob
PATH
變量被cygwin應(yīng)用程序作為搜索可知性文件的路徑列表。當(dāng)一個(gè)cygwin進(jìn)程啟動(dòng)時(shí),該變量被從windows格式(e.g.
C:\WinNT\system32;C:\WinNT)轉(zhuǎn)換成unix格式(e.g.,
/WinNT/system32:/WinNT)。如果想在不運(yùn)行bash的時(shí)候也能夠使用cygwin工具集,PATH起碼應(yīng)該包含x:\cygwin\bin,其中x:\cygwin 是你的系統(tǒng)中的cygwin目錄。
HOME變量用來指定主目錄,推薦在執(zhí)行bash前定義該變量。當(dāng)
cygwin進(jìn)程啟動(dòng)時(shí),該變量也被從windows格式轉(zhuǎn)換成unix格式,例如,作者的機(jī)器上HOME的值為C:\(dos命令set HOME就可以看到他的值,set HOME=XXX可以進(jìn)行設(shè)置),在bash中用echo $HOME看,其值為/cygdrive/c.
TERM變量指定終端型態(tài)。如果美對(duì)它進(jìn)行設(shè)置,它將自動(dòng)設(shè)為cygwin。
LD_LIBRARY_PATH被cygwin函數(shù)dlopen()作為搜索.dll文件的路徑列表,該變量也被從windows格式轉(zhuǎn)換成unix格式。多數(shù)Cygwin應(yīng)用程序不使用dlopen,因而不需要該變量。
改變cygwin的最大存儲(chǔ)容量
Cygwin
程序缺省可以分配的內(nèi)存不超過384
MB(program+data)。多數(shù)情況下不需要修改這個(gè)限制。然而,如果需要更多實(shí)際或虛擬內(nèi)存,應(yīng)該修改注冊(cè)表的
HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER區(qū)段。田家一個(gè)DWORD鍵heap_chunk_in_mb并把它的值設(shè)為
需要的內(nèi)存限制,單位是十進(jìn)制MB。也可以用cygwin中的regtool完成該設(shè)置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin