【elfboard linux开发板】5.vmware tools安装及uart属性的获取和设置

1. 安装VMware tools

系统:ubuntu22.04
虚拟机版本:VMware workstation 16 pro(16.1.2)
VMware tools文件(iso)一般在虚拟机目录下,如果没有,这是下载网址,找到对应的虚拟机版本下载解压缩并挂载即可;
在这里插入图片描述

通过如下步骤,挂载VMware tools

虚拟机设置CD/DVD
使用ISO映像文件-
选择VMware Workstation\linux.iso-
点击确定
右击图标,选择连接

为了方便自动化安装,新建如下文件install_vm_t.sh:

 #!/bin/bash
mkdir vm_tool
cp /media/liu/VMware\ Tools/* ./vm_tool/
cd ./vm_tool/
tar -zxvf VMwareTools-10.3.23-17030940.tar.gz
cd ./vmware-tools-distrib
sudo ./vmware-install.pl
sudo apt-get install open-vm-tools-desktop

安装时,直接在终端输入:bash install_vm_t.sh
安装完,在终端输入:reboot重启一下
同样为了方便卸载,新建如下文件uninstall_vm_t.sh

cd ~/vm_tools/vmware-tools-distrib/bin/
sudo ./vmware-uninstall-tools.pl
sudo apt-get autoremove open-vm-tools open-vm-tools-desktop          

卸载时,直接在终端输入:bash uninstall_vm_t.sh
安装成功后,重启;
然后,讲文件夹属性设置为共享,在vmware上勾选共享文件夹。
在这里插入图片描述

2. uart 设置

1. 读取串口配置的程序(uart.c )

需求:读取uart的输入输出波特率

  1. 保证程序健壮性
    命令的传入参数大于2,并且判断是否是tty设备
  2. 使用方式: 命令 tty名称
  3. 需要用到的函数:

a. 头文件:#include <termios.h> #include <unistd.h> ,termios.h头文件的地址在 /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/bits/
b. termios 结构体 至少包含下列成员:

  • tcflag_t c_iflag; /* 输入模式 */
  • tcflag_t c_oflag; /* 输出模式*/
  • tcflag_t c_cflag; /* 控制模式 */
  • tcflag_t c_lflag; /* 当地模式 */
  • cc_t c_cc[NCCS]; /* 特殊字符 */
  • speed_t c_ispeed; /* 输入速度 */
  • speed_t c_ospeed; /* 输出速度 */

c. int tcgetattr(int fd, struct termios ∗ * termios_p) :
作用:读取fd的相关属性,以termios结构体的方式放入termios_p
返回值:成功返回0,失败返回-1,并且设置errno

d. cfgetispeed() 获得传入的波特率,同termios_p->c_ispeed
e. cfgetospeed() 获得传出的波特率,同termios_p->c_ospeed

  1. open 函数的传参补充说明
    O_NOCTTY : 如果路径名指向终端设备(man 4 tty), 即使进程没有控制终端, 他也不会成为进程的控制终端
    O_NDELAY: no delay, 文件以非阻塞模式打开. 返回的文件描述符上的 open ()或任何后续 I/O 操作都不会导致调用进程等待。
/*
uart.c
*/
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(int argc,char *argv[]){if(argc<2||strncmp(argv[1],"tty",3)){printf("请在命令后加一个参数,并且参数名以tty开头\n");exit(1);}strcpy(dev,"/dev/");strcat(dev,argv[1]);int fd = open(dev,O_RDWR|O_NOCTTY|O_NDELAY);if(fd < 0){perror("open error");exit(1);}printf("顺利打开 %s 设备\n",dev);struct termios *tio = malloc(sizeof(struct termios));if(tcgetattr(fd,tio) != 0){perror("tcgetattr error");exit(1);}printf("输出的 baud is %d\n",cfgetospeed(tio));printf("输入的 baud is %d\n",cfgetispeed(tio));close(fd);return 0;
}

