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

一、整体背景与环境说明

你当前环境:

  • 芯片: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模板,你直接粘贴就能编译运行。需要我整理吗?

相关推荐
道川贤林15 小时前
EMMC开发环境的搭建与备份
linux·嵌入式·rk3588·orangepi
楼兰公子4 天前
/sys/kernel/debug/目录解读
rk3588·debugfs·linux7.03
Industio_触觉智能5 天前
瑞芯微RK3588工控整机、边缘计算盒子规格书,参数配置性能说明,触觉智能IPC8801
人工智能·ai·边缘计算·rk3588·工控·rk3588j·arm整机
时光飞逝的日子12 天前
嵌入式大模型部署:从 LLaMA-3 到 Qwen-1.5,在 RK3588 上实现本地 AI 推理(含模型量化教程)
rk3588·模型量化·llama-3·端侧大模型·qwen-1.5
NashSKY15 天前
RK3588 Debian 系统安装与WiFi/SSH配置笔记
debian·ssh·rk3588
NashSKY16 天前
RK3588 摄像头图形应用开发笔记
rk3588
NashSKY16 天前
RK3588 Linux SDK 编译、烧录与 MIPI 屏配置流程
linux·rk3588
是专家不是砖家17 天前
RK3588 下位机搜索不到问题排查
rk3588·can-oepn·声光报警器·udp收不到数据
郭涤生19 天前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
郭涤生19 天前
飞凌 RK3588 开发板同显 / 异显模式切换
c++·rk3588