S3C2440 windows下使用jlink gdbserver,arm-none-eabi-gdb进行裸机程序编写调试

一开始是学stm32的,一直用MDK下载调试程序,非常方便。后来转学嵌入式Linux,在Linux下进行u-boot和Linux内核的移植,一直没有用到硬件调试功能,都是通过打印串口信息或者led来调试,大部分情况下能够奏效,这也是因为u-boot和linux内核本身的代码质量非常高,很难出现非常规的错误吧。但是后来在JZ2440上进行裸机程序验证,进行实时内核编写时,由于有非常多的汇编代码,使得程序开始复杂起来,使用串口调试非常麻烦,led调试又说明不了太多问题,这就使得我在学习嵌入式Linux大半年之后,在搁下硬件调试不管大半年之后,不得不再来面对这个问题。

以前之所以回避这个问题,是因为确实很麻烦,涉及到的东西感觉好多。首先,我能用于硬件调试的工具只有jlink,之前一直只是用来烧写u-boot到nor flash。也曾想在MDK上用jlink来调试s3c2440的,但是对MDK使用的链接器,调试器不熟悉,s3c2440的内存分布又不像stm32那样是固定的,需要自己写一些脚本或者链接文件来控制代码的链接和下载,我一直使用的是GNU的一系列工具,所以只能望而却步。

要想在windows下进行裸机程序的开发,首先要一套编译器。ADS,MDK不用多说,想用这两个程序的也不会来看这个帖子。windows 下GNU的ARM编译器有很多,google百度都能找到,下载了之后把bin目录放到环境变量里,就能在DOS窗口下直接调用了,比如"arm-none-eabi-gcc -v",此时还不够,必须要安装Windows下模仿Linux的一套工具,最明显的就是make,比较好的选择是MinGW。搞定了这两部分,就能开始进行裸机程序的开发了。但是这样的开发仅限于编译出bin文件,然后可以通过u-boot下载到SDRAM中运行,或者用JLINK来下载到SDRAM中运行。通过u-boot来下载通常还需要网络连接或者usb线,如果需要串口调试,还需要usb转串口工具。我是用u-boot的,每次编译好了程序,都需要重启一次开发板,然后用dnw把bin文件下载到SDRAM,运行。这是一个痛苦的过程,但是相比于最最开始的时候,我每次都用jflash将程序下到nor flash运行,这已经算是很先进的方式了。随时认识慢慢提高,知识慢慢增多,这种方式也已经满足不了我对速度和精度的要求了,我现在是想要达到不依赖IDE就能一键编译下载运行调试的状态,所以我最终还是要来解决调试这个问题。

我很早以前就再jlink的安装目录里发现了一堆我用不到的软件(我只用到了jflash)。没事的时候我一个一个打开来看,发现jlink.exe能直接连上我的开发板,还能显示我开发板的信息,我再Doc目录下找到了jlink的文档,看到了一些命令,我拿来用了用,发现居然可以直接读写s3c2440的寄存器,当时觉得好不可思议(当时的认识太浅,到处都是科技黑箱,我只在黑箱之间行走,先学到把黑箱连起来完成一些功能,再来细细研究黑箱)。在这一堆软件里,我还发现了一个软件,jlink gdbserver.exe,同样的,我在Doc目录里找到了他的文档,大略看了目录,看了一些感兴趣的章节,就发现了GDB这个名词,在Linux中见过,但是当时没用过。看完了之后,也没什么感想,什么都不懂。直到前几天,我在Linux上写应用程序的时候,感觉仅凭分析很难找到全部的错误,就试着用了一下GDB,没想到一上手就感觉很好用。昨天又调试s3c2440的裸机程序,在bootloader那段程序里一直会莫名其妙的卡住,不知道程序去了哪里,虽然进行细致分析还是可以排查出问题的,不过在写了很长时间程序之后,我已经没有心情和力气来慢慢脑力调试了,所以我放下了它,相信了那句话,工欲善其事必先利其器。于是开始了对硬件调试解决方案的又一次冲锋,想一想,这恐怕是第三四次了,以前都是匆匆看了下,感觉很麻烦,就没再看,因为那个时候整体工作还能进行,现在是几乎进行不了了。

百度上一搜,很快就知道了大概是要需要GDB,GDBserver。我一下就反应出了jlink gdbserver,就是因为上面说的那一次偶然的发现,于是我又看了一下jlink gdbserver的文档,上面介绍了怎么用GDB连接GDBserver以及可用的命令,我从安装的ARM GNU编译器目录里找到了arm-none-eabi-gdb.exe,启动之后,试着用了target remote :2331这个命令,一下就连接上了,心情开始小激动,然后又monitor reg r1,读出了寄存器,非常好。可是接下来就把我难住了:我会使用GDB在电脑上调试C程序,但是我不知道怎么调试嵌入式程序,我要怎么将程序下载到开发板呢,要经历一个怎样的顺序,我才能到达最期待的那个地方,就是可以使用各种命令来实现停止,单步调试,查看变量等操作。

首先要解决的问题就是怎么下载程序到开发板,我在网上搜了很多帖子,基本没有涉及这个话题的,只有为数不多几篇提到了load这个命令,我试着用了一下,没想到程序一下就下载进去了,是下载到0地址的,但是我的程序最终要要在SDRAM里边运行,所以我必须要将它下载到SDRAM里边,load又没有地址参数,我开始愁了,后来我想,那这个地址肯定只能在程序里指定,程序涉及到地址的地方又是在链接脚本里指定,于是我在链接脚本里试着用AT命令指定了一个地址,测试了一下,完美成功。于是我解决了下载问题。下载之后,怎么开始运行,从哪里开始运行,不能像普通GDB调试那样用r命令。很自然地,我使用命令调整pc值,调整cpu模式,根据网上的几个例子,使用c命令开始运行,程序就跑起来了,打断点,单步运行,一切ok!这个问题终于解决了,我的QQ号527332470,有问题的朋友可以跟我交流,

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Keil arm-none-eabi-gcc是Keil软件提供的一个工具链,用于编译和链接ARM架构的嵌入式系统的代码。它是GCC(GNU Compiler Collection)的一个版本,专门为ARM架构的嵌入式设备而设计和优化。这个工具链包括了arm-none-eabi-gcc编译器、链接器以及其他必要的工具,用于将源代码编译成可执行文件。通过使用arm-none-eabi-gcc,可以方便地编译、调试和部署嵌入式系统的代码。 要在Windows下安装keil arm-none-eabi-gcc,需要下载并安装arm-none-eabi-gcc、MinGW(GNU make)和Jlink驱动这三个软件。首先,您需要从Keil官方网站下载arm-none-eabi-gcc,并按照安装说明进行安装。接下来,您还需要安装MinGW,它是一个包含了GNU make的软件集合,用于构建和管理工程,也可从官方网站下载并按照安装说明进行安装。最后,您需要下载并安装Jlink驱动,它是一种用于连接和调试嵌入式系统的硬件接口。安装完成后,您就可以使用keil arm-none-eabi-gcc进行ARM嵌入式系统的开发了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi.exe](https://download.csdn.net/download/tcjy1000/85256846)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [STM32高级开发(5)-gcc-arm-none-eabi](https://blog.csdn.net/zhengyangliu123/article/details/54783443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [(arm-none-eabi-gcc + GNU make + Makefile +嵌入式单片机)环境搭建篇(linux+windows)](https://blog.csdn.net/qq_35333978/article/details/110398968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值