本篇继续学习:
使用Intel System Studio(ISS)来搭建远程调试目标机GDK7
尝试设置内核符号和源码
以及一些遇见的问题
必备环境
参考
需要目标机CPU支持JTAG调试;同时需要BIOS里打开DCI调试。
GDK7目标机是支持JTAG调试,并且BIOS默认是打开DCI的。
建立连接
启动ISS,使用默认的workspace目录或者自己选择自定义工作目录,点击Launch。
打开之后,选择右上角“Debug”选项。
- 点击左侧“New Connection…”建立新连接。
- 一直默认Next,到选择“Select a target”,选择CPU和连接方式。
- Next之后,选择Finish,默认将自动连接。
- 连接成功。
- 建立连接之后,下次就可以直接选择后点击“连接”按钮了,如下:
- 下面建立一个调试会话,点击下图“Debug”下拉->“Debug Configurations…”(同样,下次可直接使用)。
- 选择调试类型,修改名称
- 点击“Apply”,点击”Debug”开始调试,如下展示的信息:
- 这样,可以在左边的“Debug View”里面中断/恢复/单步了。我们右键“SPT0”然后选择“Suspend”,看到所有CPU都暂停了,汇编窗口也打开了。
至此,环境搭建结束。
如果要停止调试,ISS先Resume目标机,点击断开连接。(断下的情况下,重启目标机会出现后面说的情况)
尝试加入符号和源代码
在目标机上执行sudo cat /proc/kcore,在输出里面找到SYMBOL(_stext)=x,记录这个x,应该是内核的起始地址。
准备好内核符号文件和源码,可参考(https://blog.csdn.net/henly1217/article/details/107662054)来下载,然后执行readelf vmlinux-x.x.x –debug | grep DW_AT_comp_dir来获取编译路径,输出了路径就可以ctrl+c readelf了,比如我的vm-linux-5.3.0-62-generic是/build/linux-hwe-eg6_iE/linux-hwe-5.3.0。
准备就绪:
主机上已经有了源码目录和带符号的内核文件了;
记下了内涵起始地址;
记下了内核编译路径;
重新编辑一下gdk7-debug
- 选择“Symbol Files”,还要选择Debug context,指定哪个核?这里默认指定了第一个,然后点击Add…来添加:
- 选择内核符号路径,输入刚刚看到的内核地址,然后OK。
- 然后切换到Path Map属性表下,设置如下:
设置完成之后,点击Apply, 在点击Continue.
我们重新在Suspend一次目标机,看到的如下,汇编已经被源码替换了。“Debug View”的堆栈也清晰了,可以更方便地调试了。
出现的问题:
- 在连接过程中,出现“No CPU threads…”,主机的设备管理器是正常的。
问题重现:
- ISS中点击“连接”后的表现:
17:10:54 [WARN ] TCA (server) - IPCConnection: Error querying device information: No error occurred.
17:10:54 [WARN ] TCA (server) - IPCConnection: Warning: Failed to detect PCH/Uncore TAP on the target. System Debug and System Trace might not work properly.
同时在点击Debug启动调试的时候,出现“No CPU threads on the target”。
如下图,点击右上角的倒数第二个“System Trace”按钮查看“Target Connection”,发现“Target Status”:“No Power”, “Core Status”:“Unknown”。
- NanoCode中的表现:
16:44:05#JTAG:Unable to perform operation because there are no GPC threads in this domain
尝试解决:
搜索到
https://community.intel.com/t5/Intel-System-Studio/DCI-Connection-Problems/td-p/1160475
只是说BIOS是否开启DCI等等,GDK7默认是开启的。
尝试在主机ISS上删除连接,重新建立一个连接(一样的错误)
重启主机(还是一样的错误)
重启目标机??(这样现场就没有了???)(还是一样的错误)
等待明天来试试??
目标机关机,也拔电了,等待第二天来试试
第二天,结果,主机的设备管理器里面空空如也,没有发现“Intel DCI Transports(USB-Based)”,在“通用串行总线控制器”里面也没有发现设备。只能重新重启主机了。
- 重启主机,果然,设备正常了
- 下面使用ISS来连接目标机试试,成功连接了,虽然有其他报错。使用NanoCode来连接,也可以了。看到“Target Connection”里面的Target Status是OK,并且Core Status是Running,对比昨天是No Power和Unknown。
- 通过实验,发现不正常的断开调试和强制重启目标机可能会触发这个错误,比如:在目标机断下的情况下,强制关闭目标机。今天由于一次意外,在断下的过程中,主机程序出现意外,无法恢复目标机,只能强制重启目标机,结果启动之后,就出现了上面的错误,心想,又要等一天???那不行啊!!!我就又尝试关闭目标机,然后断电,过了几分钟,重新开机,连接,竟然好了~。
最后编辑:沈根成 更新时间:2024-12-09 10:54