嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

时间:2022-12-19 20:05:50

注意本文图片与GIF动画较大,加载较慢,请耐心等待

环境搭配

尽管本文的环境是以Windows为例,但是Linux与Mac也是几乎完全类似的。

硬件环境

  1. 板子:2440芯片的板子,但我只有TQ2440,所以就用这个
  2. 调试器:Jlink

软件环境

  1. Windows 10 X64
  2. Eclipse
  3. yagarto的 arm-none-gnueabi
  4. MSYS与miniGW
  5. babun(对Cygwin进行了打包配置等的Cygwin工具)
  6. Jlink官方的工具


软件环境的搭建

1.Eclipse相关

  1. 安装Eclipse:下载一个最新的Eclipse,并解压,然后打开Eclipse
  2. 安装zylinCDT插件:参考Zylin官方的说明页面

2. 安装MSYS与miniGW

2.1 到SourceForge下载miniGW的Installer,如果无法访问SourceForge可以到我后面的网盘下载

2.2 选择安装MSYS与miniGW

需要注意的是需要选择MSYS Base与MiniGW32 Base,如下图:

 嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

安装完成后会有提示:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


3. 安装babun

参考官网的说法

4. 安装Cross ToolChain

可以随便找一个安装来用,但是我验证过好用的是yagarto-bu-2.23.1_gcc-4.7.2-c-c++_nl-1.20.0_gdb-7.5.1_eabi_20121222.exe,官方已经找不到了,但是搜索下载。

安装好后,确认是否设置了环境变量,例如可以在babun的mintty中看看版本,以及路径:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


创建Eclipse工程以及make目标

1. clone下lmosem的代码

2. 将代码放到Eclipse的workspace下,即Eclipse启动的时候询问的位置

3. 从Eclipse导入文件,并创建工程,工具链这一步可以随便选择

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


4. 创建make目标这样子,就不需要敲命令行来编译与clean了

在Eclipse的make target中右键New,然后填入all,并确定,然后重复再创建一个clean目标,示例图如下:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

5. 测试编译环境是否有问题

双击make targe目标clean,然后再双击all,如果像下面这样子(注意看底下的console窗口的输出),那么说明编译与clean没有问题了:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


如果出现下面这样的提示,那么就是MSYS没有设置进PATH中:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

那么此时也可以在Project属性中添加一个PATH路径,这样子可以不污染系统PATH:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

然后再次测试make targe的clean与all是否正常。如果正常,那么编译环境就OK了,以后我们就用这个编译环境。


配置Eclipse Jlink Debug

1. 创建新的DebugConfiguration

在Run菜单中选择Debug Configrations,然后新建一个ZylinDebug Configarations(注意是Native不是Cygwin)。然后继续下面的配置。

2. 加载的ELF Symbol文件配置

因为调试器需要加载ELF Symbol文件,因此需要在Main标签中指定编译出来的ELF文件,如下图,注意将下面的Application Console也选中:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

3. gdb配置

我们使用的是gdb来连接Jlink GdbServer的方式来调试,而Eclipse作为一个前端,因此需要配置后端的gdb文件,因此我们指定gdb:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

这里面使用的是前面安装的Cross ToolChain中的gdb,这个也可以在babun中确认:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

需要注意的是里面有一个“Stop on start at:”这个选项,这里面可以填一个我们需要gdb加载符号开始跑后,在遇到某个符号的时候停下来,我们可以在这里配置也可以先不配置,在后面配置。

4. InitCommand配置

在使用Jlink连接了ARM芯片之后,我们还需要对SoC进行一些初始化等配置工作,这些工作就是在这里进行的,针对于我使用的TQ2440,我是如下配置的:

