我們在 Linux 主機中搭建我們的開發環境,使用 Ubuntu 10.04 LTS 為例。
搭建應用開發環境
安裝 JRE
Eclipse 依賴於Java 環境,所以必須先安裝 JRE 或 JDK。
安裝 Eclipse 和 CDT
去 Eclipse官網下載最新的Eclipse IDE。
我們一般選擇 C/C++ 版本(Eclipse IDE for C/C++ Developers),這個版本自帶了CDT,不用另行安裝CDT插件。下載時選擇 Linux 的版本,如:eclipse-cpp-juno-linux-gtk.tar.gz
直接把下載下來的壓縮包(eclipse-cpp-juno-linux-gtk.tar.gz)解壓到某一目錄,運行可執行文件eclipse即可。
運行 eclipse 后,可先進行Eclipse使用環境Workspace的配置。
創建交叉應用工程
在 Eclipse 主界面點擊菜單 File > New > C/C++ Project,在彈出的“C/C++ Project”對話框中,輸入項目名稱。選擇一個項目類型(如Executable/Empty Project),在 Toolchains 中一定要選 Cross GCC,這是CDT對交叉環境的支持,提供了額外的功能,以方便嵌入式應用程序的開發。
點擊下一步,來到“Select Configurations”頁面,我們采用默認,直接下一步,來到“Cross GCC Command”的設置。這里我們可以填寫交叉編譯工具鏈的交綴和路徑,如:
Cross compiler prefix: arm-arago-linux-gnueabi- Cross compiler path: /data/linux/ti-sdk5/linux-devkit/bin
上例的情況是在我們已經安裝好了ARM芯片商提供的交叉編譯包。一般來說,芯片商都提供了這樣一個交叉編譯環境,包括目標平台的編譯工具鏈、Glibc庫、二進制工具和其它常用工具。上例是TI提供的DM3730的開發包的安裝路徑和程序的前綴(真實程序為:arm-arago-linux-gnueabi-gcc、arm-arago-linux-gnueabi-ld等)
最后點擊完成,一個交叉項目就創建好了。關於交叉編譯前綴和路徑的設置,在項目創建后,可以在項目的屬性中改變它。
這里我們寫一個簡單的測試程序,如:
#include <iostream> using namespace std; int main(int argc, char ** argv) { signal(0, 0); cout<<"This is a message from HelloDm3730!\n"; return 0; }
點擊構建,對它進行編譯。編譯后,我們可以在左側的“Project Explorer”中,項目目錄下的Binaries中看到編譯出來的程序。把它拷貝到目標ARM開發板上,運行,結果正確。
運行調試
程序編譯成目標平台的二進制碼后,怎么拷貝到目標板上運行調試是個問題。
我們可以通過TFTP把編譯好的程序下載到目標板上,即在開發主機安裝TFTP服務器,在目標板上使用tftp命令向主機取文件。
另一個比較方便的做法是,在開發主機上部署NFS服務,導出一個共享目錄,然后目標板上使用mount命令,把開發主機上的共享目錄掛載到本地。這樣,開發主機和目標板使用同一個目錄,就不用不斷下載程序了。NFS的部署可以參照《Linux下使用NFS共享目錄》。
終極的解決辦法是搭建GUI的在線調試環境,即寫完代碼后,點擊調試,Eclipse自動編譯程序,然后把程序下載到目標板,然后運行打開GDB在線調試,這樣就可以單步調試了,就像調試本地程序一樣。
搭建在線調試環境
gdb+gdbserver總體介紹
遠程調試環境由宿主機GDB和目標機調試stub共同構成,兩者通過串口或TCP連接。使用 GDB標准程串行協議協同工作,實現對目標機上的系統內核和上層應用的監控和調試功能。調試stub是嵌入式系統中的一段代碼,作為宿主機GDB和目標機調試程序間的一個媒介而存在。
就目前而言,嵌入式Linux系統中,主要有三種遠程調試方法,分別適用於不同場合的調試工作:
-
普通列表項目用ROM Monitor調試目標機程序
-
用KGDB調試系統內核
-
用gdbserver調試用戶空間程序
這三種調試方法的區別主要在於,目標機遠程調試stub 的存在形式的不同,而其設計思路和實現方法則是大致相同的。
而我們最常用的是調試應用程序。就是采用gdb+gdbserver的方式進行調試。在很多情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程序。采用GDB方法調試,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行調試,通常采用gdb+gdbserver的方式進行調試。
源代碼下載
嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。這樣,應用程序在嵌入式目標系統上運行,而gdb調試在Host端,所以要采用遠程調試(remote)的方法。進行GDB調試,目標系統必須包括gdbserver程序(在主機上正對硬件平台編譯成功后下載到目標機上),宿主機也必須安裝GDB 程序。一般Linux發行版中都有一個可以運行的GDB,但開發人員不能直接使用該發行版中的GDB來做遠程調試,而要獲取GDB的源代碼包,針對arm 平台作一個簡單配置,重新編譯得到相應GDB。GDB的源代碼包可以從GNU官網中下載。
配置編譯及安裝
再次強調一次,GDB遠程調試套件包括Host端的gdb和Target端的gdbserver,對於gdb,宿主機上發行版本自帶的PC版gdb是不能用的,它沒有目標架構(ARM)相關的調試支持。所以我們應該使用gdb的源碼,針對ARM平台編譯一個(toolchain還是Host上的)特別的版本。當然,如果芯片商提供的交叉編譯套件中已經包含了arm-linux-gdb,我們就不用重新編譯gdb了,直接用它即可。不管怎么說,gdbserver還是需要用目標板的toolchain重新編譯一遍,因為芯片商提供的交叉開發套件通常不包括gdbserver。
下載完后,解壓:
#cd /opt #tar xzvf /tmp/gdb-6.8.tar.gz
建立配置文件,編譯:
#cd /opt #mkdir -p arm-gdb/build #cd arm-gdb/build #/opt/gdb-6.8/configure --target=arm-linux --prefix=/opt/arm-gdb #make #make install
上面命令中,–target配置gdb的目標平台,–prefixp指定了編譯結果的存放位置,也就是安裝目錄。編譯完后可以在/opt/arm-gdb/bin目錄下找到可執行的arm-linux -gdb, arm-linux -gdbtui, arm-linux-run。 拷貝arm-linux-gdb 到/usr/bin目錄:
#cd /opt/arm-gdb/bin/ #cp arm-linux-gdb /usr/bin/
下面把 gdbserver 移植到ARM平台。要點是指定目標平台的交叉編譯鏈(gcc和ar)。我們創建一個臨時的編譯目錄,以避免弄臟原代碼。
#cd /home/kim #mkdir gdb-build #CC="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-gcc" \ AR=/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-ar \ /opt/gdb-6.8/gdb/gdbserver/configure --target=arm-linux --host=arm-linux #make
上面命令中,–target=arm-linux表示目標平台,–host表示主機端運行的是arm-linux-gdb,不需要配置—prefix,因為gdbserver不在主機端安裝運行。臨時環境變量CC和AR用於指定交叉編譯和匯編選項,在同一行命令的configure執行時將應用這些選項。
沒有錯誤的話就在/home/kim/gdb-build目錄下生成gdbserver可執行文件,注意此時要更改其屬性,否則可能會出現無法訪問的情況,chmod 777 gdbserver將其更改為任何人都可以讀寫執行;使用arm-linux-strip命令處理一下gdbserver,將多余的符號信息刪除,可讓elf文件更精簡,通常在應用程序的最后發布時使用;然后把它燒寫到flash的根文件系統分區的/usr/bin(在此目錄下,系統可以自動找到應用程序,否則必須到gdbserver所在目錄下運行之),或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上運行就行。
編譯好gdbserver后,把它拷貝到目標板上的 /usr/bin 目錄下,運行,如果能顯示幫助信息,則交叉編譯成功,如:
#gdbserver Usage: gdbserver [OPTIONS] COMM PROG [ARGS ...] gdbserver [OPTIONS] --attach COMM PID gdbserver [OPTIONS] --multi COMM COMM may either be a tty device (for serial debugging), or HOST:PORT to listen for a TCP connection. Options: --debug Enable general debugging output. --remote-debug Enable remote protocol debugging output. --version Display version information and exit. --wrapper WRAPPER -- Run WRAPPER to start new programs. --once Exit after the first connection has closed.
如果提示其它錯誤信息,如二進制文件無法執行,則表示編譯不成功。注意我們交叉編出來的gdbserver是無法在開發主機上運行的。
命令行遠程調試
在目標板上,運行 gdbserver 命令啟動測試程序的調試,並指定目標板的IP和監聽端口號,如:
#gdbserver 192.168.188.120:12345 HelloDm3730 (注,HelloDm3730 為要調試的程序) Process HelloDm3730 created; pid = 625 Listening on port 12345
我們看到gdbserver已經正常啟動了,正在等待客戶端程序gdb的連接。
此時我們在開發主機上運行 arm-linux-gdb,指定gdbserver的IP和端口,連接上去,如:
# arm-arago-linux-gnueabi-gdb (gdb) target remote 192.168.188.120:12345 Remote debugging using 192.168.188.120:12345 0x400b57f0 in ?? ()
顯示“0x400b57f0 in ?? ()”表示已經連接到遠端的gdbserver並且開始調試了,此時目標板終端會顯示“Remote debugging from host 192.168.188.201”,再次確認遠程調試連接成功。接下來的調試方法與普通本機的gdb使用相同。
CDT + GDB 圖形化遠程調試
我們可以直接使用 arm-linux-gdb 對應用程序進行遠程調試,但命令行界面實在是不夠友好。這里我們想辦法在Eclipse上,通過CDT使用GDB進行遠程在線調試。
在Eclipse中選擇一個項目,點擊菜單 Run > Debug Configurations,在左側的Dubug類型中找到“C/C++ Remote Application”,右擊點“New”,創建一個遠程調試配置,如下圖:
如果安裝的CDT插件不全,可能沒有“C/C++ Remote Application”這個類型,意味着CDT沒有遠程調試功能。這時需要安裝一個叫“Remote System Explorer End-User Runtime ”的插件,如何安裝請參考:How do I debug a remote application?。
Eclipse的C/C++插件CDT已經很好的支持gdb在遠程調試了。調試一個應用程序時,CDT有三種運行方式:
-
Automatic Remote Launcher :遠程自動運行,這是最方便好用的一種方式
-
Manual Remote Launcher : 遠程手動運行。用戶自己在目標板上運行gdbserver,然后在開發主機上指定遠程連接的方式(如IP地址和端口),連接到gdbserver
-
Remote Attach Launcher :遠程依附運行。類似於上一種,但它不是重新運行程序開啟一個debug會話,而是直接Attach到一個已經運行的程序,然后調試
在Debug Configurations 對話框中,創建一個遠程調試配置,這個配置在創建時會根據項目情況提供一個默認的配置,默認將使用第一種Automatic Remote Launcher方式,這在Main標簽中下方“GDB (DSF) Automatic Remote Debugging Launcher”可以看出,點擊右邊的“Select other…”可以切換其它方式。
遠程手動運行方式
我們希望Eclipse每次生成一個項目之后,自動把生成出來的二進制程序拷貝到目標板上,這可以通過NFS掛載共享目錄來實現,我們只需要配置項目屬性(依次展開:C/C++Build > Settings > Build Steps > Post-build steps,在Command中輸入“cp ProgramBin /mnt/share”)即可。
接下來配置CDT的Debug選項,步驟如下:
-
選中項目→菜單欄 ”Run“→Debug Configurations…
-
雙擊 C/C++ Remote Application 新建一個配置, Eclipse會根據當前選擇的項目初始化大部分配置,這里只需修改Debugger配置頁
-
在右下方點擊“Select other”,選擇“GDB(DSF) Manual Remote Debugging Launcher”,確認
-
選擇進入Debugger配置頁,在Main標簽中,GDB debugger 填寫 arm-linux-gdb,如果未加入PATH環境變量則應該填入絕對路徑
-
在Debugger配置頁的Shared Libraries標簽中,可以添加庫路徑,比如調試過程中要步入外部函數,就必須在這里給出帶調試信息的庫文件路徑,否則會找不到該函數的定義
-
在Debugger配置頁的Connection標簽中,Type選“TCP”,並填寫目標板上gdbserver監聽的IP和端口號(這個在下面文檔會提及)
-
所有配置完成后,點“Apply”保存配置,並關掉配置窗口
接下來在目標板上運行 gdbserver,假如測試程序HelloDm3730已經下載到當前目錄,如:
#gdbserver 192.168.188.120:12345 HelloDm3730 Process HelloDm3730 created; pid = 625 Listening on port 12345
目標板的 GDB 服務開啟后,我們就可以在開發主機中,點擊Eclipse的調試按鈕(指定調試配置為剛才配置好的),開始應用程序的遠程調試。我們在連接目標板的終端中,可以看到程序的標准輸出;也可以在這里標准輸入。
當我們結束調試后,目標板上的gdbserver進程會自動退出。如果我們在修改代碼后想再次調試,仍然需要在目標板上運行gdbserver,這樣會很麻煩,但畢竟可以進行遠程的圖形化調試了。
遠程自動運行調試
我們希望在開發主機上查看目標板(遠端主機)的系統狀況,如查看遠程的文件,查看進程列表等,甚至打開終端運行遠程機器上的程序。我們還希望這樣一個工具軟件能集成在Eclipse上,並且提供了API接口讓Eclipse的插件能調用遠程機器上的程序。
TM/RSE 就是這樣一個工具,全稱是 Target Management / Remote Systems Explorer,是Eclipse上的一個插件。Eclipse的遠程管理插件有很多,但這個最常用,所以我們安裝了 Eclipse 的C++版,就自帶了這個插件。ARM的軟件開發環境DS-5 也使用了這個插件,其實整個DS-5的基礎都是Eclipse社區的開源軟件搭建起來的。關於TM/RSE的更多介紹,可參考其官方資料:TM and RSE FAQ
我們可以在安裝了TM/RSE的Eclipse上,點擊右上角的“Open Perspective”按鈕,打開“Remote System Explorer”,在 Remote System Explorer 上,你可以很方便的管理多個遠程連接,查看遠程文件和進程,運行遠程程序等。
RSE 支持很多網絡連接類型,常用的有:
-
FTP/sFTP
-
SSH
-
Telnet
支持連接到Unix/Linux/Windows主機和Local(本地)。要在開發主機上連接遠程機器,必須先在遠程機器上安裝並啟動某一遠程控制服務,如 Telnet 服務、FTP服務、SSH服務。如果遠程主機安裝了文件服務(如FTP、SFTP)和Shell服務(如SSH、Telnet),那么可以在本地開發主機上,CDT可以調用RSE的API接口拷貝生成的目標程序到遠端,並在遠端目標板上運行gdbserver,從而做到自動下載和調試程序的功能。
CDT調用RSE的API接口實現遠程調試的過程可分解為:
-
通過文件服務接口下載編譯的程序到目標板(可用的文件服務有:FTP、SFTP)
-
通過Shell運行目標板上的gdbserver加載下載的程序(可用的Shell服務有:SSH、Telnet)
上面的第一步不是必需的,我們可以通過其它手段來實現,如在目標板上mount一個NFS文件系統,讓開發主機(也掛載了同一個NFT文件系統)在編譯后執行一條拷貝命令即可,這可以在項目的編譯選項中配置。需要注意的是,如果想忽略這一步驟,還要在項目的Debug Configuration 中,勾選“Skip download to target path”,這樣CDT才不會每次啟動調試時都嘗試打開文件服務接口。
為了方便,我們還是希望讓目標板同時提供文件服務和Shell服務。我們有兩種選擇:
-
在目標板上部署 OpenSSH。OpenSSH 本身帶了SSH服務和SFTP服務,所以一個軟件包可以搞定。缺點是編譯出來的文件很大
-
在目標板上部署 Dropbear 和 vsFTP(或者其它FTP服務器)
下面將分別介紹這兩種方案。
方案一:編譯和部署OpenSSH
方案二:編譯和部署Dropbear 和 vsFTP
因為目標板的資源有限,在目標板上部署Telnet/FTP/SSH服務有點麻煩。好在Linux社區永遠是開放的,我們有太多選擇,如SSH服務可使用DropBear或OpenSSH,FTP可使用vsftpd等。如果我們的目標板已經在這些當中的某一服務了,那好辦,直接連接即可;如果目標板上沒有這些服務,我們還得自己編譯和部署——用交叉編譯器編譯出目標平台的程序,然后部署和配置它。這里我們使用Dropbear來部署SSH服務。Dropbear 依賴 zlib 庫,所以如果目標板上沒有 libz.so,還得自己編譯。
先在網上下載最新的 zlib 和 dropbear。我下載的版本是:dropbear-2012.55.tar.gz 和 zlib-1.2.7.tar.gz 。
編譯的基本流程是:解壓,配置,編譯,安裝。我們可以在./configure時就指定交叉編譯工具。
對於 zlib,我們指定安裝路徑為~/soft/install,這樣make install后,make就會把編譯后的程序拷貝安裝到這個目錄,方便我們取程序。如:
#tar -xzf zlib-1.2.7.tar.gz #cd zlib-1.2.7 #CC="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-gcc" \ AR=/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-ar \ ./configure --shared --prefix=~/soft/install/ #make #make install
“安裝”后,可在我們指定的目錄~/soft/install/的lib下找到共享庫文件(so),我們要用到的是:libz.so libz.so.1 libz.so.1.2.7
對於 Dropbear ,我們需要多指定ranlib和strip,並且要指定目標平台為arm-linux。安裝路徑要使用絕對路徑,雖然我們不安裝。如:
#tar -xzf dropbear-2012.55.tar.gz #cd dropbear-2012.55 #CC="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-gcc" \ AR=/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-ar \ RANLIB="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-ranlib" \ STRIP="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-strip" \ ./configure --prefix=/home/kim/soft/dropbear-bin/ --host arm-linux #make
編譯后,在當前目錄可以看到我們需要的程序:
dropbear: ssh2 server dropbearkey: 密鑰生成器 dropbearconvert: 可以轉換openssh的密鑰 dbclient: ssh2 client
把zlib的三個so(libz.so libz.so.1 libz.so.1.2.7,前兩個是連接文件)拷貝到目標板上的 /usr/lib;把dropbear生成的四個程序拷貝到目標板的 /usr/sbin 目錄下。
然后(在目標板上)建立配置文件,生成SSH需要的密鑰,如:
#mkdir /etc/dropbear #cd dropbear #dropbearkey -t rsa -f dropbear_rsa_host_key #dropbearkey -t dss -f dropbear_dss_host_key
最后啟動服務:
#dropbear -E [746] Jan 01 03:30:41 Running in background (提示在后台運行了)
最好為目標板的用戶建立密碼。然后在開發機上,先測試一下我們的SSH服務:
#ssh root@192.168.188.55 root@192.168.188.55's password: (這里輸入密碼)
如果輸入正確的密碼,但總是登錄不成功(在目標板上的終端提示:user 'root' has invalid shell, rejected),可能是由於 root 帳號沒有設置正確的登錄shell。各大多數程序一樣,Dropbear 只允許 /etc/passwd 中列舉的用戶登錄,並且在/etc/passwd中該用戶需要設置正確的shell(/bin/sh 或 /bin/csh)。有些busybox用的是/bin/bash,所以被Dropbear拒絕了。這里我們使用 /bin/sh 以后,就可以正常登錄了。
vsFTP 暫時沒有編譯成功,它沒有提供 configure 工具。
使用CDT遠程調試
現在回過頭來看CDT的遠程調試。假設我們已經完成了以下工作:
-
在遠端部署了SSH或Tenlet服務(Telnet 在當前版本的RSE屬於試驗性質,遠程調試沒調通,不知是什么原因)
-
在遠端部署了某一個文件服務器(如SFTP或vsFTP)(這項沒有也行,但調試會稍微麻煩點)
-
本地RSE能訪問遠端功能(如Shell)
-
在遠端部署了 gdbserver,並存放在/usr/bin 中
-
遠端運行 gdbserver 時,開發主機能用 gdb (命令行)連接過去
我們應該先在Remote System Explorer上創建連接,讓RSE能連接到目標機器和管理目標機器。然后在項目的Debug Configurations中,創建“C/C++ Remote Application”的一個配置,在Main標簽中,Connection選擇RSE上建立的連接,然后輸入遠端的程序存放的路徑,這個路徑是包含最終的程序文件名的,不是目錄。注意:如果在遠端沒有部署文件服務(SFTP或FTP),那么還需要勾選“Skip download to target path”,這樣CDT才不會每次啟動調試時都嘗試打開文件服務接口,造成調試進行不下去。但勾選“Skip download to target path”了后,必須有途徑把最新的程序拷貝到剛才指定的遠端程序路徑,如每次手動拷貝,或者在項目配置中,Post-build steps 中輸入自動拷貝命令,讓項目每次編譯后自動拷貝到目標機器。
參考
-
最精在研究u-boot,之前用的編譯方法是在windows下用vs進行就該,然后用虛擬機里的ubuntu進行編譯,中間使用共享文件夾。后來覺得太麻煩了,干脆直接在linux下進行修改和編譯,因此安裝了Eclipse for c/c++ developer。下面介紹兩種交叉編譯環境搭建的方法:
一.使用工程中自帶的Makefile。
1.選擇New->Project,而不是Import
2.再選擇Makefile Project with Existing Code
3.之后再在Project Name中填入工程名稱
4.最后直接Build All或者Build Project即可
二.采用IDE自動生成Makefile
1.同樣選擇New Project,不過之后選擇C Project而不是Makefile Project with Existing Code
2.這里輸入工程名稱,保證跟workspace里的工程文件夾名稱相同。在下面Project type里面選擇Cross-Compile Project
3.之后右鍵工程選擇Properties
4.選擇C/C++ Build->Settings。在Tool Settings標簽欄里面選擇Cross Settings。之后在Prefix里面填入形如powerpc-linux-gnu-的前綴,再在Path里面填上Tool Chain的路徑,就OK了!
OK這樣就可以在Eclipse這個強大的IDE下進行交叉編譯了。
經過一段時間的摸索,終於把linux下搭建基於Eclipse的arm的開發環境給搭建起來了,做下筆記,以便日后查看。
0. 用的linux版本是Ubuntu 9.04
用的板子是FriendlyARM s3c2440
1. 准備好相應的軟件包:
arm-linux-gcc-3.4.1.tar.bz2(網上現成的交叉編譯工具,有興趣的話也可以自己重頭編譯)
地址:ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2
jdk-6u21-linux-i586.bin(其實這里jre應該也夠了,裝個jdk以備以后開發java程序需要)
地址:http://www.oracle.com/us/sun/index.html
eclipse-cpp-helios-linux-gtk.tar.gz
地址:http://www.eclipse.org/downloads/
2. 首先建立交叉編譯環境
(1) 將arm-linux-gcc的壓縮包arm-linux-gcc-2.95.3.tar.gz解壓縮;eclipse-cpp-helios-linux-gtk.tar.gzeclipse-cpp-helios-linux-gtk.tar.gz
$ sudo tar vxjf arm-linux-gcc-3.4.1.tar.bz2
(2) 將路徑usr/local下的arm目錄拷貝到你自己系統的/usr/local下;
cd ./usr/local
$ sudo mv arm /usr/local(3) 修改環境變量,把交叉編譯器的路徑加入到PATH。(有三種方法,強烈推薦使用方法一,我也不知道為啥,網上說的)
方法一:修改/etc/bash.bashrc文件
$ sudo vi /etc/bash.bashrc 在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin(注意,這里的等號前后不能有空格,下同)export PATH
方法二:修改/etc/profile文件:(經測試發現,方法二必須重新啟動,使用source的話換個終端就無效了)
$ sudo vi /etc/profile 增加路徑設置,在末尾添加如下:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin 注:(這只能在當前的終端下才是有效的!)總結:在這里我們還是用第二種方式吧,第一種方式Eclipse識別不出來的 -- 2010-10-10 9:47
(4) 保存對profile的修改后,執行source /etc/bash.bashrc 就OK了,該命令能立即使新的環境變量生效,不用重啟電腦;
用$ echo $PATH 檢查是否將路徑加入到PATH
(5) 測試是否安裝成功:$ arm-linux-gcc -v
3. 安裝Eclipse運行所需的jre,這里以jdk替代
(1) 安裝jdk-6u21-linux-i586.bin
- $ cd /usr/local/lib
- $ sudo cp /home/jdk-6u4-linux-i586.bin ./
- $ sudo chmod +x jdk-6u4-linux-i586.bin
- $ sudo ./jdk-6u4-linux-i586.bin
(2) 設置環境變量
在/etc/profile中加入如下的內容:
(由上面可知這里用的是第一種方法,其實我暫時也沒搞明白具體區別在哪里,姑且這樣這着吧)
- JAVA_HOME=/usr/local/lib/jdk1.6.0_21
- JRE_HOME=/usr/local/lib/jdk1.6.0_21/jre
- CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
- PATH=$PATH:$JAVA_HOME/bin
- export JAVA_HOME JRE_HOME CLASSPATH
(3) source /etc/profile
(4) java -version
4. 安裝Eclipse
(1) 解壓Eclipse
- sudo tar zxvf eclipse-cpp-helios-linux-gtk.tar.gz -C /usr/local/dev
(2) 把Eclipse的編譯器配置成arm-linux-gcc
解壓完以后我們就能在相應的目錄找到Eclipse文件了,雙擊打開運行。
新建一個工程以后選擇工程的Properties,在彈出的頁面上進行如下圖設置:
加了一個名為arm的編譯方式以后,將它下面GCC C Compiler和GCC C Linker的Command改成arm-linux-gcc,然后就萬事OK了,你現在就可以通過Eclipse利用arm-linux-gcc來進行交叉編譯了。
5.PC開啟NFS與開發板鏈接
PC上編譯好的東西必須拿到板子上才能運行,拿U盤拷來拷去好像有點不太現實,我們利用NFS掛載就可以輕松解決這個問題。
(1) 安裝
在Ubuntu系統下,使用NFS需要首先安裝以下NFS的軟件包
服務器端 : nfs-common、nfs-kernel-server、portmap;
客戶端:nfs-common、portmap;
在服務器端安裝軟件包的命令式:$sudo apt-get install nfs-kernel-server
(安裝nfs-kernel-server時,apt會自動安裝nfs-common和portmap)
目標板上的Linux系統由Linux內核和busybox共同提供對NFS的支持,不必安裝其他的NFS客戶端。
(2) 配置
NFS的配置文件是/etc/exports。
在該文件后面加一行:/home/xxx/workspace *(rw,no_root_squash) 使目錄/home/xxx/workspace允許所有的IP以讀寫的權限來訪問。
(3) 使用
使用之前必需開啟NFS服務:$sudo /etc/init.d/nfs-kernel-server start
當然,使用之后可以關閉NFS服務:$sudo /etc/init.d/nfs-kernel-server stop
首先在Linux服務器上進行NFS服務器的回環測試,驗證共享目錄能否被訪問。
$ mount -t nfs 192.168.1.1:/home/xxx/workspace /mnt
$ ls /mnt
啟動開發板后在目標系統的Linux Shell下
$ mount -t nfs 192.168.1.1:/home/xxx/workspace /mnt/nfs -o nolock
$ ls /mnt/nfs
如果成功開發板就可以直接運行主機上的程序了。