搭建GCC+JLINK开发调试环境(裸机调试)

基于Vscode+WSL搭建STM32开发环境 搭建Vscode+wsl+arm-gcc的stm32开发环境 阅读详情
搭建GCC+JLINK开发调试环境(裸机调试)
a) 安装VMware   --- just do it.
b) 安装arm-elf-gcc toolset --- we can get it from:  http://www.gnuarm.com/
c) 安装JLINK软件 --- just get it from SEGGER website.

d) 实现2440 gdb 启动脚本:
   1) 参阅JLinkGDBServer文档,如下:


文件:UM08005_JLinkGDBServer.pdf
大小:509KB
下载:下载
   
  2) 此gdb启动脚本的主要任务是初始化内存控制器,禁止WatchDog,禁止中断。
     参考JLinkGDBServer文档后,经测试,以下代码可以正常工作:
  ##main function defined for initial the S3C2440 CPU.

  define reset_2440 
    monitor endian little  ##little endian, should be the same as your application.
    
    ##copied from JLinkGDBServer Document.
    monitor reset            ##reset the S3C2440
    monitor reg cpsr = 0xd3  ##setup cpsr register.
    monitor speed auto       ##Link Speed.
    
    ##translated from VIVI S3C2440 version.
    #disable watchdog
    monitor MemU32 0x53000000 = 0
    
    #disalbe interrupt --- int-mask register 
    monitor MemU32 0x4A000008 = 0xFFFFFFFF
    
    #disalbe interrupt --- int-sub-mask register 
    monitor MemU32 0x4A00001C = 0x7FFF ## vivi set it as 0x7FF, why???
    
    #initialize system clocks --- locktime register
    monitor long 0x4C000000 = 0xFF000000
    
    #initialize system clocks --- clock-divn register
    monitor long 0x4C000014 = 0x5            #CLKDVIN_400_148
    
    #initialize system clocks --- mpll register
    monitor long 0x4C000004 = 0x7f021    #default clock
    
    #setup memory controller
    monitor MemU32 0x48000000 = 0x22111110    #conw
    monitor MemU32 0x48000004 = 0x00000700    #bank0
    monitor MemU32 0x48000008 = 0x00000700     #bank1
    monitor MemU32 0x4800000c = 0x00000700     #bank2
    monitor MemU32 0x48000010 = 0x00000700     #bank3
    monitor MemU32 0x48000014 = 0x00000700     #bank4
    monitor MemU32 0x48000018 = 0x00000700     #bank5
    monitor MemU32 0x4800001c = 0x00018009     #bank6
    monitor MemU32 0x48000020 = 0x00018009     #bank7
    monitor MemU32 0x48000024 = 0x008e04eb     #vREFRESH
    monitor MemU32 0x48000028 = 0xB2        #vBANKSIZE -- 128M/128M --- should 
                                                       according to the physical 
                                                       memory size? --- 0xB0 ??
    monitor MemU32 0x4800002c = 0x30        #vMRSRB6
    monitor MemU32 0x48000030 = 0x30        #vMRSRB7        
  end

  ##main function defined for connect to the TARGET.
  ##arg0 = IP address.
  ##arg1 = PORT number of JLINK gdb server.

  define connect_jei 
    if $argc == 2
        target remote $arg0:$arg1
        reset_2440
    end
  end

3) 脚本做好以后,以下命令为怎样使用该脚本---假设该脚本名字为targets.cmd,编译出的程序文件为main.out

 arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168 2331" main.out
 
 然后在gdb命令行中输入以下命令即可调试了:
 load
 b main
 c 

4) 实现2440 C语言启动基本配置,用汇编实现。
   在启动代码中,我们只需要设置SP,FP寄存器即可。
   代码如下:
   .global _start
   .extern main

   .text
   _start:
        mov  r11, #0x0           @@fp
        mov  sp,  #0x31000000    @@sp = 0x30000000+16M
        1:   bl   main           @@call main()
        b    1b                  @@loop forever.    
   .end
    
   同时需要实现的是Link脚本,如下:

   OUTPUT_ARCH(arm) 
   ENTRY(_start)
   SECTIONS 
   { 
    . = 0x30000000; 
    .text : 
    { 
        *(.text)
    } 
    . = ALIGN(8192); 
    .data : 
    {
        *(.data)
    } 
    .bss : 
    {    
        *(.bss)
    } 
    
    /* Stabs debugging sections. */
    
    .stab 0 : { *(.stab) } 
    .stabstr 0 : { *(.stabstr) } 
    .stab.excl 0 : { *(.stab.excl) } 
    .stab.exclstr 0 : { *(.stab.exclstr) } 
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) } 
    .comment 0 : { *(.comment) } 
    .debug_abbrev 0 : { *(.debug_abbrev) } 
    .debug_info 0 : { *(.debug_info) } 
    .debug_line 0 : { *(.debug_line) } 
    .debug_pubnames 0 : { *(.debug_pubnames) } 
    .debug_aranges 0 : { *(.debug_aranges) } 
   } 
    
   main.c 内容如下:

   int main(void)
   {
    int i = 0;

    while(1)
    {
        i++;
        
    }

    return 0;
   }


   makefile 如下:

