Banana Pi BPI-W3 RK3588平臺驅(qū)動調(diào)試篇 [ PCIE篇 ] - PCIE的開發(fā)指南(二)

一、前言
上一篇已經(jīng)介紹過如何在3588上使用pcie的資源,這一篇介紹在Linux系統(tǒng)下如何應(yīng)用pcie接上的設(shè)備
二、 PCI 配置空間
一個(gè)PCIe系統(tǒng)最多有256條Bus,每條Bus上最多掛32個(gè)Device,每個(gè)Device最多又能實(shí)現(xiàn)8個(gè)Function,每個(gè)Function對應(yīng)著4KB的配置空間。PCI設(shè)備擁有256B的配置空間,PCIe還提供另外4KB的擴(kuò)展,這256B的配置空間中前64B是規(guī)范了的,其他的字節(jié)是各個(gè)廠商自己定義的。
2.1 PCI 設(shè)備的地址組成
PCI設(shè)備的地址是由三個(gè)部分組成的,通常以"域(Domain):總線(Bus):設(shè)備(Device).功能(Function)"的形式表示:
域(Domain): 域是PCI設(shè)備的最高級別的地址組成部分。它用于標(biāo)識不同的PCI總線。通常,大多數(shù)系統(tǒng)只有一個(gè)域,因此它的值為0。但在某些情況下,多個(gè)PCI域可以用于連接不同的PCI總線,每個(gè)域都有唯一的編號。
總線(Bus): 總線標(biāo)識PCI設(shè)備連接到計(jì)算機(jī)主板上的不同PCI總線。每個(gè)總線可以連接多個(gè)PCI設(shè)備。總線號通常是一個(gè)介于0和255之間的整數(shù)。
設(shè)備(Device): 設(shè)備標(biāo)識特定總線上的不同PCI設(shè)備。每個(gè)PCI總線可以連接多個(gè)設(shè)備,每個(gè)設(shè)備都有唯一的設(shè)備號,通常是0到31之間的整數(shù)。
功能(Function): 功能標(biāo)識PCI設(shè)備中的不同功能單元。有些PCI設(shè)備具有多個(gè)功能,每個(gè)功能都有唯一的功能號,通常是0到7之間的整數(shù)。大多數(shù)PCI設(shè)備只有一個(gè)功能。
這個(gè)地址組成使得系統(tǒng)能夠唯一地標(biāo)識和管理各種PCI設(shè)備,以便它們可以有效地與計(jì)算機(jī)系統(tǒng)進(jìn)行通信。在使用工具如lspci時(shí),這些地址通常用于顯示和識別PCI設(shè)備。 將上一篇介紹的ArmSom-W3開發(fā)板的M.2插槽接好對應(yīng)模組,上電后使用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 設(shè)備地址分析
lspci命令的輸出會列出所有PCI設(shè)備的信息,包括設(shè)備的制造商、型號、PCI地址等。輸出通常以文本形式提供,并按總線地址(BDF:Bus, Device, Function)的順序排列。
上述命令使用結(jié)果分析:
0000:00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01)
設(shè)備地址:0000:00:00.0 設(shè)備類型:PCI橋接器(PCI Bridge) 制造商:Fuzhou Rockchip Electronics Co., Ltd 設(shè)備型號:Device 3588 設(shè)備版本:rev 01 此設(shè)備是一種PCI橋接器,通常用于將其他PCI設(shè)備連接到計(jì)算機(jī)主板上。
0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series
設(shè)備地址:0000:01:00.0 設(shè)備類型:非易失性內(nèi)存控制器(Non-Volatile Memory Controller) 制造商:Intel Corporation 設(shè)備型號:NVMe Optane Memory Series 此設(shè)備是Intel Corporation生產(chǎn)的非易失性內(nèi)存(NVMe)控制器,通常用于管理NVMe存儲設(shè)備,如高速固態(tài)硬盤(SSD)。
0002:21:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device b852
設(shè)備地址:0002:21:00.0 設(shè)備類型:網(wǎng)絡(luò)控制器(Network Controller) 制造商:Realtek Semiconductor Co., Ltd. 設(shè)備型號:Device b852 此設(shè)備是一塊Realtek Semiconductor Co., Ltd生產(chǎn)的網(wǎng)絡(luò)控制器,通常用于連接計(jì)算機(jī)到網(wǎng)絡(luò)。
0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
設(shè)備地址:0004:41:00.0 設(shè)備類型:以太網(wǎng)控制器(Ethernet Controller) 制造商:Realtek Semiconductor Co., Ltd. 設(shè)備型號:RTL8125 2.5GbE Controller 設(shè)備版本:rev 05 此設(shè)備是一塊Realtek Semiconductor Co., Ltd生產(chǎn)的以太網(wǎng)控制器,支持2.5千兆比特每秒(2.5GbE)的網(wǎng)絡(luò)連接速度,用于連接計(jì)算機(jī)到網(wǎng)絡(luò)。
設(shè)備地址"0000:01:00.0"表示了一個(gè)PCI設(shè)備在系統(tǒng)中的唯一標(biāo)識。這個(gè)地址可以被分解為以下部分來進(jìn)行分析:
域(Domain): 在這種情況下,域的值為"0000",通常情況下,大多數(shù)系統(tǒng)只有一個(gè)域,所以它的值通常是"0000"。
總線(Bus): 總線的值為"01",表示這個(gè)PCI設(shè)備連接到系統(tǒng)的第1個(gè)PCI總線。每個(gè)總線可以連接多個(gè)PCI設(shè)備。
設(shè)備(Device): 設(shè)備的值為"00",表示在該總線上的第1個(gè)PCI設(shè)備。每個(gè)總線可以連接多個(gè)設(shè)備,它們分別具有唯一的設(shè)備號。
功能(Function): 功能的值為"0",表示這個(gè)PCI設(shè)備只有一個(gè)功能單元。一些PCI設(shè)備具有多個(gè)功能單元,每個(gè)功能單元都有唯一的功能號。
這個(gè)地址用于唯一標(biāo)識PCI設(shè)備,以便系統(tǒng)可以識別和管理它們。您可以使用這個(gè)地址來查詢或配置PCI設(shè)備,以及了解它們在系統(tǒng)中的物理位置和特征。
三、PCI設(shè)備使用
pcie接口接高速固態(tài)硬盤(SSD)的情景較多,這里使用由Intel Corporation生產(chǎn)的非易失性內(nèi)存(NVMe)控制器,ArmSom-W3開發(fā)板使用的內(nèi)核已經(jīng)確保系統(tǒng)上已經(jīng)加載了相應(yīng)的NVMe驅(qū)動程序,并且操作系統(tǒng)能夠正確識別和管理NVMe設(shè)備。
3.1 NVMe控制器使用
這里介紹一下使用NVMe控制器的基本步驟:
檢查NVMe設(shè)備是否被識別: 運(yùn)行以下命令,查看系統(tǒng)是否正確識別了NVMe設(shè)備
root@linaro-alip:/home/linaro# lspci | grep NVMe 0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series
如果您看到與Intel Corporation相關(guān)的NVMe設(shè)備信息,則表示設(shè)備已經(jīng)被識別。
檢查NVMe驅(qū)動程序是否加載 使用以下命令檢查系統(tǒng)是否已加載了NVMe驅(qū)動程序:
lsmod | grep nvme
如果輸出中顯示了與NVMe驅(qū)動程序相關(guān)的模塊(例如nvme),則表示驅(qū)動程序已加載。
查看NVMe設(shè)備信息: 使用以下命令查看NVMe設(shè)備的詳細(xì)信息,包括設(shè)備的名稱、容量等:
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
或者使用以下命令查看設(shè)備的分區(qū)信息:
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設(shè)備通常以/dev/nvmeXnY的形式表示,其中X是NVMe設(shè)備的編號,Y是分區(qū)編號。
注意: ArmSom-W3固件里NVMe驅(qū)動程序相關(guān)的模塊已經(jīng)加載至內(nèi)核里面 Linux系統(tǒng)通常使用nvme-cli工具執(zhí)行各種操作,如查看設(shè)備信息、執(zhí)行固件更新、執(zhí)行健康檢查等
3.2 掛載設(shè)備
NVMe設(shè)備是/dev/nvme0n1,總?cè)萘繛?4.40 GB,當(dāng)前使用了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:這是文件系統(tǒng)(EXT4)的恢復(fù)消息,它表明文件系統(tǒng)在掛載前進(jìn)行了一次恢復(fù)操作,以確保文件系統(tǒng)的一致性。
mounted filesystem with ordered data mode. Opts: (null):這是文件系統(tǒng)掛載成功的消息,表明文件系統(tǒng)已經(jīng)成功掛載,并且使用了"ordered data mode"模式。括號中的"(null)"表示沒有指定特定的掛載選項(xiàng)。
使用以下命令卸載設(shè)備:
umount /mnt
對于存儲設(shè)備,還可以進(jìn)行分區(qū)和格式化操作,這個(gè)看個(gè)人需要,可以使用工具如fdisk或parted來創(chuàng)建分區(qū),并使用mkfs命令格式化分區(qū)
3.3 讀寫測試
對NVMe設(shè)備進(jìn)行讀寫測試,可以使用一些專門的基準(zhǔn)測試工具,例如fio或dd命令。 下面是一些基本的操作步驟:
使用fio進(jìn)行讀寫測試:
安裝fio工具
apt-get install fio
創(chuàng)建一個(gè)fio測試配置文件,創(chuàng)建一個(gè)名為test.fio的文件,內(nèi)容如下:
[sequential-read] filename=/dev/nvme0n1 rw=read bs=4k size=1G
這個(gè)配置文件將對NVMe設(shè)備執(zhí)行4KB塊大小的1GB順序讀取測試。可以根據(jù)需要調(diào)整參數(shù)。
使用dd命令進(jìn)行讀寫測試:
運(yùn)行以下寫測試命令:
sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1000
其中if參數(shù)是輸入文件(通常是/dev/zero,用于寫入測試),of參數(shù)是輸出文件(通常是您的NVMe設(shè)備),bs參數(shù)是塊大小,count參數(shù)是要執(zhí)行的塊數(shù)
運(yùn)行以下讀測試命令:
sudo dd if=/dev/nvme0n1 of=/dev/null bs=1M count=1000
讀寫性能可能會受到多種因素的影響,包括設(shè)備型號、硬件配置和測試條件等

審核編輯 黃宇
-
PCIe
+關(guān)注
關(guān)注
16文章
1467瀏覽量
88792 -
banana pi
+關(guān)注
關(guān)注
1文章
133瀏覽量
4302 -
RK3588
+關(guān)注
關(guān)注
8文章
575瀏覽量
7491
發(fā)布評論請先 登錄
RK3588 PCIe?壓測:從崩潰到排障的全流程解析
RK3588平臺USB攝像頭調(diào)試實(shí)戰(zhàn):從報(bào)錯(cuò)到穩(wěn)定運(yùn)行
RK3588平臺雙存儲(SPI+PCIE)OTA升級方案教學(xué)文檔
RK3588平臺串口配置修改指南:切換至串口8
實(shí)戰(zhàn)復(fù)盤:RK3588 SPI+PCIe3x4方案啟動修復(fù),從節(jié)點(diǎn)配置到驅(qū)動適配全解析
【技術(shù)分享】RK3588如何搭建xenomai3+ethercat
一文搞懂?RK3588 PCIe:從硬件資源到拆分配置?+?避坑指南(含腦圖)
開發(fā)者必備,10 分鐘搞定 RK3588 PCIE 拆分!
BPI-AIM7 RK3588 AI與 Nvidia Jetson Nano 生態(tài)系統(tǒng)兼容的低功耗 AI 模塊
BPI-AIM7 RK3588 AI與 Nvidia Jetson Nano 生態(tài)系統(tǒng)兼容的低功耗 AI 模塊
【作品合集】玄鐵Banana Pi BPI-RV2開發(fā)板測評
RK3588 PCIe設(shè)備識別失敗?一招避坑“非法Class”陷阱
Banana Pi BPI-W3 RK3588平臺驅(qū)動調(diào)試篇 [ PCIE篇二 ] - PCIE的開發(fā)指南
評論