在s3c2440上用GDB调试linux内核

前面的文章介绍了如何用ADS调试uboot,把uboot调通以后,引导linux,却发现怎么都没有打印log输出。ADS在打开mmu做过页面映射以后就无法追踪调试下去了,所以得用其他的方法进行追踪调试。网上有好多说可以用openocd来进行调试,也尝试了下这个方法,发现不好配置,连不上调试板,最终使用Jlink gdb成功调试,不过网上的资料都比较分散,这边做个笔记方便日后翻看。

我这边是在ubuntu上面进行调试的,所以需要先在ubuntu中安装jlink 驱动,找到一种感觉最小白的方法来安装jlink驱动:

https://blog.csdn.net/chile19/article/details/78980665

防止链接失效,把网址内容也贴下:

关于在Ubuntu安装JLink驱动的最简便方法

1、在JLink官网下载deb后缀,https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack


2、下载好后,复制到vmware的共享目录中

3、在ubuntu中,复制到家目录

4、直接打开“Files”图标,找到复制过来的deb文件,双击,然后选 install,就ok了

安装好jlink驱动以后,默认是安装在/opt/SEGGER/Jlink下面

在虚拟机上面,把jlink连接到虚拟机里面:

然后运行JLinkExe程序,如果看到cpu的相关信息,说明安装驱动成功:

对于2440的处理器,device要选择arm9,否则无法识别,其他的选项直接回车用默认值就好。

确认安装ok,就可以开始进行调试了,首先运行JLinkGDBServer -device arm9 命令,需要带上device参数,2440是arm9,不然无法工作:

Gdb server 起来以后,我们用arm-none-linux-gnueabi-gdb程序连上gdbserver,命令如下:

arm-none-linux-gnueabi-gdb vmlinux

不知道为什么,使用arm-linux-gdb无法打开连接,登录进gdb控制台以后,使用如下命令

target remote localhost:2331

连接上JlinkGdb server

然后使用  break start_kernel 命令打断点,其中start_kernel 是linux程序起来时执行的第一个c函数入口点,这时已经开启mmu了,使用的是段式映射,然后使用 continue 指令,让2440 程序继续执行下去。因为gdb刚连上时,2440 cpu会被停止住,需要运行contine 指令,才能在串口控制台上控制2440 download linux 内核,并引导内核,启动gdb的流程如下:

一切准备就绪,这个时候在 串口控制台下下载linux内核,并启动内核:

因为我在uboot 中设置tftpboot 的加载内存地址为0x31000000,所以执行bootm 0x31000000让uboot 去0x31000000去加载linux:

可以看到在booting the kernel 以后就没有打印信息了,booting the kernel 是在 自解压程序中打印出来的,还没有进入到 linux真正的kernel初始化部分,这个时候去看gdb界面,可以看到程序已经进入start_kernel的断点:

这个时候说明利用gdb调试 linux kernel是可行的,当然我也利用gdb调试器成功让kernel 打印出来信息,使得系统移植可以继续进行下去,3.10的kernel 对2440 处理器是有个坑的,唉,下面把gdb调试时一些比较实用的命令列出来(目前我用到的):

step        c语言级别的单步调试,进入函数

next         c语言级别的单步调试,不进入函数

si    汇编级别的单步调试,调试进入printascii 函数以后(其实这是用汇编写的),发现里面有些汇编用的是宏定义,使用si 只能看到停在某个宏定义外面,看不到在宏定义里面执行到哪句了,可以使用如下命令看到具体的汇编执行过程:

disassemble  显示当前的汇编程序

display /i $pc在每次执行下一条汇编语句时,都会显示出当前执行的语句

还可以使用  info registers 查看寄存器的值

monitor reset         可以让cpu reset ,从0地址开始重新执行

具体使用就记录这些,等移植完linux 以后再做一些笔记

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值