这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 产品化的u-boot

共3条 1/1 1 跳转至

产品化的u-boot

菜鸟
2008-03-24 11:01:00     打赏

我看到很多产品在启动的时候,需要按空格键几秒钟进入U-boot,并且串口这时候才有显示。请问这是如何实现的呢?

我现在的情况是刚开始就有显示,并且默认是按任何键就可以进入u-boot。

u-boot中代码我找到了这个地方:
static __inline__ int abortboot(int bootdelay)
{
int abort = 0;

#ifdef CONFIG_SILENT_CONSOLE
{
DECLARE_GLOBAL_DATA_PTR;

if (gd->flags & GD_FLG_SILENT) {
/* Restore serial console */
console_assign (stdout, "serial");
console_assign (stderr, "serial");
}
}
#endif

#ifdef CONFIG_MENUPROMPT
printf(CONFIG_MENUPROMPT, bootdelay);
#else
printf("Hit any key to stop autoboot: %2d ", bootdelay);
#endif

#if defined CONFIG_ZERO_BOOTDELAY_CHECK
/*
* Check if key already pressed
* Don't check if bootdelay < 0
*/
if (bootdelay >= 0) {
if (tstc()) { /* we got a key press */
(void) getc(); /* consume input */
puts ("\b\b\b 0");
abort = 1; /* don't auto boot */
}
}
#endif

while ((bootdelay > 0) && (!abort)) {
int i;

--bootdelay;
/* delay 100 * 10ms */
for (i=0; !abort && i<100; ++i) {
if (tstc()) { /* we got a key press */
abort = 1; /* don't auto boot */
bootdelay = 0; /* no more delay */
# ifdef CONFIG_MENUKEY
menukey = getc();
# else
(void) getc(); /* consume input */
# endif
break;
}
udelay (10000);
}

printf ("\b\b\b%2d ", bootdelay);
}

putc ('\n');

#ifdef CONFIG_SILENT_CONSOLE
{
DECLARE_GLOBAL_DATA_PTR;

if (abort) {
/* permanently enable normal console output */
gd->flags &= ~(GD_FLG_SILENT);
} else if (gd->flags & GD_FLG_SILENT) {
/* Restore silent console */
console_assign (stdout, "nulldev");
console_assign (stderr, "nulldev");
}
}
#endif

return abort;
}

其实我这边主要有两个问题:
1.如果检测用户按空格几秒钟了,然后退出自动启动?
2.如何在启动的时候不把输出信息打印到串口上,后来通过检测到用户按键来把打印信息又输出来?




关键词: 产品化     u-boot    

菜鸟
2008-03-24 11:05:01     打赏
2楼
1 - 其实这个时间相对来说不是那么严格,你只需大概等待一段时间就可以了;
2 - 在程序里,如果按任何键都推出自动启动,肯定是你没有判断是那个按键。

菜鸟
2008-03-24 15:13:17     打赏
3楼

很感谢您的回复。

1.对于按什么键自动退出,这个好实现,我可以判断键值就可以了,但是如何判断这个按键多长时间呢?你的意思是等待一段时间就可以了,那这个怎么实现呢?

2.如果控制串口信息的输出,如何实现呢?即如何做到按键一段时间后,才从串口输出信息?


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]