各位好!
最近有部分客户反馈一个kernel解压后没有起来,其具体情况为:
1、RTC部分按照disable RTC的管脚设置进行设计。
具体该部分引脚连接参考schematics checklist , http://processors.wiki.ti.com/index.php/AM335x_Schematic_Checklist#RTC
2. 使用SDK-06.00.00.00
问题表现是:
u-boot能够正常跑起来,而在引导kernel启动时,发现卡在kernel解压之后,如
Uncompressing Linux… done, booting the kerne
对于上述问题的分析及解决方法:
由于设置internal RTC disabled,而在kernel中没有取消register。
解决方法:
(1)需要在.config中注释掉以下设置:CONFIG_RTC_DRV_OMAP
具体实现,需要在menuconfig中的Device driversàReal Time Clock中去掉选中。
(2) 在HWMOD中取消RTC部分的注册
在linux源码的arch/arm/mach-omap2/omap-hwmod-33xx_data.c中进行修改:
在结构体中am33xx_hwmods[]
注释掉:
/* rtc class */
&am33xx_rtc_hwmod,
同时,对于此问题,还有其他原因也可导致,可以从如下方面分析:
(1)DDR是否稳定: 因为解压kernel会频率操作DDR,如果DDR不够稳定,会造成在解压时kernel的某些数据出错,从而导致无法启动kernel。
如DDR3,解决核对DDR3的相关配置参数,同时记得做SW leveling。
(2)其他原因:可以参考如下链接
http://processors.wiki.ti.com/index.php/Kernel_-_Common_Problems_Booting_Linux
Eric Zhang:
以前我也遇到了,开earlyprintk,发现卡在rtc上,然后把omap-hwmod-33xx_data.c中关于rtc的东西都注释掉了,然后内核就跑起来了,就是这个问题。
Eric Zhang:
http://e2e.ti.com/support/arm/sitara_arm/f/791/t/270550.aspx
这哥们应该也是同样的问题,如果他还没解决你可以跟他说一声
Gino E:
各位,
借gary这个帖子,我再补充一种由于RTC的原因导致系统无法启动(或者有一定几率无法启动)的情况和解决方法。我说的这种问题是发生在MLO阶段.
出现这种问题的原因是,RTC相关的上电时序没有符合数据手册的要求。多数是RTC_Reset时间过长,在POWERON_RESET信号拉高后才被拉高。事实上这种设计并不会影响芯片的上电启动(除非PMIC需要由PMIC_POWER_EN触发,如AM335x GPEVM设计),芯片也可以正常输出”cccc”。 但是由于芯片在MLO的s_init函数里会对rtc进行一次初始化。如下截图,
因为红框中的rtc->kick0r & rtc->kick1r寄存器属于RTC domain. 如果当系统对这两个寄存器访问时,RTC domain由于复位的原因还处于不可用的状态,这时整个系统就会出现假死现象。可以看到这可以是个很临界的情况。实际环境由于存在PCB制版的问题,不同板子上RTC reset拉高时间上可能会存在一定差异,于是就有可能导致变成板子概率性无法启动。
解决方案很简单,
硬件设计上保证RTC reset时序符合数据手册需求
软件上在MLO里屏蔽对RTC寄存器的读写。(会diable rtc功能)
jiew:
回复 Gino E:
我們的版子,沒使用RTC
依照上面作法,可以正常進入rootfs
但是仍然會有一些錯誤訊息
…
udhcpc (v1.20.2) startedSending discover…Sending discover…Sending discover…No lease, failingdone.hwclock: can't open '/dev/misc/rtc': No such file or directoryTue Jun 25 23:08:00 UTC 2013hwclock: can't open '/dev/misc/rtc': No such file or directoryINIT: Entering runlevel: 5Starting system message bus: dbus.Starting telnet daemon.hwclock: can't open '/dev/misc/rtc': No such file or directoryStarting syslogd/klogd: doneStarting thttpd.
…
請問該如何修改hwclock.sh呢????????
/etc/init.d/hwclock.sh
Yaoming Qin:
回复 jiew:
这些都只是warning吧
yunbo zhang:
回复 Yaoming Qin:
学习了!