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

banana pi bpi-w3 rk3588平台驱动调试篇 [ pcie篇 ] - pcie的开发指南(二)
一、前言
上一篇已经介绍过如何在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
读写性能可能会受到多种因素的影响,包括设备型号、硬件配置和测试条件等


人工智能技术它是如何实现自然灾害的预防
精挑细选只为一片纯粹 X70系列或搭载全新玻璃镜片
分析称惠普、戴尔和IBM大势已去
人工智能的快速发展或将成为未来主流
实测iPhone 12 mini:玩游戏后电池续航崩了
Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇二 ] - PCIE的开发指南
77条STM32知识你不得不知!
STM-M系列(高性能)CANopen通信一体化步进电机快速使用教程
2019年 5G人才数据洞察
python自动化脚本办公-文件整理
状态机自动生成工具FSME
指定支持Wi-Fi®的MCU时的注意事项
MakerDAO和中心化借贷相比的优势是什么
金属探测器原理分析
Silicon Labs电容触摸系列MCU
数百家名企七月齐聚蓉城,助力西部电子“大开发”
创新运营模式,嘉立创获颁“中国工业数字化转型领航企业50强”
LED照明新时代的思考和行动
特斯拉公布2018年第四季度财报,连续两季度盈利
哪种类型的传感器才能实现真正自动驾驶?