给定一些 x86_64 Linux 库存内核,运行一个嵌入到任何 PCI-E 扩展板中的 GPU。
cat-ing /proc/iomem
,我可以意识到 RAM 中保留了一些空间并与视频ROM。
- 我是否可以正确地假设这只不过是 BIOS(或等效)代码的精确副本,用于处理任何问题遗产插入 ISA 总线或任何能够解码的 PCI 设备的 VGA 设备遗产VGA IO 和/或 MEM ?
- 为什么这段代码要复制到 RAM 中?
为了让访问时间更快?
为了在内核切换到保护模式后保持其可运行? - 我可以正确地假设这段代码将仅有的只要内核中的专用帧缓冲区驱动程序(fbcon、vgafb、vesafb...)不优先就可以使用吗?
- 如果提供任何帧缓冲区驱动程序,该代码可以在以后运行的内核的生命周期中使用吗?
如果不是,那么为什么 Linux 内核在启动时不释放未使用的内存时简单地删除该区域?
答案1
不完全的。
iomem
条目描述物理地址的使用;系统 RAM 被如此标记,其他任何内容都描述不用于 RAM 的地址范围。 “Video ROM”条目指向实际的 ROM(实际上是闪存)。在 x86 上,它映射到使用 BIOS 或 CSM 的系统上;通过 UEFI 启动的系统可能没有它。您会看到在 x86 上它始终映射到 0xC0000:
$ sudo cat /proc/iomem|grep "Video ROM" 000c0000-000cfdff : Video ROM
这就是视频 BIOS 一直被映射的位置,并且各种(旧的)软件都需要它在那里。
通常是不是复制到RAM中。 (以前是进入“影子 RAM”,但现在已经不再这样做了。)
在当前的系统上,不使用该代码(过去,在有限数量的情况下,但据我所知,它不再使用,除了
vesafb
在 32 位 x86 上)。内核不需要摆脱它,它不会占用任何内存,并且它位于在任何情况下都会被忽略的地址范围内(物理地址空间的较低部分在 x86 上实际上未使用)。