歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 用戶態和內核共享內存:最簡單的例子

用戶態和內核共享內存:最簡單的例子

日期:2017/2/27 9:31:11   编辑:更多Linux

#include #include #include #include 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)); printk("<1> p = 0x%08x\n", p); //在共享內存中寫上一個字符串 strcpy(p, "Hello world!\n"); return 0; }

static void __exit fini(void)

{

ClearPageReserved(virt_to_page(p)); free_pages(p, 0); } module_init(init); module_exit(fini); 用戶態程序---------------------------------#include

#include

#include

#include

#include

#define PAGE_SIZE (4*1024)

#define PAGE_OFFSET 0xc0000000

#define KERNEL_VIRT_ADDR 0xc5e3c000

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_READPROT_WRITE, MAP_SHARED, fd, phy_addr); if(buf == MAP_FAILED) perror("mmap"); puts(buf);//打印共享內存的內容 munmap(buf,PAGE_SIZE); close(fd); return 0; }




Copyright © Linux教程網 All Rights Reserved