原创 【博客大赛】【小梅哥FPGA】使用DS-5编写和调试SoC的Linux应用程序 ...

2018-5-4 11:36 7558 25 4 分类: FPGA/CPLD 文集: FPGA深入学习

对于Intel Cyclone V SoC FPGA用户,如果仅仅开发应用程序,也可以在 Windows 环境下完成。Intel针对其自家的SoC FPGA芯片提供了定制的DS-5软件,该软件为ARM公司针对其自家芯片研发,功能强大,尤其是其自带的编译器,编译出来的ARM可执行文件运行起来有更高的效率。软件不仅支持ARM裸机程序开发和调试,也支持Linux应用程序开发和调试。不过其自带的编译器和调试器是收费的,需要获得相应的License才能够使用。但同时该软件也集成了有Linaro公司针对Cyclone V SoC FPGA验证通过的专用GCC编译工具,名字叫gcc-linaro-arm-linux-gnueabihf,使用该工具编译和调试Linux应用程序无需获取License

本节将介绍如何使用Intel版的DS-5软件,创建和编译,并调试一个最简单的Linux应用程序。

1、启动DS-5

从开始菜单栏中找到ARM DS-5 v5.27.1目录,选择Eclipse for DS-5 v5.27.1打开。

第一次启动会要求设置 workspace,如图下图所示,如果不希望每次都出现该提示框,可勾选界面中的复选框。

这里选择一个靠谱的位置作为工作空间路径,例如我们在编写资料时,选择的D:\fpga\ac620_soc\demo_debug\firmware

点击 OK,进入 Eclipse 的欢迎界面,如图 10.105 所示

点击Welcome to DS-5页面的小叉即可关闭欢迎页面,进入软件的主界面。

如果我们没有为DS-5软件添加License,那么软件每次次启动会默认弹出下列对话框,由于仅仅开发Linux应用程序无需License,因此直接关闭该窗口即可。

说明勾选上界面中的复选框之后,下次打开DS-5,软件会直接进入主界面,不会再弹出路径选择对话框,如果以后我们希望切换路径,可以在软件打开之后,依次点击菜单栏中的File—> Switch Workspace->other来重新打开这个窗口

2、创建C工程

点击主界面 FileàNewàC Project,如图 10.107 所示,选择创建 C 工程。

在弹出的工程创建界面,设置工程名称为hello,工程类型为Empty ProjectToolchain选择使用GCC 4.x[arm-linux-gnueabihf](DS-5 built in),如下图所示。

设置好后,点击 Next,在下图所示的配置界面选中DebugRelease两个编译目标。

然后点击 Finish 按钮,完成工程创建,得到一个空工程,接下来将添加一个 C 程序文件到该工程,并编写 C 代码。点击 FileàNewàSource File,选择创建源文件,如下图所示。

Source File 界面,设置文件名为“main.c”,使用默认 C 模板,如下图所示:

点击 Finish,得到添加了main.c 的工程,如下图所示。

此时,main.c文件还是空的,main.c 中添加如下代码并保存:

#include

int main (int argc, char *argv[])

{

    printf("hello world\n");

    return 0;

}

添加了 C 代码的工程如下图所示。

3编译工程

代码编写完成后,就可以进行编译了,这里的编译实质是交叉编译,即编译得到能够在ARM平台上运行的Linux应用程序。编译的操作非常简单,按下键盘组合键Ctrl+B即可执行编译。

编译完成后左侧工程向导里会生成两个文件夹,分别为BinariesDebugBinaries文件夹下存放的是编译生成的2进制可执行文件,Debug下包含的是生成结果,即通过编译生成了哪些文件,包括2进制可执行文件、makefile和一些编译过程中间文件。对我们来说,当前关心和需要的是2进制可执行文件,即hello

4、建立SSH远程连接

Windows 下用 Eclipse 调试应用程序,部署的目标板须能提供通过远程将可执行文件传输到目标板的功能,如 SSHFTP 等。这里以 SSH 为例进行介绍。

1. 创建远程连接

Eclipse 主界面,点击FileàNewàOther,在如下图所示的窗口选择建立Remote System Explorer,选择 Connection 后点击 Next

在下图所示的界面中,选择SSH Only,选择建立 SSH 连接。

出现如下图所示的 SSH 连接设置界面,在 Host name 栏填写目标板的IP地址,如192.168.90.199Connection name 栏会自动填写为目标板 IP 地址,也可以修改,点击 Finish完成设置。

建立完成,依然是 C/C++程序界面视图。点击 WindowàPerspectiveàOpen PerspectiveàOther,如下图所示。

在如下图所示的界面中选择Remote System Explorer,然后点击 OK

Eclipse将会切换到远程系统视图,如下图所示,可以看到连接名称为192.168.90.199的远程系统。

右键单击连接名称,选择 Connect,出现 SSH 连接登录设置界面,在其中填写登录名和密码,如下图所示。为了方便以后连接,可选择保存密码。

选择保存密码可能会出现如图 10.122 所示的安全提示,点击 No 不填写额外信息。

如果 Eclipse 是第一次进行 SSH 连接,可能会出现如下图所示的警告,点击 Yes并进行操作即可。

SSH 连接成功后的界面如下图所示,可以看到连接上出现了绿色的标记,表明连接已经建立。

右键单击连接的Ssh Terminals,选择Launch Terminal,如下图所示,选择打开一个远程终端。

在 Eclipse 界面右下方,将出现一个远程终端,在其中可以输入 Linux 命令进行操作,如下图所示。

2. 复制文件到目标板

点击右上角监视窗口的 C/C++标签,切换到 C/C++视图,如下图所示。右键点击 hello 工程 Binaries下的“ hello [arm/le]”,选择 Copy,复制 hello 文件。

在点击监视窗口的“ Remote System Explorer”标签,切换到远程系统视图,点击展开“ /root”,找到 opt 文件夹,在右键菜单选择 Paste,将已复制的 hello 文件粘贴到目标系统的“ /opt”目录下。

然后在 Terminal 窗口,进入/opt目录,用 chmod 命令为 hello 文件增加可执行权限,操作完成的结果如下图所示。

3. 运行应用程序

通过上述操作,我们已经完成了一个最简单的Linux应用程序的创建、编译和安装到目标板上,接下来就可以在目标板上执行了,执行的方法非常简单,只需要接着Terminal 窗口,输入下述命令即可执行该应用程序。

./hello

操作完成的结果如下图所示。


注意,该命令需要在可执行文件所在目录输入才能执行。否则请先使用cd命令将路径切换到opt目录下。

5远程调试1. GDB 设置

打开 RunàDebug Configrations,在调试配置界面,双击C/C++ Application栏,将会生成hello Debug调试目标,如下图所示。

点击 Debugger 选项卡,设置 Debugger gdbserver,并在GDB Debugger中浏览到交叉编译器目录下的arm-linux-gnueabihf-gdb.exe,并设置 GDB command set Standard,如下图所示。

特别说明DS-5软件的安装包下默认提供了一系列arm-linux-gnueabihf工具,包括gcc编译工具,但是不知出于什么目的,偏偏将arm-linux-gnueabihf-gdb.exe这个工具给去除了,导致软件默认安装完成后,D:\intelFPGA\17.1\embedded\ds-5\sw\gcc\bin\目录下是没有这个程序的,为了实现对应用程序的调试,我们选择手动设置调试工具。具体方法为将我们提供的arm-linux-gnueabihf-gdb.exe文件拷贝到D:\intelFPGA\17.1\embedded\ds-5\sw\gcc\bin\目录下,然后就可以使用了。

 

点击 Debugger Options Connection 选项卡,设置连接类型为 TCP,在 Host name 栏填写目标板的 IP 地址,在 Port number 栏设置 TCP 连接端口号,如下图所示:

设置完毕后,点击 Apply 按钮,使设置生效,然后点击 Close 关闭窗口

2. GDB 连接和调试

Eclipse 主界面,点击监视窗口的 Remote System Explorer,切换到远程系统视图,在终端输入下列命令启动 gdbserver

# cd /opt
# gdbserver :10000 hello

注意 TCP 连接端口必须与 Eclipse 所设定的一致。实际操作截图如下图所示

点击 RunàDebug,开始 GDB 远程连接,出现如下图所示窗口,点击 Yes 即可。

最终进入如下图所示的调试界面。

点击 RunàStep Over,或者直接点击Step Over图标,单步运行程序,切换到远程系统视图,可以看到终端输出字符串hello world,如下图所示。

调试完毕,点击 RunàTerminate,或终止的快捷图标以停止调试。


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

三更月 2022-9-27 16:55

小梅哥,这个eclips我创建C工程,没有GCC 4.x[arm-linux-gnueabihf](DS-5 built-in)这个工具链,怎么解决呀?重装了还是没有
相关推荐阅读
小梅哥 2019-09-04 22:10
小梅哥FPGA时序分析笔记(6.2)深入现象看本质——庖丁解牛之FPGA内数据传输模型
通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。 时钟和数据传输路径 通过上一节内容中,我绘制的那个FPGA内部数据在逻辑...
小梅哥 2019-09-01 21:28
小梅哥FPGA时序分析笔记(6.1)深入现象看本质——庖丁解牛之FPGA可编程原理
上一次发博客,已经是2个月前了,这中间两个月,干了件很有意义的事情,尤其是对于自己来说,感觉学到了非常多的知识和经验,每天都很忙,忙到没时间逛网站博客,终于忙完闲下来了,连载的事情可不能忘,终于可以书...
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到的最...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
EE直播间
更多
我要评论
1
25
关闭 站长推荐上一条 /3 下一条