在嵌入式开发中,我们都是使用串口进行调试定位问题。然而在成品调试或者远程调试时,没有串口,只能telnet进去,少了很多应用进程的打印,这样就不利于我们发现问题。需要一种方法把串口所有输出重定向到telnet。

  这就涉及到一些终端概念,可以参考上篇博文linux下tty, ttyn, pts, pty, ttySn, console理解。主要是利用tty的ioctl重定向方法来实现重定向,下面直接贴代码:

/************************************************************
Copyright (C), 2017, Leon, All Rights Reserved.
FileName: console_redirect.c
Description: console输出重定向
Author: Leon
Version: 1.0
Date: 2017-2-6 15:33:12
Function:
History:
<author>    <time>  <version>   <description>
 Leon
************************************************************//*
    内核的打印不能重定向过来,应用层打印可以重定向打印过来
    查看内核的打印,cat /proc/kmsg,在输出完缓冲区内容后,会阻塞卡住,内核有新的输出时会继续输出。
    如果要把内核打印到telnet,那么需要修改printk.c。
    kernel和user空间下都有一个console,关系到kernel下printk的方向和user下printf的方向,实现差别很大。
    kernel下的console是输入输出设备driver中实现的简单的输出console,只实现write函数,并且是直接输出到设备。
    user空间下的console,实际就是tty的一个特殊实现,大多数操作函数都继承tty,所以对于console的读写,都是由kernel的tty层来最终发送到设备。
*/#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;
}
  • 使用
    交叉编译tftp进板子,然后telnet进去,用on参数执行这个程序就好了

  • 内核打印到telnet的思考
    内核的打印没有走tty的中间层,直接在printk哪儿调用了注册设备的write方法。如果要把printk打印到telnet,那么就需要分析下printk实现代码。自己改了下在printk输出时把数据重新写到/dev/console的这种方法,因为对printk逻辑不清楚,锁处理会产生问题,造成死锁或者系统挂掉。

linux重定向串口打印到telnet相关推荐

  1. 嵌入式Linux关闭串口打印-屏蔽串口打印

    公司某些产品可能涉及一些敏感信息,如芯片选型,参数配置,调试信息.不想让客户或者竞争对手看到.需要将串口打印信息屏蔽掉.最后以关闭内核和串口打印的方案最合适,稍加改动就可以实现.笔记记录如下: 以hi ...

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

    转至 https://blog.csdn.net/wuquan_1230/article/details/105782687 概述 在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录 ...

  3. STC15单片机-串口打印printf重定向

    printf函数重定向为往串口打印信息 在UART.h.UART1.h和UART.c文件的内容编写好后,在main函数中实现通过串口发送一串字符串和一个不断加1的变量 方法一: 使用sprintf函数 ...

  4. linux内核串口日志抓取-minicom工具使用方法

    linux抓串口日志 抓串口日志方式 minicom保存串口日志log 抓取主板串口日志 minicom man手册 抓串口日志方式 1) 问题机上,找到串口设备,比如/dev/ttyAMA[0,1, ...

  5. STM32 KEIL 串口打印printf使用详解

    常规打印方法 在STM32的应用中,我们常常对printf进行重定向的方式来把打印信息printf到我们的串口助手. 在MDK环境中,我们常常使用MicroLIB+fputc的方式实现串口打印功能,即 ...

  6. 读芯片信息出错3_十分钟看懂串口打印信息(1)

    一.软件串口打印信息加载流程 不管何种机芯方案,在上电开机后,软件 总会初始化复位和加载相关内容和应用,这部 分的信息通常我们采用串口工具来进行读写的 操作. 针对我们工作的需求和作为问题处理的可 靠 ...

  7. linux虚拟串口及远程访问

    1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...

  8. 基于STM32F103——DS1302日期时间+串口打印

    DS1302时钟模块串口打印 DS1302时钟模块相关介绍 基本介绍 概述 特点 各引脚功能 相关寄存器 时序图 单字节写时序 单字节读时序 时钟/日历多字节(Burst)方式 BCD转十进制和十进制 ...

  9. Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于C SDK的ESP8266开发技术全系列笔记 一.N ...

最新文章

  1. BlockChain:互联网与区块链之间的那些事(P2P下载、P-CDN、分布式计算、社交媒体、P2P借贷、众筹、区块链、自组织)
  2. Windows 下OpenSSL 安装详解 +图解
  3. Chrome调试模拟iPhone6时body显示980*1742
  4. C#线程 ---- 线程同步详解
  5. el-select回显
  6. QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法
  7. Oracle 9i 在 Red Hat 7.1 和 7.2 上的装配
  8. TypeScript入门教程 之 点差算子/散布运算符/...运算符/剩余参数/...参数
  9. A站有一个页面需要PV统计 A站读写该数据 B站读该数据 需要数据同步
  10. 炸掉卡西欧991CNX
  11. 知乎热榜:如何看待华为天才少年年薪201万?
  12. 手动配置apache php,windows下手动搭建apache和php环境
  13. 用集合实现二分(折半)查找
  14. java后台接收参数_java 后台如何 接收 uploader UploadFileOptions 参数
  15. libgdx学习记录5——演员Actor
  16. 将系统常用程序一次性的都安装到位
  17. 苹果开放降级通道_今天下午 iOS 降级通道打开?骗子!
  18. win10环境下Android SDK下载安装及配置教程
  19. 菜鸟到大神的上位历程,即学即用走向人生巅峰
  20. 返回一字节中某一位的值

热门文章

  1. led投屏软件_SmartDrop——LED/LCD大屏内容投屏管理软件
  2. 动态阈值_如何设置数据看板(大屏)数据异常报警的动态阈值
  3. 响应式 Web 设计 - 媒体查询
  4. CC攻击及其解决方法
  5. c# DESEncrypt 加密、解密算法
  6. HDU 4714 Tree2cycle:贪心
  7. *2.3.2_加入env
  8. 【零基础学Java】—自定义异常(四十八)
  9. 如何优雅的起个变量名?
  10. 人类一败涂地电脑版_《漫威复仇者联盟》帧数对比丨PS4《人类一败涂地》新地图上线...