我有一个内存映射设备,我需要与它沟通。 我的老板告诉我可以通过/dev/mem 。 我在网上看,没有发现任何与之相关的东西。 是否有可能做到这一点,或者我的老板是错的?
假定您拥有超级用户权限。
任何帮助表示赞赏。
在C ++中寻找基于Windows RAM的共享内存解决scheme
MysqL.h c ++的参数太多了
WindowProc在c#中的窗体
使用std :: wofstream写入一个文件。 该文件保持空白
如何检测隐藏进程
如何在失败的编译中find缺失的依赖项?
在Ubuntu上安装C ++库
如何在Windows中获取所有等宽字体?
StretchDIBits仅在特定图像尺寸下失败
读取ATA状态寄存器时为0xFF
您在地址为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;
设备节点/dev/mem可让您直接访问系统的物理内存。
您可以在/proc/iomem找到设备内存映射。 请注意,还有/dev/ports及其对应的/proc/ioports 。 通过/proc的文件,您可以确定/dev/mem的设备内存映射的位置。
使用常规的文件操作,使用/dev/mem访问映射区域(通常,访问明确限制于内存映射区域)当然是可能的。 我不能告诉你这是否是最好的办法。
文件/dev/mem有一个手册页 。 这听起来就像打开/dev/mem并执行常规的文件操作来从内存中读取和写入。 您可能会使用open系统调用来打开它, lseek转到特定的地址,然后read或write以访问该地址的内存。
http://lxr.free-electrons.com/source/drivers/char/mem.c
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。