【发布时间】:2022-12-29 01:39:29
【问题描述】:
假设对于一个嵌入式程序,硬件是这样设计的,如果内存地址0x8729被0xff填充,它就会执行一定的操作。 有没有办法访问内存地址 0x8729 并写入它?
【问题讨论】:
-
搜索devmem2.c和/或 Busybox 中的 devmem 命令。顺便说一句,避免赤裸裸地使用“记忆" 除非上下文虚拟的要么身体的记忆是显而易见的。
标签: c++ c embedded-linux
假设对于一个嵌入式程序,硬件是这样设计的,如果内存地址0x8729被0xff填充,它就会执行一定的操作。 有没有办法访问内存地址 0x8729 并写入它?
【问题讨论】:
标签: c++ c embedded-linux
试试这个:
uint8_t * p_memory = (uint8_t *) 0x8729;
const uint8_t value_from_memory = *p_memory;
*p_memory = 0xff; // Writing to memory.
你可能不需要演员表,但我还是把它放在那里了。
解释:
uint8_t指针并分配给你的内存地址。【讨论】:
volatile。
embedded linux,您应该期望用户空间程序在虚拟内存中执行。因此,写入“内存”地址 0x8729 将是映射到神秘设备不知道的某个未知物理页面的虚拟内存页面。
我要说的是,如果没有关于特定 Linux 实现的更多信息,我们将不知道这是否是不支持用户空间应用程序内存虚拟化的“微型”Linux 实现的问题,或者这是否是“标准”Linux 实现,它确实从用户空间虚拟化物理内存地址。
我倾向于认为这是用户空间的虚拟化问题,在这种情况下,您可以使用this posting 提到的技术。它描述了如何使用 devmem 从命令行访问物理内存,以及如何在 C 程序中使用设备文件句柄 /dev/mem 和 memmap。
【讨论】: