搜档网
当前位置:搜档网 › 嵌入式linux的串口设置参数

嵌入式linux的串口设置参数

嵌入式linux的串口设置参数
嵌入式linux的串口设置参数

linux基础复习(7)串口应用开发

据通信的基本方式可分为并行通信与串行通信两种。

·并行通信是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合。

·串行通信是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用

简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。

串口设置详解

本节主要讲解设置串口的主要方法。

如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的设置主

要是设置struct termios结构体的各成员值,如下所示:

#include

struct termio

{

unsigned short c_iflag; /* 输入模式标志*/

unsigned short c_oflag; /* 输出模式标志*/

unsigned short c_cflag; /* 控制模式标志*/

unsigned short c_lflag; /*本地模式标志*/

unsigned char c_line; /* line discipline */

unsigned char c_cc[NCC]; /* control characters */

};

在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控等。另外c_iflag 和c_cc 也是比较常用的标志。在

此主要对这3 个成员进行详细说明。

c_cflag支持的常量名称

CBAUD 波特率的位掩码

B0 0波特率(放弃DTR)

B1800 1800波特率

B2400 2400波特率

B4800 4800波特率

B9600 9600波特率

B19200 19200波特率

B38400 38400波特率

B57600 57600波特率

B115200 115200波特率

EXTA 外部时钟率

EXTB 外部时钟率

CSIZE 数据位的位掩码

CS5 5个数据位

CS6 6个数据位

CS7 7个数据位

CS8 8个数据位

CSTOPB 2个停止位(不设则是1个停止位)CREAD 接收使能

PARENB 校验位使能

PARODD 使用奇校验而不使用偶校验HUPCL 最后关闭时挂线(放弃DTR)CLOCAL 本地连接(不改变端口所有者)LOBLK 块作业控制输出

CNET_CTSRTS 硬件流控制使能

c_iflag支持的常量名称

INPCK 奇偶校验使能

IGNPAR 忽略奇偶校验错误

PARMRK 奇偶校验错误掩码

ISTRIP 除去奇偶校验位

IXON 启动出口硬件流控

IXOFF 启动入口软件流控

IXANY 允许字符重新启动流控

IGNBRK 忽略中断情况

BRKINT 当发生中断时发送SIGINT信号INLCR 将NL映射到CR

IGNCR 忽略CR

ICRNL 将CR映射到NL

IUCLC 将高位情况映射到低位情况

IMAXBEL 当输入太长时回复ECHO

c_cc 支持的常量名称

VINTR 中断控制,对应键为CTRL+C

VQUIT 退出操作,对应键为CRTL+Z

VERASE 删除操作,对应键为Backspace(BS)

VKILL 删除行,对应键为CTRL+U

VEOF 位于文件结尾,对应键为CTRL+D

VEOL 位于行尾,对应键为Carriage return(CR)

VEOL2 位于第二行尾,对应键为Line feed(LF)

VMIN 指定了最少读取的字符数

VTIME 指定了读取每个字符的等待时间

串口控制函数

Tcgetattr 取属性(termios结构)

Tcsetattr 设置属性(termios结构)

cfgetispeed 得到输入速度

Cfgetospeed 得到输出速度

Cfsetispeed 设置输入速度

Cfsetospeed 设置输出速度

Tcdrain 等待所有输出都被传输

tcflow 挂起传输或接收

tcflush 刷清未决输入和/或输出

Tcsendbreak 送BREAK字符

tcgetpgrp 得到前台进程组ID

tcsetpgrp 设置前台进程组ID

