飛騰2000+/64核 PCIE掃描異常問題排查

1、背景介紹

近期項目中采用全國產飛騰計算模塊搭配一塊FPGA模塊(FPGA為復旦微的VU9P),實現業務數據的收發。FPGA中采用了Xilinx的XDMA IP核,飛騰計算模塊中的FT2000+/64核處理器通過PEU1的一路 PCIE3.0x8與VU9P相連接,發現在飛騰上加載xilinx的xdma驅動時提示xdma驅動正常加載,但no device found。等于沒有找到設備。

2、問題排查

首先確認硬件設備能否找到,輸入lspci能看到設備

輸入lspci -s 12:00.0 -vvv查看詳細設備信息時輸出如下:

[系統未激活][root@node12-0 tests]# lspci -s 11:00.0 -vvv
11:00.0 Serial controller: Xilinx Corporation Device 9018 (prog-if 01 [16450])Subsystem: Xilinx Corporation Device 0007Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-Interrupt: pin A routed to IRQ 14Region 0: Memory at <unassigned> (64-bit, non-prefetchable) [virtual] [size=64K]Capabilities: [40] Power Management version 3Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+Address: 0000000000000000  Data: 0000Capabilities: [70] Express (v2) Endpoint, MSI 00DevCap: MaxPayload 1024 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1usExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 0.000WDevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+MaxPayload 512 bytes, MaxReadReq 1024 bytesDevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM not supportedClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-LnkSta: Speed 8GT/s (ok), Width x8 (ok)TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-DevCap2: Completion Timeout: Range BC, TimeoutDis+, NROPrPrP-, LTR-10BitTagComp-, 10BitTagReq-, OBFF Not Supported, ExtFmt-, EETLPPrefix-EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-FRS-, TPHComp-, ExtTPHComp-AtomicOpsCap: 32bit- 64bit- 128bitCAS-DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis+, LTR-, OBFF DisabledAtomicOpsCtl: ReqEn-LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-Compliance De-emphasis: -6dBLnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-Capabilities: [100 v1] Advanced Error ReportingUESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+AERCap: First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-HeaderLog: 00000000 00000000 00000000 00000000

上面顯示

Region 0: Memory at <unassigned> (64-bit, non-prefetchable) [virtual] [size=64K]

也就是bar空間無法分配,此時輸入dmesg 查看驅動加載異常日志,顯示

[ 1203.426451] xdma v2017.0.45
[ 1203.426560] xdma 0000:11:00.0: can't enable device: BAR 0 [mem size 0x00010000 64bit] not assigned
[ 1203.426572] xdma: probe of 0000:11:00.0 failed with error -1
[ 1203.426597] xdma 0000:12:00.0: can't enable device: BAR 0 [mem size 0x00010000 64bit] not assigned
[ 1203.426603] xdma: probe of 0000:12:00.0 failed with error -1
[ 1255.253522] xdma v2017.0.45
[ 1255.253629] xdma 0000:11:00.0: can't enable device: BAR 0 [mem size 0x00010000 64bit] not assigned
[ 1255.253640] xdma: probe of 0000:11:00.0 failed with error -1
[ 1255.253665] xdma 0000:12:00.0: can't enable device: BAR 0 [mem size 0x00010000 64bit] not assigned
[ 1255.253671] xdma: probe of 0000:12:00.0 failed with error -1

也提示找不到設備的原因為bar空間probe失敗了。

可以判斷直接原因是?BAR0 根本沒有被分配物理地址。

在chatgpt上把日志信息貼出后,建議解決思路如下:

