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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simple.c

?? linux device driver源碼
?? C
字號(hào):
/* * 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区免费在线观看| 亚洲图片激情小说| 日产欧产美韩系列久久99| 欧美日韩一区在线| 三级精品在线观看| 日韩欧美成人午夜| 国产91精品精华液一区二区三区| 日本一区二区三区四区 | 亚洲小说欧美激情另类| 色婷婷精品久久二区二区蜜臀av| 亚洲精品成a人| 欧美日韩一区二区欧美激情| 蜜臀av国产精品久久久久| 久久综合久久综合九色| 波多野结衣中文字幕一区| 国产精品国产三级国产三级人妇| 色婷婷av一区二区三区之一色屋| 亚洲二区在线观看| 精品久久免费看| 91热门视频在线观看| 偷窥少妇高潮呻吟av久久免费| 欧美一区二区三区在线观看视频 | 久久精品国产99| 久久久久亚洲综合| 91久久精品午夜一区二区| 三级在线观看一区二区| 久久色.com| 91久久久免费一区二区| 九色|91porny| 一区二区三区国产豹纹内裤在线 | 99国产精品久久久久久久久久久| 亚洲观看高清完整版在线观看| 日韩欧美电影在线| 91麻豆精品一区二区三区| 美女视频黄 久久| 国产精品美女久久久久aⅴ国产馆| 欧美色手机在线观看| 国模少妇一区二区三区| 亚洲精品国产成人久久av盗摄| 欧美成人伊人久久综合网| 91麻豆swag| 国内精品自线一区二区三区视频| 亚洲国产综合在线| 欧美激情一二三区| 日韩一区二区在线观看| 色系网站成人免费| 国产suv精品一区二区6| 奇米亚洲午夜久久精品| 国产精品成人一区二区三区夜夜夜| 制服丝袜在线91| 色综合久久九月婷婷色综合| 国内国产精品久久| 亚洲mv大片欧洲mv大片精品| 国产精品国产三级国产aⅴ中文| 欧美一区2区视频在线观看| 99久久伊人精品| 国产激情精品久久久第一区二区| 日日夜夜免费精品| 亚洲一区二区视频| 亚洲精品视频免费看| 国产丝袜美腿一区二区三区| 日韩精品一区二区三区老鸭窝| 欧美在线视频全部完| 99免费精品在线| jlzzjlzz欧美大全| 成人性色生活片免费看爆迷你毛片| 青青草国产精品亚洲专区无| 一区二区免费在线播放| 国产精品久久99| 国产精品情趣视频| 国产精品青草综合久久久久99| 久久久美女毛片| 久久久久国产精品免费免费搜索| 欧美成人女星排名| 精品噜噜噜噜久久久久久久久试看 | 蜜桃视频第一区免费观看| 亚洲一区二区3| 一区二区三区欧美视频| 亚洲精选一二三| 亚洲欧美一区二区三区孕妇| 国产精品第五页| 亚洲乱码国产乱码精品精的特点| 亚洲欧洲日产国产综合网| 中文字幕中文字幕一区| 综合在线观看色| 亚洲精品国久久99热| 亚洲精品日韩综合观看成人91| 亚洲精品成人在线| 亚洲国产精品欧美一二99 | 日日噜噜夜夜狠狠视频欧美人| 亚洲曰韩产成在线| 日韩精品免费视频人成| 午夜av区久久| 久久精品国产亚洲一区二区三区| 久草在线在线精品观看| 高清成人在线观看| 色播五月激情综合网| 欧美性欧美巨大黑白大战| 欧美电影一区二区| 精品国产三级电影在线观看| 国产人伦精品一区二区| 亚洲精品久久7777| 欧美aⅴ一区二区三区视频| 精品亚洲国产成人av制服丝袜| 国产激情91久久精品导航| 99精品黄色片免费大全| 91麻豆精品91久久久久同性| 欧美xxx久久| 中文字幕在线观看一区| 五月婷婷综合网| 国产中文字幕精品| 色呦呦国产精品| 欧美成人福利视频| 亚洲色图在线播放| 青青青伊人色综合久久| 成人国产精品视频| 91精品国产一区二区三区| 久久九九国产精品| 亚洲一区二区三区小说| 激情综合色综合久久综合| av午夜精品一区二区三区| 欧美丰满美乳xxx高潮www| 国产欧美日韩亚州综合 | 26uuu国产电影一区二区| 亚洲欧美日本韩国| 麻豆91免费看| 在线观看一区二区视频| 精品国产制服丝袜高跟| 亚洲一区在线视频| 成人性生交大片免费看视频在线| 777午夜精品视频在线播放| 成人免费小视频| 激情图区综合网| 欧美日韩一区二区三区不卡 | 中文字幕在线不卡| 免费人成精品欧美精品| 色综合夜色一区| 国产亚洲成aⅴ人片在线观看| 无码av免费一区二区三区试看| 99久久er热在这里只有精品15 | 欧美va日韩va| 一区二区国产视频| 成人性视频网站| 精品国精品国产尤物美女| 亚洲第一成年网| 91免费观看国产| 国产精品三级电影| 国产精品1区2区3区| 日韩一级二级三级精品视频| 一区二区成人在线视频| 成人黄色综合网站| 国产日韩成人精品| 国产原创一区二区| 日韩欧美精品三级| 日韩av一二三| 欧美一区二区三区白人| 亚洲成人资源在线| 欧美在线免费观看亚洲| 亚洲欧美日韩国产综合在线| 成人app网站| 国产精品美女久久久久久久久久久| 国产精品一区二区你懂的| 精品久久久久av影院| 麻豆成人免费电影| 精品免费视频一区二区| 激情国产一区二区| 久久这里只有精品6| 激情久久五月天| 国产日韩欧美在线一区| 国产精品亚洲成人| 国产日韩精品一区二区浪潮av| 国产成人av电影在线| 国产人成亚洲第一网站在线播放| 国产麻豆视频一区| 中文一区二区完整视频在线观看 | 99久久国产综合精品麻豆| 国产精品伦一区| 91免费精品国自产拍在线不卡 | 亚洲午夜成aⅴ人片| 欧美日韩国产三级| 久久99精品久久久久久久久久久久| 制服丝袜成人动漫| 国内外精品视频| 中文字幕一区二区三区在线不卡| 91丨国产丨九色丨pron| 一区二区三区四区国产精品| 精品视频一区 二区 三区| 日日欢夜夜爽一区| 久久久久久免费网| 91视频国产资源| 亚洲成人精品在线观看| 日韩女优电影在线观看| 国产精品18久久久久久vr| 中文字幕不卡的av| 91成人免费电影| 精品一区二区在线观看| 欧美韩国日本综合| 欧美日韩一级视频| 国产一区91精品张津瑜| 综合中文字幕亚洲|