嵌入式Linux应用开发十分钟入门

[介绍]嵌入式linux开发因其门槛高,初学者要想快速入门上手有相当难度,从而导致很多初学者半途而废。本文介绍了基于Eclipse的在MS Windows环境下运行的嵌入式linux集成开发环境EzEmbedded。有了它快速入门嵌入式linux开发并上手就成为可能!

嵌入式linux应用开发为什么门槛高

开发环境搭建难  

   需要熟练使用发行版的linux系统,并在此上搭建开发环境。

开发过程繁琐  

   需要熟练使用Vi等命令行编辑工具编辑代码、makefile。

程序下载调试复杂  

目前最常用的方式是在目标板上运行nfs服务器,在开发主机上将编译好的可执行文件挂载到目标板上,进行调试,并且调试要么采用printf方式,要么采用命令行的GDB,这种调试下载过程难于搭建和操作,开发效率低下。

需要买一块开发板

虽然目前嵌入式Linux开发板价格已经很便宜了,但这个开销却不能省略。对学生朋友这也是考虑因素之一。

综上所述,传统方式学习嵌入式Linux的门槛还真的不低,要求学习者要成为一个linux系统的专家,从而导致很多初学者不能如愿。

EzEmbedded有什么特点

EzEmbedded是一个专业级的图形界面的集成开发环境,工程创建、代码编写、编译、下载调试都在图形界面上进行,动动鼠标绝大部分工作就可以轻松完成。除了工程创建过程的配置和下载调试的配置外,整个开发过程与VS开发本地程序或keil开发单片机程序非常类似。

在windows环境下运行,初学者只需要会10个左右的linux命令,其他操作基本上由鼠标就可以完成。

EzEmbedded是一个完整的开发环境,不需要其他依赖。这一点与Eclipse不一样,只要安装了EzEmbedded,开发嵌入式linux的所有工具和组件都已经具备了。

EzEmbedded本身带有一个ARM9虚拟开发板,在安装好EzEmbedded后,就可以用鼠标开启开发板,并以之作为目标板进行程序运行和调试。在这个开发板里运行了一个小型的linux系统,我们可以利用它来学习linux命令,当然也可以用它来运行和调试开发的linux程序。

EzEmbedded是免费的。

总之,EzEmbedded基于GUI的运行在windows上的嵌入式linux集成开发环境。初学者安装EzEmbedded后就可以进行快速的、零成本的、愉快的、成功率为100%的嵌入式linux应用开发的学习之旅。

EzEmbedded安装和卸载

安装环境要求:

系统要求:32/64bit、winxp、win2003、win2008、win7、win8,中文/英文版。

系统内存:2G以上,推荐4G或以上。

硬盘空间:2G。

不能装有TAP-windows虚拟网卡。

不能占用COM7-COM10串口。

安装过程:

安装过程跟普通的windows软件安装过程一致。

特别说明:在安装的后期需要自动安装虚拟串口和虚拟网卡,在弹出的对话框里,统统选择yes、next或ok。

特别指出:winxp下,在安装虚拟串口时,会提示查找驱动程序,选择“就这一次”和本机内查找,因为有四个虚拟串口,这个操作需要重复4次。

友情提示:安装虚拟串口查找驱动的时间会比较长,请耐心等候,直到windows托盘出现“新硬件可以使用”消息后,安装才算最后完成。

卸载过程:

卸载过程与普通windows软件卸载一致,只是在卸载的后期,自动卸载虚拟串口和网卡时,会弹出一些对话框,统统选择uninstall、yes、next或ok。

预备知识

交叉编译:

编译出的可执行程序不在编译器运行的机器上运行。例如EzEmbedded在windows上用arm交叉编译器编译后的可执行文件只能在arm开发板上运行,但不能在windows下运行。而VS在开发主机上编译的可执行文件可以在开发主机上运行,则不叫交叉编译。

必须掌握的linux几个基本命令:

    ls  cd  top  kill  ./  ../

linux程序运行的条件:

     1、有可执行权限。

     2、执行格式:./可执行文件名  [参数]  回车

windows和linux目录写法差异:

     Windows:\

     Linux:   /

我们的程序最好放到 /usr/bin,这样可以直接输入可执行文件名运行程序,而不用在文件名前加./。

EzEmbedded自带的虚拟开发板介绍

CPU类型:ARM926EJ-SARMV5TEJ)。

