您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Linux及Arm-Linux程序開發(fā)的方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux及Arm-Linux程序開發(fā)的方法有哪些”吧!
一、Arm-Linux程序開發(fā)平臺(tái)簡(jiǎn)要介紹
Arm-Linux程序的開發(fā)并不像我們以前接觸的Windows程序開發(fā)那樣,關(guān)于平臺(tái)的搭建就繁瑣很多,所以在正式進(jìn)入程序開發(fā)之前先對(duì)這種開發(fā)模式進(jìn)行簡(jiǎn)要介紹,讓一個(gè)即使沒有任何Linux開發(fā)經(jīng)驗(yàn)的程序員也能夠看懂后面的內(nèi)容。
1.1程序開發(fā)所需系統(tǒng)及開發(fā)語言
開發(fā)arm-linux程序至少需要三種系統(tǒng):
Windows系統(tǒng)。
主要用來文件傳送和一些簡(jiǎn)單的文本文件編輯。這個(gè)系統(tǒng)其實(shí)并非必需,只是因?yàn)槟壳癙C機(jī)上最流行的系統(tǒng)仍然是Windows系統(tǒng),我們的很多關(guān)于PC的文件和數(shù)據(jù)的操作習(xí)慣都是在Windows系統(tǒng)上養(yǎng)成的,已經(jīng)對(duì)其形成了嚴(yán)重的依賴,所以Windows系統(tǒng)扮演著的“輔助開發(fā)系統(tǒng)”的角色。
PC-Linux系統(tǒng)。
在此系統(tǒng)上安裝arm-Linux交叉編譯器后,就可以對(duì)代碼文本文件進(jìn)行編譯,生成可在arm-Linux系統(tǒng)中運(yùn)行可執(zhí)行程序。此系統(tǒng)被稱為“Linux宿主機(jī)”,我們對(duì)Linux程序的開發(fā)工作(包括代碼編寫、調(diào)試和編譯生成可執(zhí)行文件)基本上就是在此系統(tǒng)上進(jìn)行的。
Arm-Linux系統(tǒng)。
Arm-Linux程序運(yùn)行的平臺(tái)。此系統(tǒng)的硬件載體是一塊小型的嵌入式arm板,我們?cè)贚inux宿主機(jī)上開發(fā)好程序并編譯生成arm-linux可執(zhí)行程序后,將可執(zhí)行程序文件傳送到嵌入式arm板中,然后就可以在arm板上直接運(yùn)行此程序了。
三種系統(tǒng)的職能和聯(lián)系如下圖:
關(guān)于每個(gè)系統(tǒng)的職能及操作還有文件如何傳送交流都在后面詳細(xì)介紹。
關(guān)于開發(fā)語言,因?yàn)槟壳百徺I的Arm-Linux嵌入式板提供的編譯庫都是C/C++的,所以一般選擇C/C++進(jìn)行程序設(shè)計(jì)。
1.2系統(tǒng)平臺(tái)搭建方式
關(guān)于“三系統(tǒng)”的搭建方式,有兩種方法:三臺(tái)分立的單系統(tǒng)機(jī)器組合或者一臺(tái)雙系統(tǒng)PC機(jī)和一臺(tái)單系統(tǒng)Arm板機(jī)器。但是不管采用哪種組合方式,各種系統(tǒng)的職能都是一樣的,而且都是通過FTP、Telnet或者SSH等網(wǎng)絡(luò)協(xié)議進(jìn)行文件傳輸交流。
“三機(jī)器”組合模式。將三個(gè)系統(tǒng)分別安裝在三臺(tái)機(jī)器上并將三臺(tái)機(jī)器組建局域網(wǎng)。
“兩機(jī)器”組合模式。在PC機(jī)上利用虛擬工作站可以同時(shí)運(yùn)行兩個(gè)系統(tǒng),虛擬機(jī)上的Linux系統(tǒng)基本可以完成所有的實(shí)體PC-Linux機(jī)器的所有任務(wù),當(dāng)然也能夠組建局域網(wǎng)。
“三機(jī)器”組合模式圖
“兩機(jī)器”組合模式圖
如果開發(fā)人員對(duì)機(jī)器性能要求比較高,那么建議采用“三機(jī)器”組合模式。因?yàn)椤皟蓹C(jī)器”組合模式要求一臺(tái)機(jī)器運(yùn)行雙系統(tǒng),每個(gè)系統(tǒng)都需要分配一定的硬件資源,可能會(huì)對(duì)每個(gè)系統(tǒng)運(yùn)行的流暢程序都造成影響。
如果開發(fā)人員只進(jìn)行一些簡(jiǎn)單的程序開發(fā),則建議采用“兩機(jī)器”組合模式。這樣可以節(jié)省硬件設(shè)備的投資,而且開發(fā)環(huán)境的搭建、開發(fā)的流程等等都會(huì)簡(jiǎn)單一些。而且下面的內(nèi)容都是基于這種“兩機(jī)器”組合的開發(fā)模式。
二、Linux開發(fā)平臺(tái)搭建
2.1安裝虛擬工作站
目前比較流行的虛擬工作站比較多,推薦使用VM-ware WorkStation。建立虛擬工作站的目的就是為了使一臺(tái)機(jī)器同時(shí)運(yùn)行多個(gè)不同類型的系統(tǒng),方便開發(fā)人員進(jìn)行跨平臺(tái)開發(fā)應(yīng)用程序。
(關(guān)于VMware,可以到網(wǎng)上搜索到詳細(xì)介紹和使用方法,在此不再贅述)
2.2安裝Linux虛擬機(jī)
安裝虛擬機(jī)的過程和安裝實(shí)體機(jī)一樣,唯一的區(qū)別是,虛擬機(jī)安裝是從VMware中打開并安裝的。先準(zhǔn)備Linux安裝文件,一般可以到網(wǎng)上下載到Linux的iso安裝文件,然后從VMware中安裝此系統(tǒng)。
(關(guān)于虛擬機(jī)安裝,在網(wǎng)上可以搜索到詳細(xì)的步驟,在此不再贅述)
幾點(diǎn)建議:
1.安裝Fedora-10并選擇完全安裝,即把所以的包和選項(xiàng)都勾上。這樣在安裝完畢后,系統(tǒng)就自帶了很多開發(fā)工具和相關(guān)的庫,避免自己去重新進(jìn)行煩瑣的基本開發(fā)平臺(tái)搭建。
2.在VMware中為虛擬系統(tǒng)配置硬件資源。建議分配硬盤空間16G,內(nèi)存1G以上。因?yàn)榻窈笾饕腖inux程序開發(fā)工作是在虛擬機(jī)上進(jìn)行了,所以為了保證虛擬機(jī)流暢運(yùn)行,需要分配比較豐富的硬件資源。
在第一次從ISO文件中安裝完畢虛擬機(jī)后,在安裝目錄下面會(huì)生成一系列的文件,將這些文件進(jìn)行備份后,在其它機(jī)器上安裝虛擬機(jī)的時(shí)候就花幾個(gè)小時(shí)去從ISO中安裝了,將這個(gè)目錄下的文件復(fù)制到相應(yīng)的目錄下面(在第一次從ISO中安裝的時(shí)候設(shè)定的目錄相同),然后只需要從VMware中打開此目錄下的文件就行了。
執(zhí)行VMware Workstation中的【View】--【Home】,調(diào)出Home視圖,然后打開虛擬工作站系統(tǒng)文件。
打開后,就可以看到一個(gè)虛擬機(jī)的硬件資源配置了。這些參數(shù)有一部分是在只能在初次使用iso安裝的時(shí)候配置的,比如硬盤大小。另外一些參數(shù)比如內(nèi)存大小、共享目錄等等可以在后期隨時(shí)人工更改的。
(詳細(xì)設(shè)置內(nèi)容,到網(wǎng)上可以找到很多相關(guān)內(nèi)容,在此不再贅述)
兩種方法的區(qū)別就是WinXp的安裝盤和Ghost盤的區(qū)別吧。
安裝完畢Fedora后,就可以從虛擬工作站中啟動(dòng)Fedora Linux系統(tǒng)了。系統(tǒng)桌面如下:
2.3虛擬機(jī)的一些基本配置
在第一次安裝完畢虛擬機(jī)后開啟虛擬機(jī),默認(rèn)的分辨率是800*600,同時(shí)沒有全能共享目錄。為了獲得比較好的操作界面,同時(shí)方便文件共享和轉(zhuǎn)移,需要進(jìn)行一些基本的配置。
2.3.1建立共享目錄
在同一個(gè)硬件PC機(jī)上運(yùn)行的兩個(gè)系統(tǒng)。Windows實(shí)體系統(tǒng)用來做一般的用途,比如聯(lián)網(wǎng),處理文檔等等;Fedora Linux虛擬系統(tǒng)則用來開發(fā)Linux程序并進(jìn)行編譯生成可執(zhí)行文件。
先需要安裝vmware tools
在VMware上面,選擇菜單【VM】--【Install VM tools】,然后在Linux虛擬機(jī)上會(huì)生成目錄/media,同時(shí)里面產(chǎn)生一個(gè)rpm文件。
然后打開控制終端并su登錄超級(jí)用戶:
cd /media
rpm –ivh VMwareTools-7.8.5-156735.i386.rpm
cd /usr/bin
然后在/usr/bin下面看到wmware-config-tools.pl
再在Teminal中輸入wmware-config-tools.pl
然后一路回車下去。然后今后就可以建立共享目錄。
(詳細(xì)過程也可以在網(wǎng)上搜索相關(guān)內(nèi)容)
共享目錄的好處是可以將這些文件在Windows系統(tǒng)中提取出來,然后可以通過我們熟悉的windows系統(tǒng)進(jìn)行網(wǎng)絡(luò)傳輸和一些其它命令操作。這個(gè)設(shè)置在后面程序開發(fā)的時(shí)候會(huì)提到其使用方法。
在VMware中建立共享目錄,執(zhí)行菜單命令【VM】--【Settings…】
然后在Linux虛擬機(jī)文件系統(tǒng)中可以找到對(duì)應(yīng)的共享目錄:/mnt/hgfs/xplinux
建立共享目錄可以方便虛擬機(jī)和實(shí)體機(jī)進(jìn)行文件交流。例如,我們可以將在Linux機(jī)器上編譯生成好執(zhí)行文件放置到共享目錄中,然后可以通過Windows機(jī)器提取出來并通過網(wǎng)絡(luò)傳送到arm-linux嵌入式板上。
2.3.2調(diào)整桌面分辨率
在VMware工作站中調(diào)整虛擬機(jī)桌面分辨率。一般默認(rèn)是800*600,而且現(xiàn)在的顯示器,一般是1024*768甚至更高,以我目前使用的電腦顯示器為例,分辨率是1440*900。需要將虛擬機(jī)桌面分辨率進(jìn)行適當(dāng)調(diào)整,然后全屏,那么就可以獲得比較友好的操作界面。
在VMware中啟動(dòng)虛擬機(jī),虛擬機(jī)啟動(dòng)后的登錄界面如下:
然后登錄系統(tǒng),設(shè)置分辨率,系統(tǒng)菜單:
【System】--【Preferences】--【Hardware】--【Screen Resolution】
設(shè)置好分辨率后,就可以在獲得全屏狀態(tài)的Linux操作界面了。
2.3.2其它設(shè)置
比如設(shè)置桌面背景,系統(tǒng)字體,還有資源管理器的模式等等,這些可以自己去實(shí)地操作并進(jìn)行熟悉。
2.4安裝軟件
雖然Fedora已經(jīng)自帶了一些必要的軟件,如Open Office辦公軟件,gedit記事本軟件,F(xiàn)irefox網(wǎng)頁瀏覽器等等。但是既然是操作系統(tǒng),我們也可以安裝一些我們需要的軟件。比如中文輸入法(如:小企鵝輸入法),聊天工具(如QQ)等等。
注意:在Terminal終端中安裝程序的時(shí)候需要啟用su超級(jí)用戶權(quán)限。
三、Fedora-linux系統(tǒng)
Fedora-linux虛擬機(jī)安裝完畢并進(jìn)行基本設(shè)置后,就可以開始了程序開發(fā)環(huán)節(jié)了。在正式開始程序開發(fā)時(shí),還需要對(duì)Linux的一些基本編程工具進(jìn)行簡(jiǎn)要介紹,當(dāng)然如果已經(jīng)有此基礎(chǔ)的,可以直接略過這一章。
3.1控制終端的基本操作命令
執(zhí)行系統(tǒng)菜單命令【Applications】--【System Tools】--【Terminal】,打開Terminal終端:
熟悉Windows系統(tǒng)的DOS操作界面的人肯定也會(huì)對(duì)此操作終端也不會(huì)陌生。通過在Terminal中輸入命令,用戶可以很方便地完成Linux下的一系列操作,在正式進(jìn)入自主程序設(shè)計(jì)之前,用戶有必要對(duì)下面一些最基本命令進(jìn)行熟悉(其它的命令在項(xiàng)目需要的時(shí)候再到網(wǎng)上查找相關(guān)資料)。
文件操作命令 | 文件/文件夾的創(chuàng)建、修改、復(fù)制、刪除、移動(dòng)等等。(如rm/mv/vi/cat等等) |
網(wǎng)絡(luò)設(shè)置命令 | 個(gè)性IP、開啟FTP、開啟Telnet、開啟SSH等等。(如ifconfig/telnetd等等) |
用戶管理命令 | 系統(tǒng)用戶的添加、刪除、密碼修改等等。(如,addusr/passwd等等) |
文件編譯命令 | 這個(gè)涉及到編譯環(huán)境的建立,將在后面正式進(jìn)入到自主程序設(shè)計(jì)時(shí)進(jìn)行詳細(xì)介紹。 |
這個(gè)涉及到編譯環(huán)境的建立,將在后面正式進(jìn)入到自主程序設(shè)計(jì)時(shí)進(jìn)行詳細(xì)介紹。
雖然目前Fedora為用戶提供了比較良好的操作界面,但是Linux最初是從命令行的操作系統(tǒng)發(fā)展起來的,很多強(qiáng)大的功能都是需要依靠Terminal控制終端來實(shí)現(xiàn)的,所以作為開發(fā)人員有必要先對(duì)這些基本命令進(jìn)行熟悉并熟練操作。
3.2編程工具簡(jiǎn)介
如果在安裝Fedora的時(shí)候,選擇的是完全安裝,系統(tǒng)會(huì)自帶很多開發(fā)工具。其中Fedora -Eclipse CDT和Qt庫及相關(guān)設(shè)計(jì)器Qt Designer是我們今后開發(fā)的主要工具。
當(dāng)然,如果用戶沒有選擇安全安裝,則可以到網(wǎng)上下載到各類開發(fā)工具的安裝文件,并自己進(jìn)行安裝。
3.2.1 Fedora-Eclipse CDT
在Fedora中執(zhí)行系統(tǒng)菜單【Application】--【Programming】--【Eclipse】
然后就可以看到Fedora Eclipse的啟動(dòng)畫面
然后就是下面就是Eclispe的IDE環(huán)境了,有過Windows下的Java編程經(jīng)驗(yàn)的人來說,這個(gè)界面是再熟悉不過了,完全可以直接過渡到Linux下的C/C++程序開發(fā)上來,這樣就極大地減少了程序員的學(xué)習(xí)周期。
Eclipse的好處,第一就是開源,第二就是免費(fèi),第三就跨平臺(tái)。
因?yàn)殚_源,所以可擴(kuò)展性很強(qiáng),Eclipse實(shí)際上就是一個(gè)萬能的程序開發(fā)環(huán)境,只需要在設(shè)置中對(duì)相關(guān)語言的庫進(jìn)行引用并連接相應(yīng)的編譯器,就可以對(duì)基于任何語言的程序進(jìn)行開發(fā);因?yàn)槊赓M(fèi),所以省去了注冊(cè)軟件等等瑣事。因?yàn)榭缙脚_(tái),所以當(dāng)用戶進(jìn)行跨平臺(tái)程序設(shè)計(jì)的時(shí)候,可以極大減少學(xué)習(xí)周期。
Eclispe在Windows平臺(tái)下一般都是作為Java的開發(fā)環(huán)境,用來開發(fā)Java桌面應(yīng)用程序和Jsp網(wǎng)頁應(yīng)用程序甚至目前比較流行的Android手機(jī)終端軟件。在Linux下面對(duì)C/C++的庫編譯器進(jìn)行了連接后,則成為L(zhǎng)inux下的C/C++開發(fā)環(huán)境,在Linux下安裝JDK后則可以進(jìn)行Linux下的Java程序設(shè)計(jì),如果給Linux系統(tǒng)安裝tomcat網(wǎng)頁服務(wù)器,則可以進(jìn)行Linux下的網(wǎng)頁應(yīng)用程序開發(fā),如果給Linux安裝mysql數(shù)據(jù)庫服務(wù),則可以進(jìn)行數(shù)據(jù)庫連接操作等等(因?yàn)槟壳拔覀兊哪繕?biāo)主要是arm-linux窗口程序開發(fā),所以主要對(duì)C/C++進(jìn)行研究)。
3.2.2 Qt庫及Qt界面設(shè)計(jì)軟件
如果只是編寫C/C++控制臺(tái)軟件,則只需要Eclipse CDT就完全可以解決。但是如果要進(jìn)行窗體化編程,就需要引用一些開源的界面庫。例如目前比較流行的Qt庫。
Qt是諾基亞開發(fā)的一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮?,很容易擴(kuò)展,并且允許真正地組件編程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等圖形界 面庫和 Windows 平臺(tái)上的 MFC,OWL,VCL,ATL 是同類型的東西,但Qt具有優(yōu)良的跨平臺(tái)特性、面向?qū)ο?、豐富的API、大量的開發(fā)文檔等優(yōu)點(diǎn)。
在Eclipse中對(duì)項(xiàng)目Build選項(xiàng)進(jìn)行設(shè)置,對(duì)Qt庫進(jìn)行連接,然后就可以進(jìn)行Linux下的Qt程序進(jìn)行開發(fā)了。
因?yàn)镋clipse沒有提供可視化的窗體程序設(shè)計(jì)器,所以需要借助第三方工具,QtDesigner可以很好的解決Qt的UI設(shè)計(jì)問題并編譯生成對(duì)應(yīng)的*.h和*.cpp文件(具體的操作步驟將在下面的內(nèi)容中詳細(xì)介紹)。
所謂“工欲善其事,必先利其器”,前面花了大量篇幅來介紹,都是為了“磨刀”,現(xiàn)在開始進(jìn)入“砍柴”環(huán)節(jié)。下面將以Eclipse CDT作為開發(fā)環(huán)境來介紹Linux和arm-linux程序開發(fā)的一般方法。
四、使用Eclipse CDT開發(fā)Linux程序
4.1建立控制臺(tái)程序
用Eclipse CDT建立基于C++的“Hello World”控制臺(tái)程序。
打開Eclipse開發(fā)環(huán)境。執(zhí)行【File】--【New】--【C++ Project】
然后進(jìn)入到C++ Project向?qū)?,有C++的Hello World模板
點(diǎn)擊Finish,然后Eclispe就會(huì)建立一個(gè)基于C++的HelloWorld項(xiàng)目,運(yùn)行程序后,能夠在控制臺(tái)中輸出“Hello World”:
說明:如果是開發(fā)控制臺(tái)程序,則不需要進(jìn)行任何其它設(shè)計(jì),只需要直接編寫C++代碼即可,不用對(duì)編譯庫和編譯器進(jìn)行設(shè)置,Eclipse已經(jīng)為我們自動(dòng)完成了這些內(nèi)容。
4.2建立Linux窗口程序
就像在Window環(huán)境下,如果要用C++開發(fā)窗口程序,我們一般需要使用Windows API或者M(jìn)FC。同樣,在Linux環(huán)境下,我們可能在C++項(xiàng)目中引用Qt庫來進(jìn)行Linux下的窗口程序開發(fā)。
在完整版的Fedora中,自帶了Qt的庫,在目錄/usr/lib下面:
系統(tǒng)默認(rèn)自帶有兩個(gè)版本的Qt庫qt-3.3和qt4,一般我們用qt-3.3。
編寫窗口程序,我們只需要在建立了C++ Project的情況下,對(duì)C/C++ Build路徑進(jìn)行設(shè)置,指向qt-3.3的庫即可。主要開發(fā)流程如下:
第一步:使用Eclipse CDT建立C++ Project。
第二步:設(shè)置Build路徑指向Qt。在項(xiàng)目管理器中右擊項(xiàng)目文件設(shè)置項(xiàng)目屬性,在C/C++ Build的Settings的Tool Settings中進(jìn)行設(shè)置。
【GCC C++ Compiler】--【Directories】添加包含的文件路徑:/usr/lib/qt-3.3/include。這個(gè)是C++的編譯器包含的頭文件路徑,因?yàn)槭墙⒌腃++ Project,所以一定要設(shè)置。
【GCC C Compiler】--【Directories】添加包含的文件路徑:/usr/lib/qt-3.3/include。這個(gè)是設(shè)置C語言編譯器包含的頭文件路徑,因?yàn)橛袝r(shí)候C++中會(huì)考慮到兼容一些C語言的語法和關(guān)鍵字,所以最好也進(jìn)行相關(guān)設(shè)置。
【GCC C++ Linker】--【Libraries】添加編譯時(shí)引用的庫路徑:/usr/lib/qt-3.3/lib(注意:不要寫成include了)。并設(shè)置庫搜索命令參數(shù):qt-mt。
第三步:編寫引用了Qt庫的C++程序。
第四步:運(yùn)行程序。
程序運(yùn)行效果如下圖:
總結(jié):通過上面對(duì)Linux下面的控制臺(tái)程序及窗口程序的介紹,我們已經(jīng)對(duì)Linux系統(tǒng)下的簡(jiǎn)單程序開發(fā)流程有了簡(jiǎn)單了解。下面開始介紹arm-Linux程序的開發(fā)。
五、使用Eclipse開發(fā)Arm-linux程序
5.1 Arm-linux硬件平臺(tái)
Arm-Linux機(jī)器采用的是飛凌嵌入式技術(shù)公司的FL2440開發(fā)板。在飛凌公司購買開發(fā)板的時(shí)候,會(huì)隨開發(fā)板一起贈(zèng)送的相關(guān)入門教程《飛凌開發(fā)板配套教程》并附有一張光盤,里面有各種寫FL2440相關(guān)的開發(fā)資源。
在正式進(jìn)入程序開發(fā)之前,先對(duì)FL2440開發(fā)板及arm-linux系統(tǒng)進(jìn)行熟悉。
Fl2440開發(fā)板:熟悉Bootloader的使用方法、學(xué)會(huì)燒寫內(nèi)核、燒寫文件系統(tǒng)等等。
Arm-linux系統(tǒng):熟悉利用一些文件系統(tǒng)和網(wǎng)絡(luò)設(shè)置相關(guān)的命令。如果你對(duì)Linux命令已經(jīng)有了一定了解,那么arm-linux上的命令也基本一樣。
(詳細(xì)操作過程請(qǐng)參考《飛凌開發(fā)板配套教程》一書)
5.2開發(fā)控制臺(tái)程序
主要開發(fā)流程圖如下:
在早期的開發(fā)環(huán)境方式中,是先用文本編輯器編寫c或者cpp文件,然后再直接在Linux機(jī)器上通過交叉編譯命令,編譯代碼文本文件并生成可執(zhí)行程序,然后將可執(zhí)行程序傳送到arm-linux板上,然后就可以在arm-linux機(jī)器上運(yùn)行程序了。
現(xiàn)在的開發(fā)模式和早期的開發(fā)模式一樣,只是在編寫代碼的工具上進(jìn)行了改進(jìn)。早期編寫代碼的工具只要是能編輯文本的軟件就可以,甚至在Linux中通過終端的vi命令就可以搞定,Linux機(jī)器的職能僅僅是編寫代碼和編譯代碼?,F(xiàn)在則使用Eclipse CDT,可以在Linux機(jī)器上編寫C/C++代碼并進(jìn)行調(diào)試,Linux機(jī)器基本上可以模擬arm-linux系統(tǒng)上除了一些硬件相關(guān)度高的應(yīng)用程序(如驅(qū)動(dòng)程序)之外的絕大部分其它程序的運(yùn)行環(huán)境。
5.2.1使用Eclipse CDT編寫代碼
其實(shí)和用Eclipse CDT編寫Linux環(huán)境下的控制臺(tái)程序是完全一樣。除了在一些特別的場(chǎng)合,比如編寫驅(qū)動(dòng)程序,需要注意差別外,其余的功能的實(shí)現(xiàn)方法基本上一樣。
這方面屬于程序設(shè)計(jì)的基本功,需要長(zhǎng)期學(xué)習(xí)和積累,所以在此不再多述。
5.2.2建立交叉編譯環(huán)境
雖然生成程序的源碼是一樣的,但是在Linux機(jī)器上編譯生成的可執(zhí)行文件是不能在arm-linux系統(tǒng)上運(yùn)行的,需要用arm-linux專用的編譯器進(jìn)行編譯后,才能生成可在arm-linux系統(tǒng)上運(yùn)行的可執(zhí)行文件,當(dāng)然此時(shí)應(yīng)用程序又顯然不能在Linux系統(tǒng)上運(yùn)行了。
將交叉編譯工具cross-2.95.3.tar.bz2(可以到網(wǎng)上下載,也可以到開發(fā)板附帶的光盤資源中找到)通過共享目錄傳送到Linux系統(tǒng)中,然后在Linux系統(tǒng)終端中先進(jìn)入其文件目錄,然后執(zhí)行解壓命令:
tar xjvf cross-2.95.3.tar.bz2
然后在/usr/local/arm文件目錄下可以看到解壓后的2.95.3的庫了,或者如果你解壓的是cross-3.4.1.tar.bz2的版本,那么將會(huì)在對(duì)應(yīng)目錄下生成3.4.1的目錄。
然后設(shè)置環(huán)境變量。因?yàn)長(zhǎng)inux機(jī)器上存在不止一種編譯器,為了避免環(huán)境變量沖突,最好新建一個(gè)賬號(hào),比如新建賬號(hào)arm-linux-gcc,然后在對(duì)應(yīng)的賬號(hào)目錄中找到.bash_profile文件,設(shè)置環(huán)境變量,編輯.bash_profile,在最后一行增加路徑(vi打開文本文件,按i表示insert修改文本文件,然后Esc退出insert模式,再shift zz表示保存退出文件,詳細(xì)的命令介紹可以到網(wǎng)上查閱相關(guān)資料):
export PATH=/usr/local/arm/2.95.3/bin:$PATH
可以通過echo $PATH來查看環(huán)境變量是否設(shè)置成功:
5.2.3編譯并運(yùn)行程序
在編輯好了代碼文件并建立好了交叉編譯環(huán)境后,就開始編譯代碼生成可執(zhí)行程序,并移植到arm板上運(yùn)行程序。
在Linux系統(tǒng)的終端中通過輸入arm-linux-gcc/arm-linux-g++來編譯C/C++文件。例如,我們對(duì)前面編寫的最簡(jiǎn)單的CppHelloWorld.cpp文件進(jìn)行編譯:
arm-linux-g++ CppHelloWorld.cpp –o CppHello
然后在對(duì)應(yīng)目錄下會(huì)生成一個(gè)可在arm-linux系統(tǒng)上運(yùn)行的應(yīng)用程序CppHello。
然后通過SSH服務(wù)和FTP服務(wù),將可執(zhí)行文件從Linux文件系統(tǒng)網(wǎng)絡(luò)傳送到arm-linux文件系統(tǒng)(在此用到了兩個(gè)小軟件SSH Secure和LeapFTP,在后面再對(duì)軟件的功能進(jìn)行一下簡(jiǎn)要介紹)。
然后在Windows機(jī)器上遠(yuǎn)程登錄arm-linux系統(tǒng)開發(fā)板,并控制程序運(yùn)行
注意:需要先通過chmod +x CppHello來告訴系統(tǒng)此文件是可執(zhí)行文件,然后再通過./CppHello來運(yùn)行程序。
我們可以看到程序運(yùn)行的結(jié)果:在屏幕上打印出一行字“Hello World”
5.3一些常用的軟件介紹
在上面介紹的一些操作中,在進(jìn)行文件傳送的時(shí)候用到了一些軟件,在此進(jìn)行簡(jiǎn)要介紹。
LeapFtp
LeapFtp | 一個(gè)基于Ftp協(xié)議的文件互傳軟件。一般情況下,我們對(duì)arm-linux機(jī)器上開啟Ftp服務(wù),然后就可以實(shí)現(xiàn)Windows機(jī)器和arm-linux機(jī)器之間文件互傳。 |
SSH Secure File Transfer Client | 一個(gè)基于SSH協(xié)議的文件互傳軟件,可以實(shí)現(xiàn)FTP的功能。雖然Linux機(jī)器和Windows機(jī)器之間可以通過共享目錄進(jìn)行文件交互,但是因?yàn)楣蚕砟夸泴?shí)際上相當(dāng)于Linux機(jī)器的一個(gè)虛擬的外接設(shè)備,在每次編寫代碼保存后,系統(tǒng)都會(huì)重讀一次,給操作上造成一點(diǎn)小麻煩,所以建議使用SSH進(jìn)行文件傳送。 |
SSH Secure Shell Client | 一個(gè)基于SSH的遠(yuǎn)程登錄軟件,可以實(shí)現(xiàn)telnet功能。因?yàn)镕edora默認(rèn)關(guān)閉了telnet功能,而采用更安全的SSH協(xié)議來實(shí)現(xiàn)telnet的相關(guān)功能。 |
三系統(tǒng)之間的主要網(wǎng)絡(luò)架構(gòu)如下:
注意:
1.如果arm-linux系統(tǒng)的ftp和telnet連接不上,一般情況下是arm-linux默認(rèn)沒有開啟相應(yīng)的服務(wù)或者默認(rèn)ip和windows機(jī)器不在同一網(wǎng)段??梢酝ㄟ^串口線將arm板連接到電腦上,然后打開超級(jí)終端,輸入命令vsftpd&開啟ftp服務(wù),輸入命令telnetd開啟telnet服務(wù),ifconfig eth0 192.168.1.16設(shè)置IP到同一網(wǎng)段。
2.如果Linux系統(tǒng)的SSH連接不上,則一般情況下是Linux系統(tǒng)開啟了SSH的防火墻,則只需要在Linux系統(tǒng)中對(duì)防火墻進(jìn)行相關(guān)設(shè)置,關(guān)閉針對(duì)SSH的防火墻?!維ystem】--【Administration】--【Firewall】,然后勾選全能SSH。
還有一些其它軟件,比如小組協(xié)作時(shí)候,需要使用SVN進(jìn)行代碼管理;還有遠(yuǎn)程桌面VNC Viewer,可以進(jìn)行遠(yuǎn)程桌面控制(但是效果不太好,桌面顯示的延時(shí)好像比較嚴(yán)重)等等。
5.4開發(fā)arm-linux窗口程序
5.4.1建立Qt交叉編譯環(huán)境
在Linux系統(tǒng)中新建目錄/root/yizhi,然后將已經(jīng)編譯好的arm-QT庫復(fù)制到此目錄下面。
然后將上面那六個(gè)tar.gz壓縮文件解壓到/root/yizhi目錄。
在進(jìn)行arm-linux下的Qt編譯的時(shí)候,也涉及到環(huán)境變量設(shè)置問題,所以我們也最好再新建一個(gè)賬戶,專門用于編譯arm-Qt程序。
例如,在Linux系統(tǒng)終端中添加用戶zsm,然后進(jìn)入到/home/zsm中,對(duì).bash_profile進(jìn)行修改,設(shè)置環(huán)境變量:
在命令終端中l(wèi)s –a 顯示隱藏的所有文件 找到.bash_profile,輸入:
gedit .bash_profile &
用geidt打開此文件后,在最后面添加下面的環(huán)境變量設(shè)置:
export PATH=/root/yizhi/qtopia-free-2.2.0/qtopia/bin:/root/yizhi/qtopia-free-2.2.0/tmake/bin:/root/yizhi/qtopia-free-2.2.0/qt2/bin:/usr/local/arm/2.95.3/bin:$PATH
export QTDIR=/root/yizhi/qtopia-free-2.2.0/qt2
export QTEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia/
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
export CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
export TMAKEDIR=/root/yizhi/qtopia-free-2.2.0/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
設(shè)置好后最好重新登錄此賬號(hào),然后在終端中輸入echo $PATH來檢驗(yàn)環(huán)境變量是否設(shè)置成功:
如果出現(xiàn)上面的輸出,則表示arm-linux平臺(tái)下的Qt交叉編譯環(huán)境的環(huán)境變量已經(jīng)設(shè)置成功。接下來就可以進(jìn)行Qt程序開發(fā)了。
5.4.2編譯生成可執(zhí)行窗體程序
在3.2節(jié)中已經(jīng)寫好了一個(gè)單文件的項(xiàng)目QtHello,并在項(xiàng)目的src目錄下生成了一個(gè)QtHello.cpp文件,然后我們要做的就是利用arm-linux下的Qt編譯器對(duì)其進(jìn)行編譯。
編譯Qt窗體項(xiàng)目比編譯普通控制臺(tái)項(xiàng)目要稍微麻煩一點(diǎn),需要自己寫makefile來建立編譯規(guī)則,編譯如上的QtHello.cpp的makefile有如下模板:
############################################################################# # Makefile for building hello # Generated by tmake at 20:58, 2011/04/14 # Project: hello # Template: app ############################################################################# ####### Compiler, tools and options CC = arm-linux-gcc CXX = arm-linux-g++ CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG INCPATH = -I. -I$(QTDIR)/include LINK = arm-linux-gcc LFLAGS = LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lm -lqte MOC = $(QTDIR)/bin/moc UIC = $(QTDIR)/bin/uic TAR = tar -cf GZIP = gzip -9f ####### Files TARGET = QtHello HEADERS = $(TARGET).h SOURCES = $(TARGET).cpp OBJECTS = $(TARGET).o DIST = INTERFACE_DECL_PATH = . ####### Implicit rules .SUFFIXES: .cpp .cxx .cc .C .c .cpp.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< .cxx.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< .cc.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< .C.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< .c.o: $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< ####### Build rules all: $(TARGET) $(TARGET): $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) dist: $(TAR) hello.tar hello.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) $(GZIP) hello.tar clean: -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) -rm -f *~ core ####### Sub-libraries ###### Combined headers ####### Compile $(TARGET).o: $(TARGET).cpp
用zsm賬號(hào)登錄(因?yàn)殛P(guān)于arm-Qt庫的編譯環(huán)境變量是在此賬號(hào)中設(shè)置的),然后執(zhí)行如下步驟:
1.將makefile模板文件放置到src目錄下面
2.用eclipse或者其它文本編輯器,修改makefile里面的TARGET一項(xiàng)為當(dāng)前項(xiàng)目名稱
3.打開Teminal控制終端,進(jìn)入到src目錄,輸入make
4.然后會(huì)在src目錄下面生成一個(gè)指定名稱相應(yīng)的QtHello文件,這個(gè)就是arm目標(biāo)板上的運(yùn)行程序了。
5.將QtHello文件傳送到arm板并運(yùn)行程序(詳細(xì)操作方法在4.2.3節(jié)中有介紹)。
在Windows機(jī)器上遠(yuǎn)程登錄arm板,控制程序運(yùn)行,然后可以看到arm板上運(yùn)行的結(jié)果了。
六、高級(jí)Linux程序設(shè)計(jì)
前面所介紹的不管是控制臺(tái)還是窗體程序,都屬于單文件項(xiàng)目的范圍。而當(dāng)程序的功能比較復(fù)雜時(shí),則往往需要很多模塊和文件,這樣在向arm-linux上移植程序時(shí)會(huì)更加繁瑣一些,需要開發(fā)人員自己寫makefile,建立多文件的編譯規(guī)則。
因?yàn)槲覍?duì)此沒有進(jìn)入深入一點(diǎn)的研究,所以只能提供下大致思路和在開發(fā)程序時(shí)遇到的一些常見問題及解決方案。如果今后有機(jī)會(huì)有時(shí)間的話,則會(huì)對(duì)makefile進(jìn)行深入一點(diǎn)的研究,最好是能以Eclipse自己生成的makefile模板為基礎(chǔ)進(jìn)行簡(jiǎn)單的修改,然后就可以編譯生成arm板上的可執(zhí)行程序。
6.1多文件控制臺(tái)項(xiàng)目
多文件的控制臺(tái)程序的makefile可能會(huì)容易一些,自己也沒有研究過,以前在使用Magic C++編寫C++控制臺(tái)程序的時(shí)候,只需要對(duì)Magic C++生成的makefile模塊中的編譯器進(jìn)行修改就可以輕松為多文件生成基于arm-linux平臺(tái)上的控制臺(tái)程序。
(關(guān)于如何對(duì)Eclipse的makefile模板進(jìn)行修改,目前還沒有研究過,今后有時(shí)間研究的話,再補(bǔ)充上吧。)
6.2多文件Qt項(xiàng)目
目前只對(duì)簡(jiǎn)單的多文件項(xiàng)目進(jìn)行了嘗試:一個(gè)main函數(shù)文件,一個(gè)窗體頭文件,一個(gè)窗體實(shí)現(xiàn)文件。
6.2.1使用Qt Designer設(shè)置界面
在Linux系統(tǒng)中打開Qt Designer,然后進(jìn)行可視化窗口設(shè)計(jì)。然后點(diǎn)擊保存為mydialog.ui文件。
打開mydialog.ui文件,發(fā)現(xiàn)其實(shí)只是一個(gè)xml文件:
顯然這個(gè)文件是不能直接被C++項(xiàng)目引用的,需要使用Qt Designer的編譯器進(jìn)行編譯,生成和界面對(duì)應(yīng)的h和cpp文件。
在Terminal終端里面運(yùn)行以下命令:
uic xxx.ui -o xxx.h 生成.h文件
uic xxx.ui -i xxx.h -o xxx.cpp 生成.cpp文件
然后生成的mydialog.h和mydialog.cpp文件就是和mydialog.ui相對(duì)應(yīng)的程序代碼文件了??梢栽贓clipse項(xiàng)目中直接對(duì)此文件進(jìn)行引用,就可以顯示對(duì)應(yīng)的窗體了。
6.2.2多文件Qt開發(fā)時(shí)的一些經(jīng)典錯(cuò)誤
經(jīng)典錯(cuò)誤一:
“undefined reference to ……”
解決方案:
在Linux控制終端中進(jìn)入到項(xiàng)目代碼文件目錄,執(zhí)行
qmake –project
qmake
make
然后此目錄下會(huì)生成一系列的文件,如moc_xx.cpp,moc_xx.o,src,src_pro等等。然后再到Eclipse中編譯此項(xiàng)目,則錯(cuò)誤消失。
經(jīng)典錯(cuò)誤二:
在Linux機(jī)器上能運(yùn)行的Qt窗口程序,在arm-linux下的Qt編譯器下無法通過。
可能的問題是Qt庫版本問題,或者是有些Qt運(yùn)行環(huán)境在Linux機(jī)和arm-linux機(jī)上有所不同,這就需要重新尋找新的代替解決方案。正是因?yàn)檫@些很多不確定的因素,所以在進(jìn)行arm-linux界面程序開發(fā)時(shí),需要經(jīng)常在編寫一段新代碼就要在arm板上進(jìn)行測(cè)試,可以避免做太多無用功。
6.3關(guān)于makefile
關(guān)于多文件Qt項(xiàng)目向arm-linux系統(tǒng)上的移植,比較核心的技術(shù)應(yīng)該就在makefile上吧,目前自己了解太少,只限于對(duì)模板的應(yīng)用,所以下面的就寫不下去了。
七、學(xué)習(xí)資料
關(guān)于Linux下的Qt開發(fā),在安裝了的Fedora里面有相關(guān)的本地reference和相關(guān)的源碼。如:Qt Assistant
關(guān)于arm-linux下的Qt開發(fā),安裝交叉編譯環(huán)境時(shí)候,也有相關(guān)文檔和源碼:
到此,相信大家對(duì)“Linux及Arm-Linux程序開發(fā)的方法有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。