fmql之Linux以太网

news2024/11/27 8:21:53

正点原子第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		128

int 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 & Port
	serve_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);		//sockaddr
	struct 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		128

int 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.coloradmin.cn/o/2227991.html

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

相关文章

新工具可绕过 Google Chrome 的新 Cookie 加密系统

一位研究人员发布了一款工具&#xff0c;用于绕过 Google 新推出的 App-Bound 加密 cookie 盗窃防御措施并从 Chrome 网络浏览器中提取已保存的凭据。 这款工具名为“Chrome-App-Bound-Encryption-Decryption”&#xff0c;由网络安全研究员亚历山大哈格纳 (Alexander Hagenah…

51c大模型~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/11519413 #斯坦福小镇 机器人版的「斯坦福小镇」来了&#xff0c;专为具身智能研究打造 首个专为各种机器人设计的模拟互动 3D 社会。 还记得斯坦福的 AI 小镇吗&#xff1f;这是斯坦福的 AI 研究者打造的一个虚拟环境。在这…

【机器学习】音乐与AI的交响:机器学习在音乐产业中的应用

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习在音乐创作中的革新&#x1f341;AI作曲家的诞生与作品展示&#x1f342;机器学习在音乐…

用unity XR interaction Toolkit 制作垃圾分类虚拟仿真项目

项目效果演示&#xff1a; 垃圾分类虚拟仿真项目演示 1.环境配置 选择universal 3D(通用渲染管道)项目&#xff08;不然导入素材包会丢失材质&#xff09;。 选择Window->Package Manager,安装其中的XR interaction Toolkit。 选择其中的Samples,导入Starter Assets。 选择…

[vulnhub]Kioptrix: Level 1.2 (#3)

https://www.vulnhub.com/entry/kioptrix-level-12-3,24/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是169 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-29 13:16 CST …

iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?

众所周知&#xff0c;苹果品牌的设备自己有AirPlay的投屏功能&#xff0c;iPhone要投屏到MacBook只要连接同一网络&#xff0c;然后开启AirPlay就可以投屏。但其他品牌的手机没有AirPlay&#xff0c;怎么将手机屏幕投射到MacBook呢&#xff1f; 安卓系统的手机可以使用无线投屏…

C++初阶(七)--类和对象(4)

目录 ​编辑 一、再谈构造函数 1.构造函数体赋值 2.初始化列表 二、类型转换 1.隐式类型转换 2.explicit关键字 3.类类型之间的对象隐式转换 三、static成员函数 1.概念 2.特性 3.面试题&#xff1a; 四、友元函数 1.基本介绍 2.回顾&#xff1a; 3.友元类&am…

【水下生物数据集】 水下生物识别 深度学习 目标检测 机器视觉 yolo(含数据集)

一、背景意义 随着全球海洋生态环境的日益变化&#xff0c;水下生物的监测和保护变得愈发重要。水下生物种类繁多&#xff0c;包括螃蟹、鱼类、水母、虾、小鱼和海星等&#xff0c;它们在海洋生态系统中扮演着关键角色。传统的水下生物监测方法通常依赖于人工观察&#xff0c;效…

QT相机连接与拍照

先看效果 初始化 auto mainLayout new QHBoxLayout(this);m_viewfinder new QCameraViewfinder(this);m_viewfinder->setStyleSheet("border-radius: 20px;background-color:rgb(43,48,70)");mainLayout->addWidget(m_viewfinder,8); 选择相机 void camera…

uniapp position: fixed 兼容性不显示问题

position: fixed; bottom: 0;以上运行到微信小程序时正常&#xff0c;但是h5会出现不显示的问题。 解决方法 修改为&#xff1a; position: fixed; bottom: var(--window-bottom, 0);

数据库数据恢复—Oracle ASM磁盘组掉线 ,ASM实例无法挂载的数据恢复案例

Oracle数据库数据恢复环境&故障&#xff1a; Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 &#xff0c;ASM实例不能mount。 Oracle数据库故障分析&恢复方案&#xff1a; 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储…

基于 NXP iMX8MP 平台简单测试 PySide6 应用

By Toradex秦海 1). 简介 Python binding 的 Qt GUI 库一直以来有两种&#xff0c;最初是由 Riverbank Computing 公司在 2000 年初发布&#xff0c;基于 Qt4 版本推出的 PyQt4&#xff0c;后来随着 Qt 库版本的演进也陆续跟进到 PyQt5 和最新的 PyQt6&#xff0c;由于发布的…

如何从iconfont中获取字体图标并应用到微信小程序中去?

下面我们一一个微信小程序的登录界面的制作为例来说明&#xff0c;如何从iconfont中获取字体图标是如何应用到微信小程序中去的。首先我们看效果。 这里所有的图标&#xff0c;都是从iconfont中以字体的形式来加载的&#xff0c;也就是说&#xff0c;我们自始至终没有使用一张…

「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件

在鸿蒙开发中,Toggle 和 Checkbox 是常用的交互组件,分别用于实现开关切换和多项选择。Toggle 提供多种类型以适应不同场景,而 Checkbox 支持自定义样式及事件回调。本篇将详细介绍这两个组件的基本用法,并通过实战展示它们的组合应用。 关键词 Toggle 组件Checkbox 组件开…

Axure设计之多级菜单导航教程(中继器)

在数字化时代&#xff0c;优化产品设计&#xff0c;提升用户界面交互&#xff0c;是产品设计着重考虑的点。针对传统菜单导航复杂繁琐的问题&#xff0c;本设计提出了一套灵活的菜单导航方案&#xff0c;结合中继器与动态面板&#xff0c;实现一键搜索、菜单收藏、多级菜单导航…

基于uniapp微信小程序的旅游系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

SpringBoot篇(自动装配原理)

目录 一、自动装配机制 1. 简介 2. 自动装配主要依靠三个核心的关键技术 3. run()方法加载启动类 4. 注解SpringBootApplication包含了多个注解 4.1 SpringBootConfiguration 4.2 ComponentScan 4.3 EnableAutoConfiguration 5. SpringBootApplication一共做了三件事 …

Python 爬虫的寻宝大冒险:如何捕获 API 数据的宝藏

在这个信息爆炸的数字时代&#xff0c;数据就像是隐藏在网络深处的宝藏&#xff0c;等待着勇敢的探险家去发现。今天&#xff0c;我们要讲述的是如何成为一名 Python 爬虫探险家&#xff0c;装备你的代码工具&#xff0c;深入 API 的迷宫&#xff0c;捕获那些珍贵的数据宝藏。 …

blender雕刻基础 笔记

一、教学视频来源 案例5&#xff1a;荧光树桩_雕刻基础_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn/?p18&share_sourcecopy_web&vd_sourced9dc363bbfe0ac72dbaa04823c59231e 二、笔记 1. 启动blender的雕刻模式 启动雕刻模式有两种方式&#x…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理多平台级联与上下级对接的高效应用

政务数据共享平台的建设正致力于消除“信息孤岛”现象&#xff0c;打破“数据烟囱”&#xff0c;实现国家、省、市及区县数据的全面对接与共享。省市平台的“级联对接”工作由多级平台共同构成&#xff0c;旨在满足跨部门、跨层级及跨省数据共享的需求&#xff0c;推动数据流通…