fmql之Linux以太网

正点原子第57章

dts

fmql-dtsi:

我们用的PHY芯片是RTL8211F:

需要添加PHY信息:

fmql-dtsi提供的参考:

 根据vivado工程自动生成的:

  • reg = <0x1>;

配置

疑问

网口通讯需要网线,但是目前板卡上只有PS_LWIP,且连接路由器(为了远程传输文件)。

那么,该网口是否可以进行通信?(通过程序进行收发)

正点原子教程只是测试了gmac0和gmac1的联网是否正常。

对后续我们所需实现的功能:tcp协议收发数据,没有作解释。

解答

先说结论:理论上可以。

主机(即电脑 PC)连接路由器,与板卡处在同一网段。

主机ping板卡:                能ping通

板卡ping主机:                能ping通

 测试联网

ping -c 10 www.baidu.com

主机:

 板卡:

主机和板卡都无法联网,是因为路由器没有网。

所以,如果路由器有网,则能ping通baidu.com(理论上)。

应用程序编写

代码来自以下链接:

LINUX应用网络代码-CSDN博客

配置了ip_addr(固定ip)和PORT,分为服务器端和客户端的代码。

但是!

路由器通过dhcp自动给板卡分配了ip,在程序里如何利用这一点?

  • 网线连接路由器,电脑与板卡在同一网段:

  • 网线连接电脑:

再次尝试

(server的程序其实也是client)也就是说,在server的程序中,ifdef并没有注释掉client的代码。

重新测试server代码:                        成功

client仍然不行

代码

server的代码并不需要ip地址。

/***************************************************************文件名                 : lwipServerAPP.c作者                   : Skylar描述                   : 网口收发测试其他                   : succeed***************************************************************/#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <errno.h>
#include <arpa/inet.h>#define TCP_PORT	5001
#define IP_ADDR		"192.168.1.138"#define BUF_SIZ		128int main(void)//(int argc,char **argv)
{int fd = -1;struct sockaddr_in serve_addr;int ret = -1;char buf[BUF_SIZ];const char *hello = "Hello from TCP Server";if((fd = socket(AF_INET,SOCK_STREAM,0)) < 0 ){printf("fd = %d\n",fd);perror("socket");exit(1);}printf("socket\r\n");bzero(&serve_addr,sizeof(serve_addr));// IP & Portserve_addr.sin_family = AF_INET;serve_addr.sin_port = htons(TCP_PORT);serve_addr.sin_addr.s_addr = INADDR_ANY;
/*     if(inet_pton(AF_INET,ADDR,(void *)&serve_addr.sin_addr) != 1){perror("pton");exit(1);} 
*///绑定if(bind(fd,(struct sockaddr *)&serve_addr,sizeof(serve_addr)) < 0){perror("bind");exit(1);}printf("bind\r\n");//调用listen把主动套接字变成被动套接字if(listen(fd,5) < 0)	// 监听连接{perror("listen");exit(1);}printf("listen\r\n");socklen_t len = sizeof(struct sockaddr_in);		//sockaddrstruct sockaddr_in * cilt =(struct sockaddr_in *) malloc(sizeof(struct sockaddr_in));bzero(cilt,sizeof(struct sockaddr));//阻塞等待客户端链接请求int newfd = -1;newfd = accept(fd,(struct sockaddr *)cilt,&len);if(newfd < 0){perror("accept");exit(1);}printf("accept\r\n");//读写char p[INET_ADDRSTRLEN];unsigned short int  du = ntohs(cilt->sin_port);inet_ntop(AF_INET,(void *)&(cilt->sin_addr),p,len);ret = send(newfd, hello, strlen(hello), 0);if(ret < 0){perror("send");return -1;}else{printf("send message succeed\r\n");}while(1){bzero(buf,sizeof(buf));do{ret = read(newfd,buf,BUF_SIZ - 1);} while(ret < 0 && EINTR == errno );if(ret < 0){perror("read");exit(1);}if(!ret)break;printf("recv[%u]:[%s] data: %s\n",du,p,buf);if(!strncasecmp(buf,"quit",strlen("quit"))){printf("exit \n");break;}}close(newfd);close(fd);return 0;}           // end of main

 client.c                (failed)

/***************************************************************文件名                 : lwipClientAPP.c作者                   : Skylar描述                   : 网口收发测试其他                   : failed(shell)***************************************************************/#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <errno.h>
#include <arpa/inet.h>#define TCP_PORT	5001
#define ADDR		"192.168.1.138"#define BUF_SIZ		128int main(void)//(int argc,char **argv)
{int fd = -1;struct sockaddr_in serve_addr;int ret = -1;char buf[BUF_SIZ];//创建套接字if((fd = socket(AF_INET,SOCK_STREAM,0)) < 0 ){perror("socket");exit(1);}//链接服务器bzero(&serve_addr,sizeof(serve_addr));serve_addr.sin_family = AF_INET;serve_addr.sin_port = htons(TCP_PORT);//serve_addr.sin_addr.s_addr = inet_addr(ADDR);// 将地址转换为二进制形式if(inet_pton(AF_INET,ADDR,(void *)&serve_addr.sin_addr) != 1){perror("pton");exit(1);}if(connect(fd,(struct sockaddr *)&serve_addr,sizeof(serve_addr)) < 0){perror("connect");exit(1);}//读写数据while(1){bzero(buf,BUF_SIZ);if(fgets(buf,BUF_SIZ - 1,stdin) == NULL){continue;}if(!strncasecmp(buf,"quit",strlen("quit"))){printf("exit \n");break;}write(fd,buf,strlen(buf));}close(fd);//关闭套接字}           // end of main

Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析) - yxysuanfa - 博客园

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

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

相关文章

Java面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) …

