wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2924|回復: 0
收起左側

linux驅動程序的數據結構

[復制鏈接]
ID:195628 發表于 2017-5-4 11:08 | 顯示全部樓層 |閱讀模式
一、linux驅動程序的數據結構

設備驅動程序實質上是提供一組供應用程序操作設備的接口函數。
各種設備由于功能不同,驅動程序提供的函數接口也不相同,但linux為了能夠統一管理,規定了linux下設備驅動程序必須使用統一的接口函數 file_operations 。
所以,一種設備的驅動程序主要內容就是提供這樣的一組file_operations接口函數。
那么,linux是如何管理種類繁多的設備驅動程序呢?

linux下設備大體分為塊設備和字符設備兩類。
內核中用2個全局數組存放這2類驅動程序。
#define MAX_CHRDEV   255
#define MAX_BLKDEV   255
struct device_struct {
    const char * name;
    struct file_operations * fops;
};
static struct device_struct chrdevs[MAX_CHRDEV];

static struct {
    const char *name;
    struct block_device_operations *bdops;
} blkdevs[MAX_BLKDEV];
//此處說明一下,struct block_device_operations是塊設備驅動程序內部的接口函數,上層文件系統還是通過struct file_operations訪問的。

哈哈,現在明白了吧?你的驅動程序調用 int register_chrdev(unsigned int major, const char * name, struct file_operations *fops) 就是將你提供的接口函數fops存放到chrdevs[MAX_CHRDEV]這個數組中,數組下標就是你的驅動的主設備號,數組內容包括驅動名稱和驅動接口函數,這樣,內核就能看到你的驅動程序了。BTW,如果你將major設為0,系統會自動給你分配一個空閑的主設備號。
那么?次設備號呢?別急,馬上就出現了:)
二、設備節點如何產生?

    驅動程序運行在內核空間,應用程序訪問驅動程序通常是通過系統調用文件系統接口函數的,也就是說,在linux下,和磁盤文件一樣,設備也是文件,只是他們的文件屬性不同而已,應用程序只能通過文件名來訪問設備的驅動程序。
所以,文件系統中必須要有一個代表你的設備的文件,應用程序才能訪問你的設備驅動程序。
    為了便于理解,我們可以將設備文件換個名字,叫做設備節點。
    設備節點在哪里?設備節點存在于你的文件系統中,通常在/dev目錄下,當然,你也可以在其它地方創建。一般說來,我們在制作文件系統映像時就已經將可能用到的設備節點都創建好了。
    你可以打開/dev目錄看一下,它下面的設備節點的數量會讓你吃驚的:)

       如何創建設備節點?。
你可以用mknod命令。如使用以下命令可以創建一個mtd4的字符設備節點。
Mknod  /dev/ mtd4  c MTD_CHAR_MAJOR  4

我們創建一個普通的磁盤文件,它的內容是我們寫入的數據。
那么設備節點的內容是什么?設備節點文件沒有數據,它的文件大小為0,它只有文件屬性,包括設備類型、主設備號、次設備號。
沒有別的了?對,就這些,沒別的了。

那設備節點和設備驅動程序是怎么聯系起來的啊?

三、應用程序是如何訪問設備驅動程序的?

舉個例子:我們要向nor flash的第四個分區的起始位置偏移512字節寫入100字節的數據。
我們是如何做的?主要程序片斷如下:
    fd = open(“/dev/mtd4”, O_RDWR);
    lseek (fd,512, SEEK_SET);
    write (fd , write_buffer, 100);
    close(fd);
上面的代碼比較簡單,但是似乎沒有看到我們的應用程序是如何調用到驅動程序的。
沒關系,接下來我將帶領你們走通這條道路。

