37-http-https-client
教程 37:从 httpc_get_file_dns() 到 Body Callback——HTTP/HTTPS Client、DNS、altcp 与下载数据通路 摘要:从 lwIP HTTP client 公共入口追踪 DNS、altcp/TCP、GET、Header/Body callback,并说明 TLS allocator 如何把同一客户端切换成 HTTPS。 [TOC] HTTP(Hypertext Transfer Protocol)是应用层 request/response 协议。**DNS(Domain Name System,域名系统)**负责把 Server hostname 解析成 IP address,altcp 是 lwIP 的 TCP-like transport abstraction,用于让同一应用逻辑选择 plain TCP 或 TLS-over-TCP。Stage 32 已经从 Server 方向建立 HTTP message 与 TCP byte-stream boundary,Stage 33...
38-lwip-porting-and-configuration
教程 38:从 lwipopts.h 到 Port Contract——lwIP 裁剪、构建选择、OS Port 与 Network Port 摘要:把前 37 篇已经会用的 lwIP 反过来拆成工程移植契约,理解功能裁剪、资源预算、构建选择、OS Port 与网卡 Port 怎样组合成一个可运行系统。 [TOC] Stage 01~37 一直使用“已经能运行”的 lwIP:Unix Port 已经提供线程、时间、TAP netif 与构建环境,文章主要沿协议栈和应用协议向下追。进入真实 MCU 项目后,问题会反过来:拿到 upstream lwIP 源码后,项目究竟需要配置哪些功能、实现哪些平台接口、选择哪些源码,并怎样把网卡驱动接到 netif。 Stage 38 不重新讲 Stage 11 的 tcpip_thread/sys_arch 原理,也不重新讲 Stage 20~22 的 DMA/PHY 细节,而是建立一套可以迁移到 RT-Thread、FreeRTOS、ThreadX 或其他平台的 Port 心智模型。本文源码基线为用户提供的更新 lwip.zi...
40-rtthread-socket-sal-lwip
教程 40:从 socket() 到 lwip_socket()——DFS fd、SAL Socket 与 lwIP Backend 摘要:沿 RT-Thread 标准 Socket 入口追踪 DFS fd、SAL socket、lwIP socket 与 Netconn,解释创建、连接、收发、poll 和关闭如何保持同一 backend 上下文。 [TOC] Stage 39 已经回答“Ethernet Driver 怎样把 packet 送进 lwIP”。Stage 40 改从应用侧进入:**SAL(Socket Abstraction Layer,Socket 抽象层)**为不同网络协议栈提供统一 BSD Socket API;**DFS(Device File System,设备文件系统)**在启用 POSIX 兼容时提供统一文件描述符和 file operations;lwIP 则仍是实际执行 TCP/UDP Socket 的 backend。对嵌入式产品,这种分层允许应用继续使用 socket()/connect()/read()/write()/po...
41-rtthread-netdev-multi-backend
教程 41:从 NetDev 注册到 socket_init()——Default NetDev、Protocol Family 与 lwIP / AT Backend 选择 摘要:沿 lwIP 与 AT NetDev 的真实注册路径追踪 protocol family、default NetDev 和 family 匹配,解释同一 BSD Socket API 如何在多个网络后端间完成创建期选择。 [TOC] Stage 40 已经确认:SAL(Socket Abstraction Layer)创建 socket 时会把选中的 netdev 与 protocol_family 保存进 struct sal_socket。Stage 41 继续追这个选择的来源。**NetDev(Network Interface Device,网络接口设备)**是 RT-Thread 对不同网络接口的统一管理对象:它保存接口状态、地址、控制操作和 backend 私有绑定;SAL 再借助 sal_user_data 把某个 NetDev 与一组 Socket/NetDB...
42-stm32h750-rtthread-lwip-ethernet-port
教程 42:从 rt_hw_stm32_eth_init() 到 tcpip_input()——STM32H750 + RT-Thread + lwIP Ethernet Port 摘要:以 STM32H750 Art-Pi 为例,从设备初始化入口连续追踪 eth_device、lwIP netif、HAL ETH、PHY thread 与 RX/TX bridge,建立 MCU Ethernet Port 的真实源码链。 [TOC] Ethernet Port 是把 lwIP 的网络接口契约真正落到 MCU、RTOS(Real-Time Operating System,实时操作系统)与网卡硬件上的适配层。本文中的 MAC(Media Access Control,媒体访问控制器) 位于 STM32H750 内部,负责 Ethernet 帧收发;DMA(Direct Memory Access,直接内存访问) 负责在外设与 SRAM 之间搬运 frame;PHY(Physical Layer Transceiver,物理层收发器) 使用 LAN8720A,把 M...
44-stm32-phy-link-dhcp-recovery
教程 44:从 phy_monitor_thread_entry() 到 dhcp_network_changed()——STM32H750 PHY Link、Auto-negotiation 与 DHCP 恢复 摘要:沿 STM32H750 Art-Pi 的 PHY 监测、MAC 重配置、RT-Thread eth_device、lwIP Link 状态与 DHCP 重启路径,建立网线插拔后的完整网络恢复生命周期。 [TOC] PHY(Physical Layer Transceiver,物理层收发器)负责检测网线侧物理连接并完成 10/100M、半双工/全双工等链路能力协商。Auto-Negotiation(自动协商) 是链路两端交换能力并得到共同工作模式的过程;LAN8720A 的 BMSR(Basic Mode Status Register,基本模式状态寄存器) 暴露 Link Status 与 Auto-Negotiation Complete 等状态。lwIP 中的 NETIF_FLAG_LINK_UP 则是软件层的 Link 标志,它不等...
43-stm32h7-ethernet-dma-cache-zero-copy
教程 43:从 ETH_IRQHandler() 到 HAL_ETH_Transmit()——STM32H7 Ethernet DMA、Descriptor、Cache 与 Zero-copy 边界 摘要:沿 STM32H750 Ethernet RX/TX 真实源码追踪 descriptor OWN、buffer 生命周期、D-Cache maintenance、pbuf copy 与当前 TX zero-copy 边界。 [TOC] DMA(Direct Memory Access,直接内存访问)允许 STM32 Ethernet 外设在不经过 CPU 逐字节搬运的情况下直接读写 SRAM。Descriptor(DMA 描述符) 是 DMA 使用的控制记录,保存 buffer 地址、长度和状态;本文反复出现的 OWN bit 表示某个 descriptor 当前由 DMA 还是 CPU 处理。STM32H7 的 Cortex-M7 又带有 D-Cache(数据缓存),因此当 CPU 和 DMA 访问同一块 cacheable 内存时必须处理 cache coh...
45-mcu-cloud-lifecycle
教程 45:从 Link Up 到 MQTT Reconnect——STM32 + RT-Thread + lwIP MCU Cloud Lifecycle 摘要:以 readiness、事件所有权和恢复边界重构 MCU 上云生命周期,说明 Link/IP/Time/DNS/TLS/MQTT 如何组合成长期可恢复的产品状态机。 [TOC] MCU Cloud Lifecycle 不是 lwIP 中的某个 API,也不是 MQTT 的另一个状态机。这里的 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是设备与 Broker 之间的应用层消息协议;TLS(Transport Layer Security,传输层安全协议)负责为其建立安全传输。产品层需要把 PHY/Link、IP 配置、名字解析、可信时间、安全传输、MQTT 会话和业务恢复 组合成长期运行系统的编排问题。Stage 42~44 已经把 STM32 Ethernet Port、DMA 数据面与 Link...
LWIP学习笔记系列
LWIP学习笔记系列 1. 教程 00:从网线上的电信号到 lwIP——PHY、MAC、DMA 与 netif 的完整边界 2. lwIP Source Lab 教程索引 3. 教程 01:从 upstream master 到第一条可读源码链——Linux Host、构建树与源码地图 4. 教程 02:从 main() 到第一次 Ping——netif、TAP、ARP 与 ICMP 的完整源码链 5. 教程 03:从 low_level_input() 到 pbuf_free()——pbuf 的数据视图、Chain 与引用计数 6. 教程 04:从 ethernet_input() 到 Echo Reply——Ethernet、ARP、IPv4 与 ICMP 的分层数据通路 7. 教程 05:从 udpecho_raw_init() 到 Echo Reply——UDP Raw API、PCB 与回调数据通路 8. 教程 06:从 udpecho_thread() 到 Socket——Netconn、Mailbox 与顺序式 API 9. 教程 07:从 tcpecho_raw_...
index
lwIP Source Lab这是仓库文档站入口。项目持续跟踪官方 lwIP master,在 Linux Host 上把源码入口、运行时对象、协议报文和资源 ownership 放进同一条学习主线。 系列文章采用以下原则: 源码解读篇从当前行为的真实入口函数开始,而不是按文件顺序阅读; 概念在第一次真正需要时解释,并完成足够的边界与数据方向说明; example / Unix Port 的实现细节与 lwIP Core contract 分开描述; 抓包、调试等工具由当前证据需求引出,不提前做工具百科; Stage 0/15/31/38/45 这类 Theory-of-Operation 文章先建立系统位置和完整数据流,再逐层下钻; 复杂调用链、状态迁移和数据流优先用 Mermaid 或技术图建立运行时模型; 关键源码结论使用可追溯 Source Map,并链接到固定 upstream commit。 从 教程系列索引 开始。 参考资料以下资料随文档站一并发布,可直接点击打开 PDF: 《以太网工作原理》 《支持 RGMI...









