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

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

?? simple.c

?? LINUX設備驅動2源代碼
?? C
字號:
/* * Simple - REALLY simple memory mapping demonstration. * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this file can be freely used, adapted, * and redistributed in source or binary form, so long as an * acknowledgment appears in derived source files.  The citation * should list that the code comes from the book "Linux Device * Drivers" by Alessandro Rubini and Jonathan Corbet, published * by O'Reilly & Associates.   No warranty is attached; * we cannot take responsibility for errors or fitness for use. * * $Id: simple.c,v 1.8 2001/07/18 22:28:18 rubini Exp $ */#ifndef __KERNEL__#  define __KERNEL__#endif#ifndef MODULE#  define MODULE#endif#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>   /* printk() */#include <linux/malloc.h>   /* kmalloc() */#include <linux/fs.h>       /* everything... */#include <linux/errno.h>    /* error codes */#include <linux/types.h>    /* size_t */#include <asm/page.h>#include "sysdep.h"#ifdef LINUX_20#  error "This module can't run with Linux-2.0"#endifstatic int simple_major = 0;MODULE_PARM(simple_major, "i");MODULE_AUTHOR("Jonathan Corbet");/* * Forwards for our methods. */int simple_open (struct inode *inode, struct file *filp);int simple_release(struct inode *inode, struct file *filp);int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma);int simple_nopage_mmap(struct file *filp, struct vm_area_struct *vma);/* * Our various sub-devices. *//* Device 0 uses remap_page_range */struct file_operations simple_remap_ops = {    open:    simple_open,    release: simple_release,    mmap:    simple_remap_mmap,};/* Device 1 uses nopage */struct file_operations simple_nopage_ops = {    open:    simple_open,    release: simple_release,    mmap:    simple_nopage_mmap,};#define MAX_SIMPLE_DEV 2struct file_operations *simple_fops[MAX_SIMPLE_DEV] = {    &simple_remap_ops,    &simple_nopage_ops,};/* * Open the device; all we have to do here is to up the usage count and * set the right fops. */int simple_open (struct inode *inode, struct file *filp){    unsigned int dev = MINOR(inode->i_rdev);    if (dev >= MAX_SIMPLE_DEV)         return -ENODEV;    filp->f_op = simple_fops[dev];    MOD_INC_USE_COUNT;    return 0;}/* * Closing is even simpler. */int simple_release(struct inode *inode, struct file *filp){    MOD_DEC_USE_COUNT;    return 0;}/* * Common VMA ops. */void simple_vma_open(struct vm_area_struct *vma){ MOD_INC_USE_COUNT; }void simple_vma_close(struct vm_area_struct *vma){ MOD_DEC_USE_COUNT; }/* * The remap_page_range version of mmap. */static struct vm_operations_struct simple_remap_vm_ops = {    open:  simple_vma_open,    close: simple_vma_close,};int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma){    unsigned long offset = VMA_OFFSET(vma);    if (offset >= __pa(high_memory) || (filp->f_flags & O_SYNC))        vma->vm_flags |= VM_IO;    vma->vm_flags |= VM_RESERVED;    if (remap_page_range(vma->vm_start, offset, vma->vm_end-vma->vm_start,                vma->vm_page_prot))        return -EAGAIN;    vma->vm_ops = &simple_remap_vm_ops;    simple_vma_open(vma);    return 0;}/* * The nopage version. */struct page *simple_vma_nopage(struct vm_area_struct *vma,                unsigned long address, int write_access){    struct page *pageptr;    unsigned long physaddr = address - vma->vm_start + VMA_OFFSET(vma);    pageptr = virt_to_page(__va(physaddr));    get_page(pageptr);    return pageptr;}#ifdef LINUX_22 /* wrapper for 2.2, which had a different nopage retval */unsigned long simple_vma_nopage_22(struct vm_area_struct * area,                unsigned long address, int write_access){    return (unsigned long) simple_vma_nopage(area, address, write_access);}#define simple_vma_nopage simple_vma_nopage_22#endif  /* LINUX_22 */        static struct vm_operations_struct simple_nopage_vm_ops = {    open:    simple_vma_open,    close:   simple_vma_close,    nopage:  simple_vma_nopage,};int simple_nopage_mmap(struct file *filp, struct vm_area_struct *vma){    unsigned long offset = VMA_OFFSET(vma);    if (offset >= __pa(high_memory) || (filp->f_flags & O_SYNC))        vma->vm_flags |= VM_IO;    vma->vm_flags |= VM_RESERVED;    vma->vm_ops = &simple_nopage_vm_ops;    simple_vma_open(vma);    return 0;}/* * Module housekeeping. */static int simple_init(void){    int result;    SET_MODULE_OWNER(&simple_remap_ops);    SET_MODULE_OWNER(&simple_nopage_ops);    result = register_chrdev(simple_major, "simple", &simple_remap_ops);    if (result < 0)    {        printk(KERN_WARNING "simple: unable to get major %d\n", simple_major);        return result;    }    if (simple_major == 0)        simple_major = result;    return 0;}static void simple_cleanup(void){    unregister_chrdev(simple_major, "simple");}module_init(simple_init);module_exit(simple_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久久久久久久影院| 欧美亚一区二区| 美国一区二区三区在线播放| 亚洲区小说区图片区qvod| 国产精品午夜久久| 中文字幕在线不卡一区| 日本一区二区三区在线观看| 国产天堂亚洲国产碰碰| 久久久久九九视频| 亚洲欧洲成人自拍| 亚洲一区二区偷拍精品| 亚洲成人av在线电影| 午夜av一区二区三区| 日本va欧美va欧美va精品| 美女网站色91| 国产成人av在线影院| a级高清视频欧美日韩| 色婷婷国产精品| 欧美伦理电影网| 欧美电影免费观看高清完整版在| 久久影院电视剧免费观看| 国产精品妹子av| 中文字幕在线不卡视频| 亚洲第一在线综合网站| 理论片日本一区| 北岛玲一区二区三区四区| 欧美日韩国产高清一区| 精品国精品国产| 亚洲精品久久久久久国产精华液| 亚洲影视在线观看| 国产在线精品一区二区夜色| 99re热视频这里只精品| 日韩精品影音先锋| 亚洲三级电影网站| 国产一区二区福利| 欧美在线视频你懂得| 精品电影一区二区| 亚洲一区在线观看视频| 国产成人丝袜美腿| 欧美日韩一二三区| 中文字幕一区二区三区av | 久久精品99久久久| 99国产精品久久久久久久久久久| 欧美日韩大陆一区二区| 国产精品视频你懂的| 五月天激情小说综合| 不卡av电影在线播放| 91精品国产色综合久久不卡电影 | 成人av网站在线观看| 日韩视频一区二区| 亚洲国产欧美一区二区三区丁香婷 | 久久精品人人做人人爽97| 亚洲成a人v欧美综合天堂| www.欧美色图| 久久久高清一区二区三区| 麻豆一区二区三区| 91精品中文字幕一区二区三区| 亚洲欧洲精品一区二区三区不卡| 蜜臀精品久久久久久蜜臀| 在线观看亚洲一区| 亚洲女同一区二区| 91麻豆精东视频| 中文字幕免费在线观看视频一区| 另类调教123区| 7777精品伊人久久久大香线蕉超级流畅| 国产精品久久久久7777按摩 | 国产精品久99| 国产精华液一区二区三区| 日韩视频中午一区| 日本成人中文字幕| 欧美一级国产精品| 美腿丝袜在线亚洲一区| 日韩精品一区二区在线| 日本中文一区二区三区| 7777精品伊人久久久大香线蕉的 | 欧美日韩精品一区二区在线播放| 日韩伦理免费电影| 色哟哟国产精品| 一区二区三区久久| 欧美视频日韩视频在线观看| 亚洲综合一区二区| 欧美精三区欧美精三区| 日韩经典中文字幕一区| 91精品国产全国免费观看| 日本vs亚洲vs韩国一区三区二区| 日韩精品中文字幕一区| 国产精品亚洲专一区二区三区 | 亚洲免费三区一区二区| 色婷婷av一区二区三区gif| 亚洲综合999| 日韩欧美中文字幕一区| 国产在线麻豆精品观看| 中文字幕在线一区| 欧美探花视频资源| 久久99国产精品久久| www精品美女久久久tv| 成人18视频在线播放| 亚洲高清免费观看高清完整版在线观看 | 中文字幕一区二区三区色视频| 91国产精品成人| 麻豆国产精品777777在线| 欧美国产一区视频在线观看| 92精品国产成人观看免费| 偷拍日韩校园综合在线| 久久五月婷婷丁香社区| 91丨porny丨最新| 日本vs亚洲vs韩国一区三区| 国产女同性恋一区二区| 欧美日韩国产大片| 国产iv一区二区三区| 一区二区三区不卡视频在线观看| 69久久夜色精品国产69蝌蚪网| 国产麻豆视频一区二区| 亚洲午夜视频在线观看| 久久婷婷国产综合精品青草| 欧美亚洲国产一区在线观看网站| 国产精选一区二区三区| 亚洲国产精品尤物yw在线观看| 国产午夜精品一区二区三区视频 | 久久五月婷婷丁香社区| 欧美午夜一区二区三区 | 91视频在线看| 国产高清一区日本| 日本不卡视频在线观看| 亚洲综合丝袜美腿| 中文字幕成人av| 欧美不卡在线视频| 欧美视频一二三区| 色综合久久久久综合99| 国产成人在线免费观看| 久久成人久久鬼色| 午夜电影网亚洲视频| 一区二区三区欧美激情| **欧美大码日韩| 国产精品久久久久桃色tv| 国产午夜精品一区二区三区嫩草| 欧美日韩不卡一区二区| 色香色香欲天天天影视综合网| 国产宾馆实践打屁股91| 国产在线观看一区二区| 精品一区精品二区高清| 蜜桃av噜噜一区| 蓝色福利精品导航| 蜜桃91丨九色丨蝌蚪91桃色| 性欧美疯狂xxxxbbbb| 香蕉久久夜色精品国产使用方法 | 国产三级欧美三级日产三级99 | 99精品视频一区二区| 成人国产免费视频| 成人涩涩免费视频| 成人一道本在线| 国产99精品国产| 99久久精品国产一区| 色婷婷综合激情| 日本精品一级二级| 欧美三级资源在线| 欧美日韩亚洲国产综合| 69久久99精品久久久久婷婷 | 国产精品网站导航| 亚洲婷婷在线视频| 一区二区三区.www| 午夜av一区二区三区| 免费成人在线观看| 精品一区二区久久久| 丁香六月综合激情| 91免费版在线| 欧美日韩亚洲综合一区 | jizz一区二区| 欧洲一区在线观看| 欧美一区在线视频| 久久免费看少妇高潮| 国产精品国产三级国产a | 极品少妇xxxx精品少妇偷拍| 国产成人鲁色资源国产91色综| kk眼镜猥琐国模调教系列一区二区 | 国产精品一区二区三区99| 成人18视频日本| 欧美日韩精品欧美日韩精品一 | 岛国精品一区二区| 欧美三级三级三级爽爽爽| 日韩午夜av电影| 亚洲欧美日韩电影| 蜜桃视频一区二区三区| 波波电影院一区二区三区| 精品视频免费看| 久久久三级国产网站| 洋洋成人永久网站入口| 国产一区二区精品久久99| 欧美体内she精高潮| 国产亚洲一二三区| 亚洲综合色成人| 国产精品69毛片高清亚洲| 在线亚洲+欧美+日本专区| 久久毛片高清国产| 亚洲一区视频在线| 国产白丝精品91爽爽久久| 欧美一区二区日韩一区二区| 国产精品毛片久久久久久久| 久久国产视频网| 欧美日韩国产综合视频在线观看|