- 博客(11)
- 收藏
- 关注
原创 linux 4.19.90 MSS“协商过程”以及实现细节
可以看出影响到advmss的因素有以下几个:最终会取这些值中的最小值。路由设置的advmss选项;出口路由的MTU减去40(TCP和IP报文的固定首部大小)TCP_MAXSEG选项 有几个重要的点要说一下: ① TCP_MAXSEG这个socket选项非常特殊,既影响到了本端的advmss的大小,又影响到了mss_clamp这个和对端协商的结果,也就是最终要发送的段大小, 非常奇怪,竟然影响到了发送和接收两个方向;
2025-08-06 19:55:43
1085
原创 linux 4.19.90 modules.alias和ko模块自加载流程
源码基于linux 4.19.90 在梳理PHY框架源码的时候,我注意到了一个问题: 假设我的网络架构是 stmicro的gmac芯片 + yt8521的phy芯片,所以这里用到了两个驱动 ① /drivers/net/ethernet/stmicro/下面的 stmmac.ko stmmac_platform.ko 以及 dwmac_generic.ko 是mac芯片驱动 ② /drivers/net/phy/ 下面的motorcom.ko 是phy芯片驱动。
2025-07-29 22:00:53
1178
原创 linux 4.19.90 PHY驱动框架源码分析(附实例stmmac+yt8521)
本文主要分析了Linux 4.19.90版本中以太网驱动框架的核心组件和工作原理。首先介绍了以太网电路的硬件组成,包括MAC控制器和PHY芯片的几种常见集成方式。重点阐述了MII/MDIO总线协议在MAC和PHY通信中的作用,详细讲解了Linux内核中MII管理模块的驱动框架设计,包括mii_bus、phy_device、phy_driver等核心数据结构。
2025-07-18 20:26:27
1116
原创 linux 4.19.90 udp_mem参数源码分析
本文基于Linux 4.19.90内核源码,分析了网络协议栈内存相关参数的实现机制。主要内容包括: 协议栈内存参数分类 全局参数:net.ipv4.tcp_mem/udp_mem(三值设置:下限/压力阈值/硬上限) 套接字级参数:net.core.rmem/wmem_default/max(默认值/最大值) 最小保障参数:udp_rmem_min/wmem_min 关键实现机制 应用层设置SO_RCVBUF/SO_SNDBUF时,内核会校验不超过rmem_max/wmem_max 实际分配缓冲区时会将应用设
2025-07-08 18:39:37
740
原创 linux 4.19.90 watchdog+sbsa+d2000看门狗源码分析
watchdog设备就是用狗来监视某件事情,如果在规定时间内未做,就会导致预定行为发生。而要做的事情就是喂狗。 一句话就是←-↙ ↖↙ ↖开始计时 ----> 喂狗,则重新计时↘↘ ----> 若在计时范围内不执行喂狗操作,就会导致预定义行为,通常是重启 而一般来说,watchdog有硬狗以及软狗。 硬狗就是硬件的看门狗,一般放在CPU芯片中,拿FT-D2000来说,里面内置了两个看门狗,直接操作硬件的寄存器进行喂狗,超时之后直接导致cpu层面的reset,和操作系统就完全无关了。
2025-04-27 21:21:55
1863
原创 linux 4.19.90 acpi与platform设备
重中之重,现在的主流两种arm架构的启动方式 ① UEFI + ACPI表(acpi支持硬件动态编码,这个不太了解是什么机制) ② uboot +设备树。
2025-04-24 17:31:14
1001
原创 linux 5.4.18 page_pool源码分析(附图)
在第一次分配完毕后整体的情况是这样的(省略与空间分配无关的成员): 具体的回收工作后面会讲,这里在初始化完毕后,该环形缓冲区还是空的 (1) 在5.4.18的代码中,每次分配空间调用的都是page_pool_dev_alloc_pages,这个接口只能返回单个要使用的空间,效率低下,后续使用page_pool_dev_alloc_frag来批量分配空间。 (2)
2025-04-14 22:24:03
2578
原创 linux 4.19.90 RPS/RFS源码分析(附图)
① 有些网卡会在驱动层面就设置sk_buff的hash值,这个不确定是怎么计算的 ②对于分片包,仅根据IP包源地址和目的地址进行hash,对于非分片包,会进一步回去包的源端口和目的端口进行hash。参考博客: https://segmentfault.com/a/1190000022661159。
2025-04-09 17:50:08
788
原创 linux4.19.90 stmmac驱动源码分析(附图)
可以看到初始化过程,最主要的工作是设置了stmmac_priv结构体,初始化了net_device结构,并将dma以及mac操作集合赋值。 PHY驱动相关我暂时省略了,后面会补充 内核选择发送队列 将sk_buff的frags[i]和data映射到DMA硬件描述符中 调整队列顺序 触发中断回收资源 还有最后一步,在DMA发送完毕的时候,还会触发一次DMA中断,也就是之前绑定的初始化函数stmmac_interrupt()
2025-04-09 17:42:43
1394
原创 linux4.19.90 ip重组源码分析全过程(附图)
看完这个函数有几个需要明确的地方: ① 并不是每个ip封包都会插入红黑树,如果存在某个分片刚好是尾部分片的右连续分片 这个分片并不会插入到红黑树中,而是会插入到->next_frag中,并更新其为fragments_tail ② fragments_tail和last_run_head并不是一直为同一个节点,上面提到的fragments_tail指向的是最后一个片 而last_run_head指的是最后一个红黑树节点,也就是说真实的情况是这样的。
2025-04-09 17:28:21
1971
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