繁体   English   中英

映射linux内核中的DMA中断

[英]Mapping DMA interrupts in the linux kernel

我正在为包含DMA控制器的powerpc SoC编写内核模块。 我想映射linux内核中的DMA中断。 我的DMA结构有两个中断:

struct dma
{
  u32 dma1;
  u32 dma2;
}*dma;

我有内存映射内核中的DMA结构。 我已经使用函数irq_of_parse_and_map()来获取相应中断的virq数。

dma->dma1=irq_of_parse_and_map(ofdev->node,0);
dma->dma2=irq_of_parse_and_map(ofdev->node,1);

但我无法获得上述中断的virq数字。 有哪些API可用于访问VIRQ号码?

基于PowerPC的系统使用设备树Blob(DTB) ,也称为设备树源(DTS) ,它是表示给定板上的硬件组件(处理器配置,总线,外围设备等)的数据库。 Linux内核在启动期间需要在其运行的硬件上获得某些信息。 根据Open Firmware标准,引导加载程序软件(例如:u-boot)将硬件信息从DTB传递到内核。 一旦内核获得硬件信息,它将作为内核启动例程的一部分进行所有软件设置。

从这里开始,如果任何内核软件组件(例如:设备驱动程序)需要硬件细节,它应该通过使用一组开放固件标准二进制接口从内核获取它。 其中一些列表如下:

of_register_platform_driver()   - Register driver for device
of_unregister_platform_driver() - Unregister driver for device 
of_address_to_resource()    - Obtain physical address of peripheral
of_get_property()           - Find property with a given name for a given node
of_find_node_by_phandle()   - Find a node given a phandle
irq_of_parse_and_map()      - Parse and map an interrupt into linux virq space
of_irq_to_resourse()        - Obtain virtual IRQ of peripheral
...
...

现在来到这里提出的问题。 irq_of_parse_and_map()用于解析并将中断映射到linux virq空间。 通常这将由系统的中断控制器设备驱动程序完成。 完成中断映射后,您可以通过引用of_irq_to_resource()调用来获取中断源virq 将中断处理程序注册到中断源需要此步骤。 因此,尝试使用of_irq_to_resource()而不是irq_of_parse_and_map()

参考:

Device Tree Blob: http//www.informit.com/articles/article.aspx? p = 1647051&seqNum = 5

开放固件: http//www.openfirmware.org/

OF IRQ接口:linux-2.6 / drivers / of / irq.c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM