求助:死在Calibrating delay loop...
运行skyeye装载编译好的uclinux内核时,执行画面Linux version 2.4.24-uc0 (root@localhost) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and
shared lib patches from http://www.snapgear.com/)) #1 四 4月 20 10:52:54 CST 2006
Processor: philip lpc2200 revision 14
Architecture: zlg-arm-linux
Ignoring unrecognised tag 0x00000000
On node 0 totalpages: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/ram
Calibrating delay loop...
然后就一直不动了.我曾为uclinux打了一个philip的lpc处理器补丁,编译正常. 请问是什么问题呀 我上次也是这样 问题现在还没有解决
你可以ctrl+c停掉,然后where看在哪里循环
我的问题是一直在中断,中断好像处理不过来
你可以把Calibrating这里的这个函数去掉
然后把sti开中断晚点 这样就能多看见点信息了
如果停在哪个地方了就敲键盘,说不定可以继续下去 中断没有打开。。你的补丁是哪里来的??是LPC2229系列么? 我上次遇到这种情况是中断已经打开了 但linux在不断的嵌套进入中断
ctrl+c停掉 用where一看
发现无数的 _irq_svc 真的是好方法. 因为我用的是新版本的skyeye, 用 skyeye -e ./linux一个命令代替了
skyeye linux
target sim
load
run
不好的地方是, 不会出现<skyeye> 一按ctrl+c就退回linux下了.
换了个久的skyeye , 发现死在init/main.c 中的220行,也就是下面的while (ticks == jiffies) 这一行.
while (loops_per_jiffy <<= 1) {
/* wait for "start of" clock tick */
ticks = jiffies;
while (ticks == jiffies)
/* nothing */;
/* Go .. */
ticks = jiffies;
__delay(loops_per_jiffy);
ticks = jiffies - ticks;
if (ticks)
break;
}
再细看,
while (ticks == jiffies)
/* nothing */;
/* Go .. */
ticks = jiffies;
这不是一个死循环吗?大概是有中断吧. 我想我应该是已经打开了中断,因为前面也有类似的语句, 只开了中断才能跳出循环. 我应该从何入手调试呢? 请指教. 开中断后jiffies会自加
中断是前面打开的,这个函数是计算cpu的mips
不知道停住后用where看到了哪些函数调用堆栈
你可以用p jiffies来打印jiffies的值
然后和ticks比较 看是不是可以跳出这里 Program received signal SIGINT, Interrupt.
calibrate_delay () at init/main.c:220
220 while (ticks == jiffies)
(SkyEye) where
#0calibrate_delay () at init/main.c:220
#10x81008608 in start_kernel () at init/main.c:438
(SkyEye) p jiffies
$1 = 0
(SkyEye) p ticks
$2 = 0
看上去好像跳不出去呀.
系统用jiffies全局变量记录了从系统开始工作到现在为止,所经过的滴答数。它会被内核自动更新。
但显示的 jiffies = 0 , 那是否是因为初始化没做好呢? 那可能你中断没有开 或者时钟驱动程序没有正确设置
“我曾为uclinux打了一个philip的lpc处理器补丁”
如果你没有改过内核的话,应该是你打的这个补丁的问题
请确认skyeye支持你打的这个补丁的处理器 我在skyeye.org上看到,,skyeye是支持LPC22xx的.
如果是我中断没有开 或者时钟驱动程序没有正确设置,那应该在哪个文件里面修改呢?
"然后把sti开中断晚点 这样就能多看见点信息了"sti() 这个函数的原型在哪个文件里的呀?
谢谢
出现死循环
我用的是skyeye1.2.4源码包是:uClinux-dist-20041215.tar.gz
配置uClinux时:
Vendor/Product: GDB/ARMulator
Kernel Version: linux-2.4.x
Libc Version: uC-libc
skyeye.conf:
cpu: arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
lcd: state=on
执行:skyeye -e linux-2.4.x/linux
出现如下错误:
# skyeye -e linux-2.4.x/linux
big_endian is false.
arch: arm
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0
mach info: name at91, mach_init addr 0x8079ff0
can't find device module: (name:lcd, type:(null))
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use arm7100 mmu ops
Loaded ROM images/romfs.img
exec file "linux-2.4.x/linux"'s format is elf32-little.
load section .init: addr = 0x01000000size = 0x0000a000.
load section .text: addr = 0x0100a000size = 0x000d8e90.
load section .data: addr = 0x010e4000size = 0x00009ba4.
not load section .bss: addr = 0x010edbc0size = 0x00022060 .
not load section .debug_abbrev: addr = 0x00000000size = 0x0003ca29 .
not load section .debug_info: addr = 0x00000000size = 0x018232c6 .
not load section .debug_line: addr = 0x00000000size = 0x002cb191 .
not load section .debug_pubnames: addr = 0x00000000size = 0x0000c09d .
not load section .debug_aranges: addr = 0x00000000size = 0x000023f0 .
call ARMul_InitSymTable,kernel filename is linux-2.4.x/linux.
start addr is set to 0x01000000 by exec file.
Linux version 2.4.27-uc1 (root@localhost) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #1 二 4月 1 10:30:44 CST 2008
Processor: Atmel AT91M40xxx revision 0
Architecture: EB01
On node 0 totalpages: 1024
zone(0): 0 pages.
zone(1): 1024 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0
Calibrating delay loop... Linux version 2.4.27-uc1 (root@localhost) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #1 二 4月 1 10:30:44 CST 2008
Processor: Atmel AT91M40xxx revision 0
Architecture: EB01
Ignoring unrecognised tag 0x00000000
On node 0 totalpages: 1024
zone(0): 0 pages.
zone(1): 1024 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0
Calibrating delay loop... #
不断的出现循环,请高手指点。。。谢谢!
已经改正
去掉skyeye.conf中的“lcd: state=on”即可可不知道为什么。。。
页:
[1]