亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mmap.c

?? mmap example,very good!
?? C
字號:
#include <linux/config.h>#include <linux/version.h>#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <linux/mm.h>#ifdef MODVERSIONS#  include <linux/modversions.h>#endif#include <asm/io.h>/* character device structures */static dev_t mmap_dev;static struct cdev mmap_cdev;/* methods of the character device */static int mmap_open(struct inode *inode, struct file *filp);static int mmap_release(struct inode *inode, struct file *filp);static int mmap_mmap(struct file *filp, struct vm_area_struct *vma);/* the file operations, i.e. all character device methods */static struct file_operations mmap_fops = {        .open = mmap_open,        .release = mmap_release,        .mmap = mmap_mmap,        .owner = THIS_MODULE,};// internal data// length of the two memory areas#define NPAGES 16// pointer to the vmalloc'd area - alway page alignedstatic int *vmalloc_area;// pointer to the kmalloc'd area, rounded up to a page boundarystatic int *kmalloc_area;// original pointer for kmalloc'd area as returned by kmallocstatic void *kmalloc_ptr;/* character device open method */static int mmap_open(struct inode *inode, struct file *filp){        return 0;}/* character device last close method */static int mmap_release(struct inode *inode, struct file *filp){        return 0;}// helper function, mmap's the kmalloc'd area which is physically contiguousint mmap_kmem(struct file *filp, struct vm_area_struct *vma){        int ret;        long length = vma->vm_end - vma->vm_start;        /* check length - do not allow larger mappings than the number of           pages allocated */        if (length > NPAGES * PAGE_SIZE)                return -EIO;        /* map the whole physically contiguous area in one piece */        if ((ret = remap_pfn_range(vma,                                   vma->vm_start,                                   virt_to_phys((void *)kmalloc_area) >> PAGE_SHIFT,                                   length,                                   vma->vm_page_prot)) < 0) {                return ret;        }                return 0;}// helper function, mmap's the vmalloc'd area which is not physically contiguousint mmap_vmem(struct file *filp, struct vm_area_struct *vma){        int ret;        long length = vma->vm_end - vma->vm_start;        unsigned long start = vma->vm_start;        char *vmalloc_area_ptr = (char *)vmalloc_area;        unsigned long pfn;        /* check length - do not allow larger mappings than the number of           pages allocated */        if (length > NPAGES * PAGE_SIZE)                return -EIO;        /* loop over all pages, map it page individually */        while (length > 0) {                pfn = vmalloc_to_pfn(vmalloc_area_ptr);                if ((ret = remap_pfn_range(vma, start, pfn, PAGE_SIZE,                                           PAGE_SHARED)) < 0) {                        return ret;                }                start += PAGE_SIZE;                vmalloc_area_ptr += PAGE_SIZE;                length -= PAGE_SIZE;        }        return 0;}/* character device mmap method */static int mmap_mmap(struct file *filp, struct vm_area_struct *vma){        /* at offset 0 we map the vmalloc'd area */        if (vma->vm_pgoff == 0) {                return mmap_vmem(filp, vma);        }        /* at offset NPAGES we map the kmalloc'd area */        if (vma->vm_pgoff == NPAGES) {                return mmap_kmem(filp, vma);        }        /* at any other offset we return an error */        return -EIO;}/* module initialization - called at module load time */static int __init mmap_init(void){        int ret = 0;        int i;        /* allocate a memory area with kmalloc. Will be rounded up to a page boundary */        if ((kmalloc_ptr = kmalloc((NPAGES + 2) * PAGE_SIZE, GFP_KERNEL)) == NULL) {                ret = -ENOMEM;                goto out;        }        /* round it up to the page bondary */        kmalloc_area = (int *)((((unsigned long)kmalloc_ptr) + PAGE_SIZE - 1) & PAGE_MASK);        /* allocate a memory area with vmalloc. */        if ((vmalloc_area = (int *)vmalloc(NPAGES * PAGE_SIZE)) == NULL) {                ret = -ENOMEM;                goto out_kfree;        }        /* get the major number of the character device */        if ((ret = alloc_chrdev_region(&mmap_dev, 0, 1, "mmap")) < 0) {                printk(KERN_ERR "could not allocate major number for mmap\n");                goto out_vfree;        }        /* initialize the device structure and register the device with the kernel */        cdev_init(&mmap_cdev, &mmap_fops);        if ((ret = cdev_add(&mmap_cdev, mmap_dev, 1)) < 0) {                printk(KERN_ERR "could not allocate chrdev for mmap\n");                goto out_unalloc_region;        }        /* mark the pages reserved */        for (i = 0; i < NPAGES * PAGE_SIZE; i+= PAGE_SIZE) {                SetPageReserved(vmalloc_to_page((void *)(((unsigned long)vmalloc_area) + i)));                SetPageReserved(virt_to_page(((unsigned long)kmalloc_area) + i));        }        /* store a pattern in the memory - the test application will check for it */        for (i = 0; i < (NPAGES * PAGE_SIZE / sizeof(int)); i += 2) {                vmalloc_area[i] = (0xaffe << 16) + i;                vmalloc_area[i + 1] = (0xbeef << 16) + i;                kmalloc_area[i] = (0xdead << 16) + i;                kmalloc_area[i + 1] = (0xbeef << 16) + i;        }                return ret;          out_unalloc_region:        unregister_chrdev_region(mmap_dev, 1);  out_vfree:        vfree(vmalloc_area);  out_kfree:        kfree(kmalloc_ptr);  out:        return ret;}/* module unload */static void __exit mmap_exit(void){        int i;        /* remove the character deivce */        cdev_del(&mmap_cdev);        unregister_chrdev_region(mmap_dev, 1);        /* unreserve the pages */        for (i = 0; i < NPAGES * PAGE_SIZE; i+= PAGE_SIZE) {                SetPageReserved(vmalloc_to_page((void *)(((unsigned long)vmalloc_area) + i)));                SetPageReserved(virt_to_page(((unsigned long)kmalloc_area) + i));        }        /* free the memory areas */        vfree(vmalloc_area);        kfree(kmalloc_ptr);}module_init(mmap_init);module_exit(mmap_exit);MODULE_DESCRIPTION("mmap demo driver");MODULE_AUTHOR("Martin Frey <frey@scs.ch>");MODULE_LICENSE("Dual BSD/GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97se亚洲国产综合自在线观| 欧美日本在线视频| 亚洲午夜久久久| 中文字幕va一区二区三区| 一区二区三区鲁丝不卡| 国产成人综合亚洲网站| 国产综合色精品一区二区三区| 日日夜夜免费精品| 亚洲成国产人片在线观看| 亚洲第一二三四区| 天堂av在线一区| 日韩av电影免费观看高清完整版| 天堂一区二区在线免费观看| 天天影视网天天综合色在线播放| 亚洲成人一区二区在线观看| 青青草伊人久久| 国内精品久久久久影院薰衣草| 国产在线一区二区| 国产精品1区二区.| 91在线码无精品| 欧美日韩中文一区| 欧美变态tickle挠乳网站| 久久影院电视剧免费观看| 国产精品每日更新| 亚洲综合一二三区| 麻豆精品视频在线观看视频| 狠狠色狠狠色综合| 97久久超碰国产精品| 欧美日韩免费观看一区二区三区| 91精品国产丝袜白色高跟鞋| 久久久久久久网| 亚洲伦理在线精品| 久久机这里只有精品| 高潮精品一区videoshd| 91极品视觉盛宴| 欧美变态口味重另类| 最新日韩av在线| 日韩二区三区在线观看| 处破女av一区二区| 欧美日韩精品一区视频| 国产欧美一区二区在线| 亚洲免费伊人电影| 韩日av一区二区| 色屁屁一区二区| 国产亚洲综合在线| 日韩福利视频导航| 日本韩国一区二区| 国产视频一区二区在线| 婷婷国产v国产偷v亚洲高清| 国产69精品久久99不卡| 91精品免费在线观看| 国产精品成人在线观看| 日韩成人精品视频| 色婷婷综合久久久中文一区二区| 久久蜜桃av一区精品变态类天堂 | 精品亚洲国产成人av制服丝袜| 国产高清在线观看免费不卡| 国产成人综合精品三级| 国产日产欧美一区| 国产女人18水真多18精品一级做| 性久久久久久久久| 97久久久精品综合88久久| 日韩精品中文字幕一区| 亚洲在线观看免费视频| 成人sese在线| 国产校园另类小说区| 国产精品综合久久| 日韩视频免费观看高清完整版在线观看 | 久久综合色婷婷| 日韩国产欧美三级| 欧美日韩不卡一区二区| 亚洲一区二区精品视频| 色综合久久久久综合99| 亚洲欧洲在线观看av| 成人av网站在线| 中文字幕二三区不卡| 国产一区二区三区在线观看免费视频 | 91在线云播放| 国产精品久久久久久久岛一牛影视| 狠狠色综合日日| 欧美精品一区二区三区蜜桃 | 免费成人av在线| 在线观看亚洲一区| 一区二区三区四区国产精品| 色综合网色综合| 一区二区三区中文字幕| 欧美日韩中文精品| 日本美女一区二区| 日韩欧美亚洲一区二区| 美脚の诱脚舐め脚责91| 日韩精品一区二区三区老鸭窝 | 一区二区成人在线视频| 99re热这里只有精品免费视频| 夜夜亚洲天天久久| 欧美性大战久久久久久久| 五月综合激情婷婷六月色窝| 在线播放/欧美激情| 麻豆精品一区二区三区| 国产午夜精品理论片a级大结局| 国产一区二区三区在线看麻豆| 久久精品亚洲一区二区三区浴池| 国产精品综合网| 亚洲日本青草视频在线怡红院| 欧洲一区二区av| 欧美aaaaaa午夜精品| 2023国产精品视频| 99久久伊人网影院| 午夜精品一区二区三区电影天堂 | 精品国产乱码久久| 成人黄色片在线观看| 一区二区三区免费看视频| 欧美一区二区三区在线电影| 国产毛片精品视频| 亚洲蜜臀av乱码久久精品| 欧美美女直播网站| 国产精品一区二区黑丝| 一区二区三区不卡视频| 欧美不卡123| 日本精品裸体写真集在线观看 | 中文字幕免费观看一区| 欧美性视频一区二区三区| 久久精品国产精品青草| 中文字幕制服丝袜一区二区三区| 欧美日韩一区 二区 三区 久久精品| 日本美女视频一区二区| 国产精品美女久久久久久2018 | 91丨九色丨黑人外教| 日韩在线观看一区二区| 国产精品电影一区二区三区| 日韩午夜在线播放| 欧美偷拍一区二区| av网站一区二区三区| 经典三级一区二区| 三级在线观看一区二区| 亚洲精品视频一区二区| 国产人伦精品一区二区| 欧美一区二区三区视频在线 | 香蕉成人啪国产精品视频综合网| 欧美激情一区二区三区四区| 91精品国产乱| 欧美三级乱人伦电影| 波多野结衣亚洲一区| 国产精品一区二区91| 国内精品伊人久久久久av影院 | 久久视频一区二区| 欧美日韩国产片| 色综合网色综合| 国产麻豆精品久久一二三| 麻豆91在线观看| 亚洲一区二区三区在线看| 国产精品免费久久久久| 欧美精品色综合| 欧美理论在线播放| 日本韩国欧美一区二区三区| 国产成人精品一区二区三区网站观看 | 在线看国产一区| 日韩成人一区二区| 日本不卡视频在线| 亚洲成av人片在线观看无码| 国产精品每日更新| 日韩欧美中文字幕一区| 日韩精品一区在线观看| 在线成人小视频| 欧美日韩的一区二区| 91亚洲精华国产精华精华液| 色婷婷综合视频在线观看| 成人动漫精品一区二区| 成人激情免费视频| 久久97超碰色| 国产成人激情av| 大胆欧美人体老妇| 国产69精品久久久久777| 国产乱人伦偷精品视频免下载 | 波多野结衣欧美| 97se狠狠狠综合亚洲狠狠| 北条麻妃国产九九精品视频| 高清视频一区二区| 成人一区二区三区视频在线观看 | 夜夜揉揉日日人人青青一国产精品| 国产精品国产自产拍高清av王其| 国产三级欧美三级| 国产亚洲一区二区三区在线观看| 亚洲欧洲日韩av| 亚洲激情图片一区| 日韩精品亚洲一区二区三区免费| 日韩电影在线免费看| 久久国内精品视频| 久草热8精品视频在线观看| 精品一区二区免费在线观看| 波多野结衣视频一区| 欧美在线影院一区二区| 91麻豆精品国产91久久久使用方法 | 亚洲第一精品在线| 亚洲色图都市小说| 久久草av在线| 成人91在线观看| 欧美久久一二三四区| 国产精品污www在线观看| 一区二区三区在线视频播放| 日韩av电影天堂|