《ARM架构里运行PCIe demo》
From Terasic Wiki
(9 intermediate revisions not shown) | |||
Line 3: | Line 3: | ||
- | '''<font size=3>A1. 可以直接修改driver,把altera_pcie.c里所有access_ok的第一个参数拿掉,access_ok的定义从access_ok(type, addr, size)变更为access_ok(addr, size)。移除第一个type参数例如 VERIFY_READ 或 | + | '''<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]] | [[File:Modify driver.png|1000px]] | ||
- | '''<font size=3>Q2. 改了驱动后再编译没问题了,但是sh load_driver有问题提示Matching Device Not | + | |
+ | '''<font size=3>Q2. 改了驱动后再编译没问题了,但是sh load_driver有问题提示Matching Device Not Found;lspci看起来没有正常识别PCIe设备。</font>''' | ||
[[File:Loaddriver error.jpg|900px]] | [[File:Loaddriver error.jpg|900px]] | ||
Line 14: | Line 15: | ||
- | '''<font size=3>A2. | + | '''<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: | + | [[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。
A1. 可以直接修改driver,把altera_pcie.c里所有access_ok的第一个参数拿掉,access_ok的定义从access_ok(type, addr, size)变更为access_ok(addr, size)。移除第一个type参数例如 VERIFY_READ 或 VERIFY_WRITE。
Q2. 改了驱动后再编译没问题了,但是sh load_driver有问题提示Matching Device Not Found;lspci看起来没有正常识别PCIe设备。
A2. 可以改Demonstrations\FPGA\PCIe_Fundamental这个demo的pcie IP设置,再Generate HDL并重新编译Quartus工程生成sof然后烧到FPGA。如下图所示,打开.qsys将pcie ip的Class Code改为非0即可,如果Device ID是0也改成非0。解决方案参考此链接[1]里的内容。
Q3. 改了之后烧录新的sof再load driver没问题了。但是直接运行CD里的PCIe_Fundamental可执行文件会报错Command not found,在ARM架构里make PCIe_Fundamental生成新的可执行文件,运行时也有错。
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