gpt4 book ai didi

c - 为什么尝试将上部 BIOS 内存映射到虚拟地址空间时 mmap 失败

转载 作者:行者123 更新时间:2023-11-30 15:46:51 24 4
gpt4 key购买 nike

我正在尝试将以下地址映射到虚拟地址空间:

---物理地址是0xf6c50---该地址是 EBDA 基址指针和较高 BIOS 内存窗口 (ACPI_HI_RSDP_WINDOW_BASE) 的总和

目的是将 ACPI 表映射到进程的地址空间并在以后使用。

    acpi_mem_fd = open("/dev/mem", O_RDONLY);

我打开一个文件描述符来读取“/dev/mem”。我使用 pread 到达地址并读取 ACPI header 结构,一旦签名匹配,我希望将其映射到虚拟地址空间,但是当我这样做时,我收到如下错误: “无法分配内存”

我正在使用 FreeBSD 8.x 。我可以确认 mmap 一般有效。导致错误的调用如下:

    map->va = mmap(0, size, PROT_READ, MAP_PRIVATE, acpi_mem_fd, pa);

我什至尝试过使用 MAP_SHARED,但这并没有多大改变。

这里 pa 是上面由“ACPI_HI_RSDP_WINDOW_BASE”宏定义的地址。任何人都可以阐明这个问题或如何解决这个问题。

最佳答案

根据您的评论,大小为 36:大小必须是系统页面大小的倍数。请参阅C - why I cannot mmap a small (256UL or smaller) size of memory?

关于c - 为什么尝试将上部 BIOS 内存映射到虚拟地址空间时 mmap 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com