如果使用Linux作为裸机代码的引导加载程序,PCIe设备驱动程序是否有益?

时间:2015-05-07 17:04:39

标签: linux-kernel embedded-linux bootloader pci-e bare-metal

我正在PowerPC处理器上开发嵌入式系统,需要通过PCIe与FPGA通信。我希望使用Linux / embedded-Linux作为引导程序来利用其PCIe初始化代码和驱动程序API来简化PCIe驱动程序开发。但最后我想运行裸机代码(没有运行OS)。所以我期待使用PetitBoot / kexec从Linux跳转到我自己的代码。

这可能吗?

我目前对PCIe驱动程序的理解使我相信,一旦设备初始化,只要我有一个指向地址空间的指针,我就能够直接执行MMIO R / W操作直接到内存空间。因此,即使kexec覆盖了驱动程序代码,我也应该可以使用该设备,因为驱动程序已经完成了它的工作。

这是对的吗?

如果没有,我的替代方案是什么?

1 个答案:

答案 0 :(得分:2)

我认为这种方法不是一个好主意。考虑到Linux操作系统编写的驱动程序将假设所有操作系统的资源都可用,而不仅仅是内存分配。例如,它可以配置中断处理程序,但是当OS不再可用时,您的硬件可能会挂起,因为没有任何内容正在确认并为其中断请求提供服务。

我也对内存初始化持怀疑态度。我想你理论上可以分配一些DMA内存并将生成的物理地址传递给裸机应用程序,但整个过程看似粗略。在让PCIe子系统保持运行的同时,确保Linux中的所有内容都干净地关闭是非常困难的。您必须查看驱动程序的关闭例程,看看它对卡的作用,以确保它不会关闭设备并使其对您的裸机代码没有响应。

我建议您改为使用基于Linux的驱动程序并将其用作构建新裸机驱动程序的指南。复制所需的初始化代码,并省略特定于Linux的配置详细信息。