[color=#ff0000]完整的串口配置模板,实用!把常用的选项在函数里面列出,可大大方便用户的调试使用[/color]

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

struct termios newtio,oldtio;

/*保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息*/ if ( tcgetattr( fd,&oldtio) != 0)

{

perror("SetupSerial 1");

return -1;

}

bzero( &newtio, sizeof( newtio ) );

/*步骤一,设置字符大小*/

newtio.c_cflag |= CLOCAL | CREAD;

newtio.c_cflag &= ~CSIZE;

/*设置停止位*/

switch( nBits )

{

case 7:

newtio.c_cflag |= CS7;

break;

case 8:

newtio.c_cflag |= CS8;

break;

}

/*设置奇偶校验位*/

switch( nEvent )

{

case 'O': //奇数

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= (INPCK | ISTRIP);

break;

case 'E': //偶数

newtio.c_iflag |= (INPCK | ISTRIP);

newtio.c_cflag |= PARENB;

newtio.c_cflag &= ~PARODD;

break;

case 'N': //无奇偶校验位

newtio.c_cflag &= ~PARENB;

break;

}

/*设置波特率*/

switch( nSpeed )

{

case 2400:

cfsetispeed(&newtio, B2400);

cfsetospeed(&newtio, B2400);

break;

case 4800:

cfsetispeed(&newtio, B4800);

cfsetospeed(&newtio, B4800);

break;

case 9600:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

case 115200:

cfsetispeed(&newtio, B115200);

cfsetospeed(&newtio, B115200);

break;

case 460800:

cfsetispeed(&newtio, B460800);

cfsetospeed(&newtio, B460800);

break;

default:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

}

/*设置停止位*/

if( nStop == 1 )

newtio.c_cflag &= ~CSTOPB;

else if ( nStop == 2 )

newtio.c_cflag |= CSTOPB;

/*设置等待时间和最小接收字符*/

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 0;

/*处理未接收字符*/

tcflush(fd,TCIFLUSH);

/*激活新配置*/

if((tcsetattr(fd,TCSANOW,&newtio))!=0)

{

perror("com set error");

return -1;

}

printf("set done!\n");

return 0;

}

[b]串口使用详解[/b]

在配置完串口的相关属性后,就可对串口进行打开,读写操作了。其使用方式与文件操作一样,区别在于串口是一个终端设备。

[b]打开串口[/b]

fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

Open函数中除普通参数外,另有两个参数O_NOCTTY和O_NDELAY。

O_NOCTTY: 通知linix系统,这个程序不会成为这个端口的控制终端。

O_NDELAY: 通知linux系统不关心DCD信号线所处的状态(端口的另一端是否激活或者停止)。

然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入。用fcntl函数:fcntl(fd, F_SETFL, 0);

接着,测试打开的文件描述府是否引用一个终端设备,以进一步确认串口是否正确打开。

isatty(STDIN_FILENO);

串口的读写与普通文件一样,使用read,write函数。

read(fd,buff,8);

write(fd,buff,8);

实例

#i nclude stdio.h>

#i nclude string.h>

#i nclude sys/types.h>

#i nclude errno.h>

#i nclude sys/stat.h>

#i nclude fcntl.h>

#i nclude unistd.h>

#i nclude termios.h>

#i nclude stdlib.h>

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

struct termios newtio,oldtio;

if ( tcgetattr( fd,&oldtio) != 0) {

perror("SetupSerial 1");

return -1;

}

bzero( &newtio, sizeof( newtio ) );

newtio.c_cflag |= CLOCAL | CREAD;

newtio.c_cflag &= ~CSIZE;

switch( nBits )

{

case 7:

newtio.c_cflag |= CS7;

break;

case 8:

newtio.c_cflag |= CS8;

break;

}

switch( nEvent )

{

case 'O':

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= (INPCK | ISTRIP);

break;

case 'E':

newtio.c_iflag |= (INPCK | ISTRIP);

newtio.c_cflag |= PARENB;

newtio.c_cflag &= ~PARODD;

break;

case 'N':

newtio.c_cflag &= ~PARENB;

break;

}

switch( nSpeed )

{

case 2400:

cfsetispeed(&newtio, B2400);

cfsetospeed(&newtio, B2400);

break;

case 4800:

cfsetispeed(&newtio, B4800);

cfsetospeed(&newtio, B4800);

break;

case 9600:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

case 115200:

cfsetispeed(&newtio, B115200);

cfsetospeed(&newtio, B115200);

break;

default:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

}

if( nStop == 1 )

newtio.c_cflag &= ~CSTOPB;

else if ( nStop == 2 )

newtio.c_cflag |= CSTOPB;

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 0;

tcflush(fd,TCIFLUSH);

if((tcsetattr(fd,TCSANOW,&newtio))!=0) {

perror("com set error");

return -1;

}

printf("set done!\n");

return 0;

}

int open_port(int fd,int comport)

{

char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};

long vdisable;

if (comport==1)

{ fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

if (-1 == fd){

perror("Can't Open Serial Port");

return(-1);

}

else

printf("open ttyS0 .....\n");

}

else if(comport==2)

{ fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);

if (-1 == fd){

perror("Can't Open Serial Port");

return(-1);

}

else

printf("open ttyS1 .....\n");

}

else if (comport==3)

{

fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY);

if (-1 == fd){

perror("Can't Open Serial Port");

return(-1);

}

printf("open ttyS2 .....\n");

}

if(fcntl(fd, F_SETFL, 0)0)

printf("fcntl failed!\n");

else

printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));

if(isatty(STDIN_FILENO)==0)

printf("standard input is not a terminal device\n");

else

printf("isatty success!\n");

printf("fd-open=%d\n",fd);

return fd;

}

int main(void)

{

int fd;

int nread,i;

char buff[]="Hello\n";

if((fd=open_port(fd,1))0){

perror("open_port error");

return;

}

if((i=set_opt(fd,115200,8,'N',1))0){

perror("set_opt error");

return;

}

printf("fd=%d\n",fd);

// fd=3;

nread=read(fd,buff,8);

printf("nread=%d,%s\n",nread,buff);

close(fd);

}

linux串口编程参数配置详解

linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include //标准输入输出定义 #include //标准函数库定义 #include //Unix标准函数定义 #include #include #include //文件控制定义 #include //POSIX中断控制定义 #include //错误号定义 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 discipline cc_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; }

Linux下串口通信编程

Linux下串口通信编程 一、什么是串口通信? 串口通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。 二、串口通信的分类 串口通信可以分为同步通信和异步通信两类。同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。 2.1 同步通信 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。 它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。 同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。 2.2 异步通信 异步通信中,数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。 接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。 在异步通行中有两个比较重要的指标:字符帧格式和波特率。 (1)字符帧,由起始位、数据位、奇偶校验位和停止位组成。 1.起始位:位于字符帧开头,占1位,始终为逻辑0电平,用于向接收设备表示发送端开始发送一帧信息。 2.数据位:紧跟在起始位之后,可以设置为5位、6位、7位、8位,低位在前高位在后。 3.奇偶校验位:位于数据位之后,仅占一位,用于表示串行通信中采用奇校验还是偶校验。 (2)波特率,波特率是每秒钟传送二进制数码的位数,单位是b/s。 异步通信的优点是不需要传送同步脉冲,字符帧长度也不受到限制。缺点是字符帧中因为包含了起始位和停止位,因此降低了有效数据的传输速率。 三、什么是RS-232? RS-232-C 接口(又称EIA RS-232-C)它是在1970 年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25 个脚的DB25 连接器,对连接器的每个引脚的信号内容加

linux下串口编程简单实例

linux下串口编程简单实例 1、Linux中的串口设备文件存放于/dev目录下,其中串口一,串口二对应设备名依次为“/dev/ttyS0”、“/dev/ttyS1”。在linux下操作串口与操作文件相同。 2、在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现: struct termios{ tcflag_t c_iflag; /*input flags*/ tcflag_t c_oflag; /*output flags*/ tcflag_t c_cflag; /*control flags*/ tcflag_t c_lflag; /*local flags*/ cc_t c_cc[NCCS]; /*control characters*/ }; 该结构中c_cflag最为重要,可设置波特率、数据位、校验位、停止位。在设置波特率时需在数字前加上‘B’,如B9600、B19200。使用其需通过“与”“或”操作方式。 常用的串口控制函数: Tcgetattr 取属性(termios结构) Tcsetattr 设置属性(termios结构) cfgetispeed 得到输入速度 Cfgetospeed 得到输出速度 Cfsetispeed 设置输入速度 Cfsetospeed 设置输出速度 tcflush 刷清未决输入和/或输出 3、串口的配置 (1) 保存原先串口配置使用tcgetattr(fd,&oldtio)函数: struct termios newtio,oldtio; tcgetattr(fd,&oldtio); (2) 激活选项有CLOCAL和CREAD,用于本地连接和接收使能。 newtio.c_cflag | = CLOCAL | CREAD; (3) 设置波特率,使用函数cfsetispeed、cfsetospeed cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); (4) 设置数据位,需使用掩码设置。 newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; (5) 设置奇偶校验位,使用c_cflag和c_iflag。 设置奇校验: newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); 设置偶校验: newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD;

