linux命令关闭串口打印_linux关闭串口命令 - CSDN
  • 嵌入式 LINUX关闭串口控制台输出 Posted on 2014-08-16 13:23 CrHackOS 阅读(2833) 评论(1) 编辑 收藏 引用 所属分类: 技术随笔   最近在玩新唐的 N32926。这颗芯片最大的优势就是把 DDR 内存和 ...

    嵌入式 LINUX 下关闭串口控制台输出

    Posted on 2014-08-16 13:23 CrHackOS 阅读(2833) 评论(1)  编辑 收藏 引用 所属分类: 技术随笔 
      最近在玩新唐的 N32926。这颗芯片最大的优势就是把 DDR 内存和 ARM9 的芯片做在一起了,提供非 BGA 的芯片封装(QFP128)。比起三星之类的硬件可以简单不少,性价比也不错。缺点就是,可能是封装管脚太少的缘故,很多功能都是复用的,导致管脚资源紧张。例如,以太网接口和8位以上的 LCD 屏接口是冲突的。以太网切换到第二端口上又和一个串口冲突。本来芯片上就只有两个串口。这就造成,所有的串口设备必须要挂在同一个串口上,用一个模拟开关芯片去切换。可恶的是,Linux 内核和控制台也会时不时的输出东西。但是又不想彻底关掉它们,到时候还能看看调试信息。所以就去找了一下如何临时关闭控制台输出的方法。
      临时关闭控制台输出(打开控制台输出即是把 tty0 重新设置为默认终端输出):
    1 int fd;
    2 
    3 fd = open("/dev/tty1", O_RDONLY);
    4 if (fd >= 0) {
    5     ioctl(fd, TIOCCONS);
    6     close(fd);
    7 }
      临时关闭内核信息输出:echo 0 > /proc/sys/kernel/printk;重新打开内核信息输出:echo 7 > /proc/sys/kernel/printk。
      这样,要用串口设备的时候,就先临时关闭,然后开关切换,搞完之后再切回来,最后打开输出。好在使用的串口设备都是被动的,可以临时用一下的,不用一直挂在上面,不然就麻烦了。

    http://www.cppblog.com/crhackos/archive/2014/08/16/208032.aspx
    展开全文
  • 为了保证串口通信时不能有控制台发出的消息,需要关闭打印。 在测试过程中发现,有三种类型的打印,一是uboot的打印,在Starting kernel ...之前的打印都是;二是prink的打印linux kernel不能用prin...

    转载地址:http://blog.csdn.net/zmc1216/article/details/34473197

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

    在测试过程中发现,有三种类型的打印,一是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),程序经常出现错误,这个还需要继续研究。

    展开全文
  • 上一篇博客是串口的打开及配置,博客...这一篇我将要把读写串口串口关闭的操作详细介绍一下。 读串口串口就是接收串口数据,通过read来实现。 read函数原型: #include ssize_t read(int fd, void *buf, size_t

    上一篇博客是串口的打开及配置,博客链接http://blog.csdn.net/specialshoot/article/details/50707965

    这一篇我将要把读写串口及串口关闭的操作详细介绍一下。

    读串口

    读串口就是接收串口数据,通过read来实现。

    read函数原型:

    #include <unistd.h>    
    ssize_t read(int fd, void *buf, size_t count);  

    参数说明:

    • fd:文件描述符
    • *buf:缓冲区,读取的数据会被放到这个缓冲区中去
    • count:请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。
    如下两句代码即可:

    nread=read(fd,buff,8);//读串口 
    printf("nread=%d,%s\n",nread,buff); 
    注意:
    read默认为阻塞模式,若在open操作中设置O_NONBLOCK则是非阻塞模式。在阻塞模式中,read没有读到数据会阻塞住,直到收到数据;非阻塞模式read没有读到数据会返回-1不会阻塞。

    如果是非阻塞模式,read要放在循环中保证持续读数据:

    while(1) {
    非阻塞read(设备1);
    if(设备1有数据到达)
      处理数据;
    非阻塞read(设备2);
    if(设备2有数据到达)
      处理数据;
    ...
    sleep(n);
    }
    sleep(n)的目的是为了做个延迟防止一直在循环做无用功,在延迟等待的时候可以调度其它进程。

    如果是阻塞模式,便可以直接调用read,不用放在while循环中。

    阻塞模式有出现一个问题,见下面代码:

    #include<unistd.h>
    #include<stdlib.h>
    int main(void){
        char buf[10];
        int n;
        n=read(STDIN_FILENO,buf,10);
        if(n<0){
            perror("read STDIN_FILENO");
            exit(1);
        }
        write(STDOUT_FILENO,buf,n);
        return 0;
    }
    编译后执行如下图所示:

    运行结果

    大家可以看到第一次输入hello没有问题,第二次输入helloworldhelloworld后helloworld这10个字符打印出来,程序退出后,Shell继续读取用户输入的命令,于是读走了终端设备输入缓冲区中剩下的字符和换行符当做一条命令去处理,运行不了显示未找到命令。

    写串口

    写串口即发送数据,用write函数,write函数原型如下:

    #include <unistd.h>
    ssize_t write(int fd, const void *buf, size_t count);
    参数含义同read相同,需要注意的也同read相同.设置阻塞非阻塞也会同样的影响到write.

    我上传的代码有阻塞模式的,也有非阻塞模式的,大家看open中有无设置O_NONBLOCK即可判断阻塞或是非阻塞模式。非阻塞模式read和write要放在while循环中

    关闭串口

    close函数,函数原型:

    #include<unistd.h>  
    int close(int fd);
    关闭串口就这一个知识点,没有其它的了。

    代码资源链接:http://download.csdn.net/detail/specialshoot/9438578


    展开全文
  • 《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》 嵌入式linux产品开发,大部分不希望串口或telnet输出调试信息。一下介绍如何屏蔽打印调试信息。 整个系统运行过程分3个部分:bootstrap、uboot、...


    《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

    嵌入式linux产品开发,大部分不希望串口或telnet输出调试信息。一下介绍如何屏蔽打印调试信息。

    整个系统运行过程分3个部分:bootstrapuboot、内核及根文件系统,bootstrapat91sam9260在从片内启动,运行bootstrap串口无打印信息,但at91sam9260芯片启动会向串口输出“RomBOOT”信息,此部分无法屏蔽。所以只需屏蔽掉uboot、内核及根文件系统向串口输出的信息,方法如下:

    1Uboot部分

    使Uboot中串口静默、uboot所有信息不打印,但是要注意配置好自启动命令,以便可以启动linux内核。因env_common.c中用到uchar default_environment[]结构,可以添加CONFIG_EXTRA_ENV_SETTINGS,在/u-boot-1.3.4/include/configs/at91san9260ek.h中最后一行添加以下代码:

    #define CONFIG_EXTRA_ENV_SETTINGS "silent=1\0"

    #define CONFIG_SILENT_CONSOLE 1

    2内核部分

    1配置选项

    #make menuconfig

    去掉控制台配置选项( CONFIG_SERIAL_ATMEL_CONSOLE

    Devices drivers -> character drivers->serial drivers->

    []support for console on AT91/AT32 serial port 

    2去掉自解压时的打印信息

    在运行内核开始会有以下打印信息:

    Uncompressing Linux... done, booting the kernel.

    在内核源文件/Linux-2.6.36/arch/arm/boot/compressed/misc.c中的 decompress_kernel()函数中注释掉以下代码:

    putstr("Uncompressing Linux...");

    putstr(" done, booting the kernel.\n");

    3根文件系统部分

    把根文件系统/etc/inittab文件中的

    :2345:askfirst:-/sbin/getty 115200 ttyS0

    更改为

    :2345:askfirst:-/sbin/getty tty0

    4、调试

    以上更改后,重新下载uboot、内核及根文件系统,查看调试串口输出的信息,可以看到每次加电系统运行只有at91sam9260芯片启动时输出的信息,如下图所示:

     

    2.27 系统启动图

    待系统进入内核运行应用程序后,串口无其它打印信息则屏蔽成功。

     

    展开全文
  • 关于Linux终端和控制台的基本概念如下: /dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。/dev/console根据不同系统的设定可以链接到/dev/tty0或者其他/dev/tty*终端设备上。 /...

    关于Linux终端和控制台的基本概念如下:

    • /dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。/dev/console根据不同系统的设定可以链接到/dev/tty0或者其他/dev/tty*终端设备上。
    • /dev/tty代表当前tty设备,在当前的终端中输入 echo “hello” > /dev/tty ,都会直接显示在当前的终端中。
    • /dev/ttyS*是串行/串口终端设备。
    • /dev/pty*即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序。例如,我们在X Window下打开的终端,以及我们在Windows使用telnetssh等方式登录Linux主机,此时均在使用pty设备(准确的说在使用pty从设备)。
    • /dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台,例如当使用ALT+F2进行切换时,系统的虚拟控制台为/dev/tty2 ,当前的控制台则指向/dev/tty2

    在嵌入式Linux产品开发的最终镜像发布时,一般希望关闭串口终端的打印信息,关闭串口打印后,还可以使用ssh方式来确认系统是否正常启动。下面介绍关闭u-bootLinux内核和根文件系统(rootfs)串口打印的方法,以及如何使用ssh来确认系统正常启动。

    u-boot关闭串口终端信息

    u-boot里面有串口终端静默的开关,在u-boot/include/configs/at91san9260ek.h中最后一行添加以下代码:

    #define CONFIG_EXTRA_ENV_SETTINGS "silent=1\0"
    #define CONFIG_SILENT_CONSOLE 
    #define CONFIG_SILENT_U_BOOT_ONLY
    

    Linux内核关闭串口控制台信息

    通过内核配置选项来去掉串口控制台配置选项(CONFIG_SERIAL_ATMEL_CONSOLE

    #make menuconfig
    Devices drivers -> character drivers->serial drivers->
    []support for console on AT91/AT32 serial port 
    

    根文件系统关闭串口控制台信息

    Yocto项目的目标板配置文件里面需要去掉如下这一行:

    SERIAL_CONSOLE = "115200 ttyS0"
    

    这样就相当于将目标板根文件系统/etc/inittab文件中的

    S0:12345:respawn:/sbin/getty 115200 ttyS0 
    

    自动修改为默认的

    1:12345:respawn:/sbin/getty 115200 tty1
    

    使用ssh来调试

    以上更改后,重新下载u-boot、内核及根文件系统,就看不到任何串口打印信息了,所以我们需要在Yocto目标板根文件系统镜像里面添加一个dropbear包:

    DISTRO_FEATURE_append =" dropbear"
    IMAGE_INSTALL_append = " dropbear"
    

    重新构建和下载根文件系统后,使用pingssh远程登陆目标板来确认系统启动成功(这里需要注意的一点是dropbear默认是禁止root用户远程登陆的,所以需要自行添加一个普通用户账号用来测试验证):

    $ ping 192.168.1.10
    $ ssh test@192.168.1.10
    

    ping通并且ssh可以正常登陆目标板,则说明系统正常启动。

    展开全文
  • 关闭串口

    2014-06-04 14:06:11
    发版本的时候需要把串口打印关闭
  • 什么是console(控制台) 禁用console(控制台)的目的 如何找到跟console(控制台)相关的kernel参数 禁用console(控制台)应该修改哪个参数 如何直接在linux系统通过u-boot传递参数给kernel ...
  • linux查看新增串口、USB设备,Minicom + Usb转串口注意:虚拟机环境下的ubuntu默认情况下是不能自动识别的,需要在虚拟机窗口右下角点击"Prolific USB-Serial Controller",然后选择"Connect...
  • Linux C》串口编程

    2018-09-30 10:42:11
      如何找到串口设备号 串口之打开操作 串口之初始化 串口之发送 串口之接收 如何找到串口设备号 ...如果你使用的是开发板搭载...如果你电脑安装的linux系统,那么插上串口,通过dmesg命令进行查看  本文例子使...
  • 最近在做Linux下的串口接收并处理GPS数据,那对于是新手的我来说,就将这个项目分成两步,第一,接收数据,第二,处理数据。本文注重第二步的代码实现,第一步只会简单提及。本文使用的嵌入式开发板龙芯智龙1C,GPS...
  • android中打开串口打印

    2017-04-07 10:56:53
    转自:http://blog.csdn.net/y_lang/article/details/46989801 user版本打开uart ...如何在user版本中使用串口(uart) bootable/bootloader/lk/app/mt_boot/mt_boot.c 582 #ifdef USER_BUILD 583
  • 在基于嵌入式ARM开发产品的时候,有时候由于ARM处理器UART数量的限制,我们需要将系统默认的调试串口打印信息关闭或者转移到其他串口上面去,本文即演示更改uboot和linux kernel 调试串口的过程示例。   本文所...
  • linux下的串口通信调试方法
1 2 3 4 5 ... 20
收藏数 4,952
精华内容 1,980
关键字:

linux命令关闭串口打印