QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3969|回复: 10

求助:死在Calibrating delay loop...

[复制链接]
发表于 2006-4-25 16:55:07 | 显示全部楼层 |阅读模式
运行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处理器补丁,编译正常. 请问是什么问题呀
发表于 2006-4-26 10:07:19 | 显示全部楼层
我上次也是这样 问题现在还没有解决
你可以ctrl+c停掉,然后where看在哪里循环
我的问题是一直在中断,中断好像处理不过来

你可以把Calibrating这里的这个函数去掉
然后把sti开中断晚点 这样就能多看见点信息了
如果停在哪个地方了就敲键盘,说不定可以继续下去
回复

使用道具 举报

发表于 2006-4-27 21:44:50 | 显示全部楼层
中断没有打开。。你的补丁是哪里来的??是LPC2229系列么?
回复

使用道具 举报

发表于 2006-4-28 08:57:26 | 显示全部楼层
我上次遇到这种情况是中断已经打开了 但linux在不断的嵌套进入中断
ctrl+c停掉 用where一看
发现无数的 _irq_svc
回复

使用道具 举报

 楼主| 发表于 2006-4-28 21:37:58 | 显示全部楼层
真的是好方法. 因为我用的是新版本的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;
这不是一个死循环吗?大概是有中断吧. 我想我应该是已经打开了中断,因为前面也有类似的语句, 只开了中断才能跳出循环. 我应该从何入手调试呢? 请指教.
回复

使用道具 举报

发表于 2006-4-29 08:52:25 | 显示全部楼层
开中断后jiffies会自加
中断是前面打开的,这个函数是计算cpu的mips
不知道停住后用where看到了哪些函数调用堆栈

你可以用p jiffies来打印jiffies的值
然后和ticks比较 看是不是可以跳出这里
回复

使用道具 举报

 楼主| 发表于 2006-4-29 11:10:32 | 显示全部楼层
Program received signal SIGINT, Interrupt.
calibrate_delay () at init/main.c:220
220                     while (ticks == jiffies)

(SkyEye) where
#0  calibrate_delay () at init/main.c:220
#1  0x81008608 in start_kernel () at init/main.c:438

(SkyEye) p jiffies
$1 = 0
(SkyEye) p ticks
$2 = 0

看上去好像跳不出去呀.

系统用jiffies全局变量记录了从系统开始工作到现在为止,所经过的滴答数。它会被内核自动更新。
但显示的 jiffies = 0 , 那是否是因为初始化没做好呢?
回复

使用道具 举报

发表于 2006-4-29 11:58:33 | 显示全部楼层
那可能你中断没有开 或者时钟驱动程序没有正确设置
“我曾为uclinux打了一个philip的lpc处理器补丁”
如果你没有改过内核的话,应该是你打的这个补丁的问题
请确认skyeye支持你打的这个补丁的处理器
回复

使用道具 举报

 楼主| 发表于 2006-4-30 19:43:47 | 显示全部楼层
我在skyeye.org上看到,,skyeye是支持LPC22xx的.

如果是我中断没有开 或者时钟驱动程序没有正确设置,那应该在哪个文件里面修改呢?
"然后把sti开中断晚点 这样就能多看见点信息了"  sti() 这个函数的原型在哪个文件里的呀?
谢谢
回复

使用道具 举报

发表于 2008-4-1 11:32:19 | 显示全部楼层

出现死循环

我用的是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

出现如下错误:
[root@localhost uClinux-dist]# 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, typenull))
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 = 0x01000000  size = 0x0000a000.
load section .text: addr = 0x0100a000  size = 0x000d8e90.
load section .data: addr = 0x010e4000  size = 0x00009ba4.
not load section .bss: addr = 0x010edbc0  size = 0x00022060 .
not load section .debug_abbrev: addr = 0x00000000  size = 0x0003ca29 .
not load section .debug_info: addr = 0x00000000  size = 0x018232c6 .
not load section .debug_line: addr = 0x00000000  size = 0x002cb191 .
not load section .debug_pubnames: addr = 0x00000000  size = 0x0000c09d .
not load section .debug_aranges: addr = 0x00000000  size = 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 ([email=root@localhost]root@localhost[/email]) (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 ([email=root@localhost]root@localhost[/email]) (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... [root@localhost uClinux-dist]#


不断的出现循环,请高手指点。。。谢谢!
回复

使用道具 举报

发表于 2008-4-1 12:19:38 | 显示全部楼层

已经改正

去掉skyeye.conf中的“lcd: state=on”即可

可不知道为什么。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 01:22 , Processed in 0.041889 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表