hello_courage
8年USB开发经验 + 5年网络及以太网驱动开发经验 + 2年PCIe驱动开发经验 + 4年romcode开发经验,专注网卡驱动、网络协议(TCP/IP)、USB驱动及应用开发。
展开
-
linux应用层通过socket访问PHY寄存器
phytool通过socket访问PHY寄存器。1. kernel实现。原创 2023-07-03 16:59:46 · 497 阅读 · 0 评论 -
以太网卡EMAC FPGA验证建议
如果遇到问题,可以先调MAC loopback,再调PHY loopback。先调试10M,再调100M,1000M由于timing关系,可能调不了。先MAC loopback,再PHY loopback。先调试RMII 10M,再调试RMII 100M模式。中断统计,cat /proc/interrupts。抓包工具:tcpdump,wireshark。统计寄存器,ethtool -S eth0。如果能有小code,调试起来会更加方便。先RMII,再RGMII。先10M,再100M。原创 2023-05-24 20:38:45 · 275 阅读 · 0 评论 -
以太网PHY MMD
以太网PHY MMD操作原创 2022-10-09 14:33:15 · 1423 阅读 · 0 评论 -
dwmac/stmmac/eqos EEE 驱动分析
dwmac/stmmac/eqos EEE 驱动分析原创 2022-10-09 14:29:30 · 445 阅读 · 0 评论 -
linux 网络远程唤醒 WOL
WOL(Wake on Lan),即局域网唤醒,从根本上来说是硬件设备提供的一项管理功能。该功能可以当电脑处于关机或休眠状态时,通过给网卡发送特定的数据包从而命令网卡向主板发送开机指令,进而实现上电开机。WOL支持 Magic Packet &Remote Wakeup packet两种机制,工作原理都一样,只是唤醒的包类型不一样。Magic Packet是一种特殊的唤醒包,而Remote Wakeup支持多种唤醒包类型,比如常见的单播和广播包等。原创 2022-10-09 14:23:58 · 3793 阅读 · 0 评论 -
dwmac/stmmac/eqos 远程唤醒(WOL) 驱动
如果通过ethtool启用了wol功能,那么在系统休眠时,在suspend函数中会调用stmmac_pmt来进入powerdown模式(低功耗模式),可通过remote wakeup来唤醒。如果在休眠期间收到了magic packet或remote wakeup packet,eqos会产生PMT中断,执行resume操作。注册唤醒中断(PMT中断),当收到magic packet或remote wakeup packet时,产生一个唤醒中断,执行唤醒操作。原创 2022-10-09 14:22:18 · 663 阅读 · 0 评论 -
linux ntpd
linux ntpd服务原创 2022-10-09 14:07:56 · 234 阅读 · 0 评论 -
linux tcpreplay命令
官网:http://tcpreplay.appneta.com/参考:https://blog.csdn.net/gdutliuyun827/article/details/26557273 https://www.cnblogs.com/legendbaby/p/5057044.htmlTcpreplay is a suite of GPLv3 licensed...原创 2019-04-08 19:26:50 · 2824 阅读 · 1 评论 -
以太网物理层(PHY)
PHY包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI子层。 MII:medium independent interface,介质无关接口。提供公共接口,屏蔽这些物理层的不同细节 PCS:physical coding sublayer,物理编码子层,8B10B编码或8B1Q4编码等。 PMA: Physical Medium Attachment sublayer,物理介质连接子层,负责数据串化/解原创 2021-04-06 20:34:38 · 5773 阅读 · 0 评论 -
gre tunnel源码分析之接收流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即...原创 2019-07-06 10:09:42 · 1252 阅读 · 0 评论 -
stmmac 中断处理
1.发送中断1.1.DMA发送完数据后产生中断,调用 stmmac_interrupt服务程序1.2. stmmac_interrupt通过调用stmmac_dma_interrupt处理DMA相关中断(包括发送和接收)。在stmmac_dma_interrupt中,通过NAPI机制触发软中断,调用stmmac_poll处理相关事件。1.3.stmmac_poll调用stmmac_tx_clean回收资源,以及queue操作1)通过dma_unmap_single解除...原创 2020-06-05 16:56:35 · 1608 阅读 · 0 评论 -
GRE tunnel源码分析之发送流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即为...原创 2019-07-06 10:08:34 · 1320 阅读 · 0 评论 -
uboot: RTL8201 100M PHY驱动代码
u-boot-2020.04不支持RTL8201 PHY.1. Patch https://lists.denx.de/pipermail/u-boot/2020-January/397725.html https://lists.denx.de/pipermail/u-boot/2020-January/397726.html https://elixir.bootlin.com/u-boot/v2021.04/source/drivers/net/phy/realt..原创 2021-08-04 20:15:37 · 2119 阅读 · 0 评论 -
网络性能测试工具iperf
测试环境:在vmware上运行两台Ubuntu虚拟机。Ubuntu1:Ubuntu14.04,IP:192.168.0.108Ubuntu2:Ubuntu16.04,gnome版,IP:192.168.0.106iperf命令是一个网络性能测试工具。iperf可以测试TCP和UDP带宽质量,iperf可以测量最大TCP带宽,具有多种参数和UDP特性。iperf可以报告带宽...原创 2019-03-09 15:47:27 · 1420 阅读 · 0 评论 -
在Ubuntu上创建并测试GRE tunnel
使用两台Ubuntu虚拟机进行GREtunnel测试,则两台虚拟机位于同一网段,但并不影响观察测试结果。测试环境:在一台PC上同时运行两个Ubuntu虚拟机:ubuntu-gnome-16.04-desktop-amd64,IP为192.168.0.105,暂且称其host Aubuntu 14.04,IP为192.168.0.104,暂且称其host B1...原创 2019-03-09 15:10:23 · 5072 阅读 · 0 评论 -
Ostinato 发包
1. 新建流1) click(choose it) port2) file -> new stream3) double-click name, fill in name, and then Edit stream4) protocol selection5) protocol data, MAC6)protocol data, IP7)protocol data, ICMP8)stream ...原创 2021-05-06 20:40:23 · 1214 阅读 · 0 评论 -
利用VLC搭建组播流服务器
网络拓扑:PC1(multicast server)-> 路由器-> PC2(client)PC1通过Ethernet接路由器WAN口,PC2通过Ethernet接路由器其中一个LAN口。注: PC1 PC2 路由器wan口都需要配置好IP,PC1:10.10.10.13,RGWAN:10.10.10.10,PC2:192.168.18.12,RGLAN:192...原创 2019-06-11 20:28:17 · 11440 阅读 · 4 评论 -
适用于嵌入式系统的web server:thttpd的介绍与使用
thttpd is a simple, small, portable, fast, and secure HTTP server.Simple:It handles only the minimum necessary to implement HTTP/1.1. Well, maybe a little more than the minimum.Small:See the...原创 2019-05-12 10:03:16 · 4757 阅读 · 0 评论 -
packETH发包工具使用教程
测试环境:在vmware上运行两台Ubuntu虚拟机。Ubuntu1:Ubuntu14.04,安装packETHUbuntu2:Ubuntu16.04,gnome版Feature:•you can create and send any ethernet packet. Supported protocols:•ethernet II, ethernet 802.3...原创 2019-03-09 15:39:56 · 10076 阅读 · 0 评论 -
netdev: dev_watchdog timer(结合stmmac 分析)
分析netdev看门狗定时器1. dev_watchdog()作为定时器回调函数会被周期执行在dev_watchdog()中,如果 if (netif_xmit_stopped(txq) && time_after(jiffies, (trans_start + dev->watchdog_timeo)))成立,执行some_queue_timedout = 1,然后便调用ndo_tx_timeout。ndo_tx_timeout函数便是网卡发送异常(数据发不出去...原创 2020-06-05 17:00:03 · 2209 阅读 · 0 评论 -
使用Xcap发送网络数据包
官网:http://xcap.weebly.com/DescriptionXcap is a windows based packet generator & sender tool, you can use it to create a packet, then send it through a specified interfaces on you compute...原创 2019-07-06 09:51:44 · 5772 阅读 · 0 评论 -
linux中断与多核CPU的绑定(实现负载均衡)
1.SMP IRQ Affinity硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。传统的 8259A 只适合单 CPU 的情况,现在都是多 CPU 多核的 SMP 体系,所以为了充分利..原创 2021-05-06 20:53:39 · 3889 阅读 · 0 评论 -
Marvell 88E1111 linux driver
The Alaska® Ultra 88E1111 Gigabit Ethernet Transceiver is a physical layer device for Ethernet 1000BASE-T, 100BASE-TX, and 10BASE-T applications.1. FEATURES• 10/100/1000BASE-T IEEE 802.3 compliant• Supports GMII, TBI, reduced pin count GMII (RGMII.原创 2020-07-05 10:19:18 · 1405 阅读 · 0 评论 -
千兆以太网物理层 8B1Q4/4D-PAM5
1. Encoding on 1000Mbps Gigabit EthernetFor copper cable based Gigabit Ethernet (1000BASE-T), a pair of encoding methods was chosen,8B1Q4and4D-PAM5. For fiber optic based Gigabit Ethernet (1000BASE-X), a different pair of encoding methods was chosen,...原创 2021-04-06 20:32:50 · 4777 阅读 · 1 评论 -
linux 网络RPS/RFS/XPS
1. 介绍在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。以网卡中断为例,在没有设置SMP IRQ affini...原创 2021-05-06 21:02:45 · 1537 阅读 · 0 评论 -
基于UDP/TCP的网络协议(端口分配)
每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一:面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议。运行在TCP协议上的协议: HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议...原创 2021-04-06 20:27:38 · 308 阅读 · 0 评论 -
Linux QoS ingress处理流程
在传统的TCP/IP网络的路由器中,所有的IP数据包的传输都是采用FIFO(先进先出),尽最大努力传输的处理机制。在早期网络数据量和关键业务数据不多的时候,并没有体现出非常大的缺点,路由器简单的把数据报丢弃来处理拥塞。但是随着计算机网络的发展, 数据量的急剧增长,以及多媒体,VOIP数据等对延时要求高的应用的增加。路由器简单丢弃数据包的处理方法已经不再适合当前的网络。单纯的增加网络带宽也不能从根本...原创 2019-06-11 20:58:57 · 1322 阅读 · 0 评论 -
Linux ping的原理与实现
1. ping过程:我们以下面一个网络为例:有A、B、C、D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认网关为192.168.0.11、在同一网段内在主机A上运行“Ping 192.168.0.5”后,都发生了些什么呢? 首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.0.5”一起交给IP层协议(...原创 2019-07-06 09:45:29 · 3304 阅读 · 0 评论 -
TCP滑动窗口协议作用
什么使用滑动窗口协议(或滑动窗口协议有什么作用?)1. 目的:TCP 引入滑动窗口的最直接的原因是“接收方的缓存是有限的” 发送方不能假设接收方缓存无限大,一直发包,造成接收方丢包。 发送方不能假设接收方窗口很小,发一会停一会,效率不高,浪费带宽。 所以需要发送方随时报告自己的缓存能力(即窗口)给发送方,发送方可以根据此窗口大小来发送一定的数据。 2. 作用: 可靠性:保证数据准确(按序、完整、未出错)到达目的地,如果未到达或数据出错,能够发现并重传。..原创 2021-07-09 10:08:24 · 5769 阅读 · 0 评论 -
linux kernel 三次握手建立TCP链接的实现
1. 应用层1.1 serversocket() -> bind() -> listen() -> accept() -> recv() & send()1.2 clientsocket() -> connect() -> send() & recv()1.3 三次握手建立连接(1) 客户端发送一个 SYN 段(SYN 标志位置位),包含初始序号 ISN,在图中,这个序号的值 seq = 2379453...原创 2021-11-17 18:13:27 · 628 阅读 · 0 评论 -
Linux QoS egress处理流程
在传统的TCP/IP网络的路由器中,所有的IP数据包的传输都是采用FIFO(先进先出),尽最大努力传输的处理机制。在早期网络数据量和关键业务数据不多的时候,并没有体现出非常大的缺点,路由器简单的把数据报丢弃来处理拥塞。但是随着计算机网络的发展, 数据量的急剧增长,以及多媒体,VOIP数据等对延时要求高的应用的增加。路由器简单丢弃数据包的处理方法已经不再适合当前的网络。单纯的增加网络带宽也不能从根本...原创 2019-06-11 21:06:38 · 1033 阅读 · 0 评论 -
RTL8211F PHY linux配置
2. kernel configMakefile:obj-$(CONFIG_REALTEK_PHY)+= realtek.oDevice Drivers--->[*] Network device support--->-*-PHY Device support and infrastructure---><*>Realtek PHYsCONFIG_...原创 2021-06-08 20:17:40 · 8638 阅读 · 0 评论 -
TCP三次握手与四次挥手
1. 三次握手(建立连接)(1) 客户端发送一个 SYN 段(SYN 标志位置位),包含初始序号 ISN,在图 中,这个序号的值 seq = 2379453243. 在这个过程中,客户端是通过 connect 函数发起连接请求的,此时 connect 函数阻塞,等待服务器发回 ACK 应答。(2) 服务器端接收到 SYN 段后(listen),知道有新的连接请求到来,于是初始化一个序号 ISN,在上面的例子中这个值是 seq = 4269857. 此时服务器创建一个 TCP 段,将 ..原创 2021-07-09 10:05:43 · 246 阅读 · 2 评论 -
Linux内核路由表介绍及相关函数
内核对路由表的操作 更新 插入 删除 查找 路由表种类 网络路由表:ip_fib_main_table 本地路由表:ip_fib_local_table 路由缓存:rt_hash_table 策略路由:根据策略支持多张路由表 表项 路由缓存表项:rtable, 一般使用dst_entry,rta...原创 2019-04-08 19:35:52 · 1202 阅读 · 0 评论 -
网络协议分层及报文格式大全
推荐一个查看网络协议分层及报文格式的网站,非常清晰!http://www.023wg.com/message/message/cd_feature_cover.html原创 2019-06-11 20:38:13 · 6298 阅读 · 6 评论 -
网卡驱动:stmmac DMA发送流程
1. 设置DAMbuffer&descriptor,并启动DMA发送在stmmac_xmit设置buffe r& descriptor,如下片段: if (likely(!is_jumbo)) { bool last_segment = (nfrags == 0); des = dma_map_single(priv->...原创 2020-04-06 17:36:19 · 3441 阅读 · 0 评论 -
TCP拥塞控制
在学习拥塞控制前,我们假设:接收方总是有足够大的缓存空间,接收方的接收窗口大小总是很大——这意味着接收方对数据来者不拒。在基于这样的理想条件上,如果发送方发送的数据接收方没有收到,那么基本可以判断为网络出现了拥塞。网络拥塞上图是一个典型的小型局域网,SW 表示交换机,R 表示路由器。基于第 1 节中所述的假设,如果 PC1 给主机 PC3 发送 TCP 报文的时候,出现了丢失,我们大抵上就可以猜测:PC1—SW1—R1—R2—PC3 这条网络路径,出现了拥塞。为什么会出现这种..原创 2021-07-09 10:00:15 · 282 阅读 · 3 评论 -
Marvell 88E1111(1000M PHY) linux 配置
1. driver drivers/net/phy/marvell.c drivers/net/phy/phy_device.c include/uapi/linux/mii.h (register) 2. kernel configDevice Drivers ---> [*] Network device support ---> -*- PHY Device support and infrastruct...原创 2021-06-08 20:22:41 · 2809 阅读 · 0 评论 -
TCP协议实现的功能
TCP协议需要实现的功能: 三次握手,建立连接 四次挥手,断开连接 流量控制,基于滑动窗口协议 拥塞控制 慢启动 拥塞避免 快恢复 快重传 差错控制 丢失重传 出错重传 乱序 基于序号、ACK、超时(需要使用定时器)、checksum MSS(TCP Maximum Segment Size) ...原创 2021-06-08 20:38:56 · 1079 阅读 · 1 评论 -
网卡驱动:stmmac DMA接收流程
1. dmabuffer及zero-copy在打开网卡时,stmmac_init_rx_buffers()函数负责分配dmabuffer。static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p, int i, gfp_t flags, u32 qu...原创 2020-04-06 17:39:04 · 3399 阅读 · 4 评论