免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3638 | 回复: 16
打印 上一主题 下一主题

u-boot启动过程无法中止 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-13 20:29 |只看该作者 |倒序浏览
最近做u-boot移植,超级终端上出现“Hit any key to stop autoboot:3",这时按键,不能中止内核的自动引导。按正常情况下是在规定的3s中按键就进入命令交互模式。

这是什么原因?请高手指点

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2009-04-13 22:12 |只看该作者
正常情况下是按任意键进入commandline的,不按的话自动引导了

论坛徽章:
5
3 [报告]
发表于 2009-04-13 22:15 |只看该作者
delay的时间是3s吗? 如果设置成0,还没来得及按键,就boot kernel了

论坛徽章:
0
4 [报告]
发表于 2009-04-13 22:30 |只看该作者
谢谢回复!
但问题是按任何键都不能进入commandline
以下是我的serial_getc()函数
int serial_getc (void) /*位于cpu/pxa/serial.c*/
{
#ifdef CONFIG_FFUART
        while (!(FFLSR & LSR_DR))
                WATCHDOG_RESET ();        /* Reset HW Watchdog, if needed */
        return (char) FFRBR & 0xff;
}
我分析问题可能是按键后,FFLSR中  LSR_DR位始终为0(正常情况下是1)
如果是这样的话,那么如何才能保证按任意键后FFLSR寄存器中的LSR_DR位为1呢?

论坛徽章:
0
5 [报告]
发表于 2009-04-13 22:33 |只看该作者
补充,bootdelay这里设置的是3s,最后变成2、1、0,然后引导内核,
问题就是中间按任何键都不起作用

论坛徽章:
5
6 [报告]
发表于 2009-04-13 22:37 |只看该作者

回复 #5 feiying2006 的帖子

这么说,就是按键不起作用了,没有获取按键。

论坛徽章:
5
7 [报告]
发表于 2009-04-13 22:40 |只看该作者
#ifdef CONFIG_FFUART
        while (!(FFLSR & LSR_DR))
                WATCHDOG_RESET ();        /* Reset HW Watchdog, if needed */
        return (char) FFRBR & 0xff;

是你漏写了#endif 吗

论坛徽章:
0
8 [报告]
发表于 2009-04-14 09:02 |只看该作者
不是endif的问题,自己只是截了serial_getc()中关于FFUART的一部分代码,由于疏忽,没有将endif写上,抱歉!
内核启动后,按键是起作用的,这说明串口硬件是正常的,那么是u-boot中串口程序有问题了
但不知道怎么修改
问题再做一次总结:u-boot中串口tstc()和getc()不起作用,而putc()和puts()是起作用的

论坛徽章:
5
9 [报告]
发表于 2009-04-14 09:12 |只看该作者

  1. int serial_tstc (void)
  2. {
  3. #ifdef CONFIG_FFUART
  4.         return FFLSR & LSR_DR;
  5. #elif defined(CONFIG_BTUART)
  6.         return BTLSR & LSR_DR;
  7. #elif defined(CONFIG_STUART)
  8.         return STLSR & LSR_DR;
  9. #endif
  10. }

  11. /* Full Function UART (FFUART) */
  12. #define FFUART                FFRBR
  13. #define FFRBR                __REG(0x40100000)  /* Receive Buffer Register (read only) */
  14. #define FFTHR                __REG(0x40100000)  /* Transmit Holding Register (write only) */
  15. #define FFIER                __REG(0x40100004)  /* Interrupt Enable Register (read/write) */
  16. #define FFIIR                __REG(0x40100008)  /* Interrupt ID Register (read only) */
  17. #define FFFCR                __REG(0x40100008)  /* FIFO Control Register (write only) */
  18. #define FFLCR                __REG(0x4010000C)  /* Line Control Register (read/write) */
  19. #define FFMCR                __REG(0x40100010)  /* Modem Control Register (read/write) */
  20. #define FFLSR                __REG(0x40100014)  /* Line Status Register (read only) */
  21. #define FFMSR                __REG(0x40100018)  /* Modem Status Register (read only) */
  22. #define FFSPR                __REG(0x4010001C)  /* Scratch Pad Register (read/write) */
  23. #define FFISR                __REG(0x40100020)  /* Infrared Selection Register (read/write) */
  24. #define FFDLL                __REG(0x40100000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
  25. #define FFDLH                __REG(0x40100004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */


复制代码

Q1,这几个宏, 定义了哪个?
Q2,你是使用PXA吗?
Q3,上面的这些寄存器地址是否有变化?

论坛徽章:
5
10 [报告]
发表于 2009-04-14 09:16 |只看该作者
putc 和 getc, 除了寄存器和IO方向有区别,本身没啥区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP