LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查

摘要:以 YT6801 PCI 网卡为例,解释 vermagic 不匹配,并演示从官方源码到内核树内模块的移植思路。

适用对象:需要为 RK3588 PCIe 网卡适配 Linux 6.1 内核的开发者。源码版本、PCI ID 和设备树必须与硬件实际情况一致。

文章目录

一、问题现象

设备可以枚举出 PCI 网卡,但接口没有出现,或者加载旧模块时提示内核版本不匹配。常见原因是:目标设备运行的 RT 内核与原模块编译时使用的内核版本、配置或编译选项不同。

先确认硬件:

bash 复制代码
lspci -nnk -d 1f0a:6801

本次 YT6801 的 PCI ID 为 1f0a:6801,设备地址为 0002:21:00.0。PCI 地址可能随设备树和枚举顺序变化,定位硬件时优先使用厂商/设备 ID。

二、理解 vermagic

bash 复制代码
modinfo yt6801 | grep -E 'version|vermagic|filename|alias|intree'

vermagic 包含内核版本、SMP、抢占模型和架构等信息。旧的 6.1.84 模块不能直接替换到 6.1.99-rt36-rk3588,因为即使源码相同,RT 配置也可能不同。

三、获取并审查源码

建议从芯片厂商官方渠道获取 YT6801 Linux 驱动源码,并记录版本、下载地址和 SHA256。不要把来源不明的二进制 .ko 直接放进 rootfs。

本次采用 Motorcomm 官方 yt6801-linux-driver-1.0.34.zip,并保留其版权和许可说明:Motorcomm 下载中心。下载归档的实测 SHA256 为:

text 复制代码
877e6953fc6eb47232a74e47b0daf33de0e7f9e9a395d3bc10d500d3c4150af8

上面的哈希只适用于本次下载文件;厂商更新文件后应重新计算。

四、集成到内核树

内核树内集成至少需要:

text 复制代码
drivers/net/ethernet/motorcomm/Kconfig
drivers/net/ethernet/motorcomm/Makefile
drivers/net/ethernet/motorcomm/yt6801/Makefile
drivers/net/ethernet/motorcomm/yt6801/*.c

还要在 drivers/net/ethernet/Kconfigsource 新的 Kconfig,并在 drivers/net/ethernet/Makefile 中加入 motorcomm/。否则源码虽然存在,也不会进入 Kbuild 依赖图。

同时在 defconfig 中启用:

text 复制代码
CONFIG_NET_VENDOR_MOTORCOMM=y
CONFIG_FUXI=m

构建后检查:

bash 复制代码
module=kernel-6.1/drivers/net/ethernet/motorcomm/yt6801/yt6801.ko
test -f "$module"
modinfo "$module" | grep -E 'version|alias|vermagic|intree'

本次实测关键元数据为:

text 复制代码
version:   1.0.34
alias:     pci:v00001F0Ad00006801sv*sd*bc*sc*i*
intree:    Y
vermagic:  6.1.99-rt36-rk3588 SMP preempt_rt mod_unload aarch64

还应检查最终 image DEB 中包含该模块,不能只检查源码目录。

五、目标设备验证

bash 复制代码
sudo modprobe yt6801
lspci -nnk -d 1f0a:6801
ls -1 /sys/bus/pci/devices/0002:21:00.0/net/
yt_if=$(ls -1 /sys/bus/pci/devices/0002:21:00.0/net/ | head -n 1)
ethtool -i "$yt_if"
ip -br link

接口名不应写死为 eth2。驱动加载顺序变化后,YT6801 可能成为 eth0,RK GMAC 则变为 eth1eth2。工程中应使用 MAC 地址或稳定的 udev/systemd link 规则。

小结

驱动移植的正确顺序是"确认硬件 ID---获取源码---匹配内核 API---集成 Kconfig---构建---重启验证",而不是复制一个旧 .ko 文件。

工作流实测截图

图1:eth0 的 PCIe 拓扑、yt6801 驱动路径和总线地址。

图2:驱动版本、固件版本和能力字段;链路是否 UP 仍需单独检查。

专栏导航

专栏LubanCat RK3588 实时 Linux 开发实战(第 7/18 篇)

参考资料

文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准;引用命令前请先确认当前 SDK、内核和启动布局。

标签YT6801 PCIe网卡 Linux驱动 vermagic RK3588

相关推荐
DYWorker0011 小时前
Linux驱动子系统:DMA子系统 —— Consumer和Provider(006)
linux·驱动开发
byte轻骑兵1 小时前
【BlueZ】 log 模块:日志系统的实现与自定义日志输出配置
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
探索云原生2 小时前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
一技安身2 小时前
【信创】docker-26.0.2.tgz 原理 + 完整安装
linux·运维·服务器
程曦曦3 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
赵民勇3 小时前
systemd-mount命令详解
linux
H_oRIZoN_3 小时前
Linux入门DAY42【51 单片机】DS18B20 数字温度传感器完整解析(单总线原理 + 时序 + 读取流程)
linux·单片机·linux应用编程
j7~3 小时前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
流浪0014 小时前
Linux系统篇34——信号(六):信号处理期间又来了怎么办?——sigaction、sa_mask、可重入函数与 volatile
linux·运维·面试·操作系统·信号处理·信号