AS = arm-elf-as
CC = arm-elf-gcc
LD = arm-elf-ld
ROM = arm-elf-objcopy
DAS = arm-elf-objdump
AFLG = -mcpu=arm920t -g -mlittle-endian
INSIGHT = arm-elf-insight
GDB     = arm-elf-gdb

all:
    $(AS) $(AFLG) init.S -o init.o 
    $(CC) $(AFLG) -c main.c -o main.o
    $(LD) -g -EL -nostdlib -Bstatic -Tlink.lds init.o main.o -o main.out
    $(ROM) -O binary -R .comment -R .note -S main.out main.bin
    $(DAS) --architecture=arm -D main.out > dump.txt

debug:
    $(GDB) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out

insight:
    $(INSIGHT) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out


在使用make debug 以及make insight 之前,需要设中级TARGET以及PORT变量。

完整的开发源码包如下:
 
文件:2440_gdb_test.rar
大小:6KB
下载:下载


直接用命令行调用GDB调试的命令如下:
arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168(   这个ip 换成自己 pc的ip 或者localhost ,by imjacob) 2331" main.out

然后在gdb命令窗口中输入如下命令即可调试:
load
b _start
b main           (应为 _main,by imjacob)
c
VSCode+gcc搭建STM32开发环境的几种方案 VSCode虽然只是一个代码编辑器,由于开源并提供了易用的插件接口,目前已拥有丰富的第三方插件,可以联合gcc构建一个类似于IDE的开发调试环境。 阅读详情

相关推荐

ARM裸机开发环境搭建对比:Eclipse for ARM vs VS Code + ARM GCC 配置效率实测

本文对比了ARM裸机开发环境中Eclipse for ARM与VS Code + ARM GCC的配置效率,通过实测数据展示了现代工具链在安装包大小、启动时间、硬件要求和插件生态等方面的显著优势。重点介绍了VS Code方案如何简化GPIO开发流程,提升调试效率,并提供了详细的配置指南和优化技巧,帮助开发者快速搭建高效的ARM开发环境。

aiman5818的博客 377

CentOS上GCC多版本GCC Toolset支持探究

由于稳定性的要求,CentOS上的默认GCC版本通常比较低,比如CentOS 8上是GCC 8.5,而目前GCC已经发布了GCC 12.2,这对开发者是不太友好的,如果开发着想使用高版本特性就必须自己编译一个高版本GCC出来,比较麻烦,也不利于维护。 那么有没有办法可以让开发者像安装默认GCC编译器一样,使用yum install的方式安装rpm包呢?CentOS提供了GCC Toolset机制。

Compiler爱好者 7549

IMX6ULL裸机开发实战指南——VSCode环境配置与高效开发技巧

本文详细介绍了使用VSCode进行IMX6ULL裸机开发的环境配置与高效开发技巧。从工具链安装、VSCode插件配置到代码模板、多工程管理和调试技巧,全面解析如何提升开发效率。特别针对IMX6ULL芯片特性,提供实用的调试与烧写方案,帮助开发者快速构建稳定的裸机开发环境。

weixin_30296405的博客 424

【系统软件01】devtoolset离线安装gcc

SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS Linux用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。参考:1、Linux开发环境——SCL软件集2、转载:Centos7安装SCL源3、CentOS 使用 IUS / SCL 第三方软件源4、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本。

junxuezheng的博客 6946

基于Versaloon与GCC的STM32 Cortex-M3智能开发环境搭建指南

在嵌入式系统开发中,理解从源代码到可执行文件的完整工具链是工程师的核心能力。GNU工具链(GCC)作为开源、免费且生态广泛的选择,通过交叉编译器、链接器和调试器的协同工作,将高级语言代码转换为目标处理器(如ARM Cortex-M3)的机器指令。其技术价值在于提供了对编译、链接过程的完全控制,允许开发者深度定制内存布局和优化策略,这对于资源受限的嵌入式场景至关重要。应用场景涵盖从简单的裸机程序到复杂的实时操作系统(RTOS)项目。本文聚焦于如何围绕开源调试器Versaloon和GCC工具链,构建一套自动化、

