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


概述

在嵌入式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       #恢復日志輸出到調試串口 

歡迎關注個人微信公眾號:
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM