openwrt (linux)串口通信

A40i使用笔记:重定向串口输出信息到telnet端口(任意定向) 一、前言 在嵌入式Linux系统中,我是用的是A40i,有时通过远程(telnet或者ssh)登录到现场设备,想看程序的实时打印的调试信息,需要将输出到串口的调试信息重定向到当前登录的终端界面上。 下面是实现的代码,可以将输出到串口的日志信息,重定向到当前的telnet或者ssh界面上,是不是很神奇! 神奇个毛线 二、环境 Ubuntu16.0 window10 A40i 参考连接: linux下tty, ttyn, pts, pty, ttySn, console理解 linux C语言 阅读详情

openwrt (linux)串口通信

1. 基本的串口通信程序。先读取内容,再将内容写回串口。

  1. #include     <stdio.h>  
  2. #include     <stdlib.h>   
  3. #include     <unistd.h>    
  4. #include     <sys/types.h>  
  5. #include     <sys/stat.h>  
  6. #include     <fcntl.h>   
  7. #include     <termios.h>  
  8. #include     <errno.h>  
  9.      
  10. main()  
  11. {  
  12.     int fd;  
  13.     int i;  
  14.     int len;  
  15.     int n = 0;        
  16.     char read_buf[256];  
  17.     char write_buf[256];  
  18.     struct termios opt;   
  19.       
  20.     fd = open("/dev/ttyATH0", O_RDWR|O_NOCTTY|O_NDELAY);  
  21.     if(fd == -1)  
  22.     {  
  23.         perror("open serial 0\n");  
  24.         exit(0);  
  25.     }  
  26.   
  27.     tcgetattr(fd, &opt);        
  28.     bzero(&opt, sizeof(opt));  
  29.       
  30.     tcflush(fd, TCIOFLUSH);  
  31.   
  32.     cfsetispeed(&opt, B115200);  
  33.     cfsetospeed(&opt, B115200);  
  34.       
  35.     opt.c_cflag &= ~CSIZE;    
  36.     opt.c_cflag |= CS8;     
  37.     opt.c_cflag &= ~CSTOPB;   
  38.     opt.c_cflag &= ~PARENB;   
  39.     opt.c_cflag &= ~CRTSCTS;  
  40.     opt.c_cflag |= (CLOCAL | CREAD);  
  41.    
  42.     opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);  
  43.    
  44.     opt.c_oflag &= ~OPOST;  
  45.       
  46.     opt.c_cc[VTIME] = 0;  
  47.     opt.c_cc[VMIN] = 0;  
  48.       
  49.     tcflush(fd, TCIOFLUSH);  
  50.    
  51.     printf("configure complete\n");  
  52.       
  53.     if(tcsetattr(fd, TCSANOW, &opt) != 0)  
  54.     {  
  55.         perror("serial error");  
  56.         return -1;  
  57.     }  
  58.   
  59.     printf("start send and receive data\n");  
  60.   
  61.     while(1)  
  62.     {      
  63.         n = 0;  
  64.         len = 0;  
  65.         bzero(read_buf, sizeof(read_buf));   
  66.         bzero(write_buf, sizeof(write_buf));  
  67.    
  68.         while( (n = read(fd, read_buf, sizeof(read_buf))) > 0 )  
  69.         {  
  70.             for(i = len; i < (len + n); i++)  
  71.             {  
  72.                 write_buf[i] = read_buf[i - len];  
  73.             }  
  74.             len += n;  
  75.         }  
  76.         write_buf[len] = '\0';  
  77.                 
  78.         printf("Len %d \n", len);  
  79.         printf("%s \n", write_buf);  
  80.    
  81.         n = write(fd, write_buf, len);  
  82.         printf("write %d chars\n",n);  
  83.           
  84.         sleep(2);  
  85.     }  
  86.       
  87. }  

2. 注意
  1. opt.c_cc[VTIME] = 0;  
  2. opt.c_cc[VMIN] = 0;  

在这两个值均为0 的情况下,read不管有没有数据都会立即返回。详细情况在linux下man tcsetattr.

如果不设定这两个值,那么read只有收到回车后才会读取缓存中的数据。


异常处理:

如果串口被系统占用,只能SSH,必须如下操作


一、修改 /etc/inittab 
####ttyS0::askfirst:/bin/ash --login
####ttyS1::askfirst:/bin/ash --login
把最下面的两行注释掉即可


二、

释放ttyS0作为通信串口

#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
void CloseConsole(void) {

int fp;
struct termios options;
printf("change1\n");
fp = open("/dev/tty1",O_RDONLY); // 改变console
ioctl(fp,TIOCCONS);
close(fp);

fp = open("/dev/tts/0",O_RDWR|O_NOCTTY|O_NDELAY); //打开串口0读写
if(fp == -1) exit(0);
tcgetattr(fp,&options);
cfsetispeed(&options,B115200);
cfsetospeed(&options,B115200);
options.c_cflag |= (CLOCAL|CREAD);
tcsetattr(fp,TCSANOW,&options);
write(fp,"hello world!\n123",15);
close(fp);                       //关闭串口0

fp = open("/dev/tty0",O_RDONLY); //恢复console 到串口0
ioctl(fp,TIOCCONS);
close(fp);
printf("change2\n");
}

关于关闭SHELL对串口的占用,使之能做普通的串口通信和拨号

1、步骤:
在内核编译过程中执行make menuconfig
Character devices --->
Serial drivers --->

S3C2410 serial port support
[ ] Console on S3C2410 serial port 【注】去掉这项即可,不必修改busybox/init.c了 
< > 8250/16550 and compatible serial support (EXPERIMENTAL)
2、备注:
这样就不能用ttyS0口来登录ARM开发板了,你可以选择用TELNET的方式来登录。
做法:telnet 192.168.0.12(你的开发板的IP地址)
         输入:“root”用户名就可以进入你的开发板了
3、OK..



该文章转至http://blog.youkuaiyun.com/wonengxing/article/details/9719739
                    http://blog.youkuaiyun.com/neiloid/article/details/7585876
OpenWrt系统在串口控制台关闭的情况下如何再通过串口开启控制台 OpenWrt系统在串口控制台关闭的情况下如何再通过串口开启控制台 标题可能有点绕,看不明白的可能会问,通过ssh连接,进入后台修改/etc/inittab不就可以了吗? 可以是可以,咱这里介绍的是如何通过串口来修改/etc/inittab来开启串口控制台,请往下看! 第一步:进入failsafe模式 openwrt系统是有failsafe模式的,关于failsafe模式不过多介绍,... 阅读详情

相关推荐

OpenWrt下实现USB转串口驱动的配置与调试

本文详细介绍了在OpenWrt系统中配置与调试USB转串口驱动的完整流程。从硬件选型(如CH340、PL2303芯片)与连接,到内核驱动的编译配置(通过make menuconfig),再到系统调试(使用lsusb、dmesg命令)与串口通信测试(使用minicom或screen),提供了从入门到实战的清晰指南。文章旨在帮助开发者将OpenWrt设备扩展为串口服务器或物联网网关,解决硬件通信与调试难题。

weixin_29159441的博客 117

Linun开发总结之串口日志重定向

有时现网设备日志输出在串口,telnet登录后,操作时没有日志输出,这里通过将串口重定向,在当前终端输出日志

写作是为了更好的思考 1218

OpenWrt路由器如何添加USB转串口功能?以HLK_MTK7628n为例

本文以HLK-MT7628n开发板为例,详细介绍了为OpenWrt路由器添加USB转串口功能的完整流程。内容涵盖从CH340、CP2102等芯片选型、OpenWrt编译环境搭建、内核驱动配置,到固件烧录及功能测试的全步骤,旨在帮助开发者扩展路由器物理接口,实现与串口设备的通信,适用于智能家居、工业控制等物联网项目。

weixin_29189381的博客 75

串口重定义

正常情况下我们驱动和平台的调试是通过串口调试的,但是和其他模块通信一般使用的是网口。 如何将当前串口信息的输出重定向到网口: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> #define STDOUT_FD (1) int main(int

c4679281314的博客 1199

OpenWRT环境下使用libmodbus实现Modbus RTU传感器数据采集

本文详细介绍了在OpenWRT环境下使用libmodbus实现Modbus RTU传感器数据采集的全过程。从环境准备、硬件连接到代码实战,涵盖了串口配置、数据采集、错误处理等关键步骤,并分享了实际项目中的优化经验与问题解决方案,助力开发者高效完成工业物联网设备的数据采集任务。

weixin_28703489的博客 901

OpenWRT环境下使用libmodbus实现Modbus传感器数据采集

本文详细介绍了在OpenWRT环境下使用libmodbus库实现Modbus传感器数据采集的完整方案。从硬件准备、软件配置到代码实现,逐步讲解如何将普通路由器改造为物联网网关,并分享实战中的常见问题排查和性能优化技巧,帮助开发者低成本构建智能监测系统。

weixin_29166013的博客 251

openwrt 怎么进入串口_openwrt (linux)串口通信

1基本的串口通信程序。先读取内容,再将内容写回串口。#include#include#include#include#include#include#include#includemain(){intfd;inti;intlen;intn=0;charread_buf[256];charwrite_buf[256];structtermiosopt;fd=open("/dev/ttyAT...

weixin_39636245的博客 398

OpenWrt开发第13篇:OpenWrt上读取带USB接口的GPS设备信息

本文介绍了在OpenWrt系统中为Raspberry Pi 4B开发板配置USB GPS模块的详细步骤。通过make menuconfig命令依次选择USB驱动(包括kmod-usb-core、kmod-usb-serial-pl2303等)、GPS工具(gpsd和gpsd-clients),完成编译后插入GPS设备即可识别为ttyUSB0接口。文章配有11张操作截图,完整展示了从驱动配置到设备识别的全过程。该内容来自付费专栏《Openwrt开发-基于Raspberry Pi 4B开发板》,禁止私自转载。

指尖动听知识库 252

OPENWRT的串口初试

近来因为项目需要,第一次接触Linux系统的硬件,心里有点小激动。。。我使用的Microwrt是OPENWRT的微型版本,系统一样,但更加小巧,方便使用。         不过由于是第一次使用,光Helloworld就测试了很长时间。现在更卡在了串口问题上,在网上也没找到OPENWRT串口方面的资料(可能是我比较笨吧)。在高人的指导下,我更改了询问度娘的方式,开始搜索Linux串口方面的

飘飘花吹雪的专栏 4007

嵌入式Linux环境下基于Qt的串口通信实践指南

Qt是一个跨平台的C++应用程序框架,广泛用于开发图形用户界面应用程序以及无界面程序如工具和服务器。它提供了一整套工具和库,用于在多个桌面和移动操作系统上进行开发,包括但不限于Windows、macOS、Linux、iOS和Android。Qt SerialPort模块是Qt框架中的一个组件,专门用于处理串口通信。其架构设计为模块化,允许开发者简单地集成串口通信到他们的应用程序中。该模块提供了完整的API集合,从基础的串口打开、关闭到数据的读写,以及配置串口参数等。

weixin_42576410的博客 1109

OpenWrt系统4G模块移植实战指南

OpenWrt 是一个基于 Linux 的高度模块化、可定制的嵌入式操作系统,广泛应用于路由器、网关及物联网通信设备中。其核心优势在于灵活的构建系统与丰富的软件包管理机制,使得开发者可以根据具体硬件平台与功能需求进行定制化裁剪与扩展。本章将从 OpenWrt 的整体架构入手,剖析其构建流程与模块化机制,并引出在嵌入式设备中实现 4G 模块通信的关键路径。以下是一些常见的设备树节点及其作用:节点名说明cpus定义CPU信息,包括架构、频率等memory描述内存地址范围。

weixin_34268462的博客 1691

嵌入式linux操作串口简单示例

嵌入式linux操作串口简单示例 这里以MT7688 openwrt系列为例 main.c #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include <termios.h> #include <stdio.h> #include <stdlib.h> #include <string.h> //打开串口文件 static int open_u

锅锅的博客 707

Linux 中如何把串口0 改为普通串口使用

开发板自带的Linux 系统中,串口0(对应设备/dev/ttySAC0)已经被用作控制台使用,如何把它 作为普通串口使用,需要改两个地方: 1. 在bootloader 中把Linux 启动参数的串口输出改为null,根据使用bootloader 的不同,可以又 分为两种情况:(1)使用supervivi 作为bootloader (2)使用vboot 作为bootloader 2. 屏蔽内核解压时的打印信息

OPENWRT串口收发测试详解

最近刚刚开始接触Linux内核编程,第一项就是串口编程,结果卡在这里了,卡了好久,后来发现问题其实挺简单的,只是没有想到,现在把代码放在下面,代码内有详细的注释,就不多做说明了,而我当时出问题的地方我也做了特殊说明,希望你们注意一下(实验环境是microwrt) /* *按照教程学习串口的编程 *网址1:http://blog.youkuaiyun.com/shanzhizi/article/detai

飘飘花吹雪的专栏 5922

从华为杯建模到论文录用:我的Biomedical Signal Processing and Control投稿全记录(含Latex模板与审稿人推荐技巧)

本文详细记录了作者从华为杯数学建模竞赛到Biomedical Signal Processing and Control期刊投稿的全过程,分享了如何将竞赛成果转化为学术论文的实用技巧,包括LaTeX排版中的常见陷阱与解决方案,以及审稿人推荐策略。特别提供了针对Elsevier模板的优化建议和高效回复审稿意见的方法,适合生物医学信号处理领域的研究者参考。

weixin_42549037的博客 452

S32DS3.5图形化配置实战:从零构建S32K144通信接口工程

本文详细介绍了如何使用S32DS3.5图形化配置工具从零构建S32K144通信接口工程。通过实战演示引脚配置、时钟树设置、SPI接口搭建等关键步骤,帮助开发者快速掌握NXP S32K系列开发技巧,提升嵌入式开发效率。特别针对S32DS3.5版本的新特性进行了深度解析,包括智能代码生成和调试优化方法。

weixin_26834815的博客 199

Redmi AX3000路由器OpenWrt实战:从零构建企业级网络平台

想要将家用路由器升级为功能强大的网络管理中枢吗?Redmi AX3000结合OpenWrt系统,能够为你打造一个堪比企业级路由器的网络环境。本文将深度解析如何通过OpenWrt系统释放Redmi AX3000的全部潜力。 [![OpenWrt官方标志](https://raw.gitcode.com/gh_mirrors/op/openwrt-redmi-ax3000/raw/6faaa1504

gitblog_00417的博客 720

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 449

串口工具的使用

1. 串口工具的选择与安装 a)  Linux 下通过 apt-get minicom进行安装 b)  MAC 下先安装软件包管理工具——brew,再安装minicom c)  Windows下推荐使用Putty             2. minicom 的使用             插上串口通信设备后,通过 ls/dev/*tty* 查看挂载的串口名,一般/dev/

fengzhejun的博客 1325

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 622

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1088
上一篇: 如何选择代码测试工具
下一篇: openwrt机器人:超牛
肋牛满面
博客等级 码龄14年 28粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值