- 博客(120)
- 资源 (4)
- 收藏
- 关注
转载 dpdk报文收发流程
当应用层从软件队列中获取到mbuf后, 需要重新从内存池申请一个mbuf空间,并将mbuf地址放到描述符队列中, 相当于告诉dma控制器,后续将收到的报文保存到这个新的mbuf中, 这也是狸猫换太子的过程。和传统报文接收不同,当应用层想要接收来自网卡的报文时, 应用层通过while死循环的方式,调用rte_eth_rx_burst接口轮询接收来自网卡的报文,相当于绕过了内核协议栈,将内核旁路了。当应用层需要发送报文时,调用rte_eth_tx_burst接口,将报文放到软件发送空间,也就是mbuf空间中。
2024-06-02 15:41:57
169
转载 dpdk应用层对网卡进行配置
需要注意的是,这里仅是开辟软件发送空间,并没有将e1000_adv_tx_desc描述符与软件发送空间,也就是mbuf关联起来,这两者的关联在rte_eth_dev_start中完成。软件接收空间,也就是mbuf空间,是用来告诉dma控制器,收到的报文存放到e1000_adv_rx_desc描述符成员pkt_addr指向的位置,这个pkt_addr指向的位置就是mbuf的地址。这个接口大部分是对寄存器进行设置,例如将发送描述符队列的位置,队列总大小,队列的开始位置,队列的结束位置等信息写入寄存。
2024-06-02 11:38:47
128
转载 dpdk pmd驱动初始化
应用层之所以可以对这个配置空间中的寄存器进行操作,得益于igb_uio驱动,igb_uio驱动将网卡的配置空间暴露到应用层来,应用层才能知道网卡的寄存器地址在哪里,进而对这些寄存器进行读写操作。pmd里面会维护一个网卡数组,对于每一个网卡结构,都会维护这个网卡的接收发送数据的回调,关联的驱动等信息。在每一个网卡的配置目录下,都有一个resouce文件,里面记录了这个网卡的配置空间的开始位置,结束位置,以及配置空间的总大小。相应的,nvm层,vbx层都是这样的一种框架结构,掌握了mac层,其他层也是类似的。
2024-06-02 11:26:58
54
转载 DPDK探测设备并初始化
遍历驱动链表rte_pci_bus.driver_list,调用 RTE_PMD_REGISTER_PCI时将驱动插入此链表。如果网卡绑定到 igb_uio 或者 uio_pci_generic,则调用 pci_uio_map_resource。rte_eth_dev_pci_generic_probe是个通用的封装函数,用来申请 rte_eth_dev 内存,遍历设备链表rte_pci_bus.device_list,rte_pci_scan 阶段会把扫描到的设备插入此链表。本文重点介绍网卡相关。
2024-06-02 10:40:02
50
转载 module_platform_driver()
在Linux设备驱动开发使用platform平台驱动模型过程中,在定义且初始化好platform_driver结构体变量以后,我们需要向 Linux 内核注册一个 platform 驱动。下面介绍两种方法。
2024-03-18 00:12:19
461
转载 内核对设备树的处理——device_node转换为platform_device
本节学习内核如何将转换为。先回顾一下。所谓总线设备驱动模型,就是将设备分为)和)两部分。使用总线设备驱动模型,如果要去修改,就需要,还要。而就是将通过来描述,这样,修改平台设备后就不需要重新编译内核,。使用设备树的流程大致如下:首先,编写文件,然后使用dtc工具编译dts文件得到dtb文件,内核解析dtb文件生成device_node,之后再将device_node转换成platform_device。以之前的jz2440.dts为例。
2024-03-17 16:19:05
236
转载 devm_ioremap_resource devm_ioremap 区别
但要是直接devm_ioremap,应该也可以,但没有 devm_request_mem_region, 应该在/proc/iomem 查不到。但如果一个device resource 已经申请过了,在调用devm_request_mem_region就会出现下面错误。从driver 代码中可以看到有时间用devm_ioremap_resource, 而有时直接用devm_ioremap。总结来说,devm_ioremap 就是直接映射, devm_ioremap_resource 是先申请,后映射。
2024-03-17 11:52:49
449
原创 Linux Clock
https://blog.csdn.net/Guet_Kite/article/details/78012651 嵌入式Linux驱动笔记(十四)------详解clock时钟(CCF)框架及clk_get函数。https://blog.csdn.net/zgtzqzg2020/article/details/109220181 Linux clk子系统(5)--fixed-factor-clk。
2023-08-06 10:03:01
448
原创 Fixed PHY
FIXED-PHY的本质和externel phy没有区别,只是使用虚拟的mii_bus来注册fixed phy,仍然需要创建phydev, 仍然需要phy driver,如果没有注册specific driver则是默认使用generic phy driver. 并且需要利用phydev的状态机的运转来adjust link。而后续引入的PHYLINK则是大大的优化了fixed link的实现以及对SFP的支持(这里暂不讨论)。
2023-05-14 22:53:34
973
转载 Linux Mii management/mdio子系统分析之六 fixed-mii_bus分析(mac2mac分析)
而针对fixed_mii_bus上的成员phys链表上的fixed_phy链表成员,仅在fixed_mdio_bus_init中注册fixed_mii_bus时,通过mdiobus_register时,完成将该链表上的所有链表成员,均为其注册对应的phy_device至mdio_bus上。接口fixed_phy_register在调用fixed_phy_add之后,调用phy_register,实现phy_device的注册,弥补了fixed_phy_add的不足。struct mii_bus类型的成员;
2023-05-14 22:35:50
711
转载 linux phy fixed-link
linux内核驱动已经对PHY有很好的支持,一般PHY驱动用于对外部PHY进行配置,获取外部网络的连接状态、速度、双工属性等,但对于一些通用的switch芯片,一般与MPU是MAC-MAC的连接方式,另外还有些FPGA的关联应用,也是MAC-MAC,这种情况下,我们希望连接状态、链接速度、双工属性等参数为固定,因此内核提供了fixed-link的机制,实际上linux是通过虚拟一个属性固定的PHY设备来实现。link-gpios用来指定表示检测网络连接状态的GPIO,驱动会读取gpio的值来决定网络状态,
2023-05-14 16:36:08
1090
转载 关于BIT位域和大小端的理解
因此,在数据传输中,通常需要将数据从本机字节序统一转换成网络字节序(网络字节序为大端)然后传输,接收方接收数据后,再将数据转换为本机字节序。反过来说,大端数据0x5B 59 97 85传输给小端设备接收后,在内存的数据为5B 59 97 85,未做转换时,小端设备解析为0x85 97 59 5b,转换字节序之后为0x5B 59 97 85。任何在不同系统间的通信信息都经过网络字节(大端)序进行传输,也就是说不管本机是什么模式,都要保证发送端传输的数据转换为网络序,接受端都要把网络序的数据转换为本地序。
2023-04-02 12:15:46
488
转载 linux运行大端程序,linux kernel如何处理大端小端字节序
作为软件人员,我最关心第二种方案是否可行,因为在读写寄存器时对数据进行swap,增加了寄存器读写的复杂度,原来一条存储/加载指令可以完成的工作,现在可能需要增加一些更swap相关的指令,无法保证寄存器操作的原子性了。根据之前的理解,字节序可以认为是处理器主观的概念,就像人如何去看待事物一样,处理器分大端和小端,对于内存的读写,只要保证数据类型一致,就不存在字节序的问题。对于常数数据,采用的是普通的位移然后拼接的方法,对于常数,这样的消耗是有必要的(这是kernel的解释,不是很理解)
2023-03-31 18:19:02
320
转载 浅谈大小端(Endian)与位域
在大端系统中,结构体变量及其成员的存储情况如下:.a1.a2.b1.b2.b3.b4bit0001] [02070810] [1114] [1519] [2023data010000111001000010110011.a1010b010x1.a2050b0000110x3.b1020b1000x4.b20。
2023-03-31 17:14:55
1887
转载 Ethernet下字节序和bit序的总结
按照上述的原理,假设,我们不遵从网络字节序(大端)的要求,小端系统pc1要发送数据0x12345678,则发送的字节依次为0x78, 0x56, 0x34, 0x12。同样的,在小端系统,网卡收到bit数据时,依次存放在bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0.比如,在小端系统中,网卡发送bit数据时,依次发送bit7, bit6, bit5, bit4, bit3, bit2,bit1,bit0.假设pc1要发送一个字节的数据,是怎么发送的呢?
2023-03-31 17:08:02
475
转载 以太网详解(二)-物理介质(100base-TX等)介绍
转载原文:https://blog.csdn.net/ZCShouCSDN/article/details/80208596 在搞网络这一块的时候,看到了100Base-T、100Base-TX等这些东西,在IEEE802.3中,也到处是这些词。大体了解了一下,下面是正文: 以太网采用CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路存取和冲突检测)介质访问控制方式的局域网技术,最初由Xerox公司于1975年研制成功,19.
2022-03-13 16:36:58
5285
转载 以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍
网络设备中肯定离开不MAC和PHY,本篇文章将详细介绍下以太网中一些常见术语与接口。 MAC和PHY结构 从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意: 上图中DMA集成在CPU,CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU而将PHY留在片外,这种结构是最常见的。 下图是网络接口内部结构图,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与.
2022-03-13 16:23:28
5566
转载 10GBASE-T,10GBASE-R,10GBASE-X 和10GBASE-W区别
参考链接: https://www.rfwireless-world.com/Terminology/10GBASE-T-vs-10GBASE-R-vs-10GBASE-X-vs-10GBASE-W.html 10GBASE-T The version 10GBASE-T has following features. • Supports 64B/65B signal encoding type • supports transmission over twisted pair cabling • .
2022-03-13 16:17:50
1709
转载 扫盲-以太网MII接口类型大全-MII、RMII、SMII、GMII、RGMII、SGMII、XGMII、XAUI、RXAUI
一、简介 MII是英文 Medium Independent Interface 的缩写,翻译成中文是“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XLAUI等。下面对它们进行一一介绍。 二、MII接口类型 1、MII接口 TX_ER(Transmit Error): 发送数据错误提示信号,同.
2022-03-13 16:13:46
12994
2
转载 Linux Mii management/mdio子系统分析之五 PHY状态机分析及其与net_device的关联
前面几章基本上完成了mdio模块驱动模型的分析,本篇文章主要讲述phy device的状态机以及phy device与net_device的关联。Phy device主要是对phy的抽象,而net_device主要是对mac的抽象,而mdio总线以及mii_bus主要用于对phy设备的控制(包括设置phy设备的工作模式、速率模式、...
2022-03-06 00:02:08
716
1
转载 PHY驱动调试之 ---PHY设备驱动(三)
1. 前言 内核版本:linux 4.9.225,以freescale为例。(部分内容待修改和补充,不一定准确) 2. 概述 上一篇文章讲了控制器的驱动使用的是platform总线的连接方式,本节要讲的PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分: 总线 - sturct mii_bus (mii stand for media independent interface)设备 - struct phy_device驱动 - stru.
2022-03-05 23:56:03
3549
转载 PHY驱动调试之 --- PHY控制器驱动(二)
1. 前言 内核版本:linux 4.9.225,以freescale为例。 2. 概述 PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII/XGMII等多种媒体独立接口(介质无关接口)与数据链路层的MAC芯片相连,并通过MDIO接口实现对PHY状态的监控、配置和管理。 PHY与MAC整体的大致连接框架如下(图片来源于网络): PHY的整个硬件系统组成比较复杂,PHY与MAC相连(也可以通过一个中间设备相连),MAC与CP..
2022-03-05 23:37:28
2791
1
转载 PHY驱动调试之 --- MDIO/MDC接口22号和45号条款(一)
最近在调试一款Phy的驱动,从没有任何头绪到略有了解经历了太多的痛苦,于是决定写这个系列篇记录一下。特别感谢无数优秀的博主无私奉献很多优秀的博文给予了我很大的帮助。在这个系列篇中,我也会转载部分优秀的博文(会附上链接),以及增添自己的理解,如果部分内容有侵权的地方,麻烦联系我。 概述 管理MII接口的MDIO接口是一个双线的串行接口,用来对PHY芯片等物理层信息进行操作管理。 MDIO的历史 MDIO是Management Data Input/Output 的缩写,有两根线,分别为双...
2022-03-05 23:16:15
1050
转载 Linux Mii management/mdio子系统分析之四 mdio总线及phy驱动模型及其开发流程
前三篇文章完成了mdio子系统概述、mdio子系统驱动模型概述、mii_bus子模块方法及驱动实现分析,本篇文章我们主要进行mdio总线驱动实现分析、phy驱动实现分析等部分,涉及的内容如下: 一、mdio总线实现及相应方法分析 二、phy驱动实现相应方法的分析 ...
2022-03-05 23:13:40
1314
转载 Linux Mii management/mdio子系统分析之三 mii_bus注册、注销及其驱动开发流程
本篇是mii management/mdio模块分析的第三篇文章,本章我们主要介绍mii-bus的注册与注销接口。在前面的介绍中也已经说过,我们可以将mii-bus理解为mdio总线的控制器的抽象,就像spi-master、i2c-adapter一样。 本篇文章主要涉及如下两部分: mii-b...
2022-03-05 23:11:20
887
转载 Linux Mii management/mdio子系统分析之二 mdio总线-设备-驱动模型分析
接着上篇文章继续分析mdio子系统,本章主要介绍mdio子系统的驱动模型,当然了介绍mdio子系统的驱动模型,就绕不开linux系统设备-总线-驱动模型,所有的总线类的驱动,基本上都可以理解为继承自linux系统设备-总线-驱动模型。 本篇主要介绍如下几部分的内容: 一、总线-设备-驱动-控制器模型分析 二、总线定义 ...
2022-03-05 23:06:54
818
转载 Linux Mii management/mdio子系统分析之一 总体概述
从本章开始,我们介绍linux的mii management对应的mdio子模块,该模块主要用于管理phy设备,实现phy device创建与phy driver的注册等功能。本系统主要涉及如下按如下几个篇章进行分析: 一、总线概述(介绍mdio驱动模型的简要逻辑模型) 二、mdio总线-设备-驱动模型分析 三、虚拟mii_bus模型分析(即fi...
2022-03-05 23:03:58
682
1
linux_tun_test.rar
2020-03-13
wifi direct协议
2017-02-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人