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.xdnf.cn/news/1705.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32的农业监测与管理系统设计思路介绍(代码示例)

一、项目概述 在全球农业现代化进程中&#xff0c;农业监测与管理系统的研发具有重要意义。本文介绍的基于STM32的农业监测与管理系统&#xff0c;旨在通过智能小车实现对农作物的环境监测、土壤检测等功能。该系统利用手势控制技术&#xff0c;农民可以通过简单的手势指令来操…

【2024-10-31-2024-11-03】LeetCode刷题——python语法基础题

&#x1f4dd;前言说明&#xff1a; ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;主要跟随B站作者灵茶山的视频进行学习&#xff0c;专栏中一篇文章为B站对应的一个视频 题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。 ●文章中的理…

2024年【烟花爆竹储存】考试试卷及烟花爆竹储存试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 烟花爆竹储存考试试卷考前必练&#xff01;安全生产模拟考试一点通每个月更新烟花爆竹储存试题及解析题目及答案&#xff01;多做几遍&#xff0c;其实通过烟花爆竹储存作业模拟考试很简单。 1、【单选题】( )负责烟花…

Uniapp的H5以及App不支持后端传FormData类型参数的解决方案

在uniapp中不支持FormData的传参&#xff0c;这就很恶心&#xff1b;如果强行传的话会提示&#xff0c;请求失败的报错信息。 因为后端必须要FormData类型的传参&#xff0c;所以在查阅一系列方案后&#xff0c;有一种解决办法可以完美解决。 代码&#xff1a; init() {const…

JS实现漂亮的登录页面(氛围感页面)

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录</title><style…

(C#面向初学者的 .NET 的生成 AI) 第 2 部分-什么是 AI 和 ML?

从本部分开始Luis Quintanilla介绍AI和机器学习&#xff0c;需要学习的一些东西是什么是AI和ML&#xff1f;作为一名.net开发人员如何学习使用AI和ML。 1、首先什么是AI 和 ML&#xff1f; 你可以把它看作是基本相同事物的不同层次。 在顶层的是AI&#xff08;人工智能&#xf…

Spring Boot技术:校园社团信息管理的革新者

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

探索高效HTTP会话管理:sessionup开源项目推荐

探索高效HTTP会话管理&#xff1a;sessionup开源项目推荐 sessionup Straightforward HTTP session management 项目地址: https://gitcode.com/gh_mirrors/se/sessionup 在现代Web应用开发中&#xff0c;会话管理是确保用户身份验证和数据安全的关键环节。为了帮助开发…

(七)JavaWeb后端开发——Maven

目录 1.Maven概述 2.Maven依赖管理 2.1依赖配置 2.2依赖传递 2.3依赖范围 2.4生命周期 1.Maven概述 maven是一款管理和构建java项目的工具 Maven的作用&#xff1a; 依赖管理&#xff1a;方便快捷的管理项目依赖的资源(jar包)&#xff0c;避免版本冲突问题统一项目结构…

jenkins 构建报错 Cannot run program “sh”

原因 在 windows 操作系统 jenkins 自动化部署的时候, 由于自动化构建的命令是 shell 执行的,而默认windows 从 path 路径拿到的 shell 没有 sh.exe &#xff0c;因此报错。 解决方法 前提是已经安装过 git WINR 输入cmd 打开命令行, 然后输入where git 获取 git 的路径, …

数据结构——二叉树

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ 这一篇博客我们开…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代&#xff0c;视频监控已经成为各行各业不可或缺的一部分&#xff0c;无论是公共安全、交通管理、企业监控还是智慧城市建设&#xff0c;都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中&#xff0c;将监控视频实时投放到大屏幕电视墙上…

JAVA_18

JAVA_18 1.IO流2.JAVA_IO流3.标准输入输出4.对象序列化5.字符编码与字符集6.异常处理和资源关闭7.NIO、BIO、AIO1. IO回顾&#xff1a;2. BIO(Blockingl/O)&#xff1a;3. NIO(Newl/O)&#xff1a;4. AIO(AsynchronousI/O)&#xff1a; 1.IO流 IO流(Input/Output stream)是用于…

提升大数据量分页查询性能:深分页优化全解

前言 在处理数据量逐渐增大的数据库表时&#xff0c;优化查询性能是一个常见的挑战。朋友们可能会建议说&#xff0c;创建索引不就能解决问题了吗&#xff1f;然而&#xff0c;当数据量达到相当规模时&#xff0c;简单的索引可能不足以应对所有情况。这时&#xff0c;可能会有…

多用户商城系统的架构与实现

随着互联网的迅猛发展&#xff0c;电子商务逐渐成为一种主流的商业模式。多用户商城系统作为一种新兴的商业平台&#xff0c;旨在为多个商家和用户提供一个互利共赢的交易环境。本文将深入探讨多用户商城系统的架构、实现及其在商业中的应用。 一、什么是多用户商城系统&#x…

[SpringBoot]浏览器输出中文乱码问题解决

问题情境&#xff1a; IDEA、Springboot、浏览器访问接口查看返回的JSON数据&#xff0c;发现中文乱码 解决方案&#xff1a; server:servlet:encoding:charset: UTF-8enabled: trueforce: true 如果你的配置文件不是yml格式&#xff0c;可以参考下面这个&#xff1a;

第4章 Linux必备命令

Linux系统启动默认为字符界面,一般不会启动图形界面,所以对命令行的熟练程度能更加方便、高效的管理Linux系统。 本章介绍Linux系统必备命令各项参数及功能场景,Linux常见命令包括:cd、ls、pwd、mkdir、rm、cp、mv、touch、cat、head、tail、chmod、vim等。 4.1 Linux命令…

统信UOS适配C#

通过Mono或.NET Core等运行时,在UOS上进行C#应用开发、编译、调试及部署变得便捷。 文章目录 一、环境部署1. C#开发环境安装2. C#开发环境配置二、 C#开发案例三、常见问题1. 图形界面支持2. 调试工具一、环境部署 1. C#开发环境安装 统信UOS V20使用dotnet 7.0 amd64版本,…

和鲸科技同南京大学地理与海洋科学学院签署和鲸“101 数智领航计划”合作协议,助力“地理海洋科学+AI”人才培养

2024 年 10 月 24 日&#xff0c;上海和今信息科技有限公司&#xff08;以下简称“和鲸科技”&#xff09;同南京大学地理与海洋科学学院召开合作洽谈会&#xff0c;会上&#xff0c;和鲸科技社区合伙人唐铭与南京大学地理与海洋科学学院副院长金晓斌正式签署和鲸“101 数智领航…

大模型,多模态大模型面试问题【P-tuning,VAE,梯度累加,秩,混合精读训练,SVM,softmax,LoRA】

大模型&#xff0c;多模态大模型面试问题【P-tuning,VAE,梯度累加,秩,混合精读训练,SVM,softmax,LoRA】 问题一&#xff1a;P-tuning源码&#xff0c;参数怎么加的&#xff01;问题二&#xff1a;VAE的V是什么回事,相对于AE做出的改进。问题三&#xff1a;梯度累加是解决什么问…