• 嵌入式串口打印信息重定向到当前终端界面


    概述

    在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录到现场设备,想看程序的实时打印的调试信息,需要将输出到串口的调试信息重定向到当前登录的终端界面上。

    也可以将程序重新启动到当前终端界面,但是在程序出现问题时,如果重启程序,可能会破坏了问题现场,再查找问题就不好查找了。

    下面是实现的代码,可以将输出到串口的日志信息,重定向到当前的telnet或者ssh界面上,是不是很神奇!

    实现代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
        int tty = -1;
        char *tty_name = NULL;
    
        if(argc < 2)
        {
            printf("miss argument
    ");
            return 0;
        }
    
        /* 获取当前tty名称 */
        tty_name = ttyname(STDOUT_FILENO);
        printf("tty_name: %s
    ", tty_name);
    
        if(!strcmp(argv[1], "on"))
        {
            /* 重定向console到当前tty */
            tty = open(tty_name, O_RDONLY | O_WRONLY);
            ioctl(tty, TIOCCONS);
            perror("ioctl TIOCCONS");
        }
        else if(!strcmp(argv[1], "off"))
        {
            /* 恢复console */
            tty = open("/dev/console", O_RDONLY | O_WRONLY);
            ioctl(tty, TIOCCONS);
            perror("ioctl TIOCCONS");
        }
        else
        {
            printf("error argument
    ");
            return 0;
        }
    
        close(tty);
        return 0;
    }
    
    

    编译运行

    编译

    gcc  log.c -o log 
    

    运行

    ./log on       #重定向日志输出到当前终端界面
    
    ./log off       #恢复日志输出到调试串口 
    

    欢迎关注个人微信公众号:
    在这里插入图片描述

  • 相关阅读:
    redis运维手册
    grafana展示ES中的nginx日志-地图展示
    nginx针对yum安装nginx重编译
    K8S-yaml里初始化容器
    K8S-资源配置清单补充1
    K8S-资源配置清单详解
    Docker cp 提示“no space left on device”
    磁盘
    ansible 对文件内容的操作
    ansible 初始化系统分区格式化
  • 原文地址:https://www.cnblogs.com/fensnote/p/13436441.html
Copyright © 2020-2023  润新知