是否可以在 linux 内核启动之前清除手动指定的 RAM 地址范围?或者也许在引导的早期阶段?
我发现了如何排除 RAM 地址,但我想在启动后使用这些地址。
[更新]:我有无法更改的 3d 派对引导加载程序。此引导加载程序使用 RAM 中的一些内存作为帧缓冲区以在屏幕上显示一些图片。在 initramfs 解压缩的阶段启动 linux 内核的过程中,我们重叠这 block 内存,因为假设这 block 内存没有被使用。因此屏幕上的图片会损坏。
[Update_2]:我将那个 RAM 区域归零,但它没有修复图片损坏。 Linux 在启动期间仍然使用此内存并覆盖图片。
也许可以从引导过程中排除这个内存区域(由引导加载程序使用)并在以后添加它?
最佳答案
从你的更新来看,Linux 认为这个内存区域,我假设你的 LCD 外围设备正在使用 DMA 发送到显示器,只是可以免费使用的常规 RAM。由于 linux 写入该 RAM 区域的任何内容都不是显示数据,它仍在通过 DMA 将输出输出到 LCD,但现在已损坏。
因为您无法更改第 3 方引导加载程序,所以您可以使用的一种解决方案是制作您自己的辅助引导加载程序,并让第 3 方引导加载程序跳转到它而不是 linux。这个辅助引导加载程序将保存通常由您的第 3 方引导加载程序传递给 linux 的所有参数。我想你真正想要这个辅助引导加载程序做的是关闭将输出馈送到你的 LCD 的 DMA,然后你的屏幕应该变黑。完成后,您可以像往常一样继续并跳入 linux。如果辅助引导加载程序也偏移了 linux 传递的一些内存位置参数,则您可能需要稍微修改 linux 传递的参数。
关于linux - 在 Linux 启动之前清除 RAM 区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618701/