應用程序調用Open函數,這是個系統調用函數,程序會進入內核空間調用sys_open函數。
在sys_open,首先會根據文件路徑“/dev/mtd4”找到這個文件節點,這部分工作是屬于VFS(虛擬文件系統)的。
“/dev/mtd4”的文件屬性是字符設備,于是sys_open會調用函數chrdev_open(),在這個函數里有一句話:
filp->f_op = get_chrfops(MAJOR(inode->i_rdev), MINOR(inode->i_rdev));
哈!看到了眉目吧!猜也能猜到啊,get_chrfops()里面一定會返回 chrdevs[major].fops的。
我們終于從文件系統走到驅動程序了,那么,接下來的事情就是可以理解的了。
Write()最終一定會調用到chrdevs[major].fops->write();
Read()最終一定會調用到chrdevs[major].fops->read();
各種驅動程序比較特殊的功能函數都可以通過ioctl()來得到調用。
而次設備號也會作為參數傳遞給你。
四、為什么要有設備文件系統?

從前面的章節,我們可以看到以主次設備號的形式管理設備驅動程序存在很大的缺點。
首先,設備節點的創建是獨立于內核的,是在建立文件系統時就把所有要用到的設備節點都創建好了的,通常我們不會去刻意刪除哪些節點,因為我們不知道系統將來會不會用到它們。由于每個設備節點代表唯一的主次設備號,所以每個可能存在的子設備都對應一個設備節點,可見,這樣的設備節點數量是很大的,這些數量龐大的設備節點都(文件)存在于存儲介質中,對文件系統的效率也是個影響。
其次,文件系統中存在哪些設備節點,并不代表內核中就有這種設備的驅動程序,也不代表系統中有這種設備,因為設備節點不是動態創建的,它是制作文件系統時建立的。因此,/dev目錄下的信息大多對我們是無用的,而且那么多的設備節點都平鋪在/dev目錄下,閱讀起來也不直觀。
最后,目前主次設備號都是用8位整數表示的,也就是說內核最多管理256種字符設備和256種塊設備。現在計算機外設種類越來越多,這樣的限制已經不夠了。

由于目前的主次設備號的管理形式有以上幾個缺點,linux內核小組在2.4版本以后加入了設備文件系統來改進這些缺點。
設備文件系統的思想就是想讓設備節點可以動態創建、刪除,這樣系統中有哪些設備驅動程序就可以一目了然;還要能夠把設備節點組織成一棵目錄樹,方便閱讀;最后,希望能夠擴大主次設備號的限制,不再限制在256種設備以內。
五、設備文件系統如何實現?

       要想在內核中方便的做到動態創建、刪除設備文件(在這里,我們把設備節點稱為設備文件會更恰當些),最自然的做法就是在RAM中創建一個文件系統,內核啟動時這個文件系統是空的,以后每加載一種設備驅動程序,就在這個文件系統中創建一個對應的設備文件;卸載設備驅動程序時,再刪除這個設備文件。而且,我們可以在這個文件系統中創建目錄,一類設備文件放在同一個目錄中,甚至把一種設備的多個子設備文件放在同一個目錄下,方便閱讀。
    在設備文件系統中,我們在注冊設備文件時可以把設備驅動程序的ops直接掛到設備文件的inode中,以后訪問驅動程序就可以擺脫主次設備號的限制了,不需要再訪問chrdev[]數組,這樣就突破了256種設備的限制。
    我們把設備文件系統mount到/dev目錄下,這樣,看起來跟以前的方案就很相似了,也方便老的應用程序的移植。

六、如何使用設備文件系統?

       以前我們寫驅動程序時要調用int register_chrdev(unsigned int major, const char * name, struct file_operations *fops)將你提供的接口函數fops存放到chrdevs[MAX_CHRDEV]這個數組中,然后在文件系統中用mknod創建有相同主設備號的設備節點就可以了。
    那么現在有了設備文件系統,我們的驅動程序該如何寫呢?
    很簡單,follow me!

1、調用devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name, void *info)創建設備文件所在的目錄。Dir是要創建目錄的父目錄句柄,如為NULL,就是設備文件系統的根目錄(/dev);最后一個參數info通常為NULL。
2、調用devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
                  unsigned int flags,
                  unsigned int major, unsigned int minor,
                  umode_t mode, void *ops, void *info)
注冊具體的設備,并在指定目錄下創建子設備節點。
這里的dir目錄名是要創建的設備文件所在的目錄名,目錄名一般不能為NULL,因為子設備文件名name通常是以0、1、2、3等數字命名的,會和其它設備文件沖突。
    3、卸載驅動程序時調用void devfs_unregister (devfs_handle_t de)刪除創建的目錄和子設備文件。

