mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
bugfix: 当物理机具有多个memory area的时候,无法正确使用这些区域的问题.以及在内核代码处出现内存空洞而导致无法正常运行的问题. (#448)
* bugfix: 当物理机具有多个memory area的时候,无法正确使用这些区域的问题.以及在内核代码处出现内存空洞而导致无法正常运行的问题. 解决方案: 1. 分区域把空闲页添加到buddy 2. 将内核链接到16M的位置,以避免uefi带来的内存空洞. 这个值是因为我看到linux的救援内核也是在16M的地址,因此猜测厂商不会使用这块内存. 尽管uefi规范讲的是固件可以采用任何地址,内核需要使用内核重定位技术去避免遇到内存空洞,但我没有这么做.
This commit is contained in:
@ -102,6 +102,20 @@ bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *data, u
|
||||
return true;
|
||||
}
|
||||
|
||||
/// @brief 获取加载基地址
|
||||
/// @param _iter_data
|
||||
/// @param data
|
||||
/// @param reserved
|
||||
/// @return
|
||||
bool multiboot2_get_load_base(const struct iter_data_t *_iter_data, void *data, unsigned int *reserved)
|
||||
{
|
||||
|
||||
if (_iter_data->type != MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR)
|
||||
return false;
|
||||
*(struct multiboot_tag_load_base_addr_t *)data = *(struct multiboot_tag_load_base_addr_t *)_iter_data;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取帧缓冲区信息
|
||||
*
|
||||
|
@ -434,6 +434,8 @@ void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, unsigned i
|
||||
*/
|
||||
bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *_data, unsigned int *count);
|
||||
|
||||
bool multiboot2_get_load_base(const struct iter_data_t *_iter_data, void *data, unsigned int *reserved);
|
||||
|
||||
/**
|
||||
* @brief 获取VBE信息
|
||||
*
|
||||
|
Reference in New Issue
Block a user