我试图通过查看驱动程序代码来了解我们主板的pci Express总线上的8250串口,我很难理解下面两个struct uart_8250_port
成员
struct uart_8250_port x;
memset(&x, 0, sizeof(x));
....
....
x.port.regshift = 0;
x.port.iotype = UPIO_MEM;
x.port.flags = UPF_SHARE_IRQ | UPF_LOW_LATENCY;
x.port.membase = raw_address;
x.port.mapbase = ioremap(raw_address);
成员membase
和mapbase
是什么?另外,为什么membase
采用物理pci条形地址,而mapbase
采用ioremap
返回的地址?
答案 0 :(得分:1)
mapbase
基本上是问题中端口寄存器空间的总线地址。 membase
与CPU虚拟地址空间中的内存映射IO(MMIO)相同,iobase
与IO类似。
是的,您可能已经注意到,在您的示例中,您有一个错误,即应该交换membase
和mapbase
。
mapbase
地址,例如,在UART硬件之上进行DMA操作,因为DMA使用总线地址进行操作。