用户空间与kernel空间通信的例子(利用mmap)
来源:互联网 发布:美白祛斑套装. 知乎 编辑:程序博客网 时间:2024/05/16 17:56
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/mm.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wheelz");
MODULE_DESCRIPTION("mmap demo");
static unsigned long p = 0;
static int __init init(void)
{
//分配共享内存(一个页面)
p = __get_free_pages(GFP_KERNEL, 0); //得到的当然是一个虚拟地址了
SetPageReserved(virt_to_page(p)); //#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT)) //12
printk("<1> p = 0x%08x/n", p);
//在共享内存中写上一个字符串
strcpy(p, "Hello world!/n");
return 0;
}
static void __exit exit(void)
{
ClearPageReserved(virt_to_page(p));
free_pages(p, 0);
}
module_init(init);
module_exit(exit);
用户空间的测试程序:
#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 0xcf9e5000 //这里是硬编址的, 可以通过ioctl 或者proc来实现的。
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;
}
确实是个好例子。
- 用户空间与kernel空间通信的例子(利用mmap)
- 用户空间与kernel空间通信的例子(利用mmap)
- 用户空间与kernel空间通信的例子(利用mmap)
- 利用mmap实现用户空间与内核空间的共享内存通信
- 利用mmap实现用户空间与内核空间的共享内存通信
- linux kernel 内核空间与用户空间通信 netlink套接字 与 系统调用的 异同
- mmap - 用户空间与内核空间
- mmap - 用户空间与内核空间
- mmap的详细使用(用户空间)
- 用户和kernel空间使用mmap共享内存
- mmap内存映射/dev/mem到用户空间 + kernel config
- 用户空间与内核空间数据交换之mmap
- linux用户空间与内核空间的通信技术总结
- 内核空间与用户空间的通信方式
- linux内核空间与用户空间通信
- Linux 系统内核空间与用户空间通信的实现与分析(转)
- Linux内核和用户空间通信的方式(一)— proc文件和mmap共享内存
- Linux内核和用户空间通信的方式(一)— proc文件和mmap共享内存
- AIX 安装mysql 5.0.51a [G]
- 使用Oracle里的包Bompexpl将BOM展开
- C语言测试
- DELPHI中完成端口(IOCP)的简单分析(1)
- 拿什么来突破行业网站的“天花板”_风轻轻地吹
- 用户空间与kernel空间通信的例子(利用mmap)
- lucene2.0学习文档
- SGA
- JavaScript基础之对象
- struts 显示html效果而不是html代码的方法
- javascript在页面显示时间
- DELPHI中完成端口(IOCP)的简单分析(2)
- javascript:return false有什么用
- test