在 Elasticsearch 中顺利管理季节性时间变化

作者&#xff1a;来自 Elastic Valeriy Khakhutskyy, James Gowdy 用于 Elasticsearch 异常检测的新夏令时日历。 每年春季和秋季两次&#xff0c;许多国家/地区都会调整时钟以更好地利用日光。这些时钟调整不仅会带来时差和 “困倦的星期一” 的感觉&#xff0c;还会带来来自…

Qt——信号和槽

一.信号和槽概述 谈及信号&#xff0c;很容易联想到在Linux系统中所分享到的信号。那么Linux信号和Qt信息有什么不同&#xff1f; 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。比如 "用户点击按钮" 是⼀个事件&#xff0c;"用户关 闭窗口&quo…

必胜客万圣节“邪恶鬼手披萨”,品牌营销的“鬼”才之作!

在万圣节的神秘氛围下&#xff0c;各大品牌纷纷推出创意营销活动&#xff0c;试图在这个充满奇幻色彩的节日里捕获消费者的心。其中&#xff0c;必胜客推出的“邪恶鬼手披萨”无疑是一次令人拍案叫绝的品牌营销“鬼”才之作&#xff0c;它不仅巧妙地融合了节日元素&#xff0c;…

3D Gaussian Splatting代码详解(一):模型训练、数据加载

1 模型训练 def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):first_iter 0# 初始化高斯模型&#xff0c;用于表示场景中的每个点的3D高斯分布gaussians GaussianModel(dataset.sh_degree)# 初始化…

