在2440上用GDB调试linux内核

匿名 (未验证) 提交于 2019-12-02 21:56:30

前面的文章介绍了如何用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

一切准备就绪,这个时候在 串口控制台下下载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调试时一些比较实用的命令列出来(目前我用到的):

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

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

文章来源: https://blog.csdn.net/oqqYuJi12345678/article/details/91886661
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!