結合情況分析

  1. 硬件側 (FPGA/bitstream)

    • 這個設備是 Xilinx XDMA IP 導出的 PCIe Endpoint。

    • 如果 bitstream 沒有正確啟用 BAR0(或者 BAR 大小配置和驅動不一致),內核掃描 PCIe 配置空間時不會分配內存資源。

    • 你可以用 setpci -s 11:00.0 BASE_ADDRESS_0 查看 BAR0 的原始值,確認是不是 0x00000000

  2. BIOS/UEFI 設置

    • 如果 BAR 是 64-bit,需要 BIOS 支持并開啟 Above 4G Decoding / Large BAR support,否則 BIOS 不會給它分配地址。

    • 典型癥狀就是 lspci 里顯示 <unassigned>

  3. 內核資源分配

    • Linux 看到 BAR0 需要內存,但 BIOS 沒分配,就不會啟用設備。

    • 內核有時候能“重新分配”資源,可以嘗試在 grub 加參數:

      pci=realloc pci=assign-busses 
    • 然后 update-grub && reboot

其實針對2和3點,因為使用同一個模塊與另一個FPGA模塊(復旦微的V7)測試xdma沒有問題,可以排除。第1點在FPGA工程師檢查和確認下也進行了排除。

最后排查發現,當FPGA 的XDMA IP核啟動慢時,將導致BAR0空間無法分配,chatgpt也給出了解釋:

短答:會的。
如果 FPGA(含 XDMA IP)在主機進行 PCIe 枚舉/資源分配時還沒就緒,BIOS/固件無法讀取有效的 BAR 配置,就不會給 BAR 分配 MMIO 地址;等你后面 bitstream 才起來時,設備已經“錯過了”最初的分配時機,于是出現你看到的 BAR 0 ... not assigned,驅動 probe 失敗。

為什么會這樣

PCIe 上電后主機流程是:釋放 PERST# → 鏈路訓練到 L0 → 讀配置空間(BAR size) → 分配 MMIO
若 XDMA 在這些步驟發生時還沒配置好(如 bitstream 還沒完成、user_lnk_up 還沒到 L0、BAR 寄存器還未有效),主機會認為“沒有/不需要內存資源”,于是不會給 BAR 地址。后面即使鏈路正常了,除非固件/OS重新分配,否則 lspci 里就會一直是 <unassigned>,驅動就啟用不了設備。

你可以怎么解決(兩條路線)

A. 從硬件/時序上根治

  1. 保證“配置先于枚舉”

    • 把 bitstream 存在板載 SPI-Flash,隨上電完成 FPGA 配置;

    • 或者用 CPLD/MCU 延遲釋放 PERST#,直到 DONE=1MMCM/PLL lockeduser_lnk_up=1(或 LTSSM=L0)再放開。

  2. 檢查 XDMA 配置

    • PF0 BAR0 啟用且大小與驅動期望一致(常見 64 KB AXI-Lite 控制空間)。

    • 不要改動到導致 BAR 為 0 的設置。

  3. 主板 BIOS 設置

    • 打開 Above 4G Decoding / Large BAR,避免 64-bit BAR 分配失敗。

    • 若插槽支持熱插拔/下行端口復位,確保啟用。

B. 運行時的補救(設備已“錯過”枚舉)

成功與否取決于上游 Root Port/橋是否支持熱插拔/熱復位以及系統是否允許 OS 側重新分配資源。

  1. 嘗試 OS 側重新分配資源

    • 臨時一次性:

      echo 1 | sudo tee /sys/bus/pci/rescan 
    • 若仍不分配,先“移除再掃描”:

      echo 1 | sudo tee /sys/bus/pci/devices/0000:11:00.0/remove echo 1 | sudo tee /sys/bus/pci/rescan 
    • 仍失敗,給內核加參數讓其強制重新分配(下次重啟生效):

      pci=realloc 
  2. 對上游端口做熱復位(可選、謹慎)

    • 如果內核導出了 reset 接口:

      echo 1 | sudo tee /sys/bus/pci/devices/0000:<UPSTREAM_PORT>/reset 
    • 或通過 Secondary Bus Reset(依平臺而定,可能影響同總線其他設備)。

如果這些補救都不行,基本就只能回到 A 路線:保證 FPGA 在 BIOS/OS 枚舉時已經就緒。

不過由于飛騰2000+ 64核不支持PCIE熱插拔,于是重新reset或先移除再掃描無法解決該問題

飛騰 2000+ 這種處理器平臺上,PCIe 確實沒有熱插拔(Hot-Plug)能力,所以不能像服務器那樣靠 Root Port 做 Slot Reset,讓設備重新枚舉。但 remove/rescan 這類軟件操作,本質上只是讓內核釋放并重新探測配置空間,并不是真的“熱插拔”,因此是否可行要看 設備枚舉時 BAR 是否已經有效

最終解決辦法是讓FPGA 邏輯在飛騰計算模塊枚舉前加載完畢,否則只能讓飛騰計算模塊上電后執行reboot了。

chatgpt也產生了一個自動檢測PCIE設備的腳本,供參考

#!/bin/bash
# quick_pcie_rescan_auto.sh
# 自動檢測并測試 Xilinx XDMA (10ee:9018) 設備是否能在 bitstream 加載后重新分配 BAR
# 打印 BAR0 地址和大小,并檢查是否有效VENDOR="10ee"
DEVICE="9018"echo ">>> 掃描 PCIe 總線,查找 Xilinx XDMA 設備 ($VENDOR:$DEVICE) ..."
DEVICES=$(lspci -Dnnd ${VENDOR}:${DEVICE} | awk '{print $1}')if [ -z "$DEVICES" ]; thenecho "未發現 Xilinx XDMA 設備 ($VENDOR:$DEVICE)。"exit 1
fifor DEV in $DEVICES; doecho "------------------------------------------"echo ">>> 處理設備: $DEV"SYSFS_DEV="/sys/bus/pci/devices/0000:$DEV"if [ ! -d "$SYSFS_DEV" ]; thenecho "設備 $DEV 的 sysfs 路徑不存在,跳過。"continuefiecho ">>> 移除設備 $DEV ..."echo 1 > "$SYSFS_DEV/remove"echo ">>> 重新掃描 PCIe 總線 ..."echo 1 > /sys/bus/pci/rescanecho ">>> 查看 BAR0 分配情況:"REGION_INFO=$(lspci -s $DEV -vvv | grep -A5 "Region 0")echo "$REGION_INFO"# 解析 BAR0 大小 (size=字段)BAR0_SIZE=$(echo "$REGION_INFO" | grep -oP "size=\K\S+")if [ -n "$BAR0_SIZE" ]; thenecho "BAR0 大小: $BAR0_SIZE"elseecho "BAR0 大小: 未檢測到"fiecho ">>> 讀取 BAR0 原始寄存器值:"BAR0_HEX=$(setpci -s $DEV BASE_ADDRESS_0)echo "BAR0 raw value = 0x$BAR0_HEX"# 檢查 BAR0 是否有效if [[ "$BAR0_HEX" == "00000000" || "$BAR0_HEX" == "ffffffff" ]]; thenecho "!!! 警告: FPGA BAR0 未導出 (值=$BAR0_HEX)"echo ">>> 可能原因: FPGA bitstream 未配置 BAR0 或啟動時序太慢,需檢查硬件側。"elseecho ">>> FPGA BAR0 看起來有效 (值=$BAR0_HEX)"fi
done

輸出示例如下:

>>> 查看 BAR0 分配情況:
Region 0: Memory at 91c00000 (64-bit, non-prefetchable) [size=64K]
BAR0 大小: 64K
>>> 讀取 BAR0 原始寄存器值:
BAR0 raw value = 0x91c00004
>>> FPGA BAR0 看起來有效 (值=0x91c00004)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97572.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

證明與激勵:Walrus 可編程數據如何通過激勵可用性證明獲得安全性

Walrus 的可用性證明&#xff08;Proof of Availability&#xff0c;PoA&#xff09; 是部署在 Sui 上的鏈上憑證&#xff0c;它為數據托管創建了一個可驗證的公開記錄&#xff0c;并作為存儲服務正式啟動的標志。PoA 中的“激勵”來自一個健全的經濟框架&#xff1a;存儲節點需…

云存儲(參考自騰訊云計算工程師認證)

目錄 存儲基礎知識&#xff1a; RAID&#xff1a; 云存儲概述&#xff1a; 云存儲產品&#xff1a; CBS&#xff1a; CFS文件存儲&#xff1a; COS對象存儲&#xff1a; 云存儲安全&#xff1a; 存儲基礎知識&#xff1a; 機械硬盤&#xff1a;HDD&#xff0c;即傳統硬…

面試tips--JVM(2)--對象創建的過程

一、創建對象的完整過程1. 類加載檢查JVM 遇到 new 指令時&#xff0c;首先去檢查這個類 User 是否已經被加載、解析和初始化過。如果沒有&#xff0c;就先執行 類加載過程&#xff08;加載 .class 文件到方法區/元空間、創建 Class 對象等&#xff09;。【這個過程就是加載、驗…

【Web安全】CRLF注入攻擊深度解析:原理、場景與安全測試防御指南

文章目錄前言&#xff1a;為什么CRLF注入是安全測試不可忽視的威脅&#xff1f;1. CRLF注入核心原理&#xff1a;從字符定義到協議依賴1.1 什么是CRLF&#xff1f;1.2 CRLF在HTTP協議中的關鍵作用1.3 CRLF注入的本質&#xff1a;格式混淆攻擊2. CRLF注入典型利用場景與安全測試…

【安全學習】DVWA 靶場 SQL 注入漏洞原理分析與防御策略(教育用途)

注意&#xff1a;本文內容僅用于合法授權的安全研究、教學演示及漏洞復現&#xff0c;嚴禁用于任何未授權的系統或網絡環境。 所有操作需在本地沙箱或個人可控靶場中執行&#xff0c;切勿對生產環境、他人系統進行測試&#xff0c;非法使用后果自負。&#x1f4cc; 法律與道德雙…

Langflow Memory 技術深度分析

Langflow Memory 技術深度分析 1. Memory 技術概述和設計理念 1.1 技術概述 Langflow 的 Memory 系統是一個多層次的記憶管理框架&#xff0c;專門設計用于處理對話歷史、上下文狀態和會話數據的存儲與檢索。該系統采用了分層架構設計&#xff0c;支持多種記憶類型和存儲后端&a…

從0開始搭建一個前端項目(vue + vite + less + typescript)

版本 node&#xff1a;v22.17.1 pnpm&#xff1a;v10.13.1 vue&#xff1a;^3.5.18 vite&#xff1a;^7.0.6 typescipt&#xff1a;~5.8.0腳手架初始化vue pnpm create vuelatest只選擇&#xff1a; TypeScript, JSX 3. 用vscode打開創建的項目&#xff0c;并刪除多余的代碼esl…

(十)ps識別:Swin Transformer-T 與 ResNet50 結合的 PS 痕跡識別模型訓練過程解析

Swin Transformer-T 與 ResNet50 結合的 PS 痕跡識別模型 思路分析模型融合思路&#xff1a; 利用ResNet50提取圖像的局部紋理和邊緣特征&#xff0c;這對檢測篡改區域的細微變化非常重要利用Swin Transformer-T捕捉全局上下文信息和長距離依賴關系&#xff0c;有助于理解圖像整…

[ICCV25]TRACE:用3D高斯直接學習物理參數,讓AI“推演”未來場景

導讀在復雜的動態世界中&#xff0c;讓機器人既能看懂場景&#xff0c;又能預測未來變化&#xff0c;是一項極具挑戰性的任務。過去的方法往往依賴人工標注或簡化的物理模型&#xff0c;卻難以真正捕捉物體運動的規律。TRACE 提出了一個全新的思路&#xff1a;把三維場景中的每…

電商數據開發實踐:深度剖析1688商品詳情 API 的技術與應用

在電商行業數字化轉型的進程中&#xff0c;數據獲取與處理的效率和準確性&#xff0c;直接影響著企業的競爭力。作為開發者&#xff0c;相信大家都遇到過這類棘手問題&#xff1a;在構建時&#xff0c;因數據不一致導致采購決策失誤&#xff1b;使用傳統&#xff0c;又常遭遇電…

Docker 詳解+示例(部署Kafka鏡像容器)

介 紹Docker 是一個開源的容器化平臺&#xff0c;它的核心目標是解決 “軟件在不同環境下運行不一致” 的問題&#xff0c;實現 “一次構建&#xff0c;到處運行” 。它基于 Linux 內核的底層技術&#xff0c;將應用程序及其依賴&#xff08;如庫文件、配置、運行環境等&#x…

SciPy科學計算與應用:SciPy應用實戰-數據分析與工程計算

SciPy案例研究&#xff1a;從理論到實踐 學習目標 通過本課程&#xff0c;學員將了解一系列實際案例&#xff0c;深入探討SciPy庫在數據分析、物理模擬和工程計算中的應用。同時學員將學習如何利用SciPy解決實際問題&#xff0c;加深對SciPy各個模塊的理解和應用能力。 相關知識…

React學習教程,從入門到精通, ReactJS - 架構(6)

ReactJS - 架構 React應用的架構 React的架構就像一個井然有序的廚房&#xff0c;每個工具都有其特定的位置和用途。在其核心&#xff0c;React遵循一個基于組件的架構&#xff0c;這意味著我們使用可重用的組件構建應用程序。 組件&#xff1a;構建塊 可以把組件想象成樂高積木…

Bias / variance and neural networks|偏差/方差和神經網絡

----------------------------------------------------------------------------------------------- 這是我在我的網站中截取的文章&#xff0c;有更多的文章歡迎來訪問我自己的博客網站rn.berlinlian.cn&#xff0c;這里還有很多有關計算機的知識&#xff0c;歡迎進行留言或…

Linux HMM(Heterogeneous Memory Management)的應用

原理篇見【https://blog.csdn.net/shenjunpeng/article/details/150931847?spm1011.2415.3001.5331】 1. HMM 的優勢與挑戰 1.1 優勢 統一虛擬地址空間&#xff1a;簡化異構計算平臺的數據共享和訪問。 高效頁表同步&#xff1a;支持設備端的 page fault 和頁表同步&#x…

鴻蒙創新賽活動——Mac提交壓縮失敗后續

Mac提交壓縮失敗后續來了… 傳送帶【上一篇】 背景 華為2025HarmonyOS創新賽 上傳作品的時候&#xff0c;遇到了一個提示 ZIP包中的Office文件含有嵌入文件&#xff0c;就去這個Office文件找&#xff0c;怎么也找不到嵌入的文件。 解決方法1 上次推薦的解決方式是&#xff0…

Ubuntu操作系統下使用mysql、mongodb、redis

目錄 一、核心步驟概覽 二. MySQL &#xff08;下面以其他用戶為例&#xff09; 1,、安裝 2、管理服務 3、連接與使用 4、配置文件位置 5、下面來演示一下安裝好之后如何在Linux操作系統中遠程登錄和window互連Linux 遠程登錄 window連Linux&#xff08;連不上的&…

springboot java開發的rocketmq 順序消息保證

首先要明確一個關鍵點&#xff1a;RocketMQ 保證的是一種局部順序&#xff08;Partially Ordered&#xff09;?&#xff0c;而非全局順序&#xff08;Globally Ordered&#xff09;。這意味著消息的順序性只在某個特定維度&#xff08;比如同一個訂單ID&#xff09;下保證&…

【機器學習】 14 Kernels

本章目錄 14 Kernels 479 14.1 Introduction 479 14.2 Kernel functions 479 14.2.1 RBF kernels 480 14.2.2 Kernels for comparing documents 480 14.2.3 Mercer (positive definite) kernels 481 14.2.4 Linear kernels 482 14.2.5 Matern kernels 482 14.2.6 String kerne…

Android開發-工程結構

一、項目視圖模式在開始之前&#xff0c;確保你的 Project 面板使用的是 【Android】 視圖&#xff08;默認&#xff09;。這是最常用的視圖&#xff0c;它將相關文件按功能邏輯分組展示。&#x1f4a1; 你也可以切換到 【Project】 視圖查看完整的文件系統結構。二、頂級項目結…