网络子系统学习与开发教程

一、整体背景与环境说明

你当前环境:

  • 芯片:RK3588(4×A76 + 4×A55)
  • 编译主机:Ubuntu 22.04
  • 构建系统:Buildroot
  • U-Boot:2026.04(你说的)
  • 内核:Linux 7.0.3(Rockchip/ARM64)
  • 网络硬件:双GMAC(GMAC0/GMAC1)+ RGMII/RMII PHY + USB WiFi/SDIO WiFi

说明:主线Linux目前到6.x,你说的"7.0"应为Rockchip 5.10/6.1定制内核的内部版本号 ,以下统一按 Linux 7.0.3(RK3588 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 + PHY(RTL8211F/YT8521)+ WiFi模块

核心数据结构:

  • struct net_device:网卡设备抽象
  • struct sk_buff:数据包缓冲区(贯穿整个协议栈)
  • struct phy_device:PHY芯片抽象

2.2 RK3588网络硬件特点

  • 双GMAC控制器(DWC ETH QoS)
    • GMAC0:常用,RGMII 10/100/1000Mbps
    • GMAC1:备用,RMII 10/100Mbps
  • PHY接口:RGMII(推荐)、RMII
  • WiFi:SDIO(AP6275/AP6358)、USB(RTL8821CU/RTL8723DS)
  • DMA:独立Tx/Rx队列,支持RSS、中断亲和

三、开发环境搭建(Ubuntu22.04 + Buildroot + RK3588)

3.1 安装依赖

bash 复制代码
sudo apt update
sudo apt install -y git repo make gcc g++ \
libncurses-dev bison flex libssl-dev liblz4-tool \
device-tree-compiler qemu-user-static

3.2 获取RK3588 SDK(含Linux7.0.3、U-Boot、Buildroot)

推荐官方/开源SDK:

  • Rockchip官方SDK(需申请)
  • 开源替代:Firefly RK3588 SDK / Armbian / OpenWrt
bash 复制代码
# 示例(Firefly SDK)
git clone https://github.com/FireflyTeam/rk3588-linux-sdk.git
cd rk3588-linux-sdk
repo sync -j8

3.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-Boot)

3.4.1 编译U-Boot(2026.04)
bash 复制代码
cd u-boot
make rockchip_rk3588_defconfig
make -j8 CROSS_COMPILE=../toolchain/bin/aarch64-linux-gnu-
3.4.2 配置Linux7.0.3内核(网络相关)
bash 复制代码
cd kernel
make rockchip_rk3588_defconfig  # 或你的板级defconfig
make menuconfig

必选网络配置

复制代码
[*] 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 support(RTL8211F)
            Wireless LAN  --->
                [*] IEEE 802.11 for Host AP
                [*] Realtek rtlwifi family(USB WiFi)

保存配置:

bash 复制代码
make -j8 CROSS_COMPILE=../toolchain/bin/aarch64-linux-gnu- ARCH=arm64
3.4.3 Buildroot编译根文件系统
bash 复制代码
cd buildroot
make rockchip_rk3588_defconfig
make -j8

四、RK3588 GMAC以太网驱动开发(实例)

4.1 设备树(DTS)配置(关键!)

路径:kernel/arch/arm64/boot/dts/rockchip/rk3588-your-board.dts

dts 复制代码
&gmac0 {
    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-phy@0 {
        reg = <0>;  // PHY地址0(RTL8211F默认)
        rtl,disable-energy-detect;
    };
};

4.2 内核驱动源码(核心文件)

  • 路径:kernel/drivers/net/ethernet/rockchip/gmac_rockchip.c
  • 核心函数:
    • gmac_rockchip_probe:匹配设备树,初始化硬件
    • gmac_rockchip_open:网卡up,启动DMA
    • gmac_rockchip_start_xmit:发包
    • gmac_rockchip_rx_interrupt:收包中断

4.3 实例:GMAC驱动模块编译与测试

4.3.1 编写Makefile(内核模块)
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) clean
4.3.2 测试驱动
bash 复制代码
# 开发板上
insmod gmac_demo.ko
ifconfig eth0 up
dhclient eth0
ping 8.8.8.8

五、WiFi驱动开发实例(USB/SDIO)

5.1 USB WiFi(RTL8821CU,常用)

5.1.1 开源驱动
5.1.2 交叉编译(适配RK3588)

修改Makefile:

makefile 复制代码
PLATFORM = ARM
ARCH = arm64
CROSS_COMPILE = /path/to/aarch64-linux-gnu-
KSRC = /path/to/kernel

编译:

bash 复制代码
make -j4

生成 8821cu.ko

5.1.3 加载与测试
bash 复制代码
insmod 8821cu.ko
iw dev wlan0 link
iwlist wlan0 scan
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf

5.2 SDIO WiFi(AP6275)

  • 驱动路径:kernel/drivers/net/wireless/rockchip/ap6275
  • 设备树配置:启用SDIO节点,匹配WiFi模块
  • Buildroot配置:开启wpa_supplicanthostapd

六、网络子系统进阶学习内容

6.1 内核网络核心

  • sk_buff 深度解析:内存管理、克隆、分片
  • NAPI 机制:中断+轮询,提升收包效率
  • Netfilter/iptables:内核防火墙、数据包过滤
  • RSS 多队列:多CPU分担网络中断(RK3588 8核优化)
  • 中断亲和:把eth0中断绑定到大核(A76),提升性能

6.2 性能调优

  • 中断亲和:
bash 复制代码
# 查看eth0中断号
cat /proc/interrupts | grep eth0
# 绑定到CPU6(A76大核)
echo 40 > /proc/irq/123/smp_affinity  # 123为中断号
  • 网卡多队列:
bash 复制代码
ethtool -C eth0 rx-usecs 100
ethtool -L eth0 combined 4

6.3 协议栈开发

  • 自定义协议
  • TCP拥塞控制算法(BBR、CUBIC)
  • IPv6 双栈配置

七、开源代码与项目推荐

7.1 RK3588 网络驱动

7.2 WiFi驱动

7.3 网络工具(Buildroot可集成)

  • iperf3:网络性能测试
  • tcpdump:抓包分析
  • wpa_supplicant:WiFi客户端
  • hostapd:WiFi热点

八、完整实例方案(可直接落地)

方案1:RK3588 双网口(GMAC0+GMAC1)+ WiFi

  • GMAC0:RGMII,RTL8211F,1000Mbps
  • GMAC1:RMII,YT8521,100Mbps
  • WiFi:USB RTL8821CU,2.4G+5G
  • 用途:工业网关、路由器

方案2:RK3588 4G/5G + WiFi + 以太网

  • 以太网:GMAC0
  • WiFi:SDIO AP6275
  • 4G:USB EC20
  • 用途:边缘计算、物联网终端

方案3:网络性能优化(RK3588 8核)

  • 中断亲和:eth0 → A76大核
  • RSS:4队列,分发包到不同CPU
  • NAPI:高负载下轮询收包
  • 性能:iperf3 可达 940Mbps+

九、常见问题与避坑

  1. GMAC网卡不up :检查设备树phy-modereset-gpio是否正确
  2. WiFi驱动编译报错 :Makefile中ARCH=arm64、工具链路径正确
  3. 网络中断卡顿 :关闭irqbalance,手动绑定中断到大核
  4. Buildroot编译失败 :依赖包不全,重新安装libssl-dev

十、下一步学习建议

  1. 先跑通GMAC以太网(最基础)
  2. 再移植USB WiFi(RTL8821CU)
  3. 深入sk_buff、NAPI、Netfilter
  4. 做一个网络性能测试工具简单路由器

如果你愿意,我可以帮你把以上内容整理成一份可直接复制的编译脚本 + DTS模板 + Makefile模板,你直接粘贴就能编译运行。需要我整理吗?

相关推荐
长安第一美人1 天前
工业级实时监控系统开发:PHP+ZMQ+JS 前后端分离架构全解析
前端·嵌入式硬件·架构·交互·rk3588·zmq后端
楼兰公子4 天前
SoC 原理图与 PCB 设计实战课程大纲
rk3588·rpi4b·kicad10
月光技术杂谈5 天前
深度解析:基于Docker跨架构构建RK3588嵌入式rootfs的原理、边界与最佳实践
docker·容器·rootfs·rk3588·openeuler·欧拉·文件系统构建
禅口魔心24 天前
边缘网关开发计划(一):在 Rock 5T 上部署 Docker
物联网·docker·rk3588·边缘网关
Coovally AI模型快速验证1 个月前
RK3588上111 FPS:轻量YOLOv8+异步视频处理系统实现无人机自主电力巡检
yolo·无人机·rk3588·yolov8·塔杆定位
Industio_触觉智能1 个月前
玩转RK3588远程控制,Ubuntu22.04 Wayland安装RustDesk工具
linux·ubuntu·rk3588·远程工具·rustdesk·wayland·ubuntu22.04
炭烤毛蛋1 个月前
rk3588 适配音频解码芯片 es8388
arm开发·音视频·rk3588·es8388
Industio_触觉智能2 个月前
瑞芯微RK3588 RKNN模型推理环境部署与功能测试技巧(下)
嵌入式硬件·ai·rk3588·rknn·瑞芯微·rknn-toolkit2·rk3588j
优美的赫蒂2 个月前
香橙派5plus单独编译内核安装时的报错记录
linux·rk3588·orangepi