如何选择嵌入式Linux开发工具

如何选择嵌入式Linux开发工具,第1张

嵌入式Linux具有稳定、可伸缩及开放源代码等特点,可兼容多种处理器和主机,广泛适用于各种产品和应用。但是,交叉编译、设备驱动程序开发/调试,以及更小尺寸等要求对嵌入式Linux开发者来说都是严峻的挑战。为应对这些挑战,针对嵌入式Linux开发的专用工具应运而生,而且发展十分迅猛。

但是,许多这类开发工具都不兼容非X86平台,而且也没有很好地实现归档备案或集成。在其它开发环境下,组件间的高度集成并没有完全兑现。因此,要想完全从这些免费的软件组件开始创建一个完整的跨平台开发环境,开发者应意识到这将需要大量的调研、实施、培训和维护方面的工作。

Linux是少数既可以在嵌入式设备上运行也可作为开发环境的 *** 作系统之一。这一特性可让开发者在转向此开发系统之前于常用硬件(比如X86桌面系统)之上开发、调试和测试应用程序和库,因此可减少对标准参考平台和指令集仿真器的依赖。这一技术仅适用于应用程序和库,但不适用于设备驱动程序,因为后者的开发依赖于Linux架构。

开放源代码团体及一些软件供应商可提供设备驱动程序开发工具。由于设备驱动程序比标准应用程序距离硬件更近,因此它们的开发比较困难。所幸的

是,Linux桌面系统可以利用一些Windows及其它 *** 作系统所没有的工具。有足够经验开发设备驱动程序的开发人员可能已经习惯将

Linux作为他们的桌面开发系统了。

Linux的快速发展及其桌面方案的不断涌现提出了一个重要问题:所选择的工具方案怎样在不同的Linux分布式系统上运行?它们依赖于主机平台的软件配置吗?

有些Linux工具提供独立于主机平台的开发环境,包括一系列可支持开发工具的应用软件、库和实用程序。这一方法几乎将开发环境与主机配置完全隔离开来,因此主机可以是任何Linux分布式系统,而且任何更新和修改都不会影响开发环境的功能。

这种方法的主要缺点是对存储空间的要求有所增加――约200MB,因为它自己实际上相当于一个微型Linux分布式系统。

可用的工具

一个嵌入式Linux产品的开发需要几个阶段,包括为目标板配置和构建基本Linux OS调试应用程序、库、内核及设备驱动程序/内核模块出货前最终方案的优化、测试和验证。

有数百种开放源代码开发工具可供选择。只要开发者原意花时间和精力去调研、实施和维护一系列各不相同的工具,总能找出一个完整的解决方案,完成几乎任何开发任务。图1:开发者必须精确地考虑到这些工具的松散集合能提供什么样的功能,以及需要付出多大的努力才能形成完整的解决方案。

在Linux应用程序和库的调试方面,GNU Debugger(GDB)作为一种标准已有几年的历史。它是一种命令行程序,由多个不同的图形用户界面前端予以支持,每个前端都能以多种方式提供调试控制功能。尽管GDB不是一个完美的方案,但它足够应对各种调试任务,而且已经得到开放源代码团体的广泛支持。

Linux内核或设备驱动程序的调试要比应用程序的调试繁琐得多。

在做调研时,以下方面应特别注意:

什么调试方法支持要开发产品的硬件?需要什么内核补丁程序?还需要其它什么补丁程序?调试界面怎么样,如何使用?该工具需要调试内核模块及处理虚拟地址转换吗?还需要其它什么工具才能提供完整的方案?

经过进一步的调查,开发者往往发现工具A和工具B并没有提供完全一致的功能,因为它们是在彼此独立的情况下开发的。结果,开发者必须精确地考虑到这些工具的松散集合能提供什么样的功能,还需要付出多大的努力才能形成完整的解决方案。

如果不同处理器类型间的集成、可用性、互 *** 作性和移植性很关键的话,开发者应考虑购买商用开发工具。这主要是因为将开发一个“免费”方案所付出的努力考虑进去,商用开发工具并不算贵。

Linux BSP

Linux系统有两大主要部分:带设备驱动程序的Linux内核以及根文件系统,包括系统所需的全部支持应用程序、服务和库。除了驻留在目标

板上的OS组件外,还需要创建一个由GNU Compiler

Collection构成的交叉编译环境,为库和二进制程序(binutils)提供支持。

虽然几乎每一个组件都可在网上找到,但在硬件或设备驱动程序支持、集成测试信息、交叉编译指南或软件兼容性方面却很难收集到太多信息。尽管开发

者可从网上免费下载各种组件以配置嵌入式Linux *** 作系统,但每个组件在版本、支持、稳定性和测试等方面的状态则需要开发者自己决定。然后,开发者还要

完成最后的OS集成和测试,以及为所开发产品提供终身Linux OS维护。

另一方面,嵌入式Linux供应商所提供的商用Linux板支持工具包一般都是经过预先安装和测试的,而且提供支持和维护。其它须考虑的因素包括Linux桌面主机将会添加不同的库和内核功能,以及由于组织内的开发者变动而引起的长期维护问题。

品质保证部门一般会执行一系列严格的验证和性能测试,其中包括存储器泄漏检测/纠正、代码优化和任务跟踪等。那些想利用开放源代码工具开发面向

非X86平台的嵌入式Linux产品开发者将会发现这一任务甚至要比选择开放源代码调试方案难得多。Linux Trace

Toolkit、Valgrind工具及其它存储器分析程序可完成部分测试和验证任务。但总的来说,它们缺乏关键特性、集成功能及广泛的硬件支持。这些开

放源代码分析工具的评估过程与评估调试方案的过程基本相同。

最后的分析就是,一个设计得恰到好处的开发环境应能够提供商用和开放源代码两个世界所具有的最好特性:

◆交钥匙开发能力◆易于使用和集成◆大型工程组织的协调控制◆品质和支持保证◆持续性◆按照自己的判断力使用开放源代码的能力

 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这个库,下面就添加这个库的路径。如果应用程序没用到任何库文件就不用管了

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

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

IDE的话,CodeBlock、eclipse都很好用。事实上Linux下写代码,很少说用IDE的,一般就是各种编辑器(vim、emacs、kate什么的),加上GDB调试,自己写makefile编译。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7081718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存