网络子系统学习与开发教程
一、整体背景与环境说明你当前环境芯片RK35884×A76 4×A55编译主机Ubuntu 22.04构建系统BuildrootU-Boot2026.04你说的内核Linux 7.0.3Rockchip/ARM64网络硬件双GMACGMAC0/GMAC1 RGMII/RMII PHY USB WiFi/SDIO WiFi说明主线Linux目前到6.x你说的“7.0”应为Rockchip 5.10/6.1定制内核的内部版本号以下统一按Linux 7.0.3RK3588 BSP内核来写。二、Linux内核网络子系统架构7.0/6.x核心一致2.1 分层模型从上到下用户空间socket()、bind()、send()... ──────────────────────────── Socket层 | net/socket.c 协议栈层 | net/ipv4/、net/ipv6/、net/tcp.c、net/udp.c 网络核心层 | net/core/dev.c、skbuff.c、netfilter 设备接口层 | include/linux/netdevice.h、net/core/dev.c 驱动层 | drivers/net/gmac_rockchip.c、phy/、wireless/ 硬件层 | RK3588 GMAC PHYRTL8211F/YT8521 WiFi模块核心数据结构struct net_device网卡设备抽象struct sk_buff数据包缓冲区贯穿整个协议栈struct phy_devicePHY芯片抽象2.2 RK3588网络硬件特点双GMAC控制器DWC ETH QoSGMAC0常用RGMII 10/100/1000MbpsGMAC1备用RMII 10/100MbpsPHY接口RGMII推荐、RMIIWiFiSDIOAP6275/AP6358、USBRTL8821CU/RTL8723DSDMA独立Tx/Rx队列支持RSS、中断亲和三、开发环境搭建Ubuntu22.04 Buildroot RK35883.1 安装依赖sudoaptupdatesudoaptinstall-ygitrepomakegcc g\libncurses-dev bison flex libssl-dev liblz4-tool\device-tree-compiler qemu-user-static3.2 获取RK3588 SDK含Linux7.0.3、U-Boot、Buildroot推荐官方/开源SDKRockchip官方SDK需申请开源替代Firefly RK3588 SDK / Armbian / OpenWrt# 示例Firefly SDKgitclone https://github.com/FireflyTeam/rk3588-linux-sdk.gitcdrk3588-linux-sdk reposync-j83.3 目录结构关键rk3588-linux-sdk/ ├── buildroot/ # Buildroot根目录 ├── kernel/ # Linux7.0.3源码 │ ├── arch/arm64/boot/dts/rockchip/ # 设备树 │ └── drivers/net/ # 网络驱动gmac_rockchip.c、phy/ ├── u-boot/ # U-Boot 2026.04 └── toolchain/ # 交叉工具链aarch64-linux-gnu-3.4 配置与编译Buildroot 内核 U-Boot3.4.1 编译U-Boot2026.04cdu-bootmakerockchip_rk3588_defconfigmake-j8CROSS_COMPILE../toolchain/bin/aarch64-linux-gnu-3.4.2 配置Linux7.0.3内核网络相关cdkernelmakerockchip_rk3588_defconfig# 或你的板级defconfigmakemenuconfig必选网络配置[*] Networking support Networking options --- [*] TCP/IP networking [*] IP: multicasting [*] IP: advanced router [*] Netfilter Xtables support Device Drivers --- Network device support --- [*] Ethernet driver support [*] Rockchip GMAC Ethernet support PHY device support --- [*] Support for MDIO bus [*] Realtek PHY supportRTL8211F Wireless LAN --- [*] IEEE 802.11 for Host AP [*] Realtek rtlwifi familyUSB WiFi保存配置make-j8CROSS_COMPILE../toolchain/bin/aarch64-linux-gnu-ARCHarm643.4.3 Buildroot编译根文件系统cdbuildrootmakerockchip_rk3588_defconfigmake-j8四、RK3588 GMAC以太网驱动开发实例4.1 设备树DTS配置关键路径kernel/arch/arm64/boot/dts/rockchip/rk3588-your-board.dtsgmac0 { status okay; snps,reset-gpio gpio3 RK_PB0 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 10000 100000; phy-mode rgmii-id; // RGMII带内时钟 phy-handle phy0; pinctrl-names default; pinctrl-0 gmac0_pins; }; mdio { status okay; phy0: ethernet-phy0 { reg 0; // PHY地址0RTL8211F默认 rtl,disable-energy-detect; }; };4.2 内核驱动源码核心文件路径kernel/drivers/net/ethernet/rockchip/gmac_rockchip.c核心函数gmac_rockchip_probe匹配设备树初始化硬件gmac_rockchip_open网卡up启动DMAgmac_rockchip_start_xmit发包gmac_rockchip_rx_interrupt收包中断4.3 实例GMAC驱动模块编译与测试4.3.1 编写Makefile内核模块obj-m gmac_demo.o KERNELDIR ? /path/to/kernel ARCH ? arm64 CROSS_COMPILE ? /path/to/aarch64-linux-gnu- all: $(MAKE) -C $(KERNELDIR) M$(PWD) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) modules clean: $(MAKE) -C $(KERNELDIR) M$(PWD) clean4.3.2 测试驱动# 开发板上insmod gmac_demo.koifconfigeth0 up dhclient eth0ping8.8.8.8五、WiFi驱动开发实例USB/SDIO5.1 USB WiFiRTL8821CU常用5.1.1 开源驱动官方Realtek rtl8821CU开源移植https://github.com/brektrou/rtl8821CU5.1.2 交叉编译适配RK3588修改MakefilePLATFORM ARM ARCH arm64 CROSS_COMPILE /path/to/aarch64-linux-gnu- KSRC /path/to/kernel编译make-j4生成8821cu.ko5.1.3 加载与测试insmod 8821cu.ko iw dev wlan0linkiwlist wlan0 scan wpa_supplicant-iwlan0-c/etc/wpa_supplicant.conf5.2 SDIO WiFiAP6275驱动路径kernel/drivers/net/wireless/rockchip/ap6275设备树配置启用SDIO节点匹配WiFi模块Buildroot配置开启wpa_supplicant、hostapd六、网络子系统进阶学习内容6.1 内核网络核心sk_buff 深度解析内存管理、克隆、分片NAPI 机制中断轮询提升收包效率Netfilter/iptables内核防火墙、数据包过滤RSS 多队列多CPU分担网络中断RK3588 8核优化中断亲和把eth0中断绑定到大核A76提升性能6.2 性能调优中断亲和# 查看eth0中断号cat/proc/interrupts|grepeth0# 绑定到CPU6A76大核echo40/proc/irq/123/smp_affinity# 123为中断号网卡多队列ethtool-Ceth0 rx-usecs100ethtool-Leth0 combined46.3 协议栈开发自定义协议TCP拥塞控制算法BBR、CUBICIPv6 双栈配置七、开源代码与项目推荐7.1 RK3588 网络驱动Rockchip官方内核https://github.com/rockchip-linux/kernelFirefly RK3588 BSPhttps://github.com/FireflyTeam/rk3588-linux-sdkGMAC驱动drivers/net/ethernet/rockchip/gmac_rockchip.c7.2 WiFi驱动RTL8821CUhttps://github.com/brektrou/rtl8821CUAP6275Rockchip内核自带7.3 网络工具Buildroot可集成iperf3网络性能测试tcpdump抓包分析wpa_supplicantWiFi客户端hostapdWiFi热点八、完整实例方案可直接落地方案1RK3588 双网口GMAC0GMAC1 WiFiGMAC0RGMIIRTL8211F1000MbpsGMAC1RMIIYT8521100MbpsWiFiUSB RTL8821CU2.4G5G用途工业网关、路由器方案2RK3588 4G/5G WiFi 以太网以太网GMAC0WiFiSDIO AP62754GUSB EC20用途边缘计算、物联网终端方案3网络性能优化RK3588 8核中断亲和eth0 → A76大核RSS4队列分发包到不同CPUNAPI高负载下轮询收包性能iperf3 可达 940Mbps九、常见问题与避坑GMAC网卡不up检查设备树phy-mode、reset-gpio是否正确WiFi驱动编译报错Makefile中ARCHarm64、工具链路径正确网络中断卡顿关闭irqbalance手动绑定中断到大核Buildroot编译失败依赖包不全重新安装libssl-dev等十、下一步学习建议先跑通GMAC以太网最基础再移植USB WiFiRTL8821CU深入sk_buff、NAPI、Netfilter做一个网络性能测试工具或简单路由器如果你愿意我可以帮你把以上内容整理成一份可直接复制的编译脚本 DTS模板 Makefile模板你直接粘贴就能编译运行。需要我整理吗