LwIP 协议栈核心.c 文件依赖关系图

LwIP协议栈核心.c文件依赖关系图

以下通过Mermaid结构图清晰展示LwIP核心.c文件的层级依赖、调用关系,按「基础层→核心层→应用层」的逻辑梳理,同时标注关键文件的核心作用:
基础类型定义
数据载体
可选依赖
cc.c

平台数据类型适配
所有文件
sys_arch.c

OS/裸机适配(线程/信号量)
mem.c

堆内存管理
tcp.c

TCP核心逻辑
netconn.c

NETCONN API
memp.c

内存池管理
pbuf.c

数据包缓冲管理
所有数据收发模块
netif.c

网卡接口管理
ethernetif.c

以太网驱动适配
arp.c

ARP协议处理
ip4.c

IPv4核心(转发/封装)
ip_frag.c

IP分片/重组
icmp.c

ICMP协议(Ping)
igmp.c

组播管理(可选)
udp.c

UDP协议
tcp_in.c

TCP接收处理
tcp_out.c

TCP发送处理
tcp_timer.c

TCP超时重传
tcp_win.c

TCP滑动窗口
api_lib.c

RAW API核心
api_msg.c

RAW API消息处理
sockets.c

Socket API(BSD兼容)
dhcp.c

DHCP客户端
dns.c

DNS解析
debug.c

调试日志
chksum.c

校验和计算

核心文件关系说明

1. 基础依赖链(必选)
  • 最底层 :cc.c(定义u8_t/u16_t等跨平台类型)、sys_arch.c(OS/裸机适配)是所有模块的基础;
  • 内存/缓冲 :mem.c/memp.c(内存管理)→ pbuf.c(数据包缓冲),所有数据收发模块(tcp/udp/ip)都依赖pbuf.c传递数据;
  • 网卡接口 :netif.c(网卡管理)是链路层与网络层的桥梁,ethernetif.c是具体的以太网驱动适配,依赖netif.c。
2. 协议层调用链
  • 网络层 :ip4.c是核心,承接arp.c(地址解析)、icmp.c(差错报告),向下调用pbuf.c,向上为传输层提供IP封装/解封装;
  • 传输层 :
    • UDP:udp.c直接依赖ip4.c,逻辑简单,无复杂状态管理;
    • TCP:tcp.c是核心,拆分tcp_in.c(接收)、tcp_out.c(发送)、tcp_timer.c(超时)、tcp_win.c(窗口),整体依赖ip4.c和sys_arch.c(定时器/同步)。
3. API层封装关系
  • RAW API(api_lib.c/api_msg.c):直接封装tcp.c/udp.c,是最底层API;
  • NETCONN API(netconn.c):基于RAW API封装,增加连接对象抽象,依赖sys_arch.c(线程/信号量);
  • Socket API(sockets.c):最高层封装,基于NETCONN API实现BSD兼容接口,对外提供socket()/connect()等函数。
4. 可选模块依赖
  • dhcp.c:依赖ip4.c(IP地址管理)和netif.c(网卡配置);
  • dns.c:依赖udp.c(DNS用UDP通信)和ip4.c(目标IP解析);
  • igmp.c/ppp.c等:基于ip4.c扩展,按需启用。

总结

  1. LwIP文件依赖遵循「基础层→数据缓冲→链路层→网络层→传输层→API层 」的层级逻辑,核心是pbuf.c(数据)和ip4.c(网络层核心);
  2. TCP模块是最复杂的部分,拆分为多个子文件(tcp_in/out/timer/win),均依赖tcp.c核心;
  3. API层是逐层封装关系:Socket API → NETCONN API → RAW API,底层均指向传输层(TCP/UDP)核心;
  4. 移植时核心修改sys_arch.c(OS适配)和ethernetif.c(网卡驱动),无需改动协议栈核心文件。
相关推荐
SuperByteMaster10 分钟前
wfi进入之前没有清除basepri, 导致中断优先级不够,wfi 退不出来
c语言
hz5678925 分钟前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
优橙教育35 分钟前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
Navigator_Z1 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
AIgorithmGEEK1 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
宵时待雨2 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
深圳老胡3 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
甜甜的大香瓜3 小时前
【MT32F006】MT32F006之Timer定时
单片机
奋斗的阿狸_19863 小时前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发