在这里插入图片描述

ps. 在ubuntu 22.04中如果需要输入中文,需要在 settings/region and language 中进入Manage installeed Languages中安装中文并应用。接着,在keyboard 的input sources中+选中chinese,接着选中Chinese(intelligent pinyin)

2. 配置uart(uart_w.c)

a. 置零termios结构体,初始化

  • CLOCAL 忽略调制解调器控制线
  • CREAD 使能接收器.
  • CSIZE

b. 配置uart的波特率、数据位、停止位、校验方式、硬件流控

波特率配置:通过cfsetispeed 和cfsetospeed配置
数据位:termio结构体的控制模式c_cflag的参数CSIZE 字符尺寸掩码. 值可以是 CS5, CS6, CS7, or CS8
停止位:CSTOPB 拉高两位停止位,拉低一位停止位;c_cflag第六位置1或0
校验方式(只关注奇偶校验):通过PARENB 使能(c_cflag第8位置1) 输出奇偶校验生成和输入奇偶校验;PAROAD拉高(c_cflag第9位置1),奇校验,反之,偶校验;
硬件流控:CRTSCTS, 使能RTS/CTS流控(最高位置1)

c. 需要用到的函数:

  • bzero(void *s, size_t count) 清零
  • int tcsetattr(int fd, int optional_actions, const struct termios ∗ * termios_p)**;
    作用:设置fd的终端相关属性。Option _ actions 指定更改何时生效:
    返回值:成功返回0,失败返回-1,并且设置errno
  • TCSANOW:立即生效
  • TCSADRAIN:更改发生在写入 fd 的所有输出被传输之后。更改影响输出的参数时应使用此选项。
  • TCSAFLUSH:更改发生在所有写入 fd 引用的对象的输出被传输之后,所有已接收但未读取的输入将在更改发生之前被丢弃。
  • int tcflush(int fd, int queue_selector); 本篇暂时不需要
    作用:根据 queue _ selector 的值,丢弃写入 fd 引用但未传输的对象的数据,或接收但未读取的数据,后续读写需要用到

TCIFLUSH: 刷新已接收但未读取的数据
TCOFLUSH:刷新已写入但未传输的数据。
TCIOFLUSH:刷新已接收但未读取的数据和已写入但未传输的数据。

/*
uart_w.c
*/
#include <unistd.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>char dev[1024];
int main(int argc,char *argv[]){if(argc<2||strncmp(argv[1],"tty",3)){printf("请在命令后加一个参数,并且参数名以tty开头\n");exit(1);}strcpy(dev,"/dev/");strcat(dev,argv[1]);//printf("%s\n",dev);int fd = open(dev,O_RDWR|O_NOCTTY|O_NDELAY);if(fd < 0){perror("open error");exit(1);}printf("顺利打开 %s 设备\n",dev);struct termios newtio,*tio = malloc(sizeof(struct termios));if(tcgetattr(fd,tio) != 0){perror("tcgetattr error");exit(1);}printf("设置前\n");printf("输出的 baud is %ld\n",cfgetospeed(tio));printf("输入的 baud is %ld\n",cfgetispeed(tio));bzero(&newtio,sizeof(struct termios));newtio.c_cflag |= CLOCAL|CREAD;newtio.c_cflag &= ~CSIZE;// 波特率 需要在命令中输入 且位置固定为第二个参数 数据位 7bit 停止位 1bit 校验方式 奇校验 硬件流控 NONEtio->c_cflag |= (0x01<<8)|(0x01<<9)|(0040);//newtio.c_cflag |= CS7;//newtio.c_cflag |= PARENB;//newtio.c_cflag |= PARODD;//newtio.c_cflag &= ~CSTOPB;//newtio.c_iflag |= INPCK;switch(atoll(argv[2])){case 50:cfsetispeed(&newtio,B50);cfsetospeed(&newtio,B50);break;case 57600:cfsetispeed(&newtio,B57600);cfsetospeed(&newtio,B57600);break;case 115200:cfsetispeed(&newtio,B115200);cfsetospeed(&newtio,B115200);break;case 1200:cfsetispeed(&newtio,B1200);cfsetospeed(&newtio,B1200);break;case 4800:cfsetispeed(&newtio,B4800);cfsetospeed(&newtio,B4800);break;case 9600:cfsetispeed(&newtio,B9600);cfsetospeed(&newtio,B9600);break;}/*newtio.c_cc[VTIME]=0;newtio.c_cc[VMIN] = 0;tcflush(fd,TCIFLUSH);*/if(tcsetattr(fd,TCSANOW,&newtio)<0){perror("tcsetattr error");exit(1);}if(tcgetattr(fd,&newtio) != 0){perror("tcgetattr error");exit(1);} printf("设置后\n");printf("输出的 baud is %ld\n",newtio.c_ospeed);printf("输入的 baud is %ld\n",cfgetispeed(&newtio));close(fd);return 0;
}

在这里插入图片描述
说明:
波特率的速度值输出的是10进制结果,与termios.h中定义的八进制的值是一致的;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM笔记-----输入捕获

输入捕获可以对输入的信号的上升沿、下降沿或者双边沿进行捕获&#xff0c;常用的有测量输入信号的脉 宽&#xff0c;和测量 PWM 输入信号的频率和占空比这两种。 输入捕获的大概的原理 当捕获到信号的跳变沿的时候&#xff0c;把计数器 CNT 的值锁存到捕获寄 存器 CCR 中…

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结&#xff1a; 1.Chatgpt引爆了通用人工智能&#xff0c;最大的受益者或是机器人&#xff0c;2023年最热门的创业赛道便是人形机器人&#xff0c;优必选更是成为人形机器人上市第一股&#xff0c; 可以说2023年是机器人开启智能化的元年&#xff0c;而2024则将成为机器…

【动态规划】LeetCode-10. 正则表达式匹配

10. 正则表达式匹配。 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 …

winform简易用户权限管理系统

一、功能简介 1. 数据库可使用sqlite、mssql、mysql等 2. 管理员账号不管控&#xff0c;其余账号进行权限管控&#xff08;左侧菜单&#xff0c;表单按钮&#xff09;&#xff0c;且只能看到自己创建的角色、用户 二、操作界面 1. 管理员账号登陆后&#xff0c;左侧菜单栏自动…

基于矩阵乘的CUDA编程优化过程

背景&#xff1a;网上很多关于矩阵乘的编程优化思路&#xff0c;本着看理论分析万遍&#xff0c;不如实际代码写一遍的想法&#xff0c;大概过一下优化思路。 矩阵乘的定义如下&#xff0c;约定矩阵的形状及存储方式为: A[M, K], B[K, N], C[M, N]。 CPU篇 朴素实现方法 按照…

Redis命令---String篇 (超全)

目录 1.Redis Setnx 命令 - 只有在 key 不存在时设置 key 的值。简介语法可用版本: > 1.0.0返回值: 设置成功&#xff0c;返回 1 。 设置失败&#xff0c;返回 0 。 示例 2.Redis Getrange 命令 - 返回 key 中字符串值的子字符简介语法可用版本: > 2.4.0返回值: 截取得到…

2024年个人工作计划怎么写?新年待办计划这样写更方便

元旦的钟声还在耳边回响&#xff0c;2024年的新篇章已经开启。面对新的一年&#xff0c;我深知一个清晰、实用的个人工作计划是多么重要。它不仅是指引我前进的灯塔&#xff0c;更是我实现目标、提升效率的秘密武器。 但如何制定这样一个计划呢&#xff1f;在过去&#xff0c;…

嵌入式开发——ADC开发

学习目标 了解ADC开发流程掌握采样方式能够使用ADC进行芯片内部通道进行采样能够使用ADC对外部电路进行采样学习内容 GD32F4的ADC 特点: 16个外部模拟输入通道;1个内部温度传感通道(VSENSE);1个内部参考电压输入通道(VREFINT);1个外部监测电池VBAT供电引脚输入通道。ADC开…

《工具录》nslookup

工具录 1&#xff1a;nslookup2&#xff1a;选项介绍3&#xff1a;示例 - 命令行模式3.1&#xff1a;查询类型设置3.2&#xff1a;指定 DNS 服务器 4&#xff1a;示例 - 交互模式5&#xff1a;其他 本文以 kali-linux-2023.3-vmware-amd64 为例。 1&#xff1a;nslookup nsloo…

算法29:不同路径问题(力扣62和63题)--针对算法28进行扩展

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff0…

什么是安全信息和事件管理(SIEM),有什么用处

安全信息和事件管理&#xff08;SIEM&#xff09;对于企业主动识别、管理和消除安全威胁至关重要。SIEM 解决方案采用事件关联、AI 驱动的异常检测以及机器学习驱动的用户和实体行为分析 &#xff08;UEBA&#xff09; 等机制来检测、审查和应对网络安全威胁。这些功能使 SIEM …

AntDB设计之CheckPoint——引言与功能简述

1.引言 数据库服务能力提升是一项系统性的工程&#xff0c;在不同的应用场景下&#xff0c;用户对于数据库各项能力的关注点也不同&#xff0c;如&#xff1a;读写延迟、吞吐量、扩展性、可靠性、可用性等等。国内不少数据库系统通过系统架构优化、硬件设备升级等方式&#xf…

数据库课程设计报告——音乐管理系统

目录 省流版word文档需求分析系统目标业务需求及处理流程功能需求及数据需求分析业务规则分析 概念设计命名规范实体集及属性联系集及属性系统总ER图 逻辑设计关系的设计关系的优化数据库基本表设计 物理设计关系模式存取方式选择数据库的存储结构 数据库应用设计数据库脚本数据…

VS2022 Android NativeActivity 开发指南

几年前最初使用VS时&#xff0c;记得是有Android NativeActivity的&#xff0c;今天更新到了2022最新版&#xff0c;发现找不到这个创建选项。 然后确保安装了C 跨平台开发工具后&#xff0c;开始排查原因。 Visual Studio 2022 中没有“本机活动应用程序” - android - SO中…

【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS &…

4462 4.曙曙献爱心

#include<bits/stdc.h> using namespace std; int n,m,k; int a[1001]; int s[1001]; int f[1001][1001];//f[i][j]&#xff0c;i个警察&#xff0c;j个点&#xff0c;能管理的最大人数 int main(){cin>>n>>m>>k;for(int i1;i<n;i){cin>>a[i…

大数据StarRocks(一) StarRocks概述

1 StarRocks介绍 StarRocks是新一代极速全场景MPP(Massively Parallel Processing)数据库&#xff0c;它充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果&#xff0c;在业界实践的基础上&#xff0c;进一步改进优化、升级架构&#xff0c;并增添了众多全…

Java学习,一文掌握Java之SpringBoot框架学习文集(2)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Docker 安装Mysql

目录 Docker Mysql安装 ✨安装和配置mysql ✨远程连接mysql远程连接 MySQL 是世界上最流行的开源数据库。根据 DB-Engines的调查数据&#xff0c;MySQL 是第二受欢迎的数据库&#xff0c;仅次于 Oracle 数据库。MySQL在过去由于性能高、成本低、可靠性好&#xff0c;已经成…

Redis缓存保卫战:拒绝缓存击穿的进攻【redis问题 三】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Redis缓存保卫战&#xff1a;拒绝缓存击穿的进攻 前言缓存击穿的定义和原理为何会发生缓存击穿缓存击穿的危害防范缓存击穿结语: 前言 你是否曾经遇到过系统在高并发情况下出现严重性能问题&#xff…