#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
main()
{
int i, j;
int words = 10;
int devmem;
off_t PageOffset, PageAddress;
unsigned long *hw_addr = (unsigned long *) 0x20000000;
unsigned long read_data;
devmem = open("/dev/mem", O_RDWR | O_SYNC);
PageOffset = (off_t) hw_addr % getpagesize();
PageAddress = (off_t) (hw_addr - PageOffset);
hw_addr = (unsigned long *) mmap(0, 4, PROT_READ|PROT_WRITE, MAP_SHARED, devmem, PageAddress);
for (i = 0, j = 0; i < words; i++, j+=4)
{
printf("Writing to hardware model\n");
*(hw_addr+j) = 0xabcd0000+j;
read_data = *(hw_addr+j);
printf("Read from hardware %x\n",read_data);
}
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
main()
{
int i, j;
int words = 10;
int devmem;
off_t PageOffset, PageAddress;
unsigned long *hw_addr = (unsigned long *) 0x20000000;
unsigned long read_data;
devmem = open("/dev/mem", O_RDWR | O_SYNC);
PageOffset = (off_t) hw_addr % getpagesize();
PageAddress = (off_t) (hw_addr - PageOffset);
hw_addr = (unsigned long *) mmap(0, 4, PROT_READ|PROT_WRITE, MAP_SHARED, devmem, PageAddress);
for (i = 0, j = 0; i < words; i++, j+=4)
{
printf("Writing to hardware model\n");
*(hw_addr+j) = 0xabcd0000+j;
read_data = *(hw_addr+j);
printf("Read from hardware %x\n",read_data);
}
}
使用mmap访问硬件内存
本文展示了一个通过/dev/mem文件映射特定物理地址范围到用户空间的例子,并演示了如何读写这些硬件寄存器。代码中利用mmap系统调用实现内存映射,通过对映射后的内存区域进行读写操作来与硬件交互。
1223

被折叠的 条评论
为什么被折叠?