target remote  localhost:2331
monitor arm920t sw_bkpts enable
monitor endian little
monitor reset
monitor MemU32 0x53000000=0x00000000
monitor MemU32 0x53000000=0x00000000
monitor MemU32 0x4A000008=0xFFFFFFFF
monitor MemU32 0x4A00001C=0x000007FF
monitor MemU32 0x56000050=0x000055AA
monitor MemU32 0x4C000014=0x00000007
monitor MemU32 0x4C000000=0x00FFFFFF
monitor MemU32 0x4C000004=0x00061012
monitor MemU32 0x4C000008=0x00040042
monitor MemU32 0x48000000=0x22111120
monitor MemU32 0x48000004=0x00000700
monitor MemU32 0x48000008=0x00000700
monitor MemU32 0x4800000C=0x00000700
monitor MemU32 0x48000010=0x00001f4c
monitor MemU32 0x48000014=0x00000700
monitor MemU32 0x48000018=0x00000700
monitor MemU32 0x4800001C=0x00018005
monitor MemU32 0x48000020=0x00018005
monitor MemU32 0x48000024=0x008e04f4
monitor MemU32 0x48000028=0x00000032
monitor MemU32 0x4800002C=0x00000030
monitor MemU32 0x48000030=0x00000030

load
#break do_menu
#break _start_armboot
break lmosemhal_start
#break main
continue

这里面主要做了以下几个动作:

  1. 连接到gdb server
  2. 设置大小端
  3. 让SoC进行Reset
  4. 配置内存
  5. 加载我们在前面第2步指定的ELF文件
  6. 在lmosemhal_start这个符号处设定断点
  7. 开始跑

将这段放入Command中:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

如果是其他平台还需要进行更改。

5. Debug段的添加

ELF文件在原本的CFLAGS配置下是不会包含Debug信息的,如果这样子调试的话,gdb会无法找到调试时候PC指针所在文件对应的Source Code,也就无法进行代码同步查看,出现如下的问题:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

这不是我们想要的结果,因此更改Makefile中的CFLAGS,让产生的ELF文件包含debug信息:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

即加载-g选项

6. 重新生成ELF文件

更改了CFLAGS,那么我们可以在make target中的双击clean,然后双击all,完成make clean与make all。


7. Jlink gdbServer配置

首先是安装Jlink调试器的对应软件,安装完成后有许多的工具:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

然后关闭所有的防火墙或者网络拦截工具,否则下面的jdbServer无法正常被连接。

接下来就是开启Jlink GDB Server,开启后的状态如下,处在等待连接状态,注意查看红色部分:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

然后我们从Eclipse中开启调试:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

如果没有问题,那么Eclipse中的gdb会连接上Jlink gdb Server,然后Server端会显示连接了:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

同时Eclipse这段也会进行init处理,即前面我们说到的那段Init命令,效果如下动画,注意底下的console窗口:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


到此,我们就构建好了调试与编译环境。


更改Encoding解决文件的乱码问题

因为有中文,为了Editor,Makefile中不乱码,如下面几个图,配置UTF-8即可。

1. Editor的配置

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

2. Makefile编辑器的配置

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试


但是console的乱码不知道该怎么解决,Search了一把也没有找到就放弃了,要是大家知道,麻烦告知。


其他问题

Q1. 是否可以使用DS-5替代Eclipse?

A1:分下面两种情况

[1] 如果仅仅是使用DS-5带的Eclipse,但是其他都按照本文前面的步骤来做,那么答案是不可以,因为DS-5的Eclipse经过ARM公司改装后,发现都没有了Install New Softwares选项

[2] 如果不仅仅是使用DS-5带的Eclipse,还要用Jlink的RDDI来替换DS-5的,然后通过这个RDDI接口来访问Jlink,而不需要ZylinCDT的话,那么答案是可以,以后会说明。但就现在我的尝试而言,发现安装官方的文档操作遇到了一个问题,看起来是dll匹配问题:

嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试

Q2. Linux Mac下面是否也可以这样搭配环境?

A2: 可以,Linux下面更方便。操作步骤几乎完全类似。有需求再写。

Q3. 是否可以不是用Eclipse,直接使用gdb?

A3: 没有问题,但是Eclipse更方便。


参考

1. 虚拟嵌入式系统实验室

2. Eclipse ARM