七、具體設備驅動程序分析

       這節以mtdchar設備驅動程序來具體分析驅動程序的寫法。
    Mtdchar字符設備是管理flash驅動程序的,是各種flash驅動程序的抽象層。
    Mtdchar的主程序是driver/mtd/mtdchar.c;

1、驅動程序初始化時,要注冊設備節點,創建子設備文件

驅動程序為了兼容以前的方案,通常會既注冊設備節點,又創建子設備文件,這樣不管內核支持不支持設備文件系統,驅動程序都可以工作。

static int __init init_mtdchar(void)
{
    //為了兼容以前的方案,要注冊mtdchar的主設備號、設備名以及fops
    if (register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops))
{
       printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n",
              MTD_CHAR_MAJOR);
       return -EAGAIN;
    }

    //如果內核支持設備文件系統,在這個函數里會創建子設備文件。
    mtdchar_devfs_init();
    return 0;
}

static inline void mtdchar_devfs_init(void)
{
    //創建設備節點的父目錄,/dev/mtd/
    devfs_dir_handle = devfs_mk_dir(NULL, "mtd", NULL);
    //在這個函數里會調用devfs_register()創建子設備
    register_mtd_user(¬ifier);
}


notifier定義如下,主要是提供創建和刪除子設備文件的接口函數

static struct mtd_notifier notifier = {
    .add   = mtd_notify_add,        //創建一個子設備
    .remove    = mtd_notify_remove, //刪除一個子設備
};
static void mtd_notify_add(struct mtd_info* mtd)
{
    char name[8];

    if (!mtd)
       return;
    // mtd是一個子設備,代表flash上的一個邏輯分區
    sprintf(name, "%d", mtd->index);
    //這里調用devfs_register創建子設備文件,如/dev/mtd/0
    devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
           DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2,
           S_IFCHR | S_IRUGO | S_IWUGO,
           &mtd_fops, NULL);

    //下面注冊的是只讀子設備,無關緊要。
    sprintf(name, "%dro", mtd->index);
    //創建只讀子設備,如 /dev/mtd/0ro
    devfs_ro_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
           DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2+1,
           S_IFCHR | S_IRUGO,
           &mtd_fops, NULL);
}

static void mtd_notify_remove(struct mtd_info* mtd)
{
    if (!mtd)
       return;
    //刪除mtdchar子設備文件和mtdchar子設備文件
    devfs_unregister(devfs_rw_handle[mtd->index]);
    devfs_unregister(devfs_ro_handle[mtd->index]);
}

mtd驅動程序中會將一片flash劃分為多個邏輯分區,這樣的每個邏輯分區也可以被看做是一個子設備,具體flash驅動程序添加邏輯分區時會在數組mtd_table[]中記錄分區的位置和大小。

void register_mtd_user (struct mtd_notifier *new)
{
    int i;

    down(&mtd_table_mutex);
    list_add(&new->list, &mtd_notifiers);
    __module_get(THIS_MODULE);

    // mtd_table[]是個全局數組,每個元素都是一個邏輯分區,記錄著分區的起始位置和大小,我們將每個邏輯分區創建為一個單獨的mtd子設備文件
    for (i=0; i< MAX_MTD_DEVICES; i++)
       if (mtd_table)
           new->add(mtd_table);

    up(&mtd_table_mutex);
}

2、驅動程序卸載時要注銷設備節點,刪除設備文件

static void __exit cleanup_mtdchar(void)
{
    mtdchar_devfs_exit();
    //注銷chrdevs[major]
    unregister_chrdev(MTD_CHAR_MAJOR, "mtd");
}


static inline void mtdchar_devfs_exit(void)
{
    //在這個函數里會調用devfs_unregister()刪除子設備
    unregister_mtd_user(¬ifier);
    //刪除父目錄
    devfs_unregister(devfs_dir_handle);
}



