0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3588 PCIe设备识别失败?一招避坑“非法Class”陷阱

眺望电子 2025-08-29 08:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言:在 RK3588 平台开发过程中,你是否遇到过这样的窘境:明明 PCIe 总线上挂好了网卡模块,lspci 能识别到芯片,可驱动就是加载失败,排查半天找不到关键问题?别慌!本文将带你一步步解决这个棘手问题。


一、案例背景

使用眺望电子 RK3588核心板的PCIE20_0/1/2接口挂载裕太微yt6801芯片扩展网卡为例,看看问题到底有多棘手。

通过lspci命令查看设备状态时,能清晰看到 yt6801 芯片的存在,三个网卡设备均显示为 “Ethernet controller: Device 1f0a:6801 (rev 01)”,从表面看似乎一切正常。

a5669dac-846f-11f0-9080-92fbcf53809c.png

可当执行insmod yt6801.ko加载驱动时,报错信息却接连弹出驱动加载直接失败,网卡根本无法使用。

a57f4f50-846f-11f0-9080-92fbcf53809c.png

明明硬件连接没问题,设备也能被识别,为什么驱动就是 “不听话”?这背后肯定藏着我们没注意到的关键细节。


二、根源分析

问题不能看表面,深入日志查原因

查看系统日志时发现,出问题的 PCIe 设备与正常设备的 class 类型截然不同。正常工作的两个 PCIe 设备(000200.0 和 000100.0),class 类型均为 0x060400;而加载驱动失败的 PCIe 设备(000400.0),class 类型却显示为 0x000000。

a592f762-846f-11f0-9080-92fbcf53809c.png

SDK/kernel/include/linux/pci_ids.h文件中定义了不同class类别。其中0x000000为PCI_CLASS_NOT_DEFINED,即为未定义;而0x060400为PCI_CLASS_BRIDGE_PCI,即为PCIe桥。只有正确识别设备类型,内核才能进行后续的资源分配和驱动加载。

由于该 PCIe 设备的 class 类型非法(未定义),系统无法正确识别其功能属性,导致 Memory BAR 资源分配异常(lspci 中 BAR 资源会显示 unassigned 状态),最终造成网卡驱动加载失败。

找到根源后,解决问题就有了明确方向。


三、解决方案

想要解决这个问题,最根本的方式是联系模块供应商,让其对模块的 class 类型进行正确配置。但如果遇到无法修改硬件配置,或需要临时应急的情况,可以参考下文尝试对模块的class类型进行软件修复,具体只需如下3步:

3.1定位修改文件

打开RK3588的SDK,找到内核中的kernel/drivers/pci/quirks.c文件。该文件主要用于处理 PCI 设备的特殊配置和兼容性问题,是我们进行软件修复的关键位置。

3.2添加修复代码

在quirks.c文件中,新增以下两段代码:

a5a63836-846f-11f0-9080-92fbcf53809c.png

1.定义 class 类型修复函数

staticvoidquirk_class_id_fixup(struct pci_dev *dev){ dev->class=0x060400;// 将class类型设置为标准PCIe桥类型}

2.注册修复逻辑

DECLARE_PCI_FIXUP_CLASS_EARLY(0x1d87,0x3588, PCI_CLASS_NOT_DEFINED,8, quirk_class_id_fixup);

这里需要注意:0x1d87是 RK3588 的 Vendor ID(厂商 ID),0x3588是对应的 Device ID(设备 ID),PCI_CLASS_NOT_DEFINED指定针对未定义 class 类型的设备进行修复,0x060400则是我们要修复到的正确 class 类型。

3.3加修复代码

代码添加完成后,重新编译内核镜像,将编译好的镜像烧录到 RK3588 核心板中,通过命令验证修复效果:

1、执行lspci命令,已正确显示为 “PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01)”,class 类型修复成功。

2、执行insmod yt6801.ko加载驱动,此时不再出现报错信息,驱动加载成功。

3、执行ifconfig命令,能看到新增的网卡接口(如 enP4p65s0),且接口状态正常,支持 UP、BROADCAST、MULTICAST 等模式,说明网卡已能正常工作。

a5b7ca92-846f-11f0-9080-92fbcf53809c.png

至此,RK3588 PCIe 非法class类型导致的网卡驱动无法加载问题,已完全解决。

四、小结

本文提供的解决方案基于特定硬件平台验证,实际应用中需根据具体设备调整VID/PID及class类型参数。如果你在 RK3588 平台或者我司核心板开发中还遇到过其他 PCIe 相关难题,请关注眺望电子公众号或在评论区留言分享,我们一起交流探讨!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCIe
    +关注

    关注

    16

    文章

    1422

    浏览量

    87559
  • Class
    +关注

    关注

    0

    文章

    54

    浏览量

    20369
  • RK3588
    +关注

    关注

    8

    文章

    494

    浏览量

    7064
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    实战案例 | RK3588 CAN通信BUG指南

    前言:RK3588内置CAN控制器存在不可修复的硬件缺陷,考虑工业、医疗、车载等应用领域对CAN通讯稳定性有着极高的要求,为规避此问题,建议使用SPI转CAN替代原生CAN接口。、背景说明
    的头像 发表于 02-20 08:30 9122次阅读
    实战案例 | <b class='flag-5'>RK3588</b> CAN通信BUG<b class='flag-5'>避</b><b class='flag-5'>坑</b>指南

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读 瑞芯微旗舰芯RK3588系列开发板受到广大开发者伙伴的关注和问询。针对相关的开发板功能、操作指南等问题,我们
    的头像 发表于 09-22 15:54 2.2w次阅读
    瑞芯微<b class='flag-5'>RK3588</b>开发板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解读

    RK3588 EVB开发板原理图讲解【八】 RK3588 power Tree

    本帖最后由 瑞芯微方案开发老王 于 2025-3-1 11:41 编辑 RK3588电源架构核心特点 ​多电源域设计​ 芯片通常划分为多个独立电源域(Power Domain),例如
    发表于 03-01 11:38

    RK3588 EVB 开发板介绍

    RK3588 EVB 主要面向ARM PC、NVR、服务器、IPC、大屏显示设备等AIoT行业类应用产品;RK3588S EVB 面向高端平板、AR/VR、个人移动互联网设备等消费类电
    发表于 03-16 16:39

    RK3588 video engine

    请问RK3588的video engine可以作为PCIE的endpoint给别的设备使用嘛
    发表于 01-07 21:04

    RK3588J和RK3588是什么关系?

    RK3588J是不是个开发板的名字,里面的SOC是RK3588?还是RK3588J属于RK3588的子系列?
    发表于 03-13 14:22

    RK3588PCIE设置为EP模式设备树和defconfig需要怎么修改呀?

    RK3588PCIE设置为EP模式设备树和defconfig需要怎么修改呀?
    发表于 04-21 11:16

    rk3588rk3588s的区别

    rk3588rk3588s的区别 Rockchip是家专业的半导体公司,成立于2001年,总部位于中国深圳,主要从事集成电路的设计、开发和销售。他们的热门产品RK3588
    的头像 发表于 08-15 16:44 2w次阅读

    RK35883588s的区别

    RK35883588s的区别 Rockchip RK3588RK3588s是两种功能强大且广受欢迎的片上系统(SoC)解决方案,用于
    的头像 发表于 08-15 17:03 2.8w次阅读

    RK3588RK3399的区别

    存储器,并且支持PCIe4.0和USB 3.2 Gen1接口,可实现高速传输和多设备连接。在AI方面,RK3588支持多种神经网络,如ResNet、SSD、YOLO、FCN等,并可以通过开放的SDK进行
    的头像 发表于 08-15 17:04 9312次阅读

    RK3588系列有多少型号?

    RK3588系列有多少型号? RK3588是瑞芯微推出的款长线产品,属于高性能处理器领域的顶尖产品。它从2020年开始进入市场,现已成为市场上最热门的处理器之。该产品因其高效能、强
    的头像 发表于 08-15 17:04 6144次阅读

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型
    的头像 发表于 06-25 15:30 5776次阅读
    迅为电子<b class='flag-5'>RK3588</b>S与<b class='flag-5'>RK3588</b>硬件性能区别及板卡选型

    RK3588参数与主要特性 RK3588数据手册解读

    RK3588参数与主要特性 RK3588数据手册解读
    的头像 发表于 05-19 18:34 9672次阅读
    <b class='flag-5'>RK3588</b>参数与主要特性  <b class='flag-5'>RK3588</b>数据手册解读

    开发者必备,10 分钟搞定 RK3588 PCIE 拆分!

    前言:在嵌入式开发中,PCIe接口的灵活配置直接影响设备扩展能力与性能发挥。RK3588作为旗舰芯片,其PCIe拆分机制更是让硬件设计与软件调试拥有了更多可能性。今天这篇技术笔记,就带
    的头像 发表于 11-13 08:31 996次阅读
    开发者必备,10 分钟搞定 <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIE</b> 拆分!

    文搞懂 RK3588 PCIe:从硬件资源到拆分配置 + 指南(含脑图)

    资源解析、 3  大拆分方案实战、关键配置步骤及要点,附带可视化脑图,助力开发者快速落地  PCIe  相关项目。       RK358
    的头像 发表于 11-20 18:18 1893次阅读
    <b class='flag-5'>一</b>文搞懂 <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIe</b>:从硬件资源到拆分配置 + <b class='flag-5'>避</b><b class='flag-5'>坑</b>指南(含脑图)