linux 串口输出

合集下载

linux标准输入输出重定向到串口设置指南

linux标准输入输出重定向到串口设置指南

Linux标准输入输出重定向到串口指南邮箱:追风哥455546798@描述:设置linux系统的标准输入输出到com0(console口),以便维护人员在无网络、无显示器的情况下对系统维护。

在各文件(/etc/grub.conf、/etc/inittab、/etc/securetty)中添加红色部分!文件修改完成后reboot系统即可在com0口看到标准输入输出信息。

1、grub.conf 文件配置[root@localhost etc]# more grub.conf# grub.conf generated by anaconda## Note that you do not have to rerun grub after making changes to this file# NOTICE: You do not have a /boot partition. This means that# all kernel and initrd paths are relative to /, eg.# root (hd0,0)# kernel /boot/vmlinuz-version ro root=/dev/sda1# initrd /boot/initrd-[generic-]version.img#boot=/dev/sdadefault=2timeout=10splashimage=(hd0,0)/boot/grub/splash.xpm.gzhiddenmenuserial --unit=0 --speed=115200 --word=8 --parity=no --stop=1terminal --timeout=10 serial consoletitle Red Hat Enterprise Linux (2.6.32-71.el6.i686)root (hd0,0)kernel /boot/vmlinuz-2.6.32-71.el6.i686 roroot=UUID=0cdc97d9-4515-461c-9691-91a03b9a41ea console=ttyS0,115200n8 rd_NO_LUKS rd_NO_LVMrd_NO_MD rd_NO_DMLANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quietconsole=tty0initrd /boot/initramfs-2.6.32-71.el6.i686.img2、inittab 文件配置[root@localhost etc]# more inittabid:3:initdefault:S0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 115200 ttyS0 vt100//说明在文件末尾添加S0:2345:xxxx行3、securetty 文件配置[root@localhost etc]# more securetty vc/10tty1tty2ttyS0//说明在文件末尾添加ttyS0。

linux串口编程参数配置详解

linux串口编程参数配置详解

linux串口编程参数配置详解1.linux串口编程需要的头文件#include <stdio.h> //标准输入输出定义#include <stdlib.h> //标准函数库定义#include <unistd.h> //Unix标准函数定义#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> //文件控制定义#include <termios.h> //POSIX中断控制定义#include <errno.h> //错误号定义2.打开串口串口位于/dev中,可作为标准文件的形式打开,其中:串口1 /dev/ttyS0串口2 /dev/ttyS1代码如下:int fd;fd = open(“/dev/ttyS0”, O_RDWR);if(fd == -1){Perror(“串口1打开失败!”);}//else//fcntl(fd, F_SETFL, FNDELAY);除了使用O_RDWR标志之外,通常还会使用O_NOCTTY和O_NDELAY这两个标志。

O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。

O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。

3.设置波特率最基本的串口设置包括波特率、校验位和停止位设置,且串口设置主要使用termios.h头文件中定义的termios结构,如下:struct termios{tcflag_t c_iflag; //输入模式标志tcflag_t c_oflag; //输出模式标志tcflag_t c_cflag; //控制模式标志tcflag_t c_lflag; //本地模式标志cc_t c_line; //line disciplinecc_t c_cc[NCC]; //control characters}代码如下:int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B384 00, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9 600, 4800, 2400, 1200, 300, };void SetSpeed(int fd, int speed){int i;struct termios Opt; //定义termios结构if(tcgetattr(fd, &Opt) != 0){perror(“tcgetattr fd”);return;}for(i = 0; i < sizeof(speed_arr) / sizeof(int); i++){if(speed == name_arr[i]){tcflush(fd, TCIOFLUSH);cfsetispeed(&Opt, speed_arr[i]);cfsetospeed(&Opt, speed_arr[i]);if(tcsetattr(fd, TCSANOW, &Opt) != 0){perror(“tcsetattr fd”);return;}tcflush(fd, TCIOFLUSH);}}}注意tcsetattr函数中使用的标志:TCSANOW:立即执行而不等待数据发送或者接受完成。

linux 开发板之间数据传输方式

linux 开发板之间数据传输方式

linux 开发板之间数据传输方式
Linux开发板之间的数据传输方式有多种,以下是一些常见的方式:1.网络传输:通过网线或Wi-Fi连接,使用TCP/IP协议栈进行数据传
输。

这种方式适合大量数据的快速传输,但需要稳定的网络环境。

2.串口传输:通过串口连接,使用串口通信协议(如RS-232、RS-485
等)进行数据传输。

这种方式适合短距离、低速的数据传输,常用于设备之间的调试和通信。

B传输:通过USB接口连接,使用USB协议进行数据传输。

这种
方式速度较快,适用于大量数据的传输,但需要开发板支持USB接口。

4.SD卡/eMMC传输:将数据存储到SD卡或eMMC等存储介质中,
然后通过插槽或接口连接到另一块开发板进行数据传输。

这种方式适合大量数据的存储和传输,但需要开发板支持相应的存储接口。

5.I2C/SPI传输:通过I2C或SPI等总线协议进行数据传输。

这种方式
适用于短距离、低速的数据传输,常用于设备之间的通信和控制。

具体选择哪种传输方式,需要根据应用场景、传输距离、传输速率、设备接口等因素综合考虑。

Linux下串口通信详解(上)打开串口和串口初始化详解

Linux下串口通信详解(上)打开串口和串口初始化详解

Linux下串口通信详解(上)打开串口和串口初始化详解Linux下串口通信主要有下面几个步骤串口通信流程图下面我会一一介绍这几个步骤。

1.打开串口代码(串口为ttyUSB0)[java] view plain copy1.//打开串口2.int open_port(void)3.{4.int fd;5.6.fd=open("/dev/ttyUSB0",O_RDWR | O_NOCTTY | O_NON BLOCK);//O_NONBLOCK设置为非阻塞模式,在read时不会阻塞住,在读的时候将read放在while循环中,下一节篇文档将详细讲解阻塞和非阻塞7.// printf("fd=%d\n",fd);8.9.if(fd==-1)10.{11.perror("Can't Open SerialPort");12.}13.14.return fd;15.}打开串口时也可以多加一些内容,比如判断串口为阻塞状态、测试是否为终端设备等,这些是必要的,所以较上面的基本的打开串口的代码,更加完整健壮一些的代码流程如下所示:打开串口较完整流程图代码:[cpp] view plain copy1./**2.* open port3.* @param fd4.* @param comport 想要打开的串口号5.* @return 返回-1为打开失败6.*/7.int open_port(int fd,int comport)8.{9.char *dev[]={"/dev/ttyUSB0","/dev/ttyS1","/dev/ttyS2"};10.11.if (comport==1)//串口112.{13.fd = open( "/dev/ttyUSB0", O_RDWR|O_NOCTTY|O_N DELAY);14.if (-1 == fd)15.{16.perror("Can't Open Serial Port");17.return(-1);18.}19.}20.else if(comport==2)//串口221.{22.fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDEL AY); //没有设置<span style="font-family: Arial, Helvetica, sans-serif;">O_NONBLOCK非阻塞模式,也可以设置为非阻塞模式,两个模式在下一篇博客中具体说明</span>23.24.if (-1 == fd)25.{26.perror("Can't Open Serial Port");27.return(-1);28.}29.}30.else if (comport==3)//串口331.{32.fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDEL AY);33.if (-1 == fd)34.{35.perror("Can't Open Serial Port");36.return(-1);37.}38.}39./*恢复串口为阻塞状态*/40.if(fcntl(fd, F_SETFL, 0)<0)41.printf("fcntl failed!\n");42.else43.printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));44./*测试是否为终端设备*/45.if(isatty(STDIN_FILENO)==0)46.printf("standard input is not a terminal device\n");47.else48.printf("isatty success!\n");49.printf("fd-open=%d\n",fd);50.return fd;51.}关键函数解释:功能描述:用于打开或创建文件,成功则返回文件描述符,否则返回-1,open返回的文件描述符一定是最小的未被使用的描述符[cpp] view plain copy1.#include<fcntl.h>2.int open(const char *pathname, int oflag, ... );参数解释:pathname:文件路径名,串口在linux中被看做是一个文件oflag:一些文件模式选择,有如下几个参数可以设置•O_RDONLY只读模式•O_WRONLY只写模式•O_RDWR读写模式上面三个参数在设置的时候必须选择其中一个下面的是可选的•O_APPEND每次写操作都写入文件的末尾•O_CREAT如果指定文件不存在,则创建这个文件•O_EXCL如果要创建的文件已存在,则返回 -1,并且修改 errno 的值•O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容•O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端。

linux下的串口通信原理及编程实例

linux下的串口通信原理及编程实例

linux下的串⼝通信原理及编程实例linux下的串⼝通信原理及编程实例⼀、串⼝的基本原理1 串⼝通讯串⼝通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进⾏传输数据的⼀种通讯⽅式。

串⼝是⼀种接⼝标准,它规定了接⼝的电⽓标准,没有规定接⼝插件电缆以及使⽤的协议。

2 串⼝通讯的数据格式 ⼀个字符⼀个字符地传输,每个字符⼀位⼀位地传输,并且传输⼀个字符时,总是以“起始位”开始,以“停⽌位”结束,字符之间没有固定的时间间隔要求。

每⼀个字符的前⾯都有⼀位起始位(低电平),字符本⾝由7位数据位组成,接着字符后⾯是⼀位校验位(检验位可以是奇校验、偶校验或⽆校验位),最后是⼀位或⼀位半或⼆位停⽌位,停⽌位后⾯是不定长的空闲位,停⽌位和空闲位都规定为⾼电平。

实际传输时每⼀位的信号宽度与波特率有关,波特率越⾼,宽度越⼩,在进⾏传输之前,双⽅⼀定要使⽤同⼀个波特率设置。

3 通讯⽅式单⼯模式(Simplex Communication)的数据传输是单向的。

通信双⽅中,⼀⽅固定为发送端,⼀⽅则固定为接收端。

信息只能沿⼀个⽅向传输,使⽤⼀根传输线。

半双⼯模式(Half Duplex)通信使⽤同⼀根传输线,既可以发送数据⼜可以接收数据,但不能同时进⾏发送和接收。

数据传输允许数据在两个⽅向上传输,但是,在任何时刻只能由其中的⼀⽅发送数据,另⼀⽅接收数据。

因此半双⼯模式既可以使⽤⼀条数据线,也可以使⽤两条数据线。

半双⼯通信中每端需有⼀个收发切换电⼦开关,通过切换来决定数据向哪个⽅向传输。

因为有切换,所以会产⽣时间延迟,信息传输效率低些。

全双⼯模式(Full Duplex)通信允许数据同时在两个⽅向上传输。

因此,全双⼯通信是两个单⼯通信⽅式的结合,它要求发送设备和接收设备都有独⽴的接收和发送能⼒。

在全双⼯模式中,每⼀端都有发送器和接收器,有两条传输线,信息传输效率⾼。

显然,在其它参数都⼀样的情况下,全双⼯⽐半双⼯传输速度要快,效率要⾼。

Linux串口打印设置

Linux串口打印设置

一、基于VM虚拟机linux系统串口配置配置分为虚拟机下配置及linux系统下minicom配置两部分。

虚拟机模块配置如下:打开虚拟机配置界面。

选择Edit virtual machine settings。

进入配置界面。

选择Add…按钮,添加相关的设备文件。

选中串口选项后继续选择下一步。

此处选择”使用主机上的物理串口设备”选项,继续下一步。

此处我们选择文件。

对于物理串口选项,此处可以采用自动检测选项。

如果下来菜单中有对应于串口的端口号,则可以选择。

注意,对于设备状态,要确保选中“connect at power on“,即,上电连接状态。

至此,虚拟机端串口配置完毕。

注意:此处我们串口添加成功后默认未COM2.Linux下串口配置及使用。

Linux下一般使用minicom来作为串口数据输入输出的终端。

类似于Windows下的超级终端。

虚拟机下配置完毕后,进入Linux系统中,在Shell 终端下输入minicom -s即可配置串口终端。

配置完成后执行minicom启动串口终端。

在终端界面下完成相关的参数配置并保存后,启动终端设备,即可在minicom中观察到数据输出。

<四>Minicom的使用(1)minicom界面介绍第一次运行minicom,启动minicom要以root权限登录系统,需要进行minicom的设置,输入下了命令#minicom –s,显示的屏幕如下所示,按上下光标键进行上下移动选择,我们要对串行端口进行设置,因此选中Serial port setup,然后回车:__[configuration]─-─—┐//配置│ Filenames and paths │//文件名和路径│ File transfer protocols│//文件传输协议│ Serial port setup │//串行端口设置│ Modem and dialing │//调制解调器和拨号│ Screen and keyboard │//屏幕和键盘│ Save setup as dfl │//设置保存到│ Save setup as.. │//储存设定为│ Exit │//退出│ Exit from Minicom │//退出minicom└──────────┘(2)minicom的参数设置选中设置串行端口,点击回车后,弹出设置的界面如下:点击”A”设置串行设置为/dev/ttyS1,这表示使用串口2(com2),如果是/dev/ttyS1则表示使用串口2(com 2).按”E”键进入设置”bps/par/Bits”(波特率)界面,如下图所示。

教你用串口终端作为Linux系统控制台

教你用串口终端作为Linux系统控制台

教你用串口终端作为Linux系统控制台展开全文教你用串口终端作为Linux系统控制台利用串口终端作为Linux控制台,可以免去额外的键盘,显示卡和显示器,同时可将Linux主机作为一个任意用途的嵌入式黑匣。

将串口终端连接到计算机的串口上并不困难,可以参考Linux的HOWTO文档和以及inittab和agetty的帮助信息。

这里扼要地说一下。

首先,准备好一根null modem 电缆。

其次,在文件/etc/inittab 增加下面一行。

[注:如果你不采用agetty程序,采用其他的程序如like getty_ps ,应用正确的命令语法] ID:RUNLEVELS:respawn:/sbin/agetty -L SPEED TTY TERM这里: ID =两字母的标识符,如s1或s2。

RUNLEVELS = 终端激活的运行级别。

SPEED = 串口端口速率。

TTY = 串口的设备名。

TERM = TERM环境变量。

范例如下:s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100表示串口/dev/ttyS1 (COM2 )速率为9600 bps,终端模式为vt100。

最后,重新启动机器。

如正确地按照上述三步进行,则就可以在终端屏幕上出现Login: 的提示符。

你可以登录进系统,并能象在实际的控制台上或从远程Telnet登录一样进行工作。

下面简单介绍一下如何终端设置成控制台,主要涉及内核信息、启动脚本信息和LILO信息。

一、内核信息系统在启动时显示的信息总是输出到主控制台(tty1)。

打开机器后,你只有等待Login: 出现在终端屏幕上,这意味着所有启动信息都无法获悉。

你只有登录后用dmesg命令查看,但通常是想在login shell起来前看到这些信息。

还有其他信息出现在控制台上:/etc/rc.d目录下脚本命令执行时,启动和终止机器时运行的脚本命令等输出的信息。

linux kernel下输入输出console如何实现

linux kernel下输入输出console如何实现

linux kernel下输入输出console如何实现/skyflying2012/article/details/410783492012最近工作在调试usb虚拟串口,让其作为kernel启动的调试串口,以及user空间的输入输出控制台。

利用这个机会,学习下printk如何选择往哪个console输出以及user空间下控制台如何选择,记录与此,与大家共享,也方便自己以后翻阅。

Kernel版本号:3.4.55依照我的思路(还是时间顺序)分了4部分,指定kernel调试console ,kernel下printk console的选择,kernel下console的注册,user空间console 的选择。

一指定kernel调试console首先看kernel启动时如何获取和处理指定的console参数。

kernel的启动参数cmdline可以指定调试console,如指定‘console=ttyS0,115200’,kernel如何解析cmdline,我之前写了一篇博文如下:/skyflying2012/article/details/41142801根据之前的分析,cmdline中有console=xxx,start_kernel中parse_args遍历.init.setup段所有obs_kernel_param。

kernel/printk.c中注册了‘console=’的解析函数console_setup (注册了obs_kernel_param),所以匹配成功,会调用console_setup来解析,如下:[cpp] view plain copy static int__init console_setup(char *str) { charbuf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */char *s, *options, *brl_options = NULL; int idx;#ifdef CONFIG_A11Y_BRAILLE_CONSOLE if(!memcmp(str, "brl,", 4)) { brl_options = "";str += 4; } else if (!memcmp(str, "brl=", 4)){ brl_options = str + 4; str =strchr(brl_options, ','); if (!str){ printk(KERN_ERR "need port name afterbrl=\n"); return 1; }*(str++) = 0; } #endif /* * Decode str into name, index, options. */ if (str[0]&gt;= '0' &amp;&amp; str[0] &lt;= '9') { strcpy(buf, "ttyS"); strncpy(buf + 4, str, sizeof(buf) - 5); } else { strncpy(buf, str, sizeof(buf) - 1); }buf[sizeof(buf) - 1] = 0; if ((options = strchr(str, ',')) != NULL) *(options++) = 0; #ifdef __sparc__if (!strcmp(str, "ttya")) strcpy(buf, "ttyS0"); if (!strcmp(str, "ttyb")) strcpy(buf, "ttyS1"); #endiffor (s = buf; *s; s++) if ((*s &gt;= '0' &amp;&amp; *s &lt;= '9') || *s == ',') break; idx = simple_strtoul(s, NULL, 10); *s = 0;__add_preferred_console(buf, idx, options, brl_options); console_set_on_cmdline = 1; return 1; }__setup("console=", console_setup); 参数是console=的值字符串,如“ttyS0,115200”,console_setup对console=参数值做解析,以ttyS0,115200为例,最后buf=“ttyS”,idx=0,options="115200",brl_options=NULL。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.修改/etc/inittab文件
tty:2345:respawn:/sbin/agetty -L ttyS0 9600 vt100
“tty”为该行ID;“2345”指该行的运行级别是2、3、4、5级;“respawn”使命令退出后再执行一次,以便其它用户能够登录;“/sbin/getty ttyS0 9600 vt100”表示具体
的命令,该命令通过/sbin/getty程序打开串口/dev/ttyS0(COM1),波特率设置为9600bps,终端模式为vt100。

2.修改/etc/securetty文件
该文件是一个被允许以root身份登录的tty设备列表,这些设备由/bin/login程序读取。

为了使用户能以root身份通过串口登录,需要在该文件中添加“ttyS0”,告诉系统COM1
是安全的。

3.修改/etc/lilo.conf文件
本文假设系统使用LILO启动。

为了使LILO和内核的启动信息能够输出到串口,必须修改/etc/lilo.conf文件,在“linear”一行后添加“serial=0,9600n8”,将
“append="root=LABEL=/"”改为“append="root=LABEL=/ console=ttyS0,9600"”。

serial选项使LILO的启动信息输出到串口,以便选择不同的系统或内核进行启动。

其中,“0”表示串口使用COM1;“9600”表示波特率为9600bps;“n”表示无校验位;“8”表
示有8位数据位。

“append="root=LABEL=/ console=ttyS0,9600"”的作用是向内核传递参数,使系统启动信息输出到串口COM1,波特率设为9600bps。

修改完成后,重新运行一下LILO命令使配置生
效。

修改grub.conf
完整conf
default=0
timeout=10
password --md5 $1$wwmIq64O$2vofKBDL9vZKeJyaKwIeT.
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
title Red Hat Linux (2.4.9-21)
root (hd0,0)
kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8
initrd /initrd-2.4.9-21.img
title Red Hat Linux (2.4.9-21) single user mode
lock
root (hd0,0)
kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6console=tty0 console=ttyS0,9600n8
initrd /initrd-2.4.9-21.img
title Debian GNU/Linux, kernel 2.6.8-2-386
root (hd0,0)
kernel /vmlinuz-2.6.8-2-386 root=/dev/mapper/rootvg-root ro console=ttyS0,9600n8 console=tty0
initrd /initrd.img-2.6.8-2-386
savedefault
boot
1 将BIOS输出重定向到串口
这一功能需要主版支持, 请参考主板用户手册.
2 将Grub输出重定向到串口
编辑grub的配置文件/boot/grub/menu.lst, 添加如下行:
QUOTE:
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
grub引导过程中, 会将输出同时发送到终端屏幕和串口. grub引导过程中将在终端和连接到串口的超级终端上提示Press any key to continue, 每秒钟提示一次, 共10次, 可
修改menu.lst文件terminal行中的--timeout=10改变提示次数, 在这一段时间内, 可以在终端的键盘, 或者连接到串口的超级终端中按任意键进入grub选择菜单. 如果10秒内没有
在终端和连接串口的超级终端上按任意键, 则grub的选择菜单将出现在连接串口的超级终端上, 如果希望默认情况下, grub选择菜单出现在终端上, 则可修改menu.lst将serial
console修改为console serial.
3 将kernel输出信息输出到串口
修改kernel行, 在该行后增加增加
QUOTE:
console=ttyS0,9600n8 console=tty0
则kernel会将输出信息同时输出到串口和终端. 我的menu.list中修改过的记录如下: QUOTE:
title Debian GNU/Linux, kernel 2.6.8-2-386
root (hd0,0)
kernel /vmlinuz-2.6.8-2-386 root=/dev/mapper/rootvg-root ro console=ttyS0,9600n8 console=tty0
initrd /initrd.img-2.6.8-2-386
savedefault
boot
在上例中, 服务启动的信息会显示在终端上(tty0), 如果进入单用户模式, 也只会在终端(tty0)上提示输入root密码, 如果需要将服务启动的信息也输出到串口上, 可修改两
个console参数的顺序, 既修改为
QUOTE:
console=tty0 console=ttyS0,9600n8
4 允许从串口登陆linux
修改/etc/inittab文件, 增加如下内容
QUOTE:
T0:23:respawn:/sbin/agetty -L ttyS0 9600 vt100
则会启动完成后会允许从串口登陆到linux.。

相关文档
最新文档