嵌入式Linux系统的搭建与配置过程

1.摘要 (2) 2.UBOOT,LINUX内核,文件系统的介绍及相互关系..3 2.1嵌入式系统简介 (3) 2.2嵌入式Linux概述 (3) 2.3UBOOT简介 (4) 3.UBOOT的启动过程 (6) 4.内核的主要功能和裁剪 (7) 4.1Linux的编译 (7) 4.2嵌入式Linux的配置和剪裁 (8) 5.文件系统的制作过程 (8) 6.交叉编译器的搭建和环境变量的设置 (9) 7.驱动程序的编写过程与关键点 (11) 7.1Linux网络驱动程序的结构 (11) 7.2网络驱动程序的基本方法 (12) 7.3网络驱动程序中用到的数据结构 (12) 7.4常用的系统支持 (14) 7.5编写Linux网络驱动程序中需要注意的问题 (18) 8.参考文献 (20)

嵌入式系统是以应用为中心,以计算机为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序4部分组成,用于实现对其它设备的控制、监视或管理等功能。其广泛应用于控制领域、消费电子产品等行业,已成为现代电子领域的重要研究方向之一。嵌入式Linux的研究已经成为当前信息技术研究的热点,它的应用蕴含着巨大的商业价值,并且己经广泛的应用于各种信息家电、通讯产品、工业控制中。论文首先介绍了ARM和嵌入式Linux操作系统的特点和当前的发展概况。然后阐述了嵌入式Linux 开发流程以及移植到具体硬件平台需要完成的工作,如U-Boot的移植、Linux内核的编译与裁剪、文件系统的制作、驱动程序的编写等。 关键字:嵌入式;ARM;嵌入式Linux;Linux内核;驱动程序

linux环境变量修改

redhat和ubuntu中修改环境变量 2010-03-06 23:43 有些命令的路径没有在PATH环境变量中,可以用echo $PATH命令查询得知,添加路径到PATH环境变量的方法如下: (如添加/sbin到PATH环境变量中) (1)如果只想在本次开机过程中临时性的添加修改,下次开机就无效的话,可以: 输入export PATH=$PATH:/sbin (2)如果只给当前用户永久添加,则: 在~/.bash_profile中的靠近末尾有类似这样的一行 PATH=$PATH:$HOME/bin后添加:/sbin,就变成 PATH=$PATH:$HOME/bin:/sbin 文件修改并保持完以后,运行source ~/.bash_profile命令即可使修改操作立即生效 (3)如果给系统中所有的用户都永久添加,则: 在/etc/profile文件中添加pathmunge :/sbin 如:/etc/profile文件打开后有如下代码 .....................

16 # Path manipulation 17 if [ `id -u` = 0 ]; then 18 pathmunge /sbin 19 pathmunge /usr/sbin 20 pathmunge /usr/local/sbin 21 fi ........................ 你将之改成: ........................ 16 # Path manipulation 17 if [ `id -u` = 0 ]; then 18 pathmunge /sbin 19 pathmunge /usr/sbin 20 pathmunge /usr/local/sbin 21 pathmunge /usr/local/arm/bin 22 fi ....................... 表示将/usr/local/arm/bin添加进环境变量 文件修改并保持完以后,运行source etc/profile命令即可使修改操

Linux下的串口编程

Linux下的串口编程(二) 分类:Linux S3C24402012-03-21 15:52 5557人阅读评论(1) 收藏举报linux编程终端terminalstruct测试 Linxu下的串口编程(二) /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ --------------------------------------------------------- Author :tiger-john WebSite :https://www.sodocs.net/doc/a86578503.html,/tigerjb Email :jibo.tiger@https://www.sodocs.net/doc/a86578503.html, Update-Time : 2011年2月14日星期一 Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我。3Q --------------------------------------------------------- 前面已经提到过Linux下皆为文件,这当然也包括我们今天的主角àUART0串口。因此对他的一切操作都和文件的操作一样(涉及到了open,read,write,close等文件的基本操作)。 一.Linux下的串口编程又那几部分组成

1. 打开串口 2. 串口初始化 3. 读串口或写串口 4. 关闭串口 二.串口的打开 既然串口在linux中被看作了文件,那么在对文件进行操作前先要对其进行打开操作。 1.在Linxu中,串口设备是通过串口终端设备文件来访问的,即通过访问/dev/ttyS0,/dev/ttyS1,/dev/ttyS2这些设备文件实现对串口的访问。

