"S3C2410移植Linux2.6.27 系统时钟慢8倍!"——解决方法

原帖:http://topic.csdn.net/u/20081125/17/f47176f4-b310-4ae0-b232-ad972fc870e5.html

rssn_net:

我为S3C2410平台成功移植了2.6.27内核,busybox和文件系统也都做好了,可是我发现系统中所有与时间有关的操作都不正确,延时大约慢8倍,例如,运行 “sleep 1s” 命令,时间为8秒,ping命令的时间间隔也为8秒
我估计是时钟参数不正确,但不知道应该如何修改,请朋友们指正,谢谢!
有没有人遇到同样的问题啊?这个问题实在是困扰我很长时间了~~~

-----------------------------------------------------------------

回复1:我觉得这个问题是你的bootloader 出了问题,你到bootloader源码里找找 设置时钟的地方去检查一下 ,或许你就发现问题所以啦

回复2:请问 楼主的问题解决了没有?我也遇到同样的问题啊。我怀疑不是Bootloader那里设置有什么错误,因为同一个Bootloader我引导以前的内核linux2.6.25没有任何问题。而且新的内核2.6.27我跑另一个at91sam9260的板子一点问题都没有,怀疑针对2410和2440的有部分时钟代码作了修改。关键还是那个时钟心跳tick()跑的很慢,定时器4每次产生的中断好像都变慢了。

回复3:你的s3c2410的板子有没有其他的系统,比如wince,如果有的话看看里面的时钟是否也会有这样的问题,
如果有的话,则应该是硬件方面的问题了,
如果没有的话,应该是你的linux内核中的RTC驱动可能不是很正确,看看这部分的代码。

------------------------------------------------------------------

 

问题分析与解决:

首先,排除Bootloader的可能,我把vivi重新编译了一遍,vivi中的sleep()延时很准确,我认为系统时钟的参数不可能是从vivi继承过来的,因为所有设备在Linux内核启动时都要初始化一次,所有参数都要重新设置,所以不可能是Bootloader的问题。

其次,RTC驱动没有问题,RTC 跟 System Clock 是不同的,我的RTC时钟走得很准,而且每次内核启动都会自动读取RTC时间,将其配置为系统当前时间,只是之后的所有时间都慢了8倍。

前天在一位朋友的帮助下,问题得到解决,方法如下:

问题出在内核对pwm定时器的初始化上,源文件linux/arch/arm/plat-s3c24xx/time.c 存在bug,找到: 


    /* configure clock tick*/ timer_usec_ticks= timer_mask_usec_ticks(6, pclk);

    tcfg1
&= ~
S3C2410_TCFG1_MUX4_MASK;
    tcfg1
|=
S3C2410_TCFG1_MUX4_DIV2;

    tcfg0
&= ~
S3C2410_TCFG_PRESCALER1_MASK;
    tcfg0
|= ((6 - 1)/ 2)<<
S3C2410_TCFG_PRESCALER1_SHIFT;

   
tcnt= (pclk/ 6)/ HZ;

}

 
 

tcnt = (pclk / 6) / HZ; 改为 tcnt = (pclk / 48) / HZ;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值