linux上使用J-Link调试S3C2440裸机代码

工具:

  1. segger的jlink仿真器
  2. segger的jlink for linux
  3. 交叉编译工具链里面的arm-xx-linux-xx-gdb
  4. 初始化脚本

工具安装

segger的jlink for linux

进入Segger官网--->Download--->J-Link/J-Trace--->J-Link Software and Documentation Pack。有deb、rpm、tgz三种包可供选择,随便选一个,我选的是tgz。由于我的仿真器是和谐版,所以我不敢选择高版本的J-Link,选择Older versions。下载一个比较老的,我下的是最老的。

解压至你要安装的目录。里面有个README.txt,安装说明操作。安装完了为方便起见,记得export一下PATH。

交叉编译工具链里面的arm-xx-linux-xx-gdb

这个不多介绍,你想自己编译就编译,想用别人制作好的也行。

初始化脚本

此初始化脚本是给arm-xx-linux-xx-gdb用的,gdb可以通过-x file.cmd从文件里面指定命令序列。具体如下:

#初始化 S3C2440 CPU.

#定义一个函数(功能块)
define reset_s3c2440
##设置小端模式,要和你跑的裸机程序一致.
monitor endian little ##copied from JLinkGDBServer Document.
monitor reset #复位 S3C2440
monitor reg cpsr = 0xd3 #设置 cpsr 寄存器.
monitor speed auto #Link Speed.
end ##main function defined for connect to the TARGET.
##arg0 = IP地址.
##arg1 = JLinkGDBServer端口号.
define connect_s3c2440
if $argc == 2
target remote $arg0:$arg1
reset_s3c2440
end
end

大概就是通过IP:PORT连接上JLinkGDBServer,然后下发一系列的指令初始化s3c2440。这些指令也可以手动逐个敲进去。

工作原理介绍

参考gdb工作原理

本地调试搞linux都熟悉。有时候由于资源限制、或者目标机不在现场,就需要借助gdbserver做远程调试。可以这样理解,gdb是由gdb前端和gdb后台组成,gdb前端负责和用户交互,gdb后台负责和操作ptrace,在远程调试时gdbserver提供一个后台和一个通讯接口与本地的gdb前端交互。gdb和gdbserver之间可以通过串口,usb,tcp/ip来通讯。一般来说gdbserver远远小于gdb,所以资源限制情况下直接放一个gdbserver到目标机里面,然后远程调试。

JLinkGDBServer

JLinkGDBServer又相当于把gdbserver---->ptrace---->target替换成了gdbserver---->jlink--->jlink调试器---->target。JLink还有好多好玩的工具J-Link Remote Server、J-Link Commander、J-Link RTT Viewer、J-Link SWO Viewer等等。

调试步骤

1.代码

https://github.com/tanghammer/mini2440_peripherals.git

2.硬件连线

按照jlink仿真器接线方式,启动方式选择NorFlash。

3.烧录程序

Windows下操作:

  • 启动J-Flash
  • file--->open project--->打开s3c2440.jflash
  • file--->open data file--->选择要烧录的bin文件
  • F7(Auto)

这样程序就烧录到了Norflash,下面是s3c2440.jflash分享链接。

链接:https://pan.baidu.com/s/17QSzRdSOImYv3LM1UROqiw

提取码:vazg

4.启动JLinkGDBServer

直接执行命令JLinkGDBServer

5.启动GDB

arm-none-linux-gnueabi-gdb -x s3c2440_init -ex "connect_s3c2440 192.168.20.156 2331" ./sdram_elf

6.开始调试

load
b main
c

linux上使用J-Link调试S3C2440裸机代码的更多相关文章

  1. LINUX上使用GDB单步调试Chromium Android C++代码。

    ###动机###在LINUX使用GDB单步调试Chromium Android C++代码. [1]编译android平台Chromium, 修改GN文件中编译选项:-g -O0 使得编译优化更少,便 ...

  2. Windows下fabric sdk连接Linux上fabric网络的调试过程

    上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台.团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工 ...

  3. Zeta Linux上进行WiFi Direct调试

    1)叫醒p2p网卡 ifconfig p2p0 up   2)启动wpa_supplicant服务 wpa_supplicant -Dnl80211 -ip2p0 -c /etc/wpa_suppli ...

  4. s3c2440裸机-代码重定位(1.重定位的引入,为什么要代码重定位)

    1.重定位的引入(为什么要代码重定位) 我们知道s3c2440的cpu从0地址开始取指令执行,当从nor启动时,0地址对应nor,nor可以像内存一样读,但不能像内存一样写.我们能够从nor上取指令执 ...

  5. s3c2440裸机-代码重定位(2.编程实现代码重定位)

    代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm-linux-ld -Ttext 0 -Tdata ...

  6. linux poi生成excel demo调试附调用代码

    1.下载poi-3.9-20121203.jar包 2.java code package com.userpackage; import java.io.FileOutputStream; impo ...

  7. s3c2440裸机-代码重定位、清bss的改进和位置无关码

    1.代码重定位的改进 用ldr.str代替ldrb, strb加快代码重定位的速度. 前面重定位时,我们使用的是ldrb命令从的Nor Flash读取1字节数据,再用strb命令将1字节数据写到SDR ...

  8. Linux上的SQL Server的起步

    我们知道,几个星期前,微软发布了在Linux上直接运行的SQL Server第一个公开CTP版本!因此,对我来说,是时候跨界在Linux上安装我的第一个SQL安装,这样的话,我就可以在Linux上折腾 ...

  9. 一分钟搞定pychram远程调试和同步代码

    首先说一下需求,否则很多人都不知道pycharm这个远程同步和调试到底是干嘛使的. 需求很简单,我想要在本地的windows机器上跑一个程序,但是程序运行会加载一些很占内存的树型数据结构,称其为tre ...

随机推荐

  1. JavaScript&jQuery 基本使用

    * 最近连续加班加点三周* 遭不住了 ...* 来点 js / jq 的货* 一个人撸PHP 撸HTML 撸CSS 撸JavaScript 撸jQuery* 不管有没有用记录一下** 1:jQuery ...

  2. php_Trait

    * Trait Answer* Trait : 关键字 Trait* 使用 use* 我的理解 是为了解决php不能多继承的一个处理方式* 在使用的时候 可以让两个不相关的类 产生联系* Trait ...

  3. UEditor代码实现高亮显示

    在公司开发一个论坛系统,由于用的是UEditor(百度编辑器),单独使用的话,里面的代码不会高亮,网上找了很多,最后决定使用 highlight.js 实现代码高亮显示.效果如下: 这个是我修改其他的 ...

  4. (待整理)flume操作----------hivelogsToHDFS案例----------运行时,发生NoClassDefFoundError错误

    1. 2.错误日志 命令为 bin/flume-ng agent --name a2 --conf conf/ --conf-file job/file-hdfs.conf Info: Sourcin ...

  5. 解决WinScp连接被拒绝的问题

    尝试以下方法: 1) 开启|关闭防火墙(这里需要关闭) sudo ufw enable|disable 2) 开启远程服务 在终端界面输入:service sshd start.结果显示:ssh:un ...

  6. 佛山Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 几个常用的轻量级web服务

    Node.js 安装:npm install http-server 使用:hs命令,可启动以当前目前为webroot的8080端口web服务,也可指定端口 Python 安装:内置 使用:pytho ...

  8. libevent学习一

    常见的异步IO存在的问题:   1.使用 fcntl(fd, F_SETFL, O_NONBLOCK);,为什么在处理上效率不好.       a.在没有数据可读写的时候,循环会不停执行,浪费掉大部分 ...

  9. uvaoj 133 - The Dole Queue(逻辑,环形队列数数)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. hdu1869六度分离(floyd)

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...