• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Cygwin的編譯工具鏈的使用介紹

      2018-05-09 01:30:10白明明
      科學(xué)與財富 2018年8期
      關(guān)鍵詞:編譯器模擬器內(nèi)核

      白明明

      摘 要:隨著嵌入式技術(shù)蓬勃發(fā)展,對嵌入式軟件技術(shù)提出新挑戰(zhàn)。 嵌入式軟件開發(fā)常用交叉編譯方式,以Linux為主機系統(tǒng),GNU工具鏈為交叉編譯系統(tǒng),為嵌入式系統(tǒng)生成可執(zhí)行程序為最主要的方案。本文闡述基于GNU工具鏈的嵌入式開發(fā)實踐,圍繞如何在Window上用Cygwin模擬器、GNU及其它開源工具,如Android的NDK進行嵌入式開發(fā),探討其中一些關(guān)鍵的實現(xiàn)技術(shù)和實踐細節(jié)。關(guān)鍵詞:Cygwin、GNU、交叉編譯、NDK、編譯工具鏈一、引言隨著對Linux的深入研究,針對某類應(yīng)用開發(fā)一個嵌入式系統(tǒng)漸漸成為熱門。這需要一套開發(fā)工具,而商業(yè)開發(fā)工具都非常昂貴。GNU自由軟件給開發(fā)者帶來了福音,它是免費的,遵循GPL協(xié)議。引導(dǎo)程序、嵌入式操作系統(tǒng)內(nèi)核、運行庫乃至應(yīng)用程序都可用它來開發(fā)。本文提出了一種在Window上基于Cygwin模擬器用GNU 工具開發(fā)軟件的方式。二、交叉編譯概述編譯器常分類為: “本地”編譯器:生成用于它本身處計算機和操作系統(tǒng)相同的環(huán)境下運行的目標代碼。 交叉編譯器:生成用于其他平臺上運行的目標代碼,對新硬件平臺非常有用。 三、開發(fā)環(huán)境的建立GNU工具基于Linux環(huán)境。在Windows下使用它方式:用終端軟件登陸Linux服務(wù)器;安裝虛擬機和Linux系統(tǒng); 安裝Linux模擬器;可單機運行,占用資源少,但配置麻煩。3.1 安裝CygwinCygwin 是一套可運行在Windows上的Linux 模擬器。它類似Windows cmd 的Shell環(huán)境界面,可使用大部分Linux 軟件和功能。用它可以方便地在Windows構(gòu)建出Linux 平臺的庫或應(yīng)用程序。它包含一套在Windows 系統(tǒng)下實現(xiàn)POSIX 系統(tǒng)調(diào)用的API,還有一套GUN 開發(fā)工具,可以方便地在Windows 下進行跨平臺開發(fā)。先下載安裝程序并運行,下一步“選擇安裝類型”,選擇網(wǎng)絡(luò)安裝;下一步“選擇安裝目錄”。下一步“選擇本地包目錄”設(shè)置下載的安裝包放置路徑。下一步 “網(wǎng)絡(luò)連接類型”。下一步“選擇下載網(wǎng)站”。下一步“選擇下載安裝包”加載安裝包列表;安裝測試如下:運行cygwin,在彈出的命令行窗口輸入:cygcheck -c cygwin命令。cygcheck –c檢查安裝cygwin已經(jīng)安裝的包的版本和狀態(tài)然后依次輸入gcc –version, make –version等進行測試。3.2 配置腳本運行Cygwin會先執(zhí)行.bash_profile。若要自定義的工具。例如,則在文件“source ~/.git-completion.bash”前加“PATH=$PATH:/cygdrive/d/ android-ndk-r11c/build”。表示把D盤的“android-ndk-r11c/build”路徑添加到搜索路徑中。下面是自動化編譯腳本的關(guān)鍵內(nèi)容,它用于設(shè)置編譯工具鏈,主目錄,啟動模擬器:set PATH=/cygdrive/d/build-arm-tools/arm-2012.09/bin;%PATH%.. …if %a% equ y G:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico /bin/env _T=%V /bin/bash --login -i -c "source xxx.sh"" G:\cygwin\bin\mintty.exe "為mintty所在位置。-i用于指定窗口左上角圖標。/bin/env _T=%V用于設(shè)置在啟動mintty后的shell里面環(huán)境變量_T的值,_T為路徑參數(shù),其中%V表示windows傳入的路徑參數(shù)(可在.bash_profile使用_T)。/bin/bash -l (-l相當(dāng)于--login)表示啟動登錄shell。--login -i -c "source xxx.sh"登陸bash執(zhí)行shell腳本xxx.sh。四、編譯工具鏈Linux嵌入式系統(tǒng)的交叉編譯工具鏈,可從芯片提供商處獲?。换蛘邚木W(wǎng)上下載;或者自己編譯生成。后者需要各種源代碼,至少需要binutils、gcc、linux、C運行時庫(glibc、newlib、bionic等)。4.1 GCC嵌入式系統(tǒng)用交叉編譯在本機編譯目標系統(tǒng)的可執(zhí)行軟件,在這個過程中需要使用交叉編譯工具鏈,包括交叉編譯的編譯器、連接器、目標庫等。如果在ARM目標板上運行Linux系統(tǒng),因為Linux內(nèi)核代碼使用GCC編譯器,為此GNU提供了GCC編譯器針對ARM目標平臺的支持。由于GCC開源的特點,用戶可以手動編譯生成符合自己需要的ARM GCC編譯器等。如Linux平臺ARM的交叉編譯器是arm-linux-gcc。編譯交叉編譯工具鏈要用到庫和源代碼,如Linux內(nèi)核代碼、glibc庫、工具程序、內(nèi)核線程包、編譯器。還可通過編譯工具鏈的腳本crosstool建立交叉編譯環(huán)境,通過指定不同的參數(shù),crosstool腳本建立指定版本的GCC編譯器和glibc程序庫,還可以直接下載已經(jīng)編譯好的工具鏈,由于linux內(nèi)核與GCC編譯器存在依賴關(guān)系,選擇目標平臺Linux內(nèi)核版本后,可以參考內(nèi)核版本說明對GCC編譯器的最低要求選擇GCC編譯器版本。步驟如下:1.建立Linux內(nèi)核頭文件:交叉編譯器需要通過內(nèi)核頭文件獲取目標平臺的系統(tǒng)函數(shù)調(diào)用信息,需要通過對其腳本配置生成目標平臺的頭文件。2.編譯安裝binutils:它是交叉編譯工具鏈中的工具包,包括連接器、匯編器和用于目標文件和檔案的工具,針對二進制代碼的維護。3.編譯安裝GCC的C編譯器:建立arm-linux-gcc交叉編譯器,用于編譯內(nèi)核、bootloader等,并建立glibc庫。4.編譯安裝glibc庫:GNU glibc庫是Linux系統(tǒng)程序的組成部分,用戶開發(fā)的目標平臺應(yīng)用程序,需要glibc庫的支持。5.編譯安裝GCC的C、C++編譯器:在建立的glibc庫基礎(chǔ)上,編譯gcc支持C和C++語言程序的編譯。4.2 NDKAndroid NDK(Native Development Kit)原生開發(fā)工具集,允許Android應(yīng)用開發(fā)人員把他們的C和/或C++源文件所編譯生成的原生機器代碼嵌入到他們的應(yīng)用程序包中。Android VM支持通過JNI調(diào)用原生代碼,因此在Android平臺上可以支持“Java+ C and/or C++”的編程方式。NDK是Android平臺支持C開發(fā)的主要工具。4.3其它工具鏈Linaro是 2010年臺北國際計算機展期間ARM、TI與IBM等廠家合資成立的非贏利Linux基礎(chǔ)架構(gòu)軟件研發(fā)商。目標旨在改進與優(yōu)化在ARM-based架構(gòu)上運行的開放原始碼軟件及開發(fā)工具,透過這間合資公司推出開放原始碼的底層軟件工具,解決ARM生態(tài)系中,重復(fù)投資造成的資源浪費。五、結(jié)束語本文介紹介紹了通過Cygwin使用Linaro和CodeSourcery,GNU GCC構(gòu)建其它Linux嵌入式系統(tǒng)的應(yīng)用程序。實踐證明,使用這些工具開發(fā)嵌入式操作系統(tǒng)投入小,而軟件質(zhì)量可以與商業(yè)嵌入式編譯工具軟件相媲美。

      猜你喜歡
      編譯器模擬器內(nèi)核
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      飛行模擬器大揭秘
      航空世界(2022年3期)2022-06-01 06:13:42
      了不起的安檢模擬器
      群眾路線是百年大黨成功之內(nèi)核性制度因素的外在表達
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      盲盒模擬器
      劃船模擬器
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
      Linux內(nèi)核mmap保護機制研究
      通用NC代碼編譯器的設(shè)計與實現(xiàn)
      通许县| 汉中市| 马边| 吉林市| 台北县| 秦皇岛市| 青河县| 乐至县| 肥乡县| 武乡县| 会同县| 靖宇县| 锡林浩特市| 岱山县| 中方县| 邯郸县| 永城市| 长治市| 阿勒泰市| 黔西| 中江县| 湖南省| 安阳市| 赣榆县| 社旗县| 中超| 芜湖县| 工布江达县| 舒城县| 开封市| 松桃| 贵南县| 通河县| 永仁县| 虞城县| 平山县| 都昌县| 湖北省| 敦化市| 阿图什市| 隆子县|