前面的文章介绍了如何用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 以后再做一些笔记