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

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

概述


在嵌入式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\n");
        return 0;
    }

    /* 获取当前tty名称 */
    tty_name = ttyname(STDOUT_FILENO);
    printf("tty_name: %s\n", 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\n");
        return 0;
    }

    close(tty);
    return 0;
}


编译运行


编译

gcc  log.c -o log 


运行

./log on       #重定向日志输出到当前终端界面
./log off       #恢复日志输出到调试串口
目录
相关文章
|
Linux
【开发/调试工具】【串口工具】不同串口软件如何生成带时间戳的日志
【开发/调试工具】【串口工具】不同串口软件如何生成带时间戳的日志
1399 0
【开发/调试工具】【串口工具】不同串口软件如何生成带时间戳的日志
|
5月前
|
Linux
【GEC6818开发板】Linux驱动中printk无法在终端输出显示
【GEC6818开发板】Linux驱动中printk无法在终端输出显示
|
6月前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
253 1
|
6月前
|
Linux Android开发
Android 内核关闭CAN 串口设备回显功能
Android 内核关闭CAN 串口设备回显功能
46 0
|
Ubuntu Linux
usb摄像头驱动打印信息
usb摄像头驱动打印信息
214 0
|
C语言
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
267 0
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
|
存储
QT串口助手(串口的查找和打开)
QT串口助手(串口的查找和打开)
241 0
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
|
Linux
Linux串口驱动程序(3)-打开设备
Linux串口驱动程序(3)-打开设备先来分析一下串口打开的过程: 1、用户调用open函数打开串口设备文件;2、在内核中通过tty子系统,把open操作层层传递到串口驱动程序中;3、在串口驱动程序中的xx_open最终实现这个操作。
1144 0