项目中用到串口通信,但是这个串口也用于控制台。为了保证串口通信时不能有控制台发出的消息,需要关闭打印。

在测试过程中发现,有三种类型的打印,一是uboot的打印,在Starting kernel ...之前的打印都是;二是prink的打印,linux kernel不能用printf,对应的输出函数是printk,它的实现在kernel/printk.c中;三是应用层的printf。

1、去掉printk打印

在linux内核中的/kernel目录下printk.c文件中有一个函数:

static void __call_console_drivers(unsigned long start, unsigned long end)

{

struct console *con;

for (con = console_drivers; con; con = con->next) {

if ((con->flags & CON_ENABLED) && con->write)

con->write(con, &LOG_BUF(start), end - start);

}

}

去掉如下两行重新编译内核即可:

if ((con->flags & CON_ENABLED) && con->write)

con->write(con, &LOG_BUF(start), end - start);

2、标准输出、标准错误输出重定向

int main() {

int pid = 0;

// fork a worker process

if (pid = fork()) {

// wait for completion of the child process

int status;

waitpid(pid, &status, 0);

}

else {

// open /dev/null

int fd_null = open("/dev/null",O_RDWR);

if(dup2(fd_null, 1) == -1)

return 1;

if(dup2(fd_null, 2) == -1)

return 1;

XX_run();

}

return 0;

}

我将标准输出和错误输出重定向到/dev/null中

如果我没有将输出重定向,只是关闭输出,close(1) close(2),程序经常出现错误,这个还需要继续研究。

linux关闭串口控制台输入,关闭Linux中的串口打印相关推荐

  1. 在控制台输入一个整数,根据整数打印一个矩形 (Python)

    #在控制台输入一个整数,根据整数打印一个矩形 number = int(input("请输入整数:")) # 头 print( "*"* number) # 中 ...

  2. linux安装定制添加输入,Arch Linux--定制自己的Linux操作系統(乙-國際化桌面安裝篇)...

    Arch Linux--定制自己的Linux操作系統 ----乙-國際化&桌面安裝篇 相信大家看了<甲-安裝篇>之後,Arch Linux系統已經可以正常運行了吧?不過,Arch ...

  3. c# wifi串口通信_在C#中实现串口通信的方法

    通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册,不在本文讨论范围.可以访问h ...

  4. linux的vi命令输入C,Linux中C语言简单实现之vi篇(详细内容)

    一.vi编辑器介绍 vi是UNIX和Linux操作系统使用的全屏幕文本编辑器,任何一台安装了UNIX或Linux的计算机都会提供vi编辑器,是一个功能强大的编辑器. 1.vi有三种操作模式:命令模式. ...

  5. linux 监控命令行输入,监控 Linux 容器性能的命令行神器

    ctop是一个新的基于命令行的工具,它可用于在容器层级监控进程.容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境.该工具从cgroup收集与内存.CPU.块输入输出的 ...

  6. linux重启was控制台报错,Linux非WAS部署,启动报错Cannot run program \lsb_release\

    Linux非WAS部署,启动报错Cannot run program "lsb_release" 已确认 tools.jar 文件是当前 linux 中的 jdk 下的 jar 文 ...

  7. linux svn配置提交输入备注,linux下svn服务强制添加备注(注释)提交

    标签: linux下svn服务强制添加备注(注释)提交 Linux版本: line-height: 26px; white-space: normal; background-color: rgb(2 ...

  8. mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式

    百度可以找到很多关于这个问题解决的方法 关键控制台API函数:SetConsoleCtrlHandler 在支持C++ 11以上的编译器中,你可以这么做. SetConsoleCtrlHandler( ...

  9. 210串口控制台-210移植printf不好使

    210串口控制台-问题描述 当210做到串口控制台发现按照视频及210故障分析之后却发现仍然不好使, 这个是因为视频中老师的代码中去除了一部分之前课程中与串口控制台无关部分的代码, 这边正常大家应该会 ...

最新文章

  1. Codeforces Round #520 (Div. 2)
  2. Java面试笔试题整理
  3. java angularjs 跨域访问_angularjs跨域post解决方案
  4. 这些Spring面试题,你都会了吗?
  5. java的事务类型及定义
  6. CSharp设计模式读书笔记(3):抽象工厂模式(学习难度:★★★★☆,使用频率:★★★★★)...
  7. 前端类名优秀命名例子_这是一篇需要花费你15分钟阅读的干货!浅谈前端工程化...
  8. 软件模拟PWM——呼吸灯小程序的理解
  9. JSP面试题都在这里
  10. 四级信息安全工程师考试大纲
  11. 看懂555定时器,有哪些应用?
  12. HDCP版权保护机制
  13. Dell PowerEdge R740xd解析:服务器只看参数那就错了
  14. macbook linux 双系统,mac安装linux双系统的吐槽
  15. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...
  16. 好文分享人的脆弱和坚强都超乎想象
  17. maven打包报错Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.6.1:cle
  18. CSR8670蓝牙模块BQB认证经验总结
  19. C语言热电阻温度查表,PT100热电阻值与温度对照表
  20. 文献管理软件Zotero配置及使用

热门文章

  1. Python手写数字识别+GUI界面+手写板设计
  2. python图片字符分割_图像分割python
  3. 深度系统deepin/uos动态壁纸
  4. 企业如何运用MES管理系统破除生产暗箱,打造透明化工厂?
  5. Vegas使用技巧——怎么用Vegas叠加视频和图片素材
  6. matlab实现航班进离场排序,航班离场排序问题的遗传算法设计
  7. Efficientdet源码详解
  8. 考研计算机科学与技术属于,考研报名计算机科学与技术属于哪一类
  9. openjdk java -XX:MaxRAMFraction docker容器内自动调整内存限制-Xmx
  10. 高效办公,这5款工具你不该错过