与Linux中的内存映射设备通信

标签 c linux

我有一个内存映射设备,我需要与其通信。我的老板告诉我可以通过 /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/

相关文章:

c - 如何在 Python 列表中动态插入数据?

来自 Fortran 的 C 代码 : fatal error: stdlib. h: 没有那个文件或目录

linux - 临时屏幕输出 session 存储在哪里

python - Lubuntu 终端 Python 桌面快捷方式

linux - 在 initramfs 中使用 perl 重定向系统调用的输出

python - 如何在 Linux 上使用 Python 导出

c++ - telnet 客户端连接停止接收数据,服务器仍在发送

C 编程段错误 : 11 Thread issues

c - 我如何更改此代码以在没有 strstr 函数的情况下工作?

c++ - 如何使用 C 终止远程计算机上的进程?