int unregister_mtd_user (struct mtd_notifier *old)
{
    int i;

    down(&mtd_table_mutex);

    module_put(THIS_MODULE);

    for (i=0; i< MAX_MTD_DEVICES; i++)
     if (mtd_table)
           old->remove(mtd_table);

    list_del(&old->list);
    up(&mtd_table_mutex);
    return 0;
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
免费福利电影| 激情综合网五月| 欧美人与z0zoxxxx特| 天天操天天干天天操天天干| 日本免费高清一区二区| 中文字幕精品—区二区| 亚洲国产综合91精品麻豆| 亚洲成色精品| 清纯唯美激情亚洲| 精品美女在线观看视频在线观看 | 久久最新免费视频| 91黄色8090| 欧美一区二区视频网站| 99riav一区二区三区| 五月婷婷亚洲| 经典三级一区二区| 97色伦图片97色伦在线电影| 天堂中文在线看| 欧美成人手机视频| 色婷婷综合网站| 欧美日韩综合网| 国产精品久久久久久久久男| 亚洲精品在线免费播放| 中文字幕一区二区5566日韩| 国内精品国产三级国产a久久| 综合干狼人综合首页| 精品丝袜在线| 亚洲精品套图| 91九色网站| 亚洲第一第二区| 成年人视频在线免费看| 久久偷拍免费视频| 久久久久久久久久久99| 女同一区二区| 欧洲永久精品大片ww免费漫画| 精品sm在线观看| 欧美日韩在线视频一区二区| 久久精品一区蜜桃臀影院| 亚洲毛片视频| 热久久天天拍国产| 色8久久影院午夜场| 永久av在线| 精品女厕厕露p撒尿| 揉丰满老妇老女人的毛片| www.天堂在线| 国产午夜免费福利| 全黄一级裸体片| 国产原创精品在线| 永久免费网站视频在线观看| 精品综合在线| 国产精品一二区| 欧美福利视频网站| 综合av色偷偷网| 欧美一区国产二区| 91福利精品视频| 精品国产31久久久久久| 一个色在线综合| 久久久久免费观看| 99精品国产91久久久久久| 国产a精品视频| 国产精品亚洲а∨天堂免在线| 麻豆精品91| 久久精品官网| 日本伊人色综合网| 免费在线观看精品| 精品一区二区三区免费视频| 久久精品噜噜噜成人av农村| 黄色成人在线网| 九色网友自拍视频手机在线| 头脑特工队2免费完整版在线观看| 领导边摸边吃奶边做爽在线观看 | 精品国产视频在线| 日韩中文字幕视频在线观看| 日韩中文字幕在线观看| 久久精品国产清自在天天线| 欧美精品少妇videofree| 久久精品亚洲一区| 欧美成人精品激情在线观看| 久久国产精品久久久久| 久久手机免费视频| www.欧美免费| 欧美夫妻性生活xx| 欧美成人免费全部| 97色在线视频观看| 欧美在线欧美在线| 国产精品99久久99久久久二8| 97国产在线视频| 欧美在线精品免播放器视频| 国产成人福利视频| 国产精品1234| 国产日韩欧美中文| 成人春色激情网| av成人综合网| 欧美日韩国产综合视频在线| 日韩成人在线资源| 亚洲精品国产精品国自产| 国产盗摄视频在线观看| 亚洲永久激情精品| 日韩成人手机在线| 天天视频天天爽| 极品白嫩的小少妇| 泷泽萝拉在线播放| 成年人视频软件| 天天看片中文字幕| 影音先锋亚洲天堂| 亚洲一区在线观| 日韩一级在线播放| 国产三级做爰高清在线| 黄色电影在线免费观看| 久草电影在线| 尤物网址在线观看| 欧美aa免费在线| 色噜噜成人av在线| 欧美艳星介绍134位艳星| 国产精品99久久久久久动医院| 影音先锋亚洲电影| 国产精品一区二区三区99| 91麻豆国产在线观看| 国产精品久久久久久久久晋中| 亚洲成a人片在线不卡一二三区| 欧美一级高清大全免费观看| 亚洲欧美一区二区三区久久| 欧美一区二区三区艳史| 亚洲综合色激情五月| 亚洲精品中文字幕在线| 日本黄色三级大片| 欧美xxxxx精品| 久久亚洲天堂网| www.xxx国产| 91网站免费| 青青草视频免费在线观看| 日日夜夜天天综合入口| 福利精品在线| 婷婷精品进入| 国产高清视频一区| 亚洲丝袜美腿综合| 日韩三级视频在线观看| 久久久久久久香蕉网| 成人国产1314www色视频| 9色视频在线观看| 永久看看免费大片| 国产suv一区二区三区| 国产裸体美女永久免费无遮挡| 综合图区欧美| 久草在线资源视频在线观看| 成人午夜视屏| 影视亚洲一区二区三区| 99视频热这里只有精品免费| 欧美日韩亚洲综合在线| 久久久亚洲国产天美传媒修理工| 免费观看成人高| 污视频网址在线观看| 91蜜桃视频在线观看| 精品国语对白精品自拍视| 激情在线视频| 香蕉久久99| 国产福利一区二区三区视频在线 | 美女视频一区在线观看| 亚洲午夜视频在线观看| 国产亚洲成av人片在线观看桃| 亚洲综合色激情五月| 一区二区三区视频在线观看免费| 国产对白videos麻豆高潮| 热99精品视频| 国产激情在线| 香蕉精品视频在线观看| 国产精品女主播av| 在线视频精品一| 蜜桃精品久久久久久久免费影院| 婷婷五月精品中文字幕| 亚洲美女福利视频| 视频国产在线观看| 国产精品一线| 欧美极度另类| 精品动漫3d一区二区三区免费| 中文字幕在线不卡国产视频| 色香阁99久久精品久久久| 欧美伦理一区二区| 在哪里可以看毛片| 四虎精品视频| 91视频欧美| 国产精品久久久亚洲一区| 亚瑟在线精品视频| 欧美一级电影久久| 日本一本二本在线观看| 日本熟妇一区二区三区| 免费观看一二区视频网站| 一区二区三区视频免费视频观看网站 | 亚洲一二三区视频在线观看| 久久成人这里只有精品| 一级黄色片播放| 永久免费看黄网站| h视频在线观看免费完整版| 日韩av超清在线观看| 久久99久久99| 精品国产一区二区三区忘忧草| 国产视色精品亚洲一区二区| 国产成人无码一区二区在线观看| 男人操女人在线观看| 丁香花在线高清完整版视频| 亚洲美女一区| 欧美四级电影在线观看| 亚洲自拍偷拍一区| 人妻少妇无码精品视频区| 国产亚洲第一的欧洲日产| 久久电影tv| 国产精品1024久久| 国产亚洲在线播放| 国产美女作爱全过程免费视频| 日日骚av一区二区| 亚洲aⅴ优女av综合久久久| 999成人网| 欧美性xxxx18| 国模精品娜娜一二三区| 丁香花五月激情| 日韩黄色动漫| 亚洲xxx拳头交| 欧洲精品一区二区| 欧美精品v日韩精品v国产精品| 亚洲精品久久久久久国| 黑粗硬长欧美在线视频免费的| 五月天亚洲一区| 五月婷婷综合网| 丁香婷婷久久久综合精品国产| 日韩精品电影一区二区三区| 色偷偷亚洲第一综合| 精品久久网站| 欧美日韩免费不卡视频一区二区三区| 精品欧美一区二区久久久伦| 国产精彩视频在线| 国产精品久久久久一区二区国产 | 亚洲最大在线| 欧美日韩国产页| 久草热久草热线频97精品| 国产亚洲成人av| 久久天堂电影| 日本中文字幕一区二区视频| 亚洲欧美www| 国产成人久久婷婷精品流白浆| 无码精品人妻一区二区三区影院| 国产毛片毛片毛片毛片| 国产美女在线观看| 国产九色精品成人porny| 久久久精品国产一区二区| 国产无遮挡猛进猛出免费软件| 精品一区二区三区在线观看l| 亚洲免费一区| 一区二区三区精品| 国外成人免费视频| 一区二区三区在线观看av| 日韩电影免费观看| 91免费视频网| 国产免费一区二区三区在线能观看| 我要看黄色一级片| 理论在线观看| 丁香一区二区三区| 日韩免费观看在线观看| a级黄色免费视频| 欧美挠脚心网站| 国产一区二区福利| 热99精品里视频精品| 男人与禽猛交狂配| 粗大黑人巨茎大战欧美成人| 成人av在线一区二区| 国产福利视频一区二区| 丝袜美腿小色网| 一区二区高清不卡| 91麻豆国产福利在线观看| 91日本视频在线| 69av视频在线观看| 亚洲四虎影院| 狠狠久久五月精品中文字幕| 男女激烈动态图| 欧美性xxxx巨大黑人猛| 国产不卡一区| 亚洲精品mp4| 操人视频免费看| 1024在线视频| 国产一区二区看久久| 91精品久久久久久久久中文字幕| wwwwww国产| 国产91在线精品| 在线精品国精品国产尤物884a| 欧美一区二区视频在线播放| 国产精品视频第一区二区三区| 中文字幕亚洲精品乱码| 久久久精品国产网站| 日韩精品123区| 91视频欧美| 亚洲高清三级视频| 久久精品无码中文字幕| 91视频在线| 国产欧美日韩综合一区在线播放| 欧美俄罗斯性视频| 国产亚洲欧美精品久久久www | 蜜桃视频免费网站| 国产精品一区一区| 91情侣偷在线精品国产| aaa一区二区三区| 日韩成人一级| 亚洲欧美一区二区三区久久 | 女人被爽到呻吟gif动态图下载| 美女一区二区视频| 国产日韩精品在线观看| 国产农村老头老太视频| 亚洲va久久久噜噜噜久久| 国产视频欧美视频| mm131美女视频| 男女视频在线| 色综合中文综合网| jizzzz日本| 久久电影中文字幕| 一区视频在线播放| 无码人妻精品一区二区蜜桃百度| 两个人日本在线观看视频| 美女在线视频一区| 国产精品区一区二区三在线播放| 亚洲av成人精品日韩在线播放| 亚洲九九视频| 538国产精品一区二区免费视频| 久久久久久av无码免费看大片| 秋霞综合在线视频| 精品国产一区二区三区久久狼5月| 国产主播在线播放| 国产亚洲精aa在线看| 亚洲欧美一区二区三区久久| 三级全黄做爰视频| 四虎精品在线观看| 日韩av在线免费观看一区| 午夜激情视频在线播放| 亚洲成人一区在线观看| 日韩欧美国产一区二区在线播放 | 久热久精久品这里在线观看| 久久久精品欧美丰满| 秋霞在线一区二区| 免费免费啪视频在线观看| 欧美激情一区三区| 久色视频在线播放| 中文字幕日韩第一页| 日日天天久久| 97国产精品视频人人做人人爱| 国产精品国产精品国产专区| 大片网站久久| 欧美福利视频在线| 国产视频在线观看免费| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 精品人妻伦九区久久aaa片| 欧洲av一区二区| 精品一区二区电影| 四虎免费在线视频| av综合网址| 久久久久久国产精品三级玉女聊斋 | 国产香蕉成人综合精品视频| 日本美女一区二区三区| 久久99精品久久久久久久久久| xxx在线视频| 91麻豆成人久久精品二区三区| 日本xxxxxxxxxx75| sese一区| 在线精品亚洲一区二区不卡| 99精品欧美一区二区| 日韩精品视频中文字幕| 裸体女人亚洲精品一区| 在线观看中文字幕2021| 99久久亚洲精品| 国产啪精品视频网站| 国产免费一级片| 91在线视频播放地址| 天堂8在线天堂资源bt| 免费a在线观看| 欧美日韩一区二区在线观看视频 | 色视频在线免费| 91色.com| 不用播放器的免费av| 天堂√8在线中文| 欧美精品一区二区不卡 | 老司机午夜性大片| 正在播放日韩精品| 中文字幕9999| www.黄色片| 国产精品一区一区三区| 97在线国产视频| 日韩欧美一起| 亚洲欧美在线看| 国产精品无码在线播放| 在线一区视频| 亚洲高清视频一区二区| 少妇激情av一区二区| 欧美久久久一区| 久久99久久99精品免费看小说| 天海翼亚洲一区二区三区| 91在线视频精品| 天天综合天天| 色综合欧美在线| 91精品国产乱码久久久张津瑜| 欧美日韩天堂| 天堂√在线观看一区二区| 一二三在线视频社区| 91麻豆精品国产91久久久久久久久 | 在线成人国产|