[MySQL#6] 表的CRUD (1) | Create | Retrieve(查) | where

目录 1. 插入 1.1 单行数据 - 全列插入 指定列插入 1.2 多行数据 - 全列插入 指定列插入 1.3 更新 1.4 替换 2. 查找 2.1 select 列 2.2 where 条件 具体案例 2.3 结果排序 总结关键字执行顺序 2.4 筛选分页结果 CRUD : Create(创建)&#xff0c;Retrieve(读取)&…

[机器学习]集成学习

1 集成学习 强强联合、弱弱变强Bagging&#xff08;平权投票&#xff09;&#xff1a;随机森林Boosting&#xff08;加权投票&#xff09;&#xff1a;Adaboost、GBDT、XGBoost、LightGBM 2 随机森林 3 Adaboost 放大错误数据&#xff0c;缩小正确数据

第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八

一、流量控制 一般来说&#xff0c;我们总是希望数据传输得更快一些&#xff0c;但是如果发送方把数据发送得太快&#xff0c;接收方可能来不及接收&#xff0c;造成数据的丢失&#xff0c;数据重发&#xff0c;造成网络资源的浪费甚至网络拥塞。所谓的流量控制&#xff08;fl…

在Excel中如何快速筛选非特定颜色

Excel中的自动筛选是个非常强大的工具&#xff0c;不仅可以筛选内容&#xff0c;而且可以筛选颜色&#xff0c;例如筛选A列红色单元格。但是有时希望筛选除了红色之外的单元格&#xff08;下图右侧所示&#xff09;&#xff0c;其他单元格的填充色不固定&#xff0c;有几种颜色…

数据结构---链表(一)【不带头单向非循环】

文章目录 链表概念链表的使用LinkedList 的几种遍历方式单链表的模拟实现&#xff08;不带头&#xff09;链表面试题 观察ArrayList 顺序表的源码发现&#xff0c;底层是使用数组实现的。由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xf…

Pytorch(一)

一.PyTorch环境配置及安装 1.1 工具安装 1.1.1 Anaconda下载 清华大学镜像站下载&#xff0c;版本为Anaconda3-5.2.0-Windows-x86_64&#xff08;对应python3.6.5&#xff09; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 1.1.2…

关于我的数据结构与算法——初阶第二篇(排序)

&#xff08;叠甲&#xff1a;如有侵权请联系&#xff0c;内容都是自己学习的总结&#xff0c;一定不全面&#xff0c;仅当互相交流&#xff08;轻点骂&#xff09;我也只是站在巨人肩膀上的一个小卡拉米&#xff0c;已老实&#xff0c;求放过&#xff09;。 排序的概念及其运…

AI驱动的低代码未来:加速应用开发的智能解决方案

引言 随着数字化转型的浪潮席卷全球&#xff0c;企业对快速构建应用程序的需求愈发强烈。然而&#xff0c;传统的软件开发周期冗长、成本高昂&#xff0c;往往无法满足快速变化的市场需求。在此背景下&#xff0c;低代码平台逐渐成为开发者和企业的优选方案&#xff0c;以其“低…

三周精通FastAPI:21 子依赖项和路径操作装饰器依赖项

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/dependencies/sub-dependencies/#_6 子依赖项 FastAPI 支持创建含子依赖项的依赖项。 并且&#xff0c;可以按需声明任意深度的子依赖项嵌套层级。 FastAPI 负责处理解析不同深度的子依赖项。 第一层依赖项 …

模具生产管理系统软件:提升制造业效率的新利器

引言 我们都知道&#xff0c;企业面临着提高生产效率、降低成本和提升产品质量的压力。模具生产作为制造过程中至关重要的一环&#xff0c;如何有效管理和优化模具生产过程&#xff0c;成为企业关注的重点。模具生产管理系统应运而生&#xff0c;能够为企业提供实时监控、流程…

MySQL中,如何定位慢查询?定位到的慢SQL如何分析?

目录 1. 慢查询发生的场景&#xff1f; 2. MySQL中&#xff0c;如何定位慢查询&#xff1f; 2.1 详细解释 3. 定位到的慢SQL如何分析&#xff1f; 3.1 详细说明 1. 慢查询发生的场景&#xff1f; 2. MySQL中&#xff0c;如何定位慢查询&#xff1f; 介绍一下当时产生问题…

「C/C++」C++ 设计模式 之 单例模式(Singleton)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

华为云开源项目Sermant正式成为CNCF官方项目

近日&#xff0c;云原生计算基金会&#xff08;CNCF&#xff09;正式接纳由华为云发起的云原生无代理服务网格项目Sermant。Sermant的加入&#xff0c;极大地丰富了云原生微服务治理技术的探索、创新和发展&#xff0c;为CNCF社区注入了新的活力。 Sermant是华为云在微服务治理…

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision&#xff0c;虽然好用&#xff0c;可大部分人用的是盗版&#xff0c;其实单片机程序小的话&#xff0c;完全可以用文本编辑器&#xff08;推荐notepad)编写&#xff0c;然后用免费的sdcc来编译&#xff0c;下面介绍一下大致的过程。 sdcc…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…