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

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

3天内不再提示

Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇二 ] - PCIE的开发指南

bananapi开源硬件 来源: bananapi开源硬件 作者: bananapi开源硬件 2023-11-02 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇 ] - PCIE的开发指南(二)

wKgaomVC-i-AZQiOAAJH8vK8vCE230.jpg

一、前言

上一篇已经介绍过如何在3588上使用pcie的资源,这一篇介绍在Linux系统下如何应用pcie接上的设备

二、 PCI 配置空间

一个PCIe系统最多有256条Bus,每条Bus上最多挂32个Device,每个Device最多又能实现8个Function,每个Function对应着4KB的配置空间。PCI设备拥有256B的配置空间,PCIe还提供另外4KB的扩展,这256B的配置空间中前64B是规范了的,其他的字节是各个厂商自己定义的。

2.1 PCI 设备的地址组成

PCI设备的地址是由三个部分组成的,通常以"域(Domain):总线(Bus):设备(Device).功能(Function)"的形式表示:

域(Domain): 域是PCI设备的最高级别的地址组成部分。它用于标识不同的PCI总线。通常,大多数系统只有一个域,因此它的值为0。但在某些情况下,多个PCI域可以用于连接不同的PCI总线,每个域都有唯一的编号。

总线(Bus): 总线标识PCI设备连接到计算机主板上的不同PCI总线。每个总线可以连接多个PCI设备。总线号通常是一个介于0和255之间的整数。

设备(Device): 设备标识特定总线上的不同PCI设备。每个PCI总线可以连接多个设备,每个设备都有唯一的设备号,通常是0到31之间的整数。

功能(Function): 功能标识PCI设备中的不同功能单元。有些PCI设备具有多个功能,每个功能都有唯一的功能号,通常是0到7之间的整数。大多数PCI设备只有一个功能。

这个地址组成使得系统能够唯一地标识和管理各种PCI设备,以便它们可以有效地与计算机系统进行通信。在使用工具如lspci时,这些地址通常用于显示和识别PCI设备。 将上一篇介绍的ArmSom-W3开发板的M.2插槽接好对应模组,上电后使用lspci命令查看:

root@linaro-alip:/home/linaro# lspci 0000:00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01) 0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series 0002:20:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01) 0002:21:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device b852 0004:40:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01) 0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)

2.2 设备地址分析

lspci命令的输出会列出所有PCI设备的信息,包括设备的制造商、型号、PCI地址等。输出通常以文本形式提供,并按总线地址(BDF:Bus, Device, Function)的顺序排列。

上述命令使用结果分析:

0000:00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01)

设备地址:0000:00:00.0 设备类型:PCI桥接器(PCI Bridge) 制造商:Fuzhou Rockchip Electronics Co., Ltd 设备型号:Device 3588 设备版本:rev 01 此设备是一种PCI桥接器,通常用于将其他PCI设备连接到计算机主板上。

0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series

设备地址:0000:01:00.0 设备类型:非易失性内存控制器(Non-Volatile Memory Controller) 制造商:Intel Corporation 设备型号:NVMe Optane Memory Series 此设备是Intel Corporation生产的非易失性内存(NVMe)控制器,通常用于管理NVMe存储设备,如高速固态硬盘(SSD)。

0002:21:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device b852

设备地址:0002:21:00.0 设备类型:网络控制器(Network Controller) 制造商:Realtek Semiconductor Co., Ltd. 设备型号:Device b852 此设备是一块Realtek Semiconductor Co., Ltd生产的网络控制器,通常用于连接计算机到网络。

0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)

设备地址:0004:41:00.0 设备类型:以太网控制器(Ethernet Controller) 制造商:Realtek Semiconductor Co., Ltd. 设备型号:RTL8125 2.5GbE Controller 设备版本:rev 05 此设备是一块Realtek Semiconductor Co., Ltd生产的以太网控制器,支持2.5千兆比特每秒(2.5GbE)的网络连接速度,用于连接计算机到网络。

设备地址"0000:01:00.0"表示了一个PCI设备在系统中的唯一标识。这个地址可以被分解为以下部分来进行分析:

域(Domain): 在这种情况下,域的值为"0000",通常情况下,大多数系统只有一个域,所以它的值通常是"0000"。

总线(Bus): 总线的值为"01",表示这个PCI设备连接到系统的第1个PCI总线。每个总线可以连接多个PCI设备。

设备(Device): 设备的值为"00",表示在该总线上的第1个PCI设备。每个总线可以连接多个设备,它们分别具有唯一的设备号。

功能(Function): 功能的值为"0",表示这个PCI设备只有一个功能单元。一些PCI设备具有多个功能单元,每个功能单元都有唯一的功能号。

这个地址用于唯一标识PCI设备,以便系统可以识别和管理它们。您可以使用这个地址来查询或配置PCI设备,以及了解它们在系统中的物理位置和特征。

三、PCI设备使用

