带有 Yocto 的外部赛灵思 PCie 驱动程序



我以此为起点编译了 xilinx pcie 驱动程序。 https://www.yoctoproject.org/docs/current/kernel-dev/kernel-dev.html#incorporating-out-of-tree-modules 然后,而不是将其用于预构建映像: MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule" 我将内核文件 .ko 直接复制到映像中,如下所示: fs@fs:/opt/PHYTEC_BSPs/yocto_imx7/build/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/met/0.1-r0$ SCP xpcie.ko root@172.17.100.101:/lib/modules 然后当我插入这个连接了硬件的内核模块时: root@imx7d-phyboard-zeta-001:/lib/modules# insmod/lib/modules/xpcie.ko

Base hw val 0
Base hw len 0
BAR0 of 0K
BAR0 of 0M
xpcie: Init: Could not remap memory.
insmod: ERROR: could not insert module /lib/modules/xpcie.ko: Operation       
not permitted

root@imx7d-phyboard-zeta-001:/lib/modules#

原因是什么? 不允许像这样直接在已经构建的映像上复制内核吗? 此外,当我将其添加到图像中时,如在 local.conf 文件中:

MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule"

再次构建并加载映像,它在/lib/modules/目录中不可用。我在哪里可以找到它?还是使用其他3种方法会更好?

使用 insmod 安装驱动程序是正确的做法。这似乎不是您所看到的问题的原因。

生成驱动程序时,.ko 文件通常位于生成它的源目录中,除非您make modules_install

回到实际问题:

查看驱动程序源,消息"无法重新映射内存"指示驱动程序无法将 PCIE 内存区域映射到内核地址空间。

看起来未配置基址寄存器。在我使用的所有机器上,BIOS 必须先配置基址寄存器,然后 Linux 才能使用该设备。

我们对 FPGA 进行编程,重新启动机器,然后加载驱动程序并使用 FPGA。你试过这个吗?您的 FPGA 是否与 lspci 一起显示?

一旦FPGA被编程,如果PCIE配置没有改变,你可以告诉内核重新扫描,它将写入具有相同值的基址寄存器。

最新更新