调试的时候怎么没有armsimulator的symbol?
请问用skyeye调试的时候只有linux的调试信息,而没有arm simulator的symbol,如mem_reset。skyeye编译的时候有?g -O2为什么没有呢,应该怎么修改呢,版主。 skyeye本身就是一个应用程序,只不过这个应用程序可以让你看见你的操作系统,如何在arm体系结构的cpu上运行的. 可以单步执行你的程序.你调试操作系统的时候,就像用gdb调试一个普通程序一样 .所以 你这个问题我们可以翻译为:
我在用gdb调试helloworld.c程序的时候怎么只有helloworld的程序,而没有gdb本省的调试信息呢.及时你用gcc -g自己生成了一个自己的gdb调试器,在用这个调试你的helloworld.c程序, 也不会有gdb的符号信息,不过当你用gdb调试你带符号的gdb时 ,就会有gdb的符号信息了
所以用用skyeye调试程序时 不会有skyeye的符号信息, 你可以在skyeye中输出一些你希望观察到的信息. skyeye不仅仅是一个gdb,应该是一个gdb和arm simulator的组合,我在用skyeye调试linux内核的时候也想了解skyeye与linux内核的接口和skyeye的内部实现细节,我的意思是我是想调试skyeye的arm simulator部分而不是它的gdb部分,在skyeye的分析报告中是可以的啊。 skyeye中关于arm simulator 部分大多数都在skyeye/sim/arm/
里面有很多文件 skyeye的各个开发办的程序都在这下面,你要是想了解
skyeye的架构的话 ,做好向看看skyeye相关文档,在看里面的源代码
在里面 skyeye相关文件都是以skyeye开头命名的,
这里我告诉你几个比较关键的文件中的函数
remote-sim
wrapper中的init()函数调用,里面skyeye的初始化工作都在里面展开,
建议跟踪init路线读下去,就差不多能够理解了
还有一个就是armemu.c
ARMul_Emulate32 (ARMul_State * state)
#else
ARMul_Emulate26 (ARMul_State * state)
#endif这是一个对arm cpu指令节的模拟, 和一个对处理外设的io_do_cyle()的调用
你要是牛的话
可以全部看该函数,理解cpu是怎么工作的, 这是当 我们在skyeye中输入
命令run, step,next等命令时调用的,
skyeye开头的函数比较好理解,难理解的地方大都是对硬件的处理上面
其他对于gdb命令的扩充如targetsim都在skyeye/gdb/remote-sim.c目录下实现的
Good Luck !
最好的理解方式就是直接看它的实现代码 谢谢你的帮助!
是我理解上有些问题,现在我用GDB调试SKYEYE,而在同时SKYEYE运行调试uClinux.
看skyeye的代码也是最近的事情,突然有了塌实的感觉,看了关键的数据结构和一些模块的实现对于
ARMul_Emulate32 (ARMul_State * state) 和
ARMul_Emulate26 (ARMul_State * state)
我想以后再看,现在用SKYEYE可以帮助我调试嵌入设备的驱动程序.
对于使用skyeye和研究skyeye的实现你还有什么建议,希望和你交流! 理解skyeye比较好的方式是直接看里面的源代码
里面是对sim目录下时对硬件的模拟,认真分析几个开发板
会对你理解硬件体系结构有很大的好处。
如果你有兴趣的话, 可以看看里面的gdb的实现
you do, you understand
页:
[1]