《ARM架构里运行PCIe demo》

From Terasic Wiki

(Difference between revisions)
Jump to: navigation, search
 
(19 intermediate revisions not shown)
Line 1: Line 1:
-
1. 在ARM架构、Ubuntu20.04.6LTS里编译DE10-Pro cd里PCIe_SW_KIT/Linux/PCIe_Driver驱动,有很多这样的error "access_ok" undeclared。
+
'''<font size=3>Q1. 在ARM架构、Ubuntu20.04.6LTS里编译DE10-Pro cd里PCIe_SW_KIT/Linux/PCIe_Driver驱动,有很多这样的error "access_ok" undeclared。</font>'''
-
[[File:Make driver error1.jpg|900px]]
+
[[File:Make driver error1.jpg|900px]]    [[File:Make driver error2.jpg|900px]]
-
[[File:Make driver error2.jpg]]
+
 
 +
'''<font size=3>A1. 可以直接修改driver,把altera_pcie.c里所有access_ok的第一个参数拿掉,access_ok的定义从access_ok(type, addr, size)变更为access_ok(addr, size)。移除第一个type参数例如 VERIFY_READ 或 VERIFY_WRITE。</font>'''
 +
[[File:Modify driver.png|1000px]]
 +
 
 +
 
 +
'''<font size=3>Q2. 改了驱动后再编译没问题了,但是sh load_driver有问题提示Matching Device Not Found;lspci看起来没有正常识别PCIe设备。</font>'''
 +
[[File:Loaddriver error.jpg|900px]] 
 +
 
 +
[[File:Lspci.jpg|900px]]   
 +
 
 +
[[File:Dmesg.jpg|900px]]   
 +
 
 +
 
 +
'''<font size=3>A2. 可以改Demonstrations\FPGA\PCIe_Fundamental这个demo的pcie IP设置,再Generate HDL并重新编译Quartus工程生成sof然后烧到FPGA。如下图所示,打开.qsys将pcie ip的Class Code改为非0即可,如果Device ID是0也改成非0。解决方案参考此链接[https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Using-PCI-Express-on-Linux-with-DE10-Pro-GX-280-4G-Stratix-10/m-p/656624]里的内容。</font>'''
 +
[[File:Modify pcie classcode.png|900px]]
 +
 
 +
[[File:Modify pcie classcode2.png|900px]]
 +
 
 +
 
 +
'''<font size=3>Q3. 改了之后烧录新的sof再load driver没问题了。但是直接运行CD里的PCIe_Fundamental可执行文件会报错Command not found,在ARM架构里make PCIe_Fundamental生成新的可执行文件,运行时也有错。</font>'''
 +
[[File:Run error1.jpg|900px]] 
 +
 
 +
[[File:Run error2.jpg|900px]]
 +
 
 +
 
 +
'''<font size=3>A3. CD里的.so是x86架构的,不能用于ARM架构。根据g++版本,用交叉编译器编译新的.so文件,再放到PCIe_SW_KIT\Linux\PCIe_Fundamental里,旧的terasic_pcie_qsys.so不要,再make PCIe_Fundamental生成新的可执行文件(见以下附件),即可运行。</font>'''
 +
[[File:De10 pro pcie arm64.zip]]
 +
 
 +
[[File:G++version.jpg|900px]]

Latest revision as of 11:25, 30 May 2025

Q1. 在ARM架构、Ubuntu20.04.6LTS里编译DE10-Pro cd里PCIe_SW_KIT/Linux/PCIe_Driver驱动,有很多这样的error "access_ok" undeclared。 Make driver error1.jpg Make driver error2.jpg


A1. 可以直接修改driver,把altera_pcie.c里所有access_ok的第一个参数拿掉,access_ok的定义从access_ok(type, addr, size)变更为access_ok(addr, size)。移除第一个type参数例如 VERIFY_READ 或 VERIFY_WRITE。 Modify driver.png


Q2. 改了驱动后再编译没问题了,但是sh load_driver有问题提示Matching Device Not Found;lspci看起来没有正常识别PCIe设备。 Loaddriver error.jpg

Lspci.jpg

Dmesg.jpg


A2. 可以改Demonstrations\FPGA\PCIe_Fundamental这个demo的pcie IP设置,再Generate HDL并重新编译Quartus工程生成sof然后烧到FPGA。如下图所示,打开.qsys将pcie ip的Class Code改为非0即可,如果Device ID是0也改成非0。解决方案参考此链接[1]里的内容。 Modify pcie classcode.png

Modify pcie classcode2.png


Q3. 改了之后烧录新的sof再load driver没问题了。但是直接运行CD里的PCIe_Fundamental可执行文件会报错Command not found,在ARM架构里make PCIe_Fundamental生成新的可执行文件,运行时也有错。 Run error1.jpg

Run error2.jpg


A3. CD里的.so是x86架构的,不能用于ARM架构。根据g++版本,用交叉编译器编译新的.so文件,再放到PCIe_SW_KIT\Linux\PCIe_Fundamental里,旧的terasic_pcie_qsys.so不要,再make PCIe_Fundamental生成新的可执行文件(见以下附件),即可运行。 File:De10 pro pcie arm64.zip

G++version.jpg

Personal tools