访问mmaped / dev / mem

时间:2012-08-09 21:02:52

标签: c linux-kernel mmap

我有一个简单的程序试图访问用户空间中的物理内存,内核存储第一个结构页面。在64位计算机上,此地址为:

  

内核虚拟地址:ffffea0000000000物理地址:0000620000000000

我正在尝试通过用户空间中的mmap访问此物理地址,但以下代码会破坏内核:

int *addr;
if ((fd = open("/dev/mem", O_RDWR|O_SYNC)) < 0 ) {
    printf("Error opening file. \n");
    close(fd);
    return (-1);
}
/* mmap.  address of first struct page for 64 bit architectures 
 * is 0x0000620000000000.
 */
addr = (int *)mmap(0, num*STRUCT_PAGE_SIZE, PROT_READ, MAP_PRIVATE,
            fd, 0x0000620000000000);
printf("addr: %p \n",addr);
printf("addr: %d \n",*addr); /* CRASH. */

我做错了什么?

0 个答案:

没有答案