skyeye仿真xscale,没有任何输出!
内核源代码: linux-2.4.19patch: patch-2.4.19-rmk6 和 diff-2.4.19-rmk6-pxa1
1. patch -p1 <patch-2.4.19-rmk6
2. patch -p1 <diff-2.4.19-rmk6-pxa1
3. make lubbock_config
4 .make oldconfig
5. make dep
6. make zImage
7. 将顶层目录中的vmlinux copy到skyeye的测试目录:
testsuits/xscale/xs_only_imagekernel_1/中,skyeye.conf没有做任何改动
8. 运行skyeye
9. 进入skyeye后,执行file=vmlinux
10. 执行target=sim
11. 执行load
12. 执行run
skyeye显示:
Starting program: /usr/src/myEmdOs/testsuits/xscale/xs_only_imagekernel_1/vmlinux
就停在那里了.怎么回事啊 自己恢复一下把.
刚才有做了一些实验,所有进展啊.
按照 精华版中的"skyeye xscale 仿真错误"一文,又做了实验, 终于可以看到输出了.
但奇怪的是在运行到
Kernel command line: mem=64M root=/dev/ram ramdisk=8192 ramdisk_start=0xc1000000 console=ttyS0,115200
Console: colour dummy device 80x30
这一行时, 又停在那里不动了. 正在调试跟踪呢.
对了,我在编译内核的时候,因为出现一个链接错误,所以把顶层Makefile中的
DRIVERS-y += drivers/serial/serial.o \
drivers/char/char.o \
drivers/block/block.o \
drivers/misc/misc.o \
drivers/net/net.o \
# drivers/media/media.o
的最后一行 "drivers/media/media.o" 给注释掉了,也就是说内核没有把
media.o文件链接进去. 这里提到的问题是不是跟这点有关啊 我用skyeye跑pxa linux,kernel用zImage形式时,可以运行。用vmlinux时,就没有输出,而且安ctrl+c,发现运行的地址也不对,0xc12bc440!
这是不可能出现的地址,虚拟地址到不了那里。
我用的是skyeye-0.7.4,linux-2.4.19-rmk7-pxa2。
请问qqsky是怎么用的呢?能否将你的kernel .config和skyeye.conf发给我参考一下?
非常感谢,[email protected]
(SkyEye) target sim
cpu info: xscale, xscale, 69052100, fffffff0, 2
mach info: name pxa_lubbock, mach_init addr 0x814166c
lcd info: turn off lcd!
SKYEYE: use xscale mmu ops
load
r
Loaded ROM ./initrd.img
Connected to the simulator.
(SkyEye) load
Loading section .init, size 0x13000 vma 0xc0008000
Loading section .text, size 0x120da4 vma 0xc001b000
Loading section .kstrtab, size 0x447c vma 0xc013bda4
Loading section __ex_table, size 0x860 vma 0xc0140220
Loading section __ksymtab, size 0x2168 vma 0xc0140a80
Loading section .data, size 0x10d70 vma 0xc0144000
Start address 0xc0008000
Transfer rate: 10865344 bits/sec.
(SkyEye) r
Starting program: /root/pxaLinux/vmlinux
Program received signal SIGINT, Interrupt.
0xc12bc440 in ?? ()
(SkyEye) 目前,不能直接只用vmlinux调试。需要zImage和vmlinux配合才行。
因为生成vmlinux用到的ld命令文件中,指定的是虚拟地址0Xc.......,而不是
物理地址0Xa.... 但生成zImage的ld命令文件,指定的是物理地址0Xa....
在MMU和CACHE没有enable之前,是不能直接执行vmlinux的。
比如你编译出了zImage和vmlinux,
skyeye.conf不变(注意有zImage的一行要加boot=yes),然后执行如下命令
$skyeye /somepath/vmlinux
(SkyEye)tar s
(SkyEye)run
等有linux的输出出来以后,按ctrl+c
就可以看到执行到什么地方的源码了。 哦,ep7312那个vmlinux可以直接执行和跟踪调试,是因为那是uclinux!!!
它的Start address 0xc0028000,就是物理地址。
那对于我的pxa的vmlinux,只要让skyeye从物理地址0xa0008000开始执行不就可以了吗?物理地址0xa0008000对应kernel mmu起来后的0xc0008000虚拟地址。
可是,如何让skyeye从0xa0008000开始执行呢? 首先,声明一下在"很多问题不明白,请高手解答一下吧, 感激不尽!"一文中提到的内核编译问题已经解决了,需要使用binutils-2.12.1版本,而不能用binutils-2.11或者是bintutils-2.13版本. gcc使用gcc-3.2版本,glibc用glibc-2.2.5. 就可以编译了.
然后,我做了几次实验,发现一个奇怪的问题:
1)用上面的编译器进行内核编译后,生成一个vmlinux和boot目录下的zImage文件.直接用zImage进行仿真,skyeye提示说"not in executable format: File format not recognized".
2)然后,用vmlinux进行仿真,如果用下面的步骤的话,就没有任何输出:
(SkyEye) file vmlinux
(SkyEye) target sim
(SkyEye) load
(SkyEye) run
但是如果用下面的步骤的话,就会有输出:
(SkyEye) file vmlinux
(SkyEye) target sim
(SkyEye) run
这时skyeye提示:
Starting program: /usr/src/myEmdOs/testsuits/xscale/xs_only_imagekernel_1/vmlinux
warning: No program loaded.
然后,按ctrl+c, 再执行load,最后执行run. 就会出现上面的输出,但到了
Kernel command line: mem=64M root=/dev/ram ramdisk=8192 ramdisk_start=0xc1000000 console=ttyS0,115200
Console: colour dummy device 80x30
这一行后,就停在那里不动了.
查看源代码,问题好像是出在控制台初始化部分con_init()中,具体还不知道是不是?
我的疑问是为什么在skyeye中用不同的执行步骤,会有不同的结果呢?
最后,dengyl,我已经给你发过去了,请多多指正吧
页:
[1]