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


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

    工具:

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

    工具安装

    进入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
    

  • 相关阅读:
    100行代码实现了多线程,批量写入,文件分块的日志方法
    阿里云客户端开发技巧
    阿里云客户端的实现(支持文件分块,断点续传,进度,速度,倒计时显示)
    类库间无项目引用时,在编译时拷贝DLL
    数据库-锁的实践
    Node.js学习资料
    文档流转,文档操作,文档归档(一)
    滑动验证码研究-后续
    iTextSharp 116秒处理6G的文件
    在职场中混,"讲演稿"的重要性
  • 原文地址:https://www.cnblogs.com/thammer/p/10543328.html
Copyright © 2020-2023  润新知