linux下jdk安装及环境变量的配置

1.先准备好jdk ,制作iso 映像文件。 jdk 下载: https://www.sodocs.net/doc/a86578503.html,/technetwork/java/javase/downloads /java-se-jdk-7-download-432154.html 2.在虚拟机中设置加载光驱iso 文件。(注意要启动光驱) 3.进入客户机系统,使用命令mount /mnt/cdrom 加载光驱到cdrom ,在使用cp 命令将cdrom 中的jdk 文件复制到home 文件夹中,用命令./jdk1.6.0_34运行即可。 1.修改/etc/profile 文件

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell 都有权使用这些环境变量,但可能会给系统带来安全性问题。 (1)用文本编辑器打开/etc/profile (2)在profile 文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOM E/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH (3)重新登录 注解: a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk 安装目录 等同于CLASSPATH=.:$JAVA_HOM E/jre/lib/rt.jar

b. linux下用冒号“:”来分隔路径 c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。 d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。 e. export是把这三个变量导出为全局变量。 f. 大小写必须严格区分。 2. 修改.bashrc文件 这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。 (1)用文本编辑器打开用户目录下的.bashrc文件 (2)在.bashrc文件末尾加入: set JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME set PATH=$JAVA_HOME/bin:$PATH

linux 串口输出

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

Linux Centos6.5下安装JDK8和配置环境变量详细步骤

Linux下安装JDK及其配置环境变量步骤:(我的环境centos6.5,用户名:zhang) 1.下载jdk,(我这里下载的jdk8)默认在/home/zhang/下载/ 这个目录下。 注意:a.这里的zhang是你登录的用户名 b.使用火狐浏览器下载,下载完成后,右键》打开所在文件夹,点击文件>打开位置.可以查看文件位置。 2.右键打开终端,如果显示$表示当前为普通用户,输入命令su root回车,再输入密码(安装时的密码),切换到超级管理用户root。 a.输入cd /home/zhang/下载/ 进入下载目录,再输入ls命令,列出此目录下文件,可以看到jdk-8u121-linux-x64.tar.gz刚刚下载的压缩文件 b.输入命令:cp jdk-8u121-linux-x64.tar.gz /usr/tmp 把文件拷贝到/usr/tmp目录下。以免中文目录引起莫名问题 3.解压压缩文件: a.在/usr/tmp目录下 b.命令:tar -xzf all.tar.gz -C 文件目录; c.tar -xzf jdk-8u121-linux-x64.tar.gz -C /usr/share 回车。把文件解压到/usr/share目录下 也可以解压到其他目录下,不过你可以看到在share目录下有很多安装的文件目录,有点儿类似windows中的programe files目录 ******--------配置java环境变量:-------************ 1.我们这里解压后的jdk目录为/usr/share/jdk1.8.0_121 2.可以先在终端中输入javac回车,会提示不是命令,说明没有配置环境变量。 3.使用命令vim /etc/profile回车打开编辑配置文件 4.上下光标到文件最后一行,键入o,快捷键,进入插入模式并定位到文件最后一行。 输入如下内容: export JAVA_HOME=/usr/share/jdk1.8.0_121 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 然后esc,输入:冒号。输入wq回车,保存并退出。 5.注销当前登录系统的用户,再次登录系统,打开终端,输入javac,输出一堆命令说明,成功! **********-----JDK的使用测试------********** 1.命令cd /home/zhang/ 回车,进入目录 2.命令mkdir workspace回车,创建一个新目录workspace,命令cd workspace进入 3.命令cat>Test.java回车 输入public class Test{ public static void main(String[] args){ System.out.println("Hello,Java!"); } } Ctrl+D快捷键保存并退出

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”(波 特率)界面,如下图所示。再按”I”以设置波特率为115200,点”F”键硬 件流控制设置为NO,回车 最终的设置结果如下,然后回车返回到串口设置主菜单中 │A-Serial Device(串口设备): /dev/ttyS1 │B-Lockfile Location(锁文件位置): /var/lock │C-Callin Program(调入程序): │D-Callout Program(调出程序): │E-Bps/Par/Bits(): 115200 8N1 │F-Hardware Flow Control(硬件数据流控制): No │G-Software Flow Control(软件数据流控制): No 二、Linux 标准输入输出重定向到串口指南 设置linux 系统的标准输入输出到com2(console 口),以便维护人员 在无网络、无显示器的情况下对系统维护。在各文件(/etc/grub.conf、 /etc/inittab、/etc/securetty)中添加红色部分!文件修改完成后 reboot 系统即可在com2 口看到标准输入输出信息。

Linux环境变量设置总结

Linux环境变量设置总结 1、引言 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本文基于RedHat9.0,详细讲解了环境变量定制的问题。 2、变量简介 Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 3、常见的环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序 $HOME:当前用户主目录 $MAIL:是指当前用户的邮件存放目录。 $SHELL:是指当前用户用的是哪种Shell。 $HISTSIZE:是指保存历史命令记录的条数 $LOGNAME:是指当前用户的登录名。 $HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。 $LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 $PS1:是基本提示符,对于root用户是#,对于普通用户是$,也可以使用一些更复杂的值。 $PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt:)”。 #PS1="Hello,My NewPrompt:)" $IFS:输入域分隔符。当shell读取输入时,用来分隔单词的一组字符,它们通常是空格、制表符和换行符。 $0:shell脚本的名字。 例如,在我的Linux系统中: $echo$0 /bin/bash

Linux--串口操作及设置详解

串口操作需要的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定义*/ #include /*Unix 标准函数定义*/ #include #include #include /*文件控制定义*/ #include /*PPSIX 终端控制定义*/ #include /*错误号定义*/ 1.打开串口 在前面已经提到linux下的串口访问是以设备文件形式进行的,所以打开串口也即是打开文件的操作。函数原型可以如下所示: int open(“DE_name”,int open_Status) 参数说明: (1)DE_name:要打开的设备文件名 比如要打开串口1,即为/dev/ttyS0。 (2)open_Status:文件打开方式,可采用下面的文件打开模式: O_RDONLY:以只读方式打开文件 O_WRONLY:以只写方式打开文件 O_RDWR:以读写方式打开文件 O_APPEND:写入数据时添加到文件末尾 O_CREATE:如果文件不存在则产生该文件,使用该标志需要设置访问权限位mode_t O_EXCL:指定该标志,并且指定了O_CREATE标志,如果打开的文件存在则会产生一个错误 O_TRUNC:如果文件存在并且成功以写或者只写方式打开,则清除文件所有内容,使得文件长度变为0 O_NOCTTY:如果打开的是一个终端设备,这个程序不会成为对应这个端口的控制终端,如果没有该标志,任何一个输入,例如键盘中止信号等,都将影响进程。 O_NONBLOCK:该标志与早期使用的O_NDELAY标志作用差不多。程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0。 函数返回值: 成功返回文件描述符,如果失败返回-1 例如:

ARM-LINUX-GCC设置环境变量

ARM-LINUX-GCC设置环境变量 在/etc/profile 里添加arm-linux-gcc 的存放路径具体是在命令行输入#sudo gedit /etc/profile 回车export PATH=$PATH:/你的arm-linux-gcc 存放的路径保存 退出export PATH=/usr/local/arm/bin 注意这里最好使用 export PATH=$PATH:/usr/local/arm/4.3.2/bin 没有$符号的时候可能会修改了默认路径 然后会回到终端输入命令界面,输入#arm-linux-gcc -v 下面的来自hi.baidu/gonghuixue/item/74a18faa2f7522921410734f1.首先安装build-essential:sudo apt-get install build-essential2.将友善之壁光盘中的arm- linux-gcc-4.3.2.tgz 拷贝到某个文件夹下,从终端进入该文件夹,进行解压:sudo tar -zxvf arm-linux-gcc-4.3.2.tgz -C /NOTE:配置项的C 是大写,且C 后面有个 空格。3.添加环境变量:这一步是我耗时间最长的,关于这一步网上也有很多 中说法:1>sudo gedit /root/.bashrc : 在最后一行添加exprot PATH=$PATH:/usr/local/arm/4.3.2/bin。我不知道其它linux 系统行不行,反正 我在ubuntu10.04 下是不行,运行arm-linux-gcc -v 提示:arm-linux-gcc:command not found。2>先gedit ~/.profile,然后在最后一行添加:export PATH=$PATH:/usr/local/arm/4.3.2/bin,接着source~/.profile,说是可以立即生效,这种是可以,但是我的总是只能使用一次,如果把终端关掉重新运行arm- linux-gcc -v,还是提示command not found.3> sudo gedit /etc/environment,在最后一个:号之后和号之前添加/usr/local/arm/4.3.2/bin:,OK!~~tips:感谢大家的 阅读,本文由我司收集整编。仅供参阅!

Linux下 QT串口与51单片机通信实例

QT串口与51单片机通信

通过这个小例子主要想说明QT怎样进行线程编程的思想,实例如图,好吧,下面是过程 上一个例子我们采用的是手工编写代码的方法,这个例子我们来玩一下designer,其实Qt4己经把界面与功能分开了,用designer来进行界面 设计,再手工编写一些功能,如信号与槽,这样开发效率会大大提高,呵呵,开一个终端,输入/usr/local/Trolltech/Qt-4.5.1/bin/designer ,如果第一次打开出现字体不对,可以打开qtconfig进行一些相关配置,打开后我们新建一个Main Window,在右边的属性框中设置一下界面大小, 1.我ARM板的LCD大小为320x240,所以我也设为320x240; 2.左边是一些我们常用的窗口部件,这里我们用到一个lable标签来做显示,再放几个pushButton按钮,在属性objectName重新更改它的名字,改为我们记得的,这样在写功能时记得哪个按钮叫什么名字,对于一个初学QT的人来说,很想知道每一个部件到底有什么信号和槽,别急,我们可以这样来看,选中一个lable,按F4,再点击lable拖动出现接地符号时松开,弹出编辑信号与槽,这时左边列出的是信号,右边为槽,这里我们不用配置连接,等下我们再手工写, 3最后我们用到一个lable标签和三个pushButton按钮,并命名为dis_label、writeButton、readButton、closeButton,然后保存为mainwindow.ui,这样designer就完工了,呵呵..

4.下面我们编写一个线程,用于管理串口收发工作,它不涉及到任何界面,只做好它的本份工作就得了,编写一个thread.h文件gedit thread.h, #ifndef THREAD_H #define THREAD_H #include class Thread:public QThread { Q_OBJECT public: Thread(); char buf[128]; volatile bool stopped; volatile bool write_rs; volatile bool read_rs; protected: virtual void run(); }; #endif 我们定义一个Thread类,它继承于QThread,看到只设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会增加一些内存开销, 但提高了效率,对于这个小程序是看不出什么效果的,volatile这个大家都懂了吧,就是防止偷懒,呵呵, 5.再看看thread.cpp #include"thread.h" #include #include #include #include //串口用到的 #include #include #include #include #define BAUDRATE B9600 //#define RS_DEVICE "/dev/ttyS0" //串口1 #define RS_DEVICE "/dev/ttySAC1" //串口1 Thread::Thread() {} //析构 void Thread::run() //这就是线程的具体工作了

linux下jdk安装、环境变量以及软连接设置

Linux下JDK的安装及配置 (20111117by石头2o11) 由于CentOS自带openjdk,在此操作系统下安装oracle等需要jdk环境的时候,需要进行一些必要的配置,现将方法列出如下:(以下方法已在centos6.0上验证成功) 一. 下载jdk1.6.0_29 for linux 到sun的主页https://www.sodocs.net/doc/a86578503.html,/technetwork/java/javase/downloads/ jdk-6u29-download-513648.html 下载jdk安装文件jdk-6u29-linux-i586-rpm.bin 二. 解压安装jdk 在shell终端下进入jdk-6u29-linux-i586-rpm.bin文件所在目录,执行命令 ./jdk-6u29-linux-i586-rpm.bin之后会在当前目录下生成一些rpm包,执行rpm -ivh jdk-6u29-linux-i586.rpm 将安装jdk1.6.0_29 到/usr/java目录 三. 配置环境变量 Vim /etc/profile文件,在最后添加如下几行 export JAVA_HOME=/usr/java/jdk1.6.0_29 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar 四.配置符号连接 删除原有符号连接 #rm -rf /usr/bin/java #rm -rf /usr/bin/javac 创建新符号连接 #ln -s /usr/java/jdk1.6.0_29/bin/java /usr/bin/java #ln -s /usr/java/jdk1.6.0_29/bin/javac /usr/bin/javac 可使用java -version命令查看是否创建成功*(如下则正确)

linux下的tty串口通信

异步通信:以单字符为发送单位,字符间发送能存在间隔 起始位:发送”0”,表示字符传送开始 数据位:可允许4 5 6 7的数据位 停止位:一个字符结束的标志位, 奇偶校验位:根据传送数据内“1”的个数是偶数还是奇数来校验数据是否准确 空闲位:在没有数据发送时,设置“1” Structure termios{ tcflag_t c_iflag; 输入方式 tcflag_t c_oflag; 输出方式 tcflag_t c_cflag; 控制模式标志 tcflag_t c_Iflag; 本地 tcflag_t c_cc[NCCS]; 控制字符,用于保存终端的特殊字符} c_iflag 标志常量:Input mode ( 输入模式) input mode可以在输入值传给程序之前控制其处理的方式。 其中输入值可能是由序列埠或键盘的终端驱动程序所接收到的字元。我们可以利用termios结构的c_iflag的标志来加以控制,其定义的方式皆以OR 来加以组合。 IGNBRK :忽略输入中的 BREAK 状态。(忽略命令行中的中断) BRKINT :(命令行出现中断时,可产生一插断)如果设置了 IGNBRK,将忽略 BREAK。如果没有设置,但是设置了 BRKINT,那么 BREAK 将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到 SIGINT 信号。如果既未设置 IGNBRK 也未设置 BRKINT,BREAK 将视为与NUL 字符同义,除非设置了 PARMRK,这种情况下它被视为序列 377 � �。 IGNPAR :忽略桢错误和奇偶校验错。 PARMRK :如果没有设置 IGNPAR,在有奇偶校验错或桢错误的字符前插入377 �。如果既没有设置 IGNPAR 也没有设置 PARMRK,将有奇偶校验错或桢错误的字符视为 �。 INPCK :启用输入奇偶检测。 ISTRIP :去掉第八位。 INLCR :将输入中的 NL 翻译为 CR。(将收到的换行符号转换为Return)IGNCR :忽略输入中的回车。 ICRNL :将输入中的回车翻译为新行 (除非设置了 IGNCR)(否则当输入信号有 CR 时不会终止输入)。 IUCLC :(不属于 POSIX) 将输入中的大写字母映射为小写字母。 IXON :启用输出的 XON/XOFF 流控制。 IXANY :(不属于 POSIX.1;XSI) 允许任何字符来重新开始输出。(?) IXOFF :启用输入的 XON/XOFF 流控制。 IMAXBEL:(不属于 POSIX) 当输入队列满时响零。Linux 没有实现这一位,总是将它视为已设置。

linux下查看和添加PATH环境变量

linux下查看和添加PATH环境变量 详见: https://www.sodocs.net/doc/a86578503.html,/home.php?mod=space&uid=830496&do=blog&id=676304 linux下查看和添加PATH环境变量 来自:https://www.sodocs.net/doc/a86578503.html,/share/detail/32942984 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。 编辑你的PATH 声明,其格式为: PATH=$PATH::::------: 你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句: $ source .bash_profile 需要注意的是,最好不要把当前路径“./” 放到PATH 里,这样可能会受到意想不到的攻击。完成后,可以通过$ echo $PATH 查看当前的搜索路径。这样定制后,就可以避免频繁的启动位于shell 搜索的路径之外的程序了。 可用export 命令查看PATH值 [root@localhost u-boot-sh4]# export declare -x CVS_RSH="ssh" declare -x DISPLAY=":0.0" declare -x G_BROKEN_FILENAMES="1" declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="localhost" declare -x INPUTRC="/etc/inputrc" declare -x LANG="zh_CN.UTF-8" declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s" declare -x LOGNAME="root" declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.ex e=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00; 31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;3 5:*.png=00;35:*.tif=00;35:" declare -x MAIL="/var/spool/mail/root" declare -x OLDPWD="/root" declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" declare -x PWD="/opt/STM/STLinux-2.3/devkit/sources/u-boot/u-boot-sh4" declare -x SHELL="/bin/bash" declare -x SHLVL="1"

相关主题