歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多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