当前位置: 技术问答>linux和unix
[求助]S3C2410移植Linux2.6.27 系统时钟慢8倍!
来源: 互联网 发布时间:2016-05-04
本文导语: 我为S3C2410平台成功移植了2.6.27内核,busybox和文件系统也都做好了,可是我发现系统中所有与时间有关的操作都不正确,延时大约慢8倍,例如,运行 “sleep 1s” 命令,时间为8秒,ping命令的时间间隔也为8秒 我估计是时钟参...
我为S3C2410平台成功移植了2.6.27内核,busybox和文件系统也都做好了,可是我发现系统中所有与时间有关的操作都不正确,延时大约慢8倍,例如,运行 “sleep 1s” 命令,时间为8秒,ping命令的时间间隔也为8秒
我估计是时钟参数不正确,但不知道应该如何修改,请朋友们指正,谢谢!
有没有人遇到同样的问题啊?这个问题实在是困扰我很长时间了~~~
|
请问 楼主的问题解决了没有?我也遇到同样的问题啊。我怀疑不是Bootloader那里设置有什么错误,因为同一个Bootloader我引导以前的内核linux2.6.25没有任何问题。而且新的内核2.6.27我跑另一个at91sam9260的板子一点问题都没有,怀疑针对2410和2440的有部分时钟代码作了修改。关键还是那个时钟心跳tick()跑的很慢,定时器4每次产生的中断好像都变慢了。
|
其中pll 包含两种: MPLL 主要应用于各种设备时钟的提供,将重点讨论
UPLL 应用于USB时钟频率应用,为48M
其中MPLL的设置主要依靠使用各种锁相环和分频器来改变输入原始的频率,经过锁相环之后可以提升频率,关于频率的选择主要依靠改变CPU寄存器实现,MPLLCON通过改变其中的参数设置即可
Mpll = (m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
MPLL就是要得到的频率,我建议用参考手册给定的频率设置即可,标准之际。
接下来该设置各种设备的频率:
我所认为的MPLL分出三种模式:FCLK、HCLK、PCLK
这三种也应用于不同的场合,FCLK应用于CPU的时钟,HCLK用于AHB bus各种外围设备,PCLK 用于APB bus各种接口设备。
其中FCLK 应用就是MPLL的频率,一样的,不用设置的。
HCLK 可以设置为FCLK或FCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位HDIVN即可,其中HDIVN为0时对应FCLK,为1时对应FCLK/2
PCLK可以设置为HCLK或HCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位PDIVN即可,其中PDIVN为0时对应HCLK,为1时对应HCLK/2
If HDIVN=1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN=1 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK. This feature can be used to change the CPU frequency as a half without affecting the HCLK and PCLK.
以上这段文字也是讲关于写协处理器来控制协调内部总线和外部总线的关系,不过原文有点不太明白,又不敢把错的意思表达出来,贻害众生,只好原文照搬后谈点看法,我感觉是当HCLK中设置为FCLK/2 时必须协调与内部总线关系,至于同步非同步还要通过协处理器来管理,这样就可以很好的协调各种总线的关系了,当出现HDIVN=1和CPU总线被设为快速非同步模式时,CPU(我认为是总线频率)可以完全依靠HCLK提供频率,因此将会改变CPU频率时不会影响到其它的变化。
今天看数据手册时有发现了几点没有发现的东西,主要是关于协处理器的。
ARM920T 竟然有两种输入时钟方式,FCLK 和BCLK ,其中BCLK 主要提供给AMBA
Bus的,可也可以通过选择协处理器的R1的NF,iA位来选择是否供是时钟给核ARM920T,才明白上面所述的
UPLL 应用于USB时钟频率应用,为48M
其中MPLL的设置主要依靠使用各种锁相环和分频器来改变输入原始的频率,经过锁相环之后可以提升频率,关于频率的选择主要依靠改变CPU寄存器实现,MPLLCON通过改变其中的参数设置即可
Mpll = (m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
MPLL就是要得到的频率,我建议用参考手册给定的频率设置即可,标准之际。
接下来该设置各种设备的频率:
我所认为的MPLL分出三种模式:FCLK、HCLK、PCLK
这三种也应用于不同的场合,FCLK应用于CPU的时钟,HCLK用于AHB bus各种外围设备,PCLK 用于APB bus各种接口设备。
其中FCLK 应用就是MPLL的频率,一样的,不用设置的。
HCLK 可以设置为FCLK或FCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位HDIVN即可,其中HDIVN为0时对应FCLK,为1时对应FCLK/2
PCLK可以设置为HCLK或HCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位PDIVN即可,其中PDIVN为0时对应HCLK,为1时对应HCLK/2
If HDIVN=1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN=1 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK. This feature can be used to change the CPU frequency as a half without affecting the HCLK and PCLK.
以上这段文字也是讲关于写协处理器来控制协调内部总线和外部总线的关系,不过原文有点不太明白,又不敢把错的意思表达出来,贻害众生,只好原文照搬后谈点看法,我感觉是当HCLK中设置为FCLK/2 时必须协调与内部总线关系,至于同步非同步还要通过协处理器来管理,这样就可以很好的协调各种总线的关系了,当出现HDIVN=1和CPU总线被设为快速非同步模式时,CPU(我认为是总线频率)可以完全依靠HCLK提供频率,因此将会改变CPU频率时不会影响到其它的变化。
今天看数据手册时有发现了几点没有发现的东西,主要是关于协处理器的。
ARM920T 竟然有两种输入时钟方式,FCLK 和BCLK ,其中BCLK 主要提供给AMBA
Bus的,可也可以通过选择协处理器的R1的NF,iA位来选择是否供是时钟给核ARM920T,才明白上面所述的
|
你的s3c2410的板子有没有其他的系统,比如wince,如果有的话看看里面的时钟是否也会有这样的问题,
如果有的话,则应该是硬件方面的问题了,
如果没有的话,应该是你的linux内核中的RTC驱动可能不是很正确,看看这部分的代码。
如果有的话,则应该是硬件方面的问题了,
如果没有的话,应该是你的linux内核中的RTC驱动可能不是很正确,看看这部分的代码。
|
不过,我觉得这个问题是你的bootloader 出了问题
你到bootloader源码里找找 设置时钟的地方去检查一下 ,或许你就发现问题所以啦
Good luck
你到bootloader源码里找找 设置时钟的地方去检查一下 ,或许你就发现问题所以啦
Good luck