《ARM架构里运行PCIe demo》

From Terasic Wiki

Jump to: navigation, search

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