首页

文章

如何使用eclipse进行嵌入式Linux的开发

发布网友 发布时间:2022-04-19 18:05

我来回答

3个回答

懂视网 时间:2022-04-08 09:09

安装 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!
";
 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

    请参考: 《Openssh服务器移植到2440处理器上》

    方案二:编译和部署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 中输入自动拷贝命令,让项目每次编译后自动拷贝到目标机器。

    参考

  • Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 上
  • Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 下
  • How do I debug a remote application?
  • gdb+gdbserver方式进行ARM程序调试
  • Remote System Explorer之DropBear移植
  • Remote System Explorer之FTP移植(vsftpd)        

       最精在研究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 plaincopy    
    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 plaincopy    
    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 plaincopy    
    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

          如果成功开发板就可以直接运行主机上的程序了。

  • 用Eclipse和GDB构建ARM交叉编译和在线调试环境

    标签:

    热心网友 时间:2022-04-08 06:17

    工具:

           虚拟机Linux:Fedora 9

      交叉编译工具:arm-linux-gcc-3.4.1.tar.bz2

      集成开发工具:Eclipse(Linux安装包中自带的,安装Linux时选中安装)

      安装ARM交叉编译器

    步骤:

    1、安装jdk

      jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre. ubuntu缺省安装的gnu版本的jre运行效率不高,所以需要安装sun公司的jre. 首先从sun的网站上下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:

      # mkdir -p /opt/java
            # ./jdk-6u7-linux-i586.bin // 执行自解压文件,生成目录
            # mv jdk1.6.0_07 /opt/java // 把目录移到/opt/java下
            # cd /opt/java
            # ln -s jdk1.6.0_07 jdk 
            # mv /etc/alternatives/java /etc/alternatives/java.gnu
            # ln -s /opt/java/jdk/bin/java /etc/alternatives/java
            # export JAVA_HOME=/opt/java/jdk // 设置环境变量

      2、安装eclipse和cdt

      从eclipse网站上下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip

      # cd /opt
            # tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解压生成eclipse目录
            # export PATH=/opt/eclipse:$PATH
            # mkdir -p /opt/cdt
            # cd /opt/cdt
            # unzip cdt-master-5.0.0.zip
            # cp -r plugins/* /opt/eclipse/plugins/
            # cp -r features/* /opt/eclipse/features/

      二、创建c/c++工程

      假设已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程,进入eclipse安装路径后,运行eclipse。

    创建c 工程  

    使用缺省的Linux GCC工具链 

     进入c/c++ 界面 

     添加源代码文件1

      添加源代码文件2

      编辑代码

      设置工程属性,指定交叉工具链1

      设置工程属性,指定交叉工具链2

      设置工程属性,指定交叉工具链3

      编译工程

      已生成arm平台可执行代码

      配置调试选项

      设置Debugger和 GDB debugger选项

      设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)

      在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致

      点击Debug,进入调试界面

      执行到断点

      eclipse的调试界面和操作和在windows下开发类似。

      所需开发工具及环境

      虚拟机Linux:Fedora 9

      交叉编译工具:arm-linux-gcc-3.4.1.tar.bz2

      集成开发工具:Eclipse(Linux安装包中自带的,安装Linux时选中安装)

      安装ARM交叉编译器

      1. 安装。其实很简单,就是将下载的arm-linux-gcc-3.4.1.tar.bz2解压到Linux根目录即可(因为解压后已经包含了/usr/local目录,所以要解压到根目录),如下命令:


      tar -jxvf arm-linux-gcc-3.4.1.tar.bz2 -C /

      解压后的目录/usr/local/arm/3.4.1/

      2. 设置环境变量。就是把交叉编译器的路径设置到系统环境变量里面去。


      echo $PATH

      查看现有的环境变量

      如果只想临时添加交叉编译器的环境变量(注:临时添加的系统重启或注销后又没有了),只需在命令行输入如下命令:


      export PATH=$PATH:/usr/local/arm/3.4.1/bin

      如果想这个环境变量永久的添加到系统的环境变量中,则你只需把这个命令添加到/root/.bashrc文件的最后一行即可(这个文件是隐藏文件,你要在文件浏览器中单击查看菜单,勾选显示隐藏文件才能看到)

      3. 测试建立的交叉编译环境。新建一个c程序,文件名:test.c, 如下:


      #include <stdio.h>
    int main(void)
    {
        printf("Hellow world!\n");
        return 0;
    }

      进行交叉编译,如下:


      arm-linux-gcc -o test test.c

      将交叉编译好的目标文件test下载到ARM开发板中并运行,如下:


      ./test

      输出结果为:

      Hellow world!

      用集成开发工具Eclipse来开发嵌入式应用程序

      双击Eclipse图标启动Eclipse

      设置Eclipse的工作空间,就是选个目录,单击OK

      启动后的主界面

      开始新建一个应用程序工程

      选择新建一个C工程,单击Next

      给工程取个名字,这里我就叫test_app;然后选择工程类型,我选择了个Hellow world C工程模版,单击Next

      填写作者、版权等信息,单击Next

      没什么选的,点击Finish

      单击Yes

      新建好的项目工程

      展开左边的源代码目录,双击打开主函数。这里只是输出一句"Hello World!!!",你可以做一些其他复杂的应用

      单击Project菜单,去掉Build Automatically的勾选,因为勾选的话,每次修改一个地方工程都会自动进行编译

      打开工程的属性对话框进行编译选项的设置

      我们的应用程序最终要到嵌入式arm上运行,这里就要把gcc改成arm-linux-gcc编译器,当然前提是你要在你的开发主机上先安装arm-linux-gcc

      C连接器也要改成arm-linux-gcc

      这里的Libraries是设置你的应用程序中用到的库文件,比如应用程序中用到了线程类,则这里在上面添加pthread这个库,下面就添加这个库的路径。如果应用程序没用到任何库文件就不用管了

      选中左侧的工程名,右键,在弹出的菜单中选择Build Project编译工程

      编译好后的工程,目标文件在Debug目录下

    热心网友 时间:2022-04-08 07:35

    一、安装软件
    在ubuntu下安装软件有两种方法:使用apt-get来自动安装或手动安装。用户使用自动安装非常方便,适合初学者。但是安装过程过于依赖资源网站的连接状况,可能需要耗费过多的时间。这里我们推荐手动安装的方式,花的时间比较短。
    1、安装jdk
    jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre. ubuntu缺省安装的gnu版本的jre运行效率不高,所以我们需要安装sun公司的jre. 首先从sun的网站上(http://java.sun.com/javase/downloads/index.jsp)下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:
    # mkdir -p /opt/java
    # ./jdk-6u7-linux-i586.bin // 执行自解压文件,生成目录
    # mv jdk1.6.0_07 /opt/java // 把目录移到/opt/java下
    # cd /opt/java
    # ln -s jdk1.6.0_07 jdk
    # mv /etc/alternatives/java /etc/alternatives/java.gnu
    # ln -s /opt/java/jdk/bin/java /etc/alternatives/java
    # export JAVA_HOME=/opt/java/jdk // 设置环境变量
    2、安装eclipse和cdt
    从eclipse网站上(http://www.eclipse.org/)下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip
    # cd /opt
    # tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解压生成eclipse目录
    # export PATH=/opt/eclipse:$PATH
    # mkdir -p /opt/cdt
    # cd /opt/cdt
    # unzip cdt-master-5.0.0.zip
    # cp -r plugins/* /opt/eclipse/plugins/
    # cp -r features/* /opt/eclipse/features/
    二、创建c/c++工程
    假设我们已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程。为了更直观的说明,我们截取了相关的图片:
    进入eclipse安装路径后,运行eclipse
    eclipse运行界面
    eclipse运行界面
    创建c 工程
    使用缺省的Linux GCC工具链
    进入c/c++ 界面
    添加源代码文件1
    添加源代码文件2
    编辑代码
    设置工程属性,指定交叉工具链1
    设置工程属性,指定交叉工具链2
    设置工程属性,指定交叉工具链3
    编译工程
    已生成arm平台可执行代码
    配置调试选项
    设置Debugger和 GDB debugger选项
    设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)
    在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致
    点击Debug,进入调试界面
    执行到断点
    eclipse的调试界面和操作和在windows下开发类似,相信到了这一步,大家已经可以很方便来进行应用程序的开发了。
    所需开发工具及环境
    虚拟机Linux:Fedora 9
    交叉编译工具:arm-linux-gcc-3.4.1.tar.bz2
    集成开发工具:Eclipse(Linux安装包中自带的,安装Linux时选中安装)
    安装ARM交叉编译器
    1. 安装。其实很简单,就是将下载的arm-linux-gcc-3.4.1.tar.bz2解压到Linux根目录即可(因为解压后已经包含了/usr/local目录,所以要解压到根目录),如下命令:
    tar -jxvf arm-linux-gcc-3.4.1.tar.bz2 -C /
    解压后的目录如下图:
    解压后的目录/usr/local/arm/3.4.1/
    2. 设置环境变量。就是把交叉编译器的路径设置到系统环境变量里面去。
    echo $PATH
    查看现有的环境变量,显示如下图:
    如果你只想临时添加交叉编译器的环境变量(注:临时添加的系统重启或注销后又没有了),只需在命令行输入如下命令:
    export PATH=$PATH:/usr/local/arm/3.4.1/bin
    添加后的环境变量如下图:(多了一个/usr/local/arm/3.4.1/bin)
    如果你想这个环境变量永久的添加到系统的环境变量中,则你只需把这个命令添加到/root/.bashrc文件的最后一行即可(这个文件是隐藏文件,你要在文件浏览器中单击查看菜单,勾选显示隐藏文件才能看到)
    3. 测试建立的交叉编译环境。新建一个c程序,文件名:test.c, 如下:
    #include <stdio.h>
    int main(void)
    {
    printf("Hellow world!\n");
    return 0;
    }
    进行交叉编译,如下:
    arm-linux-gcc -o test test.c
    将交叉编译好的目标文件test下载到ARM开发板中并运行,如下:
    ./test
    输出结果为:
    Hellow world!
    用集成开发工具Eclipse来开发嵌入式应用程序
    双击Eclipse图标启动Eclipse
    设置Eclipse的工作空间,就是选个目录,单击OK
    启动后的主界面
    开始新建一个应用程序工程
    选择新建一个C工程,单击Next
    给工程取个名字,这里我就叫test_app;然后选择工程类型,我选择了个Hellow world C工程模版,单击Next
    填写作者、版权等信息,单击Next
    没什么选的,点击Finish
    单击Yes
    新建好的项目工程
    展开左边的源代码目录,双击打开主函数。这里只是输出一句"Hello World!!!",你可以做一些其他复杂的应用
    单击Project菜单,去掉Build Automatically的勾选,因为勾选的话,每次修改一个地方工程都会自动进行编译
    打开工程的属性对话框进行编译选项的设置
    我们的应用程序最终要到嵌入式arm上运行,这里就要把gcc改成arm-linux-gcc编译器,当然前提是你要在你的开发主机上先安装arm-linux-gcc
    C连接器也要改成arm-linux-gcc
    这里的Libraries是设置你的应用程序中用到的库文件,比如应用程序中用到了线程类,则这里在上面添加pthread这个库,下面就添加这个库的路径。如果应用程序没用到任何库文件就不用管了
    选中左侧的工程名,右键,在弹出的菜单中选择Build Project编译工程
    编译好后的工程,目标文件在Debug目录下
    结束语
    建立交叉编译环境是开发嵌入式程序的第一步,编译器版本也有很多,这里就介绍用的较多的一种。而Eclipse则是本人认为开发嵌入式应用程序最为方便的集成开发工具,他不仅让整个工程清晰可见,更重要的是他不需要你去为整个工程编写复杂的Makefile文件,他会为你自动生成Makefile。
    ubuntu上安装arm交叉编译环境arm-linux-gcc
    首先下载 arm-linux-gcc-4.3.2.tgz,这个就不多说了,重点介绍一下怎么安装。将 arm-linux-gcc-4.3.2.tgz 文件拷贝到 Ubuntu 的主文件夹下,在 Ubuntu 中新建一个终端,以root用户运行,输入下面的命令安装交叉编译器:
    #tar zxvf arm-linux-gcc-4.3.2.tgz
    解压后会产usr文件夹,将这个目录下的usr/local/arm的arm文件夹复制到文件系统的usr/local目录下,命令为
    #mv usr/local/arm usr/local
    然后把交叉编译器路径添加到系统环境变量中,
    在终端中执行:
    gedit /etc/profile
    添加以下四行到该文件中:
    export PATH=/usr/local/arm/4.3.2/bin:$PATH
    export TOOLCHAIN=/usr/local/arm/4.3.2
    export TB_CC_PREFIX=arm-linux-
    export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
    逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 求一份简单的嵌入式linux程序源码 简单的嵌入式linux开发项目,求推荐! 基于S3C2440的嵌入式Linux开发实例的目录 求帮忙做个作业,嵌入式Linux开发环境搭建 跪求一份完整的嵌入式Linux方面的C项目实例 嵌入式Linux应用层开发有哪些实例? 柚子皮煮冰糖的功效的做法 柚子皮煮水可做什么? 柚子皮煮水止咳的做法是 柚子皮煮水止咳的做法是怎么样的? 组合式净化空调机组粗中效过滤器压差值多大时说明... 空调机组的初效过滤器及中效过滤器能否清洗呢? 初效过滤器以及中、高效空气过滤器有什么区别? 有关空调箱的:中效过滤器前有必要装初效过滤器吗 新风系统中粗效过滤器与高效过滤器有什么区别? 洁净车间空调系统有哪几道过滤网? 空调净化系统运行时,当初,中效过滤器压差的数值... 净化车间空调系统的净化原理 洁净室的过滤器标准是怎样的? 洁净厂房的空调系统风柜更换初效过滤器中效过滤器... 嵌入式系统Linux内核开发实战指南的前言(序) 如何做嵌入式Linux操作系统 在校大学生如何积累嵌入式linux项目经验??急急急 谁能给我说一下嵌入式Linux的开发流程包括哪些步骤... 嵌入式linux系统开发的具体步骤? 学习嵌入式Linux怎么应用开发? 嵌入式linux怎么学?学习嵌入式linux有什么方法? Linux嵌入式系统开发的内容简介 嵌入式linux的应用特点 嵌入式Linux驱动程序开发学习路线? 嵌入式Linux系统开发模式 大家有谁知道什么是嵌入式Linux系统?有什么实际作... 对中学生合理使用手机的建议是什么? 建国70周年纪念币在哪个银行预约? 初中生如何合理玩手机? 中国人民银行70周年纪念币怎么预约 中学生如何正确使用手机 中华人民共和国70周年纪念币在哪里买的呢? 如何引导初中孩子合理使用手机 中行预约中华人民共和国成立70周年纪念币办理流程...
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com