weixin_30387423的博客 402

全志D1s开发板RISC-V裸机开发环境搭建指南

RISC-V作为一种开源的指令集架构,正在嵌入式系统和IoT领域快速普及。其模块化设计允许开发者根据需求定制处理器核心,而全志D1s采用的平头哥C906内核就是典型代表。裸机开发直接操作硬件寄存器,能实现对芯片资源的完全控制,是学习计算机体系结构的有效方式。在嵌入式开发中,环境搭建涉及交叉编译工具链配置、调试接口连接和启动代码编写等关键技术。全志D1s开发板结合RISC-V架构,为开发者提供了理想的硬件平台,特别适合需要精细控制外设的实时应用场景。通过GPIO和UART等基础外设驱动开发,可以快速验证开发环

weixin_33863087的博客 377

ubuntu下gcc+vscode+jilnk搭建stm32开发环境

最近学习过程发现用Windows做开发电脑比较卡,就尝试着把开发环境转移到Ubuntu,Ubuntu做开发还是比较快的,就是环境配置比较麻烦,话不多说,我们进入正题。 安装vscode ubuntu 安装vscode还是比较容易的,而且方法也有多种,最简单的是上直接下载vscode的deb包,然后通过Ubuntu的软件商店直接安装,不过用这种方法好像不太好卸载,所以这里还提供另外一种方法。 1.通...

牧封齐的博客 2149

CLion配置STM32开发环境:从ARM GCC到OpenOCD全流程指南

在嵌入式开发领域,集成开发环境(IDE)的选择直接影响开发效率与代码质量。传统IDE如Keil、IAR虽然稳定,但代码编辑与项目管理功能相对薄弱。现代跨平台C/C++ IDE通过智能代码补全、重构和深度调试集成,显著提升了嵌入式开发的工程实践体验。其技术价值在于将开发者从繁琐的编辑器操作中解放,聚焦于硬件交互与系统架构设计。应用场景涵盖从单片机到复杂嵌入式系统的全流程开发,尤其适合追求代码质量与团队协作的项目。本文以STM32开发为例,详细解析如何利用CLion配合ARM GCC工具链和OpenOCD调试器

weixin_30383279的博客 403

eclipse 配合 JLINK Gdb 工具开发

安装yargarto 版本eabi编译链 http://www.yagarto.de/ 安装JAVA虚拟机  JRE 就足够了。 下载 eclipse 的 C/C++ 版本 下载 zylin 插件,在 eclipse 的 Help --> Install New Software 中 添加地址 http://opensource.zylin.com/zylincdt/ 就可以了。 按照提

Etual的专栏 8277

mini2440全套裸机程序(MDK 运行)

mini2440全套裸机程序(MDK),包括的外部中断 LCD 触摸屏 timer ADC 外部中断,等驱动程序。 可配套国嵌的mini2440 视频教程.平台是MDK的。

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

Clion集成JLink实现高效嵌入式开发调试

本文详细介绍了如何在Clion IDE中集成JLink工具,实现嵌入式开发的一键程序下载与调试。通过配置ARM GCC工具链和Embedded GDB Server,开发者可将编译、烧录、调试流程无缝衔接,大幅提升基于ARM Cortex-M等MCU的开发效率,告别传统多工具切换的繁琐操作。

wdx012345的博客 904

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

eclipse集成开发环境搭建与裸机程序调试

eclipse集成开发环境搭建与裸机程序调试 硬件连接:PC用jlink仿真器、转串口与开发板连接好,开发板从nandflash启动; 软件准备:gdb-serer、jlink软件、eclipse; 调试程序:led.lds、led.S、Makefile; 一.安装gdb-server 1.解压arm-linux-gdb-7.5.tar.gz: tarxvzf arm-linux-

洪流之源 1892

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 642

最优化学习笔记1——关于拟牛顿法推导

从2020年3月份到现在,一年的时间里断断续续自学最优化,结合豆瓣读书、知乎等网站上的推荐,翻阅了以下书和课程: Stephen Boyd和Lieven Vandenberghe的《Convex Optimization》,这本书被公认为学习凸优化的必读经典著作,其中大量的篇幅讲应用,讲理论和算法的篇幅稍少一些。在B网站上有Boyd的视频课程,油管上也有,不过只有英文字幕,如果是零基础接触,直接看Boyd的视频稍显费劲,B站上也有凌青老师以《Convex Optimization》为教材的讲解,推荐作为入

xiaofei473的博客 1768

MacOS下ARMv8-A裸机程序调试实战:从QEMU到JLink

