CodeViser是J&D Tech公司开发的一款JTAG仿真器,支持ARM和RISC-V等CPU 核。配套的CVD调试软件提供高效稳定的调试环境,支持源码级调试和强有力的脚本命令。本文讨论使用CodeViser 调试瑞芯微公司RK3399 多核芯片的过程,开发板使用华清FS3399 开发板。
RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数、浮点、内存等作了大幅优化,在整体性能、功耗及核心面积三个方面都具革命性提升。
04
Liunx Kernel 调试
1、按照华清FS3399的使用手册指导, 建立linux系统的虚拟机,按照第三章 Linux 系统编译中的说明,获取系统的所有源代码,在虚拟机中编译全系统所有代码,或者单独编译linux kernel,编译完成,将其打包拷贝到装有CVD64软件的机器上,并按照原始编译路径建立目录(例如:作者的路径为C:homelinux k3399_linux_sdk_v2.0),将linux kernel 源代码解压到所建立的目录中备用。
2、用串口如前所述,启动板子上的系统,按CTRL+C让其停在uboot环境中。
3、启动CVD64软件,进入Config->Interface中,在System选项卡中,点按UP命令,连上板子,进入Debug模式。
4、用Program->Load命令加载C:homelinux k3399_linux_sdk_v2.0kernelvmlinux,注意:选择 No-code。
开始加载源代码,由于源代码较多,加载需要一段时间。可以选择No-code,不下载板子上的代码。
5、点按工具条上的黄箭头显示源代码,
6、从菜单Symbol -> Symbol by Name -> Symbol 或点按工具条黄箭头右侧的一个图标,打开Symbol Browse View视图如下图:
7、在Symbol Browse View视图中输入:start_kernel, 然后,回车,就可以显示Debug List View,我们可以看到显示如下:我们在包含start_kernel这行设置一个断点,
8、然后, 按当前窗口的Go命令,或按工具条上的Go 按钮,最后我们进入串口窗口,输入:run bootcmd 回车。
这时,我们在串口窗口中可以看到,程序停在 Starting kernel ...的地方,这时我们就可以调试linux kernel的程序了。
9、这时我们可以在start_kernel 下面的语句设置断点,如下图:我们按两次本窗口上的Go命令,程序就停在了518行上了。
05
多核调试
多核调试需要在多核启动以后才能调试,以下我们演示SMP 调试。我们就需要在多核启动完成后的smp_cpus_done函数处设置一个断点,选择System Browser View 视图,输入smp_cpus_done, 回车,
将会在Debug List View视图中,弹出smp_cpus_done函数,在此处设置一个断点。
在上面调试linux Kernel时,停在start_kernel以后,再点击图上工具栏上的运行按钮或或调试视图中Go按钮,继续运行, 程序就会停在smp_cpus_done函数处,
这时我们看串口中断信息;
这时我们双击下面工具条上的core选择core1,这时下面工具条上已经显示的是core1了,说明Debug List View中已经是core1的程序了。
单步调试后,就跳到下图
这时我们返回core0,继续调试一些步骤,我们可以自动进入core4调试程序,
到第860多行以后程序自动进入了core4,我们可以看下图的下面的工具条上这时显示的是core4,
以上就是对称多处理调试,也就是SMP调试简单的说明。CodeViser 也支持 AMP 调试,有机会在其他芯片平台上我们再作详细说明。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !