一、整体背景与环境说明
你当前环境:
- 芯片: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,启动DMAgmac_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 开源驱动
- 官方:Realtek rtl8821CU
- 开源移植:https://github.com/brektrou/rtl8821CU
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_supplicant、hostapd
六、网络子系统进阶学习内容
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 网络驱动
- Rockchip官方内核:https://github.com/rockchip-linux/kernel
- Firefly RK3588 BSP:https://github.com/FireflyTeam/rk3588-linux-sdk
- GMAC驱动:
drivers/net/ethernet/rockchip/gmac_rockchip.c
7.2 WiFi驱动
- RTL8821CU:https://github.com/brektrou/rtl8821CU
- AP6275:Rockchip内核自带
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+
九、常见问题与避坑
- GMAC网卡不up :检查设备树
phy-mode、reset-gpio是否正确 - WiFi驱动编译报错 :Makefile中
ARCH=arm64、工具链路径正确 - 网络中断卡顿 :关闭
irqbalance,手动绑定中断到大核 - Buildroot编译失败 :依赖包不全,重新安装
libssl-dev等
十、下一步学习建议
- 先跑通GMAC以太网(最基础)
- 再移植USB WiFi(RTL8821CU)
- 深入sk_buff、NAPI、Netfilter
- 做一个网络性能测试工具 或简单路由器
如果你愿意,我可以帮你把以上内容整理成一份可直接复制的编译脚本 + DTS模板 + Makefile模板,你直接粘贴就能编译运行。需要我整理吗?