串口为啥自动打印数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口为啥自动打印数据相关的知识,希望对你有一定的参考价值。

参考技术A 、去掉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内核打印数据到串口控制台,printk数据不打印问题

                  linux内核打印数据到串口控制台问题

原文来源:http://i.cnblogs.com/EditPosts.aspx?opt=1

1、查看当前控制台的打印级别
 cat /proc/sys/kernel/printk
 4    4    1    7
 其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息

2、修改打印
 echo "新的打印级别  4    1    7" >/proc/sys/kernel/printk

3、不够打印级别的信息会被写到日志中可通过dmesg 命令来查看

4、printk的打印级别

#define KERN_EMERG         "<0>" /* system is unusable */
#define KERN_ALERT         "<1>" /* action must be taken immediately */
#define KERN_CRIT          "<2>" /* critical conditions */
#define KERN_ERR           "<3>" /* error conditions */
#define KERN_WARNING     "<4>" /* warning conditions */
#define KERN_NOTICE        "<5>" /* normal but significant condition */
#define KERN_INFO          "<6>" /* informational */
#define KERN_DEBUG         "<7>" /* debug-level messages */

5、printk函数的使用

  printk(打印级别"要打印的信息")这里需要注意打印级别和需要打印的数据中中间没有逗号

       打印级别  既上面定义的几个宏

KERN_EMERG 
  用于突发性事件的消息,通常在系统崩溃之前报告此类消息。 
KERN_ALERT
  在需要立即操作的情况下使用此消息。 
KERN_CRIT 
  用于临界条件下,通常遇到严重的硬软件错误时使用此消息。 
KERN_ERR
  用于报告错误条件;设备驱动经常使用KERN_ERR报告硬件难题。 
KERN_WARNING
  是关于问题状况的警告,一般这些状况不会引起系统的严重问题。 
KERN_NOTICE 
  该级别较为普通,但仍然值得注意。许多与安全性相关的情况会在这个级别被报告。 
KERN_INFO
  信息消息。许多驱动程序在启动时刻用它来输出获得的硬件信息。

KERN_DEBUG 

 

以上是关于串口为啥自动打印数据的主要内容,如果未能解决你的问题,请参考以下文章

STM32为啥要用重定向printf来打印串口数据?直接用串口发送函数不行吗

基于python的 串口数据输出程序(自动重连,快速获取)

串口调试助手发送的数据后面为啥多了两个字节,0d和0A

SecureCRT自动保存日志设置

SecureCRT自动保存日志设置

分享:自动输入串口命令并截取log的python脚本