linux重定向串口打印到telnet
在嵌入式开发中,我们都是使用串口进行调试定位问题。然而在成品调试或者远程调试时,没有串口,只能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相关推荐
- 嵌入式Linux关闭串口打印-屏蔽串口打印
公司某些产品可能涉及一些敏感信息,如芯片选型,参数配置,调试信息.不想让客户或者竞争对手看到.需要将串口打印信息屏蔽掉.最后以关闭内核和串口打印的方案最合适,稍加改动就可以实现.笔记记录如下: 以hi ...
- 嵌入式串口打印信息重定向到当前终端界面
转至 https://blog.csdn.net/wuquan_1230/article/details/105782687 概述 在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录 ...
- STC15单片机-串口打印printf重定向
printf函数重定向为往串口打印信息 在UART.h.UART1.h和UART.c文件的内容编写好后,在main函数中实现通过串口发送一串字符串和一个不断加1的变量 方法一: 使用sprintf函数 ...
- linux内核串口日志抓取-minicom工具使用方法
linux抓串口日志 抓串口日志方式 minicom保存串口日志log 抓取主板串口日志 minicom man手册 抓串口日志方式 1) 问题机上,找到串口设备,比如/dev/ttyAMA[0,1, ...
- STM32 KEIL 串口打印printf使用详解
常规打印方法 在STM32的应用中,我们常常对printf进行重定向的方式来把打印信息printf到我们的串口助手. 在MDK环境中,我们常常使用MicroLIB+fputc的方式实现串口打印功能,即 ...
- 读芯片信息出错3_十分钟看懂串口打印信息(1)
一.软件串口打印信息加载流程 不管何种机芯方案,在上电开机后,软件 总会初始化复位和加载相关内容和应用,这部 分的信息通常我们采用串口工具来进行读写的 操作. 针对我们工作的需求和作为问题处理的可 靠 ...
- linux虚拟串口及远程访问
1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...
- 基于STM32F103——DS1302日期时间+串口打印
DS1302时钟模块串口打印 DS1302时钟模块相关介绍 基本介绍 概述 特点 各引脚功能 相关寄存器 时序图 单字节写时序 单字节读时序 时钟/日历多字节(Burst)方式 BCD转十进制和十进制 ...
- Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于C SDK的ESP8266开发技术全系列笔记 一.N ...
最新文章
- BlockChain:互联网与区块链之间的那些事(P2P下载、P-CDN、分布式计算、社交媒体、P2P借贷、众筹、区块链、自组织)
- Windows 下OpenSSL 安装详解 +图解
- Chrome调试模拟iPhone6时body显示980*1742
- C#线程 ---- 线程同步详解
- el-select回显
- QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法
- Oracle 9i 在 Red Hat 7.1 和 7.2 上的装配
- TypeScript入门教程 之 点差算子/散布运算符/...运算符/剩余参数/...参数
- A站有一个页面需要PV统计 A站读写该数据 B站读该数据 需要数据同步
- 炸掉卡西欧991CNX
- 知乎热榜:如何看待华为天才少年年薪201万?
- 手动配置apache php,windows下手动搭建apache和php环境
- 用集合实现二分(折半)查找
- java后台接收参数_java 后台如何 接收 uploader UploadFileOptions 参数
- libgdx学习记录5——演员Actor
- 将系统常用程序一次性的都安装到位
- 苹果开放降级通道_今天下午 iOS 降级通道打开?骗子!
- win10环境下Android SDK下载安装及配置教程
- 菜鸟到大神的上位历程,即学即用走向人生巅峰
- 返回一字节中某一位的值
热门文章
- led投屏软件_SmartDrop——LED/LCD大屏内容投屏管理软件
- 动态阈值_如何设置数据看板(大屏)数据异常报警的动态阈值
- 响应式 Web 设计 - 媒体查询
- CC攻击及其解决方法
- c# DESEncrypt 加密、解密算法
- HDU 4714 Tree2cycle:贪心
- *2.3.2_加入env
- 【零基础学Java】—自定义异常(四十八)
- 如何优雅的起个变量名?
- 人类一败涂地电脑版_《漫威复仇者联盟》帧数对比丨PS4《人类一败涂地》新地图上线...