这是因为工作写的一个文档,主要是我们开发人员都不会Linux不会vi也不会命令行,于是研究了一下Windows系统调试ARM Linux程序的办法,在这共享一下。

1. 概述

嵌入式Linux系统的应用程序开发,编译器一般是gcc,一般都说是要在Linux虚拟机中进行开发和编译。本文提供了一种能够在Windows系统下编译、调试Linux应用程序的方法,可大大简化Linux软件开发环境的搭建难度,保留原开发人员的操作习惯,让Linux程序开发和开发VxWorks一样方便快捷。

2. 软件包

2.1. IDE环境:EclipseIDE for C/C++ Developers

Eclipse下载后,无需安装配置,直接解压到program files目录即可运行,可放快捷方式到桌面。

2.2. 交叉编译工具:Linaro GCC

编译器版本选择,建议与CPU官方开发包提供的版本一致或接近,不必要追求最新版本。Windows下的编译器,命名一般为:gcc-linaro-4.9.4-2017.01-i686-mingw32_arm-linux-gnueabihf.tar.xz。带有mingw32字样的,就是Windows版的。

安装方法:

将下载的包用7zip解压到D:\gcc(winRAR似乎有问题,待确认),目录结构如下:



arm架构的电脑重装不了系统 arm装windows_嵌入式系统

其中主要的几个目录位置如下:

bin/ 交叉编译工具目录

arm-linux-gnueabihf/libc/usr/include Linux user-space程序头文件目录

添加环境变量:

解压文件后,将D:\gcc\bin目录,添加到系统PATH环境变量中(系统属性-高级属性-环境变量),确保在任何位置调用arm-linux-gnueabihf-gcc均能成功。

2.3. Cygwin环境

地址:Cygwin Installation

根据安装向导进行在线安装,随本文档提供离线安装包

注意:

1、 源选择国内的某个http://edu.cn源,或网上寻找合适的国内源(如163mirror)

2、 软件包选择一定要包含“man”包,其他开发包根据需要可以以后追加

安装完成后,就可以在Windows环境使用Linux命令了

2.4. Linux API man库

地址:Index of /pub/linux/docs/man-pages

需要下载两个包:

man-pages

man-pages-posix

均可选择最新版本下载

下载后解压,将其中的man1~man7,man1p~man7p目录,复制到Cygwin安装目录下Cygwin_base/usr/share/man,如果重名则选择覆盖。

完成后,打开Cygwin终端测试:

man aio

manpthread_mutex_lock

如果能正确打开对应的帮助文档,说明安装完成。

以后开发中,可以随时通过man程序查看函数手册。

3. 目标板准备

目标板应能正常运行Linux系统,与开发机网络连通。在此基础上,确保以下功能被配置正确。本章节的准备工作,一般可由内核或rootfs维护人员处理,应用程序开发工程师一般不需要处理。

3.1. 开启SSH服务器

确保系统打开了SSH服务,一般在嵌入式Linux下,由dropbear提供该功能。

通过以下命令确认是否开启:

ps | grep dropbear

如果没有开启,需要找内核和rootfs维护人员处理。

3.2. GDB Server

远程调试依赖GDB Server功能,需要确保目标板上的GDB Server版本与开发环境中的一致,可复制位于GCC环境下的gdbserver到目标板。Windows下的gdbserver位于如下路径:

D:\gcc\bin\gdbserver

3.3. 调试临时目录

程序开发调试时,会反复地把编译好的应用程序复制到目标板的文件系统中。当目标板中Linux系统完全运行在Flash并无NFS文件系统时,下载文件的速度可能较慢,反复下载也可能导致Flash寿命提前结束。

为了提高调试效率,保证寿命,我们可以在目标板上申请一块tmpfs内存目录,调试程序都可以在该目录下进行。

这里我们约定基于tmpfs的调试目录为/run/app,后续文档中说明的应用程序调试目录均在此。

335x系统中,可修改/etc/default/volatiles/00_core,增加下面一行后自动创建app目录:

d root root 1777 /run/app none

4. 应用程序开发

4.1. Eclipse配置

Window-Preference

搜索path

在C/C++的Source Lookup Path中,添加一个File System Dir.,路径指向

D:\gcc\arm-linux-gnueabihf\libc\usr\include

并包含其子目录



arm架构的电脑重装不了系统 arm装windows_arm架构的电脑重装不了系统_02


4.2. 创建连接

File – New –Other

Remote SystemExplorer – Connection

创建一个连接:



arm架构的电脑重装不了系统 arm装windows_嵌入式系统_03

连接类型为Linux:



arm架构的电脑重装不了系统 arm装windows_ARM_04


输入HostName和IP地址:



arm架构的电脑重装不了系统 arm装windows_arm架构的电脑重装不了系统_05


下一步后,选择文件传输方式为SSH方式:



arm架构的电脑重装不了系统 arm装windows_arm架构的电脑重装不了系统_06

下一步,选择进程控制方式为通过系统shell控制

图略,同上

下一步,选择ssh.shells

图略,同上

下一步,选择ssh.terminals:

图略,同上

点击Finish完成。

测试

Window – View中打开Remote Systems窗口



arm架构的电脑重装不了系统 arm装windows_Linux_07


右键Connect,当提示输入密码时,输入目标板用户名、密码(通常为root,密码空)



arm架构的电脑重装不了系统 arm装windows_嵌入式系统_08

如果一切正常,可以展开SftpFiles查看目标板上的文件,右键SSH Terminals可以启动一个ssh终端。



4.3. 创建工程

新建一个工程,选择CProject



arm架构的电脑重装不了系统 arm装windows_嵌入式系统_09

输入工程名,工程类型选择Executable—EmptyProject –Cross GCC



arm架构的电脑重装不了系统 arm装windows_Windows_10

Cross GCC设置中,输入gcc前缀和gcc路径:



arm架构的电脑重装不了系统 arm装windows_Linux_11

创建工程后,选择工程属性

C/C++ Build中,Builder选择内建builder:InternalBuilder



arm架构的电脑重装不了系统 arm装windows_Linux_12

完成配置后,编译程序,应能成功:



arm架构的电脑重装不了系统 arm装windows_ARM_13


4.4. 程序调试

打开DebugConfigurations



arm架构的电脑重装不了系统 arm装windows_Linux_14


在C/C++ RemoteApplication下新建一个config.



arm架构的电脑重装不了系统 arm装windows_嵌入式系统_15


在右侧配置页Main中

选择Connection为之前创建的Linux目标板连接LINUX_PMC-1308V2
远程运行程序路径,选择3.3调试临时目录中指定的调试目录,并在后面追加调试程序名:/run/app/appdemo



arm架构的电脑重装不了系统 arm装windows_Windows_16

在Debugger选项卡中,指定gdb程序名为arm-linux-gnueabihf-gdb



arm架构的电脑重装不了系统 arm装windows_嵌入式系统_17

配置完成后,即可点击对话框右下角Debug按钮启动调试。

剩下的工作,和Windows系统其他基于Eclipse的嵌入式开发环境下调试单片机程序、VxWorks程序没什么区别了。