0

是否可以在 linux 内核启动之前清除手动指定的 RAM 地址范围?或者也许在启动的早期阶段?

我发现如何排除 RAM 地址,但我想在启动后使用这些地址。

[更新]:我有无法更改的 3d 派对引导加载程序。此引导加载程序使用 RAM 中的一些内存作为帧缓冲区,以在屏幕上显示一些图片。在 initramfs 解压缩阶段启动 linux 内核的过程中,我们重叠了这个内存,假设这个内存没有被使用。所以屏幕上的图片会损坏。

[Update_2]:我将那个 RAM 区域归零,但它没有修复图片损坏。Linux 在启动期间仍然使用此内存并覆盖图片。

也许可以从引导过程中排除这个内存区域(由引导加载程序使用)并稍后添加?

4

1 回答 1

1

从您的更新看来,正在发生的事情是 Linux 认为这个内存区域(我假设您的 LCD 外围设备正在使用 DMA 向显示器发射)只是可以免费使用的常规 RAM。由于 linux 写入该 RAM 区域的任何内容都不是显示数据,它仍然通过 DMA 输出到 LCD,但它现在已损坏。

由于您无法更改第 3 方引导加载程序,因此您可以使用的一种解决方案是制作自己的辅助引导加载程序,并让第 3 方引导加载程序跳转到该引导加载程序而不是 linux。此辅助引导加载程序将保存通常由您的第 3 方引导加载程序传递给 linux 的所有参数。我认为您真正希望此辅助引导加载程序执行的操作是关闭将输出馈送到 LCD 的 DMA,然后您的屏幕应该变为空白。完成后,您可以继续像往常一样跳入 linux。如果辅助引导加载程序也偏移了一些 linux 正在传递的内存位置参数,您可能需要稍微修改 linux 传递的参数。

于 2013-03-26T13:05:15.853 回答