用skyeye仿真arm运行linux之问答
以下是Skyeye项目专栏版主chyyuu对我不清楚的一些问题的解答问:
这本书(指《源码开发的嵌入式系统软件分析与实践--基于SkyEye和ARM开发平台》)我也买了,大至翻了一下,确实值得一读。不过,恕我直言,skyeye(至0.8版本)用起来却感觉很不爽。其实,支持多少硬件平台、多少外设、加快仿真速度等等都不是最重要的,最重要的是让大家体验到linux是怎样在ARM上面跑起来的。
答:
wxzhuhua,多谢建议,不知你觉得如何能够让大家体验到linux是怎样在ARM上面跑起来的?是skyeye命令行的界面使用不方便,还是其它什么原因?
希望得到你的回答。
问:
比如说,我按你们书上238~242页所述,编译出一个带debug信息的uclinux的elf文件,然后用skyeye运行它,我希望从头开始单步运行(最好从boot开始),那么,在run之前我得设断点:
b main,答曰:not define;
list,显示了linux/arch/arm/kernel/init_task.c的程序,共28行
b 15, 答曰: no line
b 1~28,均答曰:no line
怎样才能如我希望那样运行呢?
答:试试 b start_kernel 多谢版主指点。 内核没有main函数。
你可以通过skyeye的信息察看启动的首地址。然后用"b *<首地址>"设置断点。然后可以用si单步运行。另外。b start_kernel也是一种方法。 多谢,期待你们早日推出emacs版本。 emacs版本是什么意思? skyeye计划利用emacs实现gdb图形界面,故称emacs版本。
skyeye似乎用skyeye.conf取代了arm的boot硬件设置,希望也可以不用skyeye.conf而直接进行raw boot。 我的意思是,虽然skyeye需要知道用户的硬件设置,但boot部分还是应该支持用户仿真。 关于这个问题,我想讨论一下. 您说的用户boot设置包括cpu寄存器设置,sdram初始化,flash程序的copy,mmu和cache的初始化,堆栈的初始化. 是这些吗?
无论如何,skyeye必须知道用户的memory和device的地址空间是如何分配的,这就是skyeye的作用. 至于flash和sdram的模拟,目前skyeye还没有. 可是这不需要skyeye仿真flash和sdram,skyeye只要知道这些东东的地址即可。
我觉得应该这样,用户告诉skyeye其外围设备的地址(或更准确一点,外围设备与arm芯片的引脚连接),然后skyeye据此信息仿真用户的boot程序,如果boot与地址信息不符,skyeye就按实际情况输出不符的结果(比如黑屏,无反应等等,有提示哪里出错当然更好)就行了。
其实数字电路的仿真,应该比较容易,许多芯片都提供IBIS模型,而skyeye连这个都不需要(目前),只要按理想状况考虑1、0和时序就行了(当然目前恐怕也未支持),主要是速度问题。 内核没有main函数。
你可以通过skyeye的信息察看启动的首地址。然后用"b *<首地址>"设置断点。然后可以用si单步运行。另外。b start_kernel也是一种方法。
这个?"b *<首地址>"怎么不好用啊?是偶的使用方法错了吗?本人新手,望大家给偶指点~
(SkyEye) load
Loading section .init, size 0xa000 vma 0x1000000
Loading section .text, size 0xc5c60 vma 0x100a000
Loading section .data, size 0x8320 vma 0x10d0000
Start address 0x1000000
Transfer rate: 7076864 bits/sec.
(SkyEye) b *<0x1000000>
A parse error in expression, near `<0x1000000>'.
(SkyEye) "b *<0x1000000>"
Undefined command: "".Try "help".
(SkyEye) b *<0x10d0000>
A parse error in expression, near `<0x10d0000>'.
(SkyEye) b start_kernel
Breakpoint 1 at 0x1000570: file init/main.c, line 363.
(SkyEye) b *<0x10d8321>
A parse error in expression, near `<0x10d8321>'.
(SkyEye) b *<0x10e0000>
A parse error in expression, near `<0x10e0000>' sorry,可能是表述有些歧义。"b *<首地址>",使用的时候,不需要<>。如应该“b *0x10e0000”。 呵呵,知道了,多谢斑竹。怪偶没有经验~ :-D:-D:-D 再提一个问题~
用skyeye模拟时用什么命令可以观察arm中寄存器的内容?可以吗?
页:
[1]