深入探索 I/O 内存、端口与中断处理
1. I/O 内存概述
I/O 内存是一种特殊的地址空间,它可以是 1MB 边界以下的 ISA 内存,也可以是高位的 PCI 内存。从概念上讲,对这两种类型的 I/O 内存采用相同的访问方法。不过,I/O 内存并非普通意义上的内存,而是映射到该区域的端口或缓冲区。例如,外围设备可能有状态端口或板载缓冲区,我们可以对其进行访问。
1.1 I/O 内存的映射
I/O 内存的映射高度依赖于具体平台。以 Intel 平台为例,简单的指针解引用可用于访问低位内存,但该内存并不总是处于物理地址空间中,因此在访问之前必须进行重新映射。
void *ioremap(unsigned long offset, unsigned long size);
ioremap 函数可将物理内存位置映射到所需大小的内核指针。例如,Iomap 模块使用此函数将图形适配器的帧缓冲区重新映射到驱动程序可访问的虚拟地址。
1.2 Iomap 设备结构
Iomap 设备由以下结构体表示:
struct Iomap {
unsigned long base;
unsigned long size;
char *ptr;
};
其中, base 是帧缓冲区的起始位置, size 是缓冲区的长度,
超级会员免费看
订阅专栏 解锁全文
739

被折叠的 条评论
为什么被折叠?



