嵌入式 uboot启动中被用户终止后死循环到哪问题的解析,tstc检测是否存在标准输入流

本文深入解析嵌入式U-Boot启动过程,特别是`tstc`函数用于检测标准输入流的存在。当用户在启动过程中终止操作,程序会进入一个循环,该循环涉及`main_loop`、`auto_complete`、`abortboot`函数等。`tstc()`用于检查按键中断,`bootdelay`用于设定延迟时间,允许用户在启动前按键进入命令行。此外,还介绍了自动补全功能和引导命令的处理机制。
摘要由CSDN通过智能技术生成

首先看一个函数“tstc”

{

1。main_loop

common/main.c

main_loop又臭又长,去掉宏注释掉的部分就只剩下一点点了。如下:

void main_loop (void)
{
#ifndef CONFIG_SYS_HUSH_PARSER
    static char lastcommand[CONFIG_SYS_CBSIZE] = { 0, };
    int len;
    int rc = 1;
    int flag;
#endif

#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
    char *s;
    int bootdelay;
#endif

#ifdef CONFIG_AUTO_COMPLETE
    install_auto_complete();  //安装自动补全的函数,分析如下 。
#endif

#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
    s = getenv ("bootdelay");
    bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;

    debug ("### main_loop entered: bootdelay=%d\n\n", bootdelay);


        s = getenv ("bootcmd"); //获取引导命令。分析见下面。

    debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");

    if (bootdelay >= 0 && s && !abortboot (bootdelay)) {//如果延时大于等于零,并且没有在延时过程中接收到按键,则引导内核。abortboot函数的分析见下面。 
        run_command (s, 0);            //运行引导内核的命令。这个命令是在配置头文件中定义的。run_command的分析在下面。执行bootcmd 命令
    }

#endif    /* CONFIG_BOOTDELAY */

    for (;;) {
        len = readline (CONFIG_SYS_PROMPT); //CONFIG_SYS_PROMPT的意思是回显字符,一般是“>”。这是由配置头文件定义的

        flag = 0;    /* assume no special flags for now */
        if (len > 0)
            strcpy (lastcommand, console_buffer); //保存输入的数据。 
        else if (len == 0)
            flag |= CMD_FLAG_REPEAT//如果输入数据为零,则重复执行上次的命令,如果上次输入的是一个命令的话

        if (len == -1)
            puts ("<INTERRUPT>\n");
        else
            rc = run_command (lastcommand, flag); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值