内存:256M

硬盘容量:无限制

虚拟开发板IP地址:192.168.7.2   windows虚拟网卡IP:192.168.7.3

串口:ttyAMA0、ttyAMA1

   其中,ttyAMA0作为系统Serial 口可以打印启动信息。虚拟开发板内ttyAMA0与windows里的COM7相连,COM8与COM7是一对相互连接的虚拟串口,COM8可以理解为一个与ttyAMA0相连的串口,同理,COM10可以理解为与ttyAMA1

相连的串口。在虚拟开发板启动后,COM7、COM9都被虚拟开发板占用。我们可以用COM8和COM10与开发板交互。

在windows内能ping通虚拟开发板的网卡192.168.7.2。如果windows的防火墙没有阻拦,在虚拟开发板内,也可以ping通windows内的虚拟网卡192.168.7.3。

EzEmbedded开发嵌入式linux应用流程

打开EzEmbedded进入workbench打开虚拟开发板连通开发主机和虚拟开发板的网线创建工程配置编译器编写源码编译源代码配置调试环境调试。

1、打开EzEmbedded

  双击桌面EzEmbedded图标,第一次启动时,时间稍长,耐心等候出现如下对话框。

工作空间选择对话框

所谓工作空间,是指创建工程的目录。在指定你想要的目录后,点击“确定”。进入模块启动界面如下图:

模块启动

此阶段根据您机器的性能强弱,所耗费的时间也不尽相同。最后,出现如下欢迎界面,表明启动完毕。

欢迎界面

2、进入工作空间

  点击欢迎界面的右上角的图标,进入工作空间。这就是EzEmbedded的主界面。

EzEmbedded主界面

3、打开虚拟开发板

  单击主界面的左上部的标有ARM的图标,会出现如下消息框:

虚拟开发板启动消息框

稍候,会出现COM7COM9配置界面:

可以不用理会波特率设置,直接点击确定。在确认完COM7COM9串口配置后,点击虚拟开发板启动消息框的“确定”将其关闭。

这样。我们就会在QEMU字符窗口里看到虚拟开发板启动信息。当出现登陆提示表明虚拟开发板启动完毕。

虚拟开发板启动完毕

将鼠标移到在QEMU窗口里,单击左键,即可在虚拟开发板里进行常规的操作,如果不想操作虚拟开发板里的linux,可以按Ctrl+Alt键,光标就会从虚拟开发板里释放。在虚拟开发板里,可以用root用户登录,没有密码,直接回车即可。通过这个虚拟开发板,我们就可以熟悉linux常见命令的操作了。

4、连接开发主机和虚拟开发板的网线

当然,虚拟开发板和开发主机之间没有也没必要有网线连接,说连通网线主要是为了形象化,便于理解。现在,我们可以将虚拟开发板窗口--QEMU最小化。注意,千万不能关掉,否则,就连不上网线了。

EzEmbedded主界面的菜单栏里,单击“窗口”,从其下拉菜单里,选中“显示视图”,如下图:

然后,在其二级菜单里,选中“其他”。会出现如下“显示视图”对话框。

显示视图对话框

在显示视图对话框里,点选远程系统“Remote Systems”,再从其下拉接点中点选“Remote Systems”。然后,显示视图对话框里的“确定”按钮就可以按下了。点击“确定”。

这样我们就会在EzEmbedded主界面上就会看到远程系统“Remote Systems”。

远程系统视图

开发主机(运行EzEmbedded的系统)是本地系统,虚拟开发板和真实开发板就是远程系统了,在远程系统视图里,我们可以从Local Files看到开发主机上文件。

为了方便,我们可以把“Remote Systems”移到左上角的“项目资源管理器”右边,做法是:鼠标移到“Remote Systems”上,按下左键并保持不松开,将变为手型的鼠标移到“项目资源管理器”右边,放开左键,“Remote Systems”就移到“项目资源管理器”右边了。看起来如下图:

接下来,我们要开始“连网线了”,单击图标,会出现“新建连接”对话框。

新建连接对话框

在新建连接对话框里,双击TCF,会出现“Remote TCF System Connection”对话框,

                               新建TCF连接

在主机名里,填入虚拟开发板的IP:“192.168.7.2”,在连接名称里,填写“虚拟开发板”然后点击完成。如此网线连接完成。

                        虚拟开发板网线连接完成

至此,我们可以通过“Remote Systems”远程系统与虚拟开发板交互了,点击“虚拟开发板”下的“Files”,会出现“Root”目录,点击“Root”,我们可以通过EzEmbedded登录到虚拟开发板了,此时会出现输入密码对话框。

输入密码对话框

前面在介绍虚拟开发板时提到过,用户名为“root”,密码为空。按上图,在用户标识里填写root,点击“确定”即可完成登陆虚拟开发板。这样我们就可以象用windows的资源管理器一样,操作远程系统了,而且还可以通过Processes察看虚拟开发板的进程。

远程系统(虚拟开发板)浏览

5、创建工程

通过前面的步骤,我们已经开启了一个完整的开发和运行环境了,接下来,是我们开发嵌入式linux程序的时候了。

回到主界面,点击“文件”“新建”C项目”,会出现C项目对话框。

C项目对话框

填写项目名称hello embedded linux,在项目类型里,点选“可执行文件”“空项目”。

新建c项目

点击“下一步”。在出现的“选择配置”对话框里,直接点“下一步”,进入“Cross Gcc Command”对话框。

交叉工具链配置

点击“浏览”,找到工具链的位置,其位置在EzEmbedded安装目录下\Toolchains\arm-linux\bin里,在交叉编译器前缀(Cross compiler prefix)里填入:“arm-none-linux-gnueabi-”。单击“完成”。在主界面里,点击“项目资源管理器”里,我们就能看到刚才新建的hellow embedded linux项目了。接下来就是代码编写了。

6、编写源码

将鼠标移到“项目资源管理器”的hello embedded linux项目上,单击右键,从出现的菜单中,选择“新建”“源文件”。

进入新建源文件

会看到新建源文件对话框。

新建源文件对话框

在“Source file”里填入源文件名hello.c。点击“完成”。接下来我们可以编写代码了,在EzEmbedded编辑区内,添加如下代码:

#include"stdio.h"

intmain(void)

{

int i;

int j=0;

for(i=0;i<20;i++)

{

j++;

printf("hellow embedded linux j%d\n",j);

}

return 0;

}

源代码编辑

代码编辑和修改完毕后,要即时保存,然后,点击工具栏的图标,进行编译。会出现如下编译信息:

编译信息

7、源码级调试

编译成功后,就可以调试配置了。

点击工具图标栏里的虫子图标右侧的向下的黑色箭头,出现如下下拉菜单。

进入调试配置

点击“调试配置”。进入“调试配置”对话框。

创建调试配置

双击“C/C++ Remote Application”。进入详细配置对话框。

调试详细配置

在“主要”选项卡里,要注意两项:

在连接(Connection)里,一定要选中上面讲述“网线”连接的虚拟开发板。

在远程绝对目录里(Remote Absolute File Path for C/C++ Application),填入开发的程序放入虚拟开发板的哪个目下运行。本例将可执行文件放入/usr/下。

在“调试器”选项卡里,要指定交叉调试器。交叉调试位于第5步提到的交叉工具链里,本例交叉调试器是F:\EzEmbedded\Toolchains\arm-linux\bin\arm-none-linux-gnueabi-gdb.exe

指定调试器

至此,调试配置完毕,点击“应用”,然后点击“调试”。

这时,会出现视图切换确认对话框,询问用户是否允许将视图切换到调试视图。

视图切换确认对话框

点选“记住我的决定”,下次就不会出现此对话框,点击“是”进入调试状态。

调试主界面

指令指针停止在main函数内第一条可执行语句上。这时,可以在工具栏上,使用单步、全速等调试程序,也可以在源码区的左侧边框蓝色区域双击鼠标设置和清除断点等不同调试方法。程序暂停后,将鼠标移到变量上,变量内容就会显示出来。

小结

通过简单的7,我们就掌握了EzEmbedded的基本用法,可以开发出在目标板上调试和执行的linux程序,我们可以自豪地说,嵌入式linux应用开发已经入门了。

当然,这还只是第一步,剩下的就是学习linux开发并在EzEmbedded上进行实验,无论有什么想法,都可以拿到EzEmbedded试,出了问题大不了卸掉重装。

EzEmbedded的作用,对初学者是打破了嵌入式linux的神秘感、踢平了学习道路上的门槛;对专业linux开发者,可以大大提高开发效率。

EzEmbedded博大精深,有很多功能需要大家去发掘,胆子大一点,多试试,就都会了!