亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Windows平臺下構(gòu)建嵌入式Linux交叉編譯環(huán)境

        2013-08-27 08:33:20林炎張友益
        關(guān)鍵詞:安裝包本機(jī)編譯器

        林炎,張友益

        (1.江蘇科技大學(xué) 電子信息學(xué)院,鎮(zhèn)江212003;2.中國船舶重工集團(tuán)公司 第七二三研究所)

        引 言

        隨著計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和微電子技術(shù)的深入發(fā)展,嵌入式系統(tǒng)的應(yīng)用無處不在。交叉編譯是伴隨嵌入式系統(tǒng)的發(fā)展而來的[1]。傳統(tǒng)的程序編譯方式,生成的程序直接在本地運(yùn)行,這種編譯方式稱作本地編譯;嵌入式系統(tǒng)多采用交叉編譯的方式,在本機(jī)編譯好的程序是不能在本機(jī)運(yùn)行的,需要通過特定的手段(例如燒寫、下載等)安裝到目標(biāo)系統(tǒng)上執(zhí)行。交叉編譯的實(shí)現(xiàn)克服了嵌入式系統(tǒng)目標(biāo)平臺存儲空間和運(yùn)算能力有限的缺點(diǎn)[2],完善的工具鏈可以保證項目開發(fā)的進(jìn)度和質(zhì)量[3],是嵌入式開發(fā)的第一步,也是關(guān)鍵的一步[4]。

        1 本機(jī)Linux環(huán)境的選擇

        交叉編譯環(huán)境包括兩個部分,其中,本機(jī)Linux環(huán)境是重要的基礎(chǔ)。基于本機(jī)Linux環(huán)境,構(gòu)建交叉編譯工具鏈?zhǔn)顷P(guān)鍵。

        本機(jī)的Linux環(huán)境可以選擇安裝Linux操作系統(tǒng),或者在Windows下安裝虛擬Linux環(huán)境軟件[5]。Linux環(huán)境中有很多優(yōu)秀的開源開發(fā)工具,而Windows是目前PC機(jī)上最普及的操作系統(tǒng)。為了兼顧Linux和Windows,選擇在Windows下安裝虛擬Linux環(huán)境。Windows下安裝虛擬Linux環(huán)境主要有以下3種方式:

        ①虛擬機(jī),如Vmware、VirtualBox等。虛擬機(jī)虛擬出一臺真實(shí)的計算機(jī)出來,只需要在這臺虛擬計算機(jī)上安裝Linux,其效果和真實(shí)Linux系統(tǒng)完全一樣。但這樣所需占用的系統(tǒng)資源相當(dāng)多,速度受硬件配置的限制很大[6]。

        ②CoLinux及其衍生品,如AndLinux。CoLinux 創(chuàng)建的是一個真正的Linux操作系統(tǒng)[7],其原理是將一個發(fā)行版Linux“改造”為一個Windows平臺下的應(yīng)用程序,并以原生方式運(yùn)行Linux的軟件。這是一個很有潛力的解決方案,但目前存在兩個很明顯的軟肋:一是被改造好的發(fā)行版數(shù)量非常有限,版本也非常陳舊;二是僅僅支持32位機(jī)的安裝。

        ③Cygwin。Cygwin是由RedHat公司負(fù)責(zé)維護(hù)的,經(jīng)多年來不斷的發(fā)展,對于Linux的虛擬日臻成熟。Cygwin的設(shè)計思想十分巧妙,它在Windows上設(shè)計了一個Linux系統(tǒng)調(diào)用中間層,模擬Linux的系統(tǒng)調(diào)用,只需要把Linux下的工具在Windows系統(tǒng)重新編譯,做一些較小的修改即可移植到Windows 系統(tǒng)。Cygwin 幾乎移植了Linux系統(tǒng)常用的所有開發(fā)工具[2],用戶可以根據(jù)自身的需要裝卸,十分靈活。Cygwin作為開源軟件,支持32/64位機(jī)的安裝,占用系統(tǒng)資源少,運(yùn)行速度快,指令與Linux基本一致,更可以方便地與Windows共享文件(夾)。

        2 Cygwin的安裝與配置[8]

        ①從http://cygwin.com 下載最新的Cygwin。

        ②安裝Cygwin。首次安裝通常選擇直接從Internet下載(Install from Internet)安裝的模式,并選擇一個目錄作為安裝包的存放路徑(Local Package Directory)。下載好的安裝包將被保留在這個目錄中,以便再次安裝時直接由本地安裝(Install from Local Directory)。更新時,安裝程序?qū)⒅幌螺d比這個目錄中更新的安裝包。

        ③下載鏡像的選擇。Cygwin提供了大量的鏡像下載站點(diǎn),用戶可以選擇一個合適的站點(diǎn)下載安裝包。再次安裝時,還應(yīng)選擇同一個站點(diǎn)。

        ④安裝包的選擇是Cygwin安裝與配置過程中最重要的一步。選擇全部安裝包下載,需要很長的時間,且安裝大量無用的安裝包之后,還會大大地影響到Cygwin運(yùn)行的速度。對于嵌入式開發(fā)而言,建議將Archive、Base、Devel、Doc、Editors、Interpreters、Libs、Net、Shells、System、Text、Utils、Web下的安裝包全部(all)安裝,其他安裝包缺?。╠efault)安裝。

        安裝成功后,便可進(jìn)入到Cygwin環(huán)境,命令行提示符為“$”。Linux的文件系統(tǒng)都是從“/”開始的,Cygwin的“/”就是在Windows中的安裝路徑(如X:\cygwin)。

        3 常用的交叉工具鏈

        對于Cygwin而言,交叉工具鏈通常有3個來源——已經(jīng)制作好的交叉編譯鏈、分步手工編譯交叉工具鏈以及使用腳本自動生成的交叉工具鏈。

        3.1 已經(jīng)制作好的交叉工具鏈

        如GNU ARM toolchain[9],選擇Cygwin版本下載、安裝好后,在Cygwin中就可直接使用,十分方便,但只適用于無MMU 的嵌入式Linux(如ucLinux);又如廠商提供的交叉工具鏈,都是廠商測試通過的,可靠性很高,而且與開發(fā)板能夠很好地吻合,但是由于時間滯后的原因,往往都不是最新的版本,當(dāng)系統(tǒng)內(nèi)核升級后,會出現(xiàn)兼容性問題[10]。最重要的是,Cygwin 并不支持以原生方式運(yùn)行Linux程序,如果廠商沒有提供Cygwin中可以使用的交叉工具鏈,這種方法就是不可行的??偠灾褂靡呀?jīng)做好的交叉工具鏈有很大的局限性。

        3.2 分步手工編譯交叉工具鏈

        分步手工編譯交叉工具鏈即分別編譯和安裝交叉工具鏈所需要的庫和源代碼。執(zhí)行上比較困難,需要比較清楚地了解每個工具鏈軟件的相互匹配情況,而且也可能會受到不同的發(fā)行版之間差別的影響,比較容易出錯或者編譯不通過[11]。

        3.3 自動生成的交叉工具鏈

        自動生成的交叉工具鏈最著名的當(dāng)屬Crosstool。但用Crosstool編譯的交叉工具鏈,GCC版本只能到4.1.1,無法編譯版本高于2.6.29的Linux內(nèi)核。Crosstool-NG(Crosstool-Next Generation)是Crosstool 的替代者。Crosstool-NG一直保持著更新,隨著開源社區(qū)更新和改進(jìn)GCC、Glibc以及相關(guān)的工具,與編譯工具鏈相關(guān)的代碼也會不斷發(fā)生演化,這使得它能很好地完成維護(hù)任務(wù)。[12]

        4 Crosstool-NG的使用[13]

        Crosstool-NG 會自動完成Linux環(huán)境下頭文件、庫文件、內(nèi)核版本和交叉編譯工具鏈的匹配,方法簡單易行,也不容易出錯[11]。下文就詳細(xì)介紹了如何在“Windows 7 64bit+Cygwin 1.7.16-1”平臺下,利用Crosstool-NG 1.16.0,針對32 位ARM 核S3C6410 微處理器,搭建Linux交叉編譯環(huán)境。

        ①將Windows系統(tǒng)設(shè)置區(qū)分大小寫模式。Unix和類Unix系統(tǒng)(如Linux)都是區(qū)分大小寫的。Cygwin模擬Unix環(huán)境也要求區(qū)分大小寫,但Windows系統(tǒng)本身對大小寫并不加以區(qū)分。解決的辦法是將注冊表中HKEY_LOCAL_M(jìn)ACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel項中“obcaseinsensitive”值置為“0”,重啟計算機(jī)后,Cygwin下就可以區(qū)分大小寫了。

        ②從http://crosstool-ng.org下載最新的Crosstool-NG,將壓縮包復(fù)制到Cygwin 的/home/ng/下,進(jìn)入目錄,解壓壓縮包$tar-jxvf crosstool-ng-1.16.0.tar.bz2,再進(jìn)入解壓目錄$cd crosstool-ng-1.16.0。如果有補(bǔ)丁文件,也下載到此目錄下,為Crosstool-NG 打補(bǔ)丁($patch-p1 <<補(bǔ)丁文件>)。

        ③針對Cygwin,對Crosstool-NG 作如下幾處修改。(a)修改kconfig/Makefile。在“$(conf_OBJ)$(conf_DEP):CFLAGS+= $(INTL_CFLAGS)”后加上“conf:LDFLAGS+=-lintl”一行,將“mconf:LDFLAGS+= $(NCURSES_LDFLAGS)”修改為“mconf:LDFLAGS+= -lintl $(NCURSES_LDFLAGS)”,將“nconf:LDFLAGS+=-lmenu-lpanel-lncurses”修改為“nconf:LDFLAGS+=-lintl-lmenu-lpanel-lncurses”。(b)修改kconfig/nconf.c。將“ESCDELAY=1;”修改為“set_escdelay(1);”。

        ④配置Crosstool-NG($./configure--prefix=/opt/ng/install),經(jīng)過編譯($make)后,安裝Crosstool-NG($make install)。

        ⑤創(chuàng)建交叉工具鏈的構(gòu)造目錄($mkdir-p/opt/ng/build)和源碼包目錄($mkdir-p/opt/ng/src),并根據(jù)目標(biāo)系統(tǒng)CPU 的情況,從配置模板目錄中拷貝相應(yīng)的參考config文件到構(gòu)造目錄($cp/opt/ng/install/lib/ct-ng.1.16. 0/samples/arm-unknown-linux-gnueabi/*/opt/ng/build),進(jìn)入構(gòu)造目錄($cd/opt/ng/build),將config文件改更名為.config($mv crosstool.config.config)。為方便調(diào)用 ct-ng,修改環(huán)境變量 ($export PATH=${PATH}:/opt/ng/install/bin)。

        ⑥進(jìn)入配置交叉工具鏈界面($ct-ng menuconfig)。

        (a)首先,設(shè)置保存編譯的中間步驟,勾選上Debug Crosstool-NG,以及隨之產(chǎn)生的Save intermediate steps項。編譯工具鏈出錯是很難避免的,記錄下編譯的每一步狀態(tài),在出現(xiàn)錯誤并糾正錯誤之后,Crosstool NG 就可以從出錯的那一步開始繼續(xù)編譯。然后,設(shè)置編譯工具鏈所需源碼包的目錄(Local tarballs directory)為/opt/ng/src以及交叉編譯器的安裝目錄(Prefix directory)為/usr/crosstool-ng。最后,增加編譯時的并行進(jìn)程數(shù)(Number of parallel jobs),以提高運(yùn)行效率。這個數(shù)值一般應(yīng)為CPU核數(shù)的兩倍,如雙核CPU 就應(yīng)填4。

        (b)對于ARM 核S3C6410而言,Target Architecture和Default instruction set mode缺省的配置已經(jīng)是arm,不用修改。指令集的架構(gòu)(Architecture level)應(yīng)設(shè)置為armv6。處理器的類型(Emit assembly for CPU)應(yīng)設(shè)為arm1176jzf-s。浮點(diǎn)選項(Floating point)應(yīng)選硬件VFP(hardware FPU)。

        (c)Toolchain options。在Tuple's vendor string前的括號中可以輸入個性化的前綴名,如輸入lynn,就將產(chǎn)生名為arm-lynn-linux-gnueabi-的交叉工具鏈。留空的話,最后生成的工具鏈的名字是arm-unknown-linux-gnueabi-。

        (d)在Operating System 中選擇合適的嵌入式Linux內(nèi)核版本號。

        (e)在Binary Utilities中設(shè)置Binutils庫的版本號。Binutils是一個二進(jìn)制工具集合,包含了匯編器、反匯編器、連接器、ELF可執(zhí)行文件分析器等重要工具[14]。

        (f)在C Compiler中設(shè)置交叉編譯器GCC的版本號和所要支持的語言。GCC 是一組編譯工具的總稱,包括C/C++語言編譯器、源代碼處理程序和各種庫文件[15]。建議關(guān)閉Fortran和Java語言的支持,因為這些語言通常無法針對目標(biāo)機(jī)通過編譯。[12]

        (g)在C--library中設(shè)置交叉編譯器所要支持的C庫及其版本號(注意選上“Forced unwind support”)。Glibc是Linux系統(tǒng)中最底層的應(yīng)用程序開發(fā)接口(API),包含了各種函數(shù)庫[6],所有動態(tài)鏈接的程序都要用到它。這里需要注意的是,Glibc和內(nèi)核源代碼的版本必須與目標(biāo)機(jī)上實(shí)際使用的版本保持一致[15]。

        (h)在Debug facilitites中配置交叉編譯器的調(diào)試工具。其中,ltrace不支持Linux的虛擬環(huán)境,不要選擇;而duma需要進(jìn)行一定的修改之后才能被編譯(將duma源碼包解壓縮,打開GNU makefile文件,在ECHOLF=echo后添加OS=cygwin,再將duma重新打包);GDB 最為常用,可以調(diào)試C和C++語言程序[1]。

        (i)在Companion library中設(shè)置GMP、MPFR、PPL、CLooG/ppl、MPC的版本號,它們是除C 庫以外,交叉編譯工具額外需要的庫。

        (j)保存配置(Save an Alternate Configuration File),退出配置界面(Exit)。

        Crosstool-NG 會自動下載、解壓、配置、編譯、鏈接所需的源碼包。不過,為了加快制作工具鏈的進(jìn)度,可以通過查看經(jīng)過完成配置之后的config文件,預(yù)先下載好其中提及的源碼包(壓縮包格式不限),并將它們?nèi)糠湃朐创a包目錄內(nèi),便可交由腳本工具開始制作交叉編譯鏈($ctng build)。

        經(jīng)過若干小時的編譯,編譯好的工具鏈將保存在交叉編譯器的安裝目錄中。我們可以看到,生成的所有工具擴(kuò)展名都是“.exe”,也就是說,這些工具都是在Windows系統(tǒng)下運(yùn)行的執(zhí)行程序。

        添加交叉工具鏈到環(huán)境變量($vi/etc/profile,也可在Windows中用文本編輯器修改X:\cygwin\etc\profile),在文件的末尾添加交叉工具鏈的路徑(PATH=$PATH:/usr/crosstool-ng/arm-lynn-linux-gnueabi/buildtools/bin),立即更新環(huán)境變量($source/etc/profile),工具鏈就可以直接使用了。如輸入指令“$arm-lynn-linuxgnueabi-gcc-v/--version”,就可查看工具鏈的版本。

        為方便使用,可以為交叉工具鏈建立“快捷方式”。進(jìn)入交叉工具鏈的目錄($cd/usr/crosstool-ng/arm-lynnlinux-gnueabi/buildtools/bin),建立符號鏈接(如$ln-s arm-lynn-linux-gnueabi-gcc arm-linux-gcc)。注意鏈接名不要與本地編譯器同名。

        5 驗 證

        交叉編譯環(huán)境搭建好之后,必須通過編譯文件來驗證其是否能夠正常工作。寫一個最簡單hello.c源文件:

        在交叉編譯環(huán)境中,對以上程序進(jìn)行交叉編譯($arm-linux-gcc hello.c-o hello),生成名為hello 的文件。查看文件信息($file hello),看到類似“hello:ELF 32-bit LSB executable,ARM,version1(SYSV),dynamically linked(uses shared libs),for GUN/Linux 2.6.39,not stripped”的信息,即表明成功地編譯了一個可以在ARM體系結(jié)構(gòu)下運(yùn)行的可執(zhí)行文件,交叉編譯環(huán)境已經(jīng)被成功地搭建。

        結(jié) 語

        本文介紹了在Windows平臺下,基于Cygwin 虛擬Linux系統(tǒng),利用Crosstool-NG 建立ARM-Linux交叉編譯環(huán)境的方法。驗證結(jié)果表明,本方法適用于ARMLinux的開發(fā)。對于Crosstool-NG 所支持的基于其他嵌入式CPU 的目標(biāo)系統(tǒng),如MIPS、PowerPC 等,在Windows下構(gòu)建Linux交叉編譯環(huán)境,完全可以參照ARMLinux交叉編譯環(huán)境的構(gòu)建方法進(jìn)行。

        [1]雷鴻.基于虛擬機(jī)架構(gòu)下嵌入式開發(fā)環(huán)境搭建的研究與實(shí)現(xiàn)[J].信息通信,2011(4):11-13.

        [2]弓雷.ARM 嵌入式Linux系統(tǒng)開發(fā)詳解[M].北京:清華大學(xué)出版社,2010.

        [3]李新峰,何廣生.基于ARM9的嵌入式Linux開發(fā)技術(shù)[M].北京:電子工業(yè)出版社,2008.

        [4]華清遠(yuǎn)見.嵌入式Linux C語言應(yīng)用程序設(shè)計[M].北京:人民郵電出版社,2007.

        [5]熊光澤,羅蕾.嵌入式軟件技術(shù)的發(fā)展現(xiàn)狀與發(fā)展動向[J].計算機(jī)應(yīng)用,2000,20(7):23-26.

        [6]劉永林,梁瑩,王詩琴,等.基于Linux的嵌入式交叉編譯環(huán)境的建立及實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2011,24(7):68-70.

        [7]趙慶明,羅蕾,周建斌,等.CoLinux在構(gòu)建嵌入式開發(fā)環(huán)境中的應(yīng)用[J].微計算機(jī)信息,2009(23):15-17.

        [8]Cygwin.Cygwin User's Guide[R/OL].[2012-11-10].http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html.

        [9]趙峰.ARM 交叉編譯和調(diào)試[R/OL].[2012-11-10].http://www.eefocus.com/article/07-11/28362s.html.

        [10]張歡慶,高麗,宋承祥.基于ARM 的嵌入式Linux交叉編譯環(huán)境的研究與實(shí)現(xiàn)[J].計算機(jī)與數(shù)字工程,2012,40(2):151-153.

        [11]劉二鋼.利用Crosstool-NG 構(gòu)建交叉編譯工具鏈[J].電腦知識與技術(shù),2011,7(7):4553-4554,4567.

        [12]Gene Sally.Pro linux embedded systems[M].California:Apress,2009.

        [13]Yann Morin.Download and usage[R/OL].[2012-11-10].http://crosstool-ng.org.

        [14]張瑞,于德海,馬明龍.基于ARM 的嵌入式Linux的交叉編譯環(huán)境的建立[J].科技信息,2009(25):508-509.

        [15]李勝琴,張國榮,許巖.基于ARM 的交叉編譯工具的制作[J].太原師范學(xué)院學(xué)報:自然科學(xué)版,2010,9(2):36-38.

        猜你喜歡
        安裝包本機(jī)編譯器
        手機(jī)之間如何快速分享應(yīng)用安裝包
        基于相異編譯器的安全計算機(jī)平臺交叉編譯環(huán)境設(shè)計
        另類解壓軟件安裝包
        電腦愛好者(2017年3期)2017-05-04 10:29:50
        通用NC代碼編譯器的設(shè)計與實(shí)現(xiàn)
        FreeBSD關(guān)機(jī)重啟命令
        讓OVI商店安裝程序不自動刪除
        電腦迷(2012年15期)2012-04-29 17:09:47
        WP7手機(jī)自動出現(xiàn)skydrive文件夾
        電腦迷(2012年9期)2012-04-29 02:08:25
        不花錢,動態(tài)域名隨便玩
        編譯器無關(guān)性編碼在微控制器中的優(yōu)勢
        Android手機(jī)免費(fèi)玩
        av成人资源在线观看| 思思久久96热在精品国产 | 国产偷久久久精品专区| 又大又粗又爽18禁免费看 | 精产国品一二三产品蜜桃| 四虎在线播放免费永久视频| 视频国产精品| 午夜av内射一区二区三区红桃视 | 日韩在线精品免费观看| 91麻豆精品国产91久久麻豆| 免费国产a国产片高清网站| 国产熟妇搡bbbb搡bb七区| 无码的精品免费不卡在线| 国产精品三级av一区二区| 亚洲成av在线免费不卡| 久久影院最新国产精品| 刺激一区仑乱| 国产精品久久久久久久妇| 国产主播福利一区二区| 国产精品久久中文字幕亚洲| 中文资源在线一区二区三区av| 91久久精品国产综合另类专区| 又黄又爽又无遮挡免费的网站| 国产精品亚洲一区二区在线观看| 真实国产乱视频国语| 日本一级二级三级在线| 国产女同舌吻1区2区| 午夜理论片yy44880影院| 在线亚洲人成电影网站色www | 超级碰碰人妻中文字幕| 中文字幕乱码在线婷婷| 久久免费看的少妇一级特黄片| 久久久久亚洲精品无码网址蜜桃| 久久精品国产四虎| 亚洲成AV人片在一线观看| 久久久亚洲一区二区三区| 无码a级毛片免费视频内谢5j| 亚洲精品乱码久久久久久日本蜜臀 | 色与欲影视天天看综合网| 国产精品久久婷婷六月丁香| 视频二区 无码中出|