本文详细介绍了在MacOS系统下搭建ARMv8-A裸机程序调试环境的完整流程。通过整合QEMU模拟器和JLink硬件调试器,结合交叉编译工具链与VSCode,构建了一套从虚拟验证到硬件深度排查的高效调试链路,助力开发者深入学习和掌握底层ARM架构开发与调试技术。

xx56789的博客 229

十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域)

室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1、定位方案概述 1.1、内定位系统有最基本的5种算法: 1.2、常用的室内定位技术主要包括以下几种: 1.3、定位理论 1.4、不同的定位方案对比 2、各种定位方案详细介绍 2.1、单线激光定位 2.2、多线激光定位: 2.3、视觉定位: 2.4、基于射频识别(RFID)技术室内定位 2.4.1、RFID标签(不涉及...

JK-Cool的博客 3万+

Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版

@[TOC](Win10 配置STM32/GD32 GCC+VScode 编译环境总结(2021版,作者Cody) ) 引言 在嵌入式开发过程中, 之前都是用的是Keil-MDK, IAR, 商业开发环境. Keil MDK MDK被ARM收购以后,AC6 AC6 编译器的性能越来越给力.在官网的说明里,运行效率和代码体积都比开源编译器ARM-GCC好20%以上. IAR SYSTEMS IAR(一家来自瑞典的公司)的商业编译器在STM8,MSP430,CortexM3/4 下的表现都非常棒.

秋阳 Cody 优快云 2万+

【LaTex】LaTex的下载与安装(2025新手小白超详细、超简洁 Windows系统)

安装地点(1)texlive的安装:首先打开下载好的安装包,找到这个文件前面缺少了一页emm我去截取其他人的作为示范然后点击安装安装时间较久,大概要一个小时左右。具体要看个人电脑性能情况。如图显示如上图,则安装成功。图中是TeXstudio 4.8.7版本针对不同操作系统和使用场景的安装包 ,区别如下:(按需求下载)

爱学习的capoo的博客 5097

一文详解本地知识库RAG(检索增强):LangChain + Hugging Face 三件套 + 本地大模型 + MCP 协议 + Chroma + Agent 全流程实战

模型上下文协议(MCP)是 Anthropic 推出的开放标准,基于 JSON-RPC 2.0,为 AI 应用与外部工具/数据源之间提供统一的双向通信协议,被称为“AI 应用的 USB-C”。LangChain 是一个围绕 LLM、提示模板(Prompts)、记忆(Memory)、链(Chains)、工具(Tools)和代理(Agents)等组件打造的开源框架,旨在简化复杂自然语言应用的开发。:任意可调用的功能或服务(API、数据库查询、本地函数等),由 Agent 或 Chain 在推理过程中调用。

weixin_41645791的博客 1424

ARMv8-A 调试环境搭建

aarch64 架构的交叉编译器和gdb客户端Visual Studio Code 和 C语言插件qemu。

qq_36115224的博客 1723

爬虫实战:拆解WASM加密参数,破局2026电商动态接口反爬(实测某头部电商可用)

sign和wasm_token,而且每次请求这两个参数都在动态变化。用常规的参数拼接、MD5加密尝试还原,结果全是403;反编译前端JS,发现核心加密逻辑被打包成了.wasm,把关键参数加密、签名逻辑藏在二进制模块里,让爬虫无法直接逆向JS拿到加密规则。前后折腾了5天,从WASM文件解析、JS与WASM交互逻辑拆解,到本地还原加密参数、实战验证,踩了无数坑(比如WASM版本不兼容、内存数据读取失败、加密依赖环境缺失),最终成功还原了加密流程,稳定爬取商品详情、价格、销量等核心数据,连续运行72小时无封禁。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1913

SD烧写裸机程序

通过Uboot 下载裸机程序 ---------LED小刀初试 2013/4/15 1、这几天学习下载程序,由于各种问题(RVDS的安装,AXD的破解问题,AXF调试可执行文件),无法通过RVDS+AXD实现裸机程序运行调试。唯一可以使用的是RVDS自带的RVDEBUG软件进行寄存器的查看。 2、既然不能通过JLINK下载,借鉴SD卡Uboot可以烧写flash,那么也就可以烧写程序。所以

z251941074的专栏 2659

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

K210开发环境搭建进阶:从裸机SDK到CMake项目构建的深度解析

本文深入解析K210开发环境搭建,从裸机SDK到CMake项目构建的全过程。详细介绍了Kendryte工具链的独特设计、SDK的CMake构建机制,以及多项目管理和VSCode高效开发配置的实战技巧,帮助开发者快速掌握K210嵌入式开发的核心技术。

392

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: struct 内存对齐
下一篇: linuxcode_turing
atomicfox
博客等级 码龄18年 16粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值