首页 > 系统相关 >我的Linux网络之行2-初探内核网络

我的Linux网络之行2-初探内核网络

时间:2023-08-28 20:44:07浏览次数:53  
标签:bus Linux 网络 接口 驱动 phy 初探 new 网络设备

前言

在上一文中,初步了解了一些协议与相关的一些知识,至少已经有了一些概念,OK,那么下面就是我们对于开发的深入了。

Linux以太网驱动架构

OSI 模型中将网络划分为七层,从下到上依次为:物理层(Physical)、数据链路层(Date Link)、网络层(Network)、传输层(Transport)、会话层(Session)、表示层(Presentation)和应用层(Application)。

Linux内核网络协议栈涉及其中三层,分别为数据链路层、网络层和传输层,不涉及物理层,应用层的任务也是由用户空间程序来实现的。

Linux网络驱动体系

网络驱动程序体系结构分为四层:

1.网络协议接口层

网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接收数据。这一层的存在使得上层协议独立于具体的设备。

2.网络设备接口层

网络设备接口层向协议接口层提供的用于描述具体网络设备属性和操作的结构体net_device,该结构体是设备驱动功能层各函数的容器。

3.设备驱动功能层

设备驱动功能层的各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过nto_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接收操作。

4.网络设备与媒介层

网络设备与媒介层完成数据包发送和接收的物理实体,包括网络适配器和具体的传输媒介,网络适配器被设备驱动功能层中的函数在物理上驱动。

img

这里我们以从驱动到最上层应用的方式来分析这个

linux的MDIO

基本上你只要看到相关的phy的spec,那么必然会先接触到一个协议,那就是MDIO协议,我们又称其为SMI。

一般每个跟SOC连接的phy必然有这个两个pin脚,用于控制phy的寄存器。

img

而起一般的芯片内部如下:

img

其基本的时序如下图:

img

一般通过该协议向phy访问相关的寄存器,然后进行相应的寄存器控制。

那么这个驱动又是如何实现的?

struct mii_bus *new_bus = NULL;
new_bus = mdiobus_alloc();//申请MDIO bus的内存
new_bus->name = "XXX_phy";
new_bus->read = XXX_mdio_read;
new_bus->write = XXX_mdio_write;
new_bus->reset = XXX_mdio_reset;
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%s-%x", new_bus->name,
		 pdata->bus_id);
new_bus->priv = dev;
new_bus->phy_mask = 0;
new_bus->parent = &pdata->pdev->dev;
mdiobus_register(new_bus);//注册这个bus即可

而里面的XXX_mdio_read等,最终走向的是ioread等直接去读取SOC内部的寄存器,这个一般要soc的datasheet才能做相关的解析,在此就不过多的赘述了。

realtek的rtl900x的初始化流程

好了上文,我们已经完成了相关的MDIO的注册与使用,那么我们就直接找个phy来实现一番吧。
这里的硬件是采用RMII的方式去访问的。

img

大致上如上图所示

硬件方面此处就不再继续说了。

其相关的初始化启动,如下图:

img

那么在下一章节我将提供相关的驱动设计,提供作为开源库。

标签:bus,Linux,网络,接口,驱动,phy,初探,new,网络设备
From: https://www.cnblogs.com/samuelwnb/p/17641389.html

相关文章

  • Linux运维工程师面试题(3)
    Linux运维工程师面试题(3)祝各位小伙伴们早日找到自己心仪的工作。持续学习才不会被淘汰。地球不爆炸,我们不放假。机会总是留给有有准备的人的。加油,打工人!1LVS的工作模式有几种,分别是什么三种:NAT模式:修改请求报文的目标IP,多目标IP的DNATDR模式(默认模式):操纵封装新的M......
  • 非全连接FR网络下OSPF配置
      网络配置: 验证OSPF邻居和数据库 ......
  • 全连接下的FR网络配置
     网络配置: 验证网络互通: ......
  • 某集成电路企业采用宁盾无客户端网络准入控制方案让终端管理省事更省心!
    宁盾无客户端网络准入控制方案正在成为先进制造、高科技互联网企业等创新型客户的优选方案。创新型客户以技术密集型、研发人员占比高著称,在进行网络准入建设时,如何平衡好用户体验与顺利达成项目预期之间的矛盾,是创新企业IT安全团队格外关注的重点。本次,小盾通过集成电路企业的准......
  • ViT和MAE模型结合初探
    介绍transfomer在NLP领域的应用已经非常广泛,但是在CV领域的应用还比较少,主要是因为CV领域的数据是二维的,而transfomer是基于序列的,因此需要将二维数据转换成序列数据,这就是ViT的由来。ViT是将图像分割成一个个patch,然后将patch展开成序列,再输入到transformer中,这样就可以将transf......
  • 19.Linux中write函数详解
    19.Linux中write函数详解头文件:#include<unistd.h>函数原型:write(intfd,constvoid*buf,size_tcount);函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错......
  • 20.LINUX中的read函数
    20.LINUX中的read函数1.read函数的函数原型#include<unistd.h>ssize_tread(intfd,void*buf,size_tcount);函数原型为:ssize_tread(intfd,void*buf,size_tcount);其中,fd为文件描述符;buf表示读出数据缓冲区地址;count表示读出的字节数。返回值:若读取成功,则返回读到的......
  • 16 Linux 内核定时器实验
    一、Linux时间管理和内核定时器简介1.内核时间管理简介  Linux内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、定时器等。  硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率......
  • 8步轻松晋级AMD MPSoC Linux内核调试专家
    8步轻松晋级AMDMPSoCLinux内核调试专家介绍AMDMPSoCLinux一般使用PetaLinux编译Linux系统,包括Linux内核、DTS、文件系统。PetaLinux内部集成Yocto,自动下载、配置、编译各种软件包。它简化了编译流程,也导致有些工程师找不到软件包的源代码,不知道如何调试软件。在PetaLinux......
  • 修改Docker镜像、容器、网络和卷等数据的存储位置|修改wsl在windows下的数据目录
    起因: 我发现这个C盘快要爆炸了C:\Users\Administrator\AppData\Local\Docker\wsl\data\ext4.vhdx(此目录是默认指向,都快100G了)解决步骤:wsl--shutdownwsl--exportdocker-desktop-dataE:\Docker\docker-desktop-data.tarwsl--unregisterdocker-deskto......