This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

初始化L138 RTC导致 "Uncompressing Linux... done, booting the kernel." 不能启动linux



TI技术支持工程师你好!

      我公司现在 用TI 提供的LCDK开发板文件试小批量生产,SDK也是TI网站上下载的,linux 3.3.0,u-boot也是此SDK提供的,现在发现有些板能正常启动linux,有些板子则停止在“Uncompressing Linux... done, booting the kernel. ”不动了。

NAND:  512 MiB
MMC:   davinci: 0
Bad block table found at page 262080, version 0x01
Bad block table found at page 262016, version 0x01
In:    serial
Out:   serial
Err:   serial
Net:   DaVinci-EMAC
Hit a 'f' or 'F' key to stop autoboot:  0

Loading from nand0, offset 0x200000
   Image Name:   Linux-3.3.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2332896 Bytes = 2.2 MiB
   Load Address: c0008000
   Entry Point:  c0008000
## Booting kernel from Legacy Image at c0700000 ...
   Image Name:   Linux-3.3.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2332896 Bytes = 2.2 MiB
   Load Address: c0008000
   Entry Point:  c0008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

在u-boot下,用查看内存,经过跟踪调试发现是

static __init void omapl138_lcdk_init(void)
{
 int ret;

 davinci_serial_init(&omapl138_lcdk_uart_config);

 /*
  * shut down uart 0 and 1; they are not used on this board and
  * accessing them causes endless "too much work in irq53" messages
  * with arago fs
  */
 __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30);
 __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30);

 omapl138_lcdk_config_emac();

 ret = da850_register_edma(da850_edma_rsv);
 pr_info("INIT: da850_register_edma\n");

 if (ret)
  pr_warning("%s: EDMA registration failed: %d\n",
   __func__, ret);

 omapl138_lcdk_mmc_init();
 pr_info("INIT: omapl138_lcdk_mmc_init\n");

 omapl138_lcdk_usb_init();
 pr_info("INIT: omapl138_lcdk_usb_init\n");

 ret = da8xx_register_watchdog();
 pr_info("INIT: da8xx_register_watchdog\n");
 if (ret)
  pr_warning("omapl138_lcdk_init: "
   "watchdog registration failed: %d\n",
   ret);

 ret = da8xx_register_rtc();
 pr_info("INIT: da850_register_rtc\n");

......

}

是停止在 da8xx_register_rtc()  此函数不动了,屏蔽此函数则可以了,为什么会这样的呢?