用Eclipse和GDB構建ARM交叉編譯和在線調試環境


我們在 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有三種運行方式:

  1. Automatic Remote Launcher :遠程自動運行,這是最方便好用的一種方式
  2. Manual Remote Launcher : 遠程手動運行。用戶自己在目標板上運行gdbserver,然后在開發主機上指定遠程連接的方式(如IP地址和端口),連接到gdbserver
  3. 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選項,步驟如下:

  1. 選中項目→菜單欄 ”Run“→Debug Configurations…
  2. 雙擊 C/C++ Remote Application 新建一個配置, Eclipse會根據當前選擇的項目初始化大部分配置,這里只需修改Debugger配置頁
  3. 在右下方點擊“Select other”,選擇“GDB(DSF) Manual Remote Debugging Launcher”,確認
  4. 選擇進入Debugger配置頁,在Main標簽中,GDB debugger 填寫 arm-linux-gdb,如果未加入PATH環境變量則應該填入絕對路徑
  5. 在Debugger配置頁的Shared Libraries標簽中,可以添加庫路徑,比如調試過程中要步入外部函數,就必須在這里給出帶調試信息的庫文件路徑,否則會找不到該函數的定義
  6. 在Debugger配置頁的Connection標簽中,Type選“TCP”,並填寫目標板上gdbserver監聽的IP和端口號(這個在下面文檔會提及)
  7. 所有配置完成后,點“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接口實現遠程調試的過程可分解為:

  1. 通過文件服務接口下載編譯的程序到目標板(可用的文件服務有:FTP、SFTP)
  2. 通過Shell運行目標板上的gdbserver加載下載的程序(可用的Shell服務有:SSH、Telnet)

上面的第一步不是必需的,我們可以通過其它手段來實現,如在目標板上mount一個NFS文件系統,讓開發主機(也掛載了同一個NFT文件系統)在編譯后執行一條拷貝命令即可,這可以在項目的編譯選項中配置。需要注意的是,如果想忽略這一步驟,還要在項目的Debug Configuration 中,勾選“Skip download to target path”,這樣CDT才不會每次啟動調試時都嘗試打開文件服務接口。

為了方便,我們還是希望讓目標板同時提供文件服務和Shell服務。我們有兩種選擇:

  1. 在目標板上部署 OpenSSH。OpenSSH 本身帶了SSH服務和SFTP服務,所以一個軟件包可以搞定。缺點是編譯出來的文件很大
  2. 在目標板上部署 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

             

    [c-sharp]  view plain copy
     
     
    1. $ cd /usr/local/lib   
    2. $ sudo cp /home/jdk-6u4-linux-i586.bin ./   
    3. $ sudo chmod +x jdk-6u4-linux-i586.bin   
    4. $ sudo ./jdk-6u4-linux-i586.bin   

     

        (2) 設置環境變量

             在/etc/profile中加入如下的內容:

             (由上面可知這里用的是第一種方法,其實我暫時也沒搞明白具體區別在哪里,姑且這樣這着吧)
             

    [c-sharp]  view plain copy
     
     
    1. JAVA_HOME=/usr/local/lib/jdk1.6.0_21   
    2. JRE_HOME=/usr/local/lib/jdk1.6.0_21/jre   
    3. CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib   
    4. PATH=$PATH:$JAVA_HOME/bin  
    5. export JAVA_HOME JRE_HOME CLASSPATH   

     

        (3) source /etc/profile

        (4) java -version

     

    4. 安裝Eclipse

        (1) 解壓Eclipse

              

    [c-sharp]  view plain copy
     
     
    1. 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

          如果成功開發板就可以直接運行主機上的程序了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM