我有一个内存映射设备,我需要与其通信。我的老板告诉我可以通过 /dev/mem
来实现。我在网上查了一下,没有找到任何相关的内容。是否可以做到,或者我的老板错了?
假设您拥有 super 用户权限。
感谢任何帮助。
最佳答案
您在地址 MMIO_ADDR
处获得了一个内存映射设备,该设备占用 MMIO_LEN
字节。您需要切换设备地址空间中的第 123 个字节。这可能看起来像这样:
#define MMIO_ADDR 0xDEAD0000
#define MMIO_LEN 0x400
// open a handle into physical memory, requires root
int memfd = open("/dev/mem", O_RDWR);
// map the range [MMIO_ADDR, MMIO_ADDR+MMIO_LEN] into your virtual address space
unsigned char* shmem = mmap(0, MMIO_LEN, PROT_WRITE | PROT_READ, MAP_SHARED, memfd, MMIO_ADDR);
// do your deed
unsigned char *magic_toggle_byte = &shmem[123];
*magic_toggle_byte = !*magic_toggle_byte;
关于与Linux中的内存映射设备通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38317054/