博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mmap测试程序
阅读量:2425 次
发布时间:2019-05-10

本文共 1234 字,大约阅读时间需要 4 分钟。

mmap测试程序(用户空间与内核空间数据交换&&用户态和内核态的数据交换用例)

Kernel mode module

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/mm.h>
static unsigned long p = 0;
static int __init shao_init(void)
{
       //分配共享内存(一个页面)
      p = __get_free_pages(GFP_KERNEL, 0);
     SetPageReserved(virt_to_page(p));
      printk("<1> p = 0x%08x\n", p);  // we will get value of P
        
    //在共享内存中写上一个字符串
    strcpy(p, "Hello world!\n");
    return 0;
}
static void __exit shao_exit(void)
{
    ClearPageReserved(virt_to_page(p));
    free_pages(p, 0);
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("helloworld");
MODULE_DESCRIPTION("mmap test");
module_init(shao_init);
module_exit(shao_exit);
User mode applicaiton
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#define PAGE_SIZE (4*1024)
#define PAGE_OFFSET               0xc0000000
#define KERNEL_VIRT_ADDR 0xc5e3c000 //此处地址即为内核模块打印的地址p,动态的不固定,需要自行修改
int main()
{
         char *buf;
         int fd;
         unsigned long phy_addr;
         fd=open("/dev/mem",O_RDWR);
         if(fd == -1)
                   perror("open");
         phy_addr=KERNEL_VIRT_ADDR - PAGE_OFFSET;
         buf=mmap(0, PAGE_SIZE,
                   PROT_READ|PROT_WRITE, MAP_SHARED,
                   fd, phy_addr);
         if(buf == MAP_FAILED)
                   perror("mmap");
         puts(buf);//打印共享内存的内容
 
         munmap(buf,PAGE_SIZE);
         close(fd);
         return 0;
}

转载地址:http://vebmb.baihongyu.com/

你可能感兴趣的文章
OpenGL坐标系
查看>>
不定期更新的碎碎念
查看>>
MySQL之SQL分析三部曲
查看>>
使用 COM+ 参数化对象结构编程技术 (转)
查看>>
谁将主导世界货币?即将到来的新一轮全球危机
查看>>
数论概论(英文版.第4版)
查看>>
exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)
查看>>
黎曼猜想漫谈
查看>>
CRM基础教程
查看>>
内存数据管理(第2版)
查看>>
深入理解Android:卷II
查看>>
QTP自动化测试最佳实践
查看>>
捉虫日记
查看>>
jQuery Mobile权威指南
查看>>
决战第三屏:移动互联网时代的商业与营销新规则
查看>>
方刚先生谈《胜于言传——网站内容制胜宝典》
查看>>
php以图搜图
查看>>
php怎么实现根据图片搜索图片功能
查看>>
三种保证URL地址可信的加密方式
查看>>
memcached 并发原语CAS与GETS操作
查看>>