• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用戶態和內核共享內存--最簡單的例子

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    作者:wheelz 來自: http://www.linuxforum.net/forum/gshowflat.php?Cat=Board=linuxKNumber=587187page=0view=collapsedsb=5o=allfpart= 例子中,用戶態程序的KERNEL_VIRT_ADDR就是內核模塊打印的地址p 這里是hardcoding(先加載內核模塊,再把打印的地址
    作者:wheelz
    來自:
    http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=linuxK&Number=587187&page=0&view=collapsed&sb=5&o=all&fpart=
    例子中,用戶態程序的KERNEL_VIRT_ADDR就是內核模塊打印的地址p
    這里是hard coding(先加載內核模塊,再把打印的地址賦值給KERNEL_VIRT_ADDR),
    可以采用其他的方式傳遞。

    2.6內核驗證。

    內核模塊-----------------------


    #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));



    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 <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



    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://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>