pcie接口接高速固态硬盘(SSD)的情景较多,这里使用由Intel Corporation生产的非易失性内存(NVMe)控制器,ArmSom-W3开发板使用的内核已经确保系统上已经加载了相应的NVMe驱动程序,并且操作系统能够正确识别和管理NVMe设备。

3.1 NVMe控制器使用

这里介绍一下使用NVMe控制器的基本步骤:

检查NVMe设备是否被识别: 运行以下命令,查看系统是否正确识别了NVMe设备

root@linaro-alip:/home/linaro# lspci | grep NVMe 0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series

如果您看到与Intel Corporation相关的NVMe设备信息,则表示设备已经被识别。

检查NVMe驱动程序是否加载 使用以下命令检查系统是否已加载了NVMe驱动程序:

lsmod | grep nvme

如果输出中显示了与NVMe驱动程序相关的模块(例如nvme),则表示驱动程序已加载。

查看NVMe设备信息: 使用以下命令查看NVMe设备的详细信息,包括设备的名称、容量等:

root@linaro-alip:/home/linaro# nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 PHBT8506028Z016N INTEL MEMPEK1J016GAL 1 14.40 GB / 14.40 GB 512 B + 0 B K4110420

或者使用以下命令查看设备的分区信息:

root@linaro-alip:/home/linaro# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk0 179:0 0 29.1G 0 disk ├─mmcblk0p1 179:1 0 4M 0 part ├─mmcblk0p2 179:2 0 4M 0 part ├─mmcblk0p3 179:3 0 64M 0 part ├─mmcblk0p4 179:4 0 128M 0 part ├─mmcblk0p5 179:5 0 32M 0 part ├─mmcblk0p6 179:6 0 14G 0 part / ├─mmcblk0p7 179:7 0 128M 0 part /oem └─mmcblk0p8 179:8 0 14.8G 0 part /userdata mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk nvme0n1 259:0 0 13.4G 0 disk

在输出中,NVMe设备通常以/dev/nvmeXnY的形式表示,其中X是NVMe设备的编号,Y是分区编号。

注意: ArmSom-W3固件里NVMe驱动程序相关的模块已经加载至内核里面 Linux系统通常使用nvme-cli工具执行各种操作,如查看设备信息、执行固件更新、执行健康检查等

3.2 挂载设备

NVMe设备是/dev/nvme0n1,总容量为14.40 GB,当前使用了14.40 GB

使用以下命令挂载它:

root@linaro-alip:/dev# mount /dev/nvme0n1 /mnt [ 4399.143769] EXT4-fs (nvme0n1): recovery complete [ 4399.145058] EXT4-fs (nvme0n1): mounted filesystem with ordered data mode. Opts: (null)

recovery complete:这是文件系统(EXT4)的恢复消息,它表明文件系统在挂载前进行了一次恢复操作,以确保文件系统的一致性。

mounted filesystem with ordered data mode. Opts: (null):这是文件系统挂载成功的消息,表明文件系统已经成功挂载,并且使用了"ordered data mode"模式。括号中的"(null)"表示没有指定特定的挂载选项。

使用以下命令卸载设备:

umount /mnt

对于存储设备,还可以进行分区和格式化操作,这个看个人需要,可以使用工具如fdisk或parted来创建分区,并使用mkfs命令格式化分区

3.3 读写测试

对NVMe设备进行读写测试,可以使用一些专门的基准测试工具,例如fio或dd命令。 下面是一些基本的操作步骤:

使用fio进行读写测试:

安装fio工具

apt-get install fio

创建一个fio测试配置文件,创建一个名为test.fio的文件,内容如下:

[sequential-read] filename=/dev/nvme0n1 rw=read bs=4k size=1G

这个配置文件将对NVMe设备执行4KB块大小的1GB顺序读取测试。可以根据需要调整参数。

使用dd命令进行读写测试:

运行以下写测试命令:

sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1000

其中if参数是输入文件(通常是/dev/zero,用于写入测试),of参数是输出文件(通常是您的NVMe设备),bs参数是块大小,count参数是要执行的块数

运行以下读测试命令:

sudo dd if=/dev/nvme0n1 of=/dev/null bs=1M count=1000

读写性能可能会受到多种因素的影响,包括设备型号、硬件配置和测试条件等

wKgaomVC-jWAY2F3ABfg2nCqESE422.jpg



审核编辑 黄宇

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

    关注

    16

    文章

    1502

    浏览量

    89132
  • banana pi
    +关注

    关注

    1

    文章

    134

    浏览量

    4368
  • RK3588
    +关注

    关注

    8

    文章

    601

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588 PCIe 压测:从崩溃到排障的全流程解析

                在 RK3588 平台上进行 PCIe 设备(如 NVMe SSD )压测时,不少开发者遇到过这样的 “ 噩梦 ” :高负载下系统突然失去响应,日志里满是异常信
    的头像 发表于 02-06 07:11 663次阅读
    <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIe</b> 压测:从崩溃到排障的全流程解析

    RK3588平台USB摄像头调试实战:从报错到稳定运行

    在嵌入式开发中,RK3588 凭借强劲的算力常被用于边缘计算、工业视觉等场景,而 USB 摄像头作为常见外设,调试过程中难免遇到各类 “卡壳” 问题。最近我们在 RK3588
    的头像 发表于 02-04 16:13 863次阅读

    RK3588平台双存储(SPI+PCIE)OTA升级方案教学文档

    在嵌入式设备中,单一存储介质可能存在容量限制或可靠性风险。RK3588 平台的双存储 OTA 升级方案支持SPI(如 SPI NAND/NOR)与 PCIE 存储(如 PCIE SSD
    的头像 发表于 02-01 16:46 1855次阅读
    <b class='flag-5'>RK3588</b><b class='flag-5'>平台</b>双存储(SPI+<b class='flag-5'>PCIE</b>)OTA升级方案教学文档

    RK3588平台串口配置修改指南:切换至串口8

    在嵌入式开发中,串口作为基础调试接口至关重要。本文档针对 RK3588 平台,详细介绍如何将系统默认串口修改为串口 8(UART8),包括 U-Boot 阶段和内核阶段的配置调整。该修
    的头像 发表于 02-01 16:37 1467次阅读

    实战复盘:RK3588 SPI+PCIe3x4方案启动修复,从节点配置到驱动适配全解析

          在 RK3588 嵌入式项目中, “ 接口配置不匹配 ” 是高频踩坑点 —— 近期 基于 linux6.1 内核 调试 SPI 闪存 +PCIe3x4 外设 方案时,就遇到了 “eMMC
    的头像 发表于 01-08 10:24 939次阅读
    实战复盘:<b class='flag-5'>RK3588</b> SPI+<b class='flag-5'>PCIe3</b>x4方案启动修复,从节点配置到<b class='flag-5'>驱动</b>适配全解析

    【技术分享】RK3588如何搭建xenomai3+ethercat

    说明使用的RK3588的分支版本是linux-6.1-stan-rkr6内核版本是6.1.99把瑞芯微的SDK更新到linux-6.1-stan-rkr6这个版本即可。编译xenomai3的内核请参考上一技术分享:技术分享|
    的头像 发表于 12-11 17:26 1521次阅读
    【技术分享】<b class='flag-5'>RK3588</b>如何搭建xenomai<b class='flag-5'>3</b>+ethercat

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

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

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

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

    BPI-AIM7 RK3588 AI与 Nvidia Jetson Nano 生态系统兼容的低功耗 AI 模块

    Banana Pi BPI-AIM7 RK3588 AI Module7 (AIM7) 配备 64 位八核处理器、6 TOPS NPU、8 GB 内存、
    发表于 10-11 09:08

    BPI-AIM7 RK3588 AI与 Nvidia Jetson Nano 生态系统兼容的低功耗 AI 模块

    Banana Pi BPI-AIM7 RK3588 AI Module7 (AIM7) 配备 64 位八核处理器、6 TOPS NPU、8 GB 内存、
    的头像 发表于 10-11 09:06 1634次阅读
    <b class='flag-5'>BPI</b>-AIM7 <b class='flag-5'>RK3588</b> AI与 Nvidia Jetson Nano 生态系统兼容的低功耗 AI 模块

    【作品合集】玄铁Banana Pi BPI-RV2开发板测评

    玄铁Banana Pi BPI-RV2开发板测评作品合集 产品介绍: Banana Pi
    发表于 09-17 10:58

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

    前言:在RK3588平台开发过程中,你是否遇到过这样的窘境:明明PCIe总线上挂好了网卡模块,lspci能识别到芯片,可驱动就是加载失败,排
    的头像 发表于 08-29 08:32 2240次阅读
    <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIe</b>设备识别失败?一招避坑“非法Class”陷阱

    Banana Pi BPI-RV2开发板试用体验】开箱上电

    ⼝、板载 512MB DDR3 内存 、128 MiB NAND、16 MiB NOR、M.2接⼝,MINI PCIE和USB 2.0接⼝等。 Banana Pi
    发表于 06-26 19:51

    Banana Pi BPI-RV2开发板试用体验】开发板介绍视频

    .参考资源https://docs.banana-pi.org/en/BPI-RV2/BananaPi_BPI-RV2 https://docs.banana-pi.org/zh/
    发表于 06-24 23:51

    基于RISC-V处理器,Banana Pi BPI-RV2开发板试用

    Banana Pi BPI-RV2 开源网关是⼀款基于矽昌 SF21H8898 SoC的设备,1 × 2.5 G WAN⽹络接⼝、5  个千兆LAN ⽹络接⼝、板载 512MB DDR3
    的头像 发表于 06-09 14:59 1505次阅读
    基于RISC-V处理器,<b class='flag-5'>Banana</b> <b class='flag-5'>Pi</b> <b class='flag-5'>BPI</b>-RV2<b class='flag-5'>开发</b>板试用