日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux输入子系统框架

發布時間:2023/12/14 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux输入子系统框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸入子系統

自己寫的驅動程序,自己可以調用,我們自己寫驅動的流程一般是,建立fops結構,使用register_chrdev在初始化函數中進行注冊,在應用中使用open函數打開該設備。這種驅動不標準只能在公司內部,別人知道驅動用法的情況下才能使用,當我們使用QT等標準程序時,這類標準程序不能打開像我們這樣的野驅動,我們應該讓我們的驅動程序融入“標準”中去,linux提供的輸入子系統


輸入子系統分析

在input.c \drivers\input.c核心層可以分析輸入子系統源碼,首先看他的初始化函數

static int __init input_init(void) {int err;err = class_register(&input_class);if (err) {printk(KERN_ERR "input: unable to register input_dev class\n");return err;}err = input_proc_init();if (err)goto fail1;err = register_chrdev(INPUT_MAJOR, "input", &input_fops);if (err) {printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);goto fail2;}return 0;fail2: input_proc_exit();fail1: class_unregister(&input_class);return err; }

在初始化函數中我們可以看出這只是執行了一個普通的字符設備注冊過程,創建了一個input類,在該類下并沒有創建具體設備,其余沒有什么特別。在字符設備注冊時的操作函數集合中只有一個open函數,直觀上看一個open函數并不能執行read等操作。那我們分析一下這個open函數究竟做了些什么:

static const struct file_operations input_fops = {.owner = THIS_MODULE,.open = input_open_file, };

那我們分析一下這個open函數做了些什么

static int input_open_file(struct inode *inode, struct file *file) {struct input_handler *handler = input_table[iminor(inode) >> 5];const struct file_operations *old_fops, *new_fops = NULL;int err;/* No load-on-demand here? */if (!handler || !(new_fops = fops_get(handler->fops))) return -ENODEV;/** That's _really_ odd. Usually NULL ->open means "nothing special",* not "no device". Oh, well...*/if (!new_fops->open) {fops_put(new_fops); return -ENODEV;}old_fops = file->f_op;file->f_op = new_fops;err = new_fops->open(inode, file);if (err) {fops_put(file->f_op);file->f_op = fops_get(old_fops);}fops_put(old_fops); return err; }

(1)其中iminor(inode)函數調用了MINOR(inode->i_rdev);讀取子設備號,然后將子設備除以32,找到新掛載的input驅動的數組號,然后放在input_handler 驅動處理函數handler中,輸入子系統支持的設備大類就那么幾項,每項支持最多32個設備,除32意味著可將在這32區段的設備都能準確定位到自己對應大類上,這些設備都可以使用對應大類的公共fops ,(例如:輸入子系統的事件設備evdev,次設備號起始位置為64,之后32個設備都屬于evdev設備,input_table[iminor(inode) >> 5],次設備號64~95的設備都對應input_table[2],這個數組位置指向的是evdev的handler,這個區段內設備的fops,在這個函數中都會指向evdev設備共用的fops,這樣以來不用驅動編寫者自己編寫fops,直接使用該設備類型下別人寫出的fops即可)
(2)若handler有值,說明掛載有這個驅動,就將handler結構體里的成員file_operations * fops賦到新的file_operations *new_fops里面
(3)再將新的file_operations *new_fops賦到file-> file_operations *f_op里, 此時input子系統的file_operations就等于新掛載的input驅動的file_operations結構體,實現一個偷天換日的效果.
(4)然后調用新掛載的input驅動的*old_fops里面的成員.open函數,打開驅動open函數

這里需要說明:除以32的意義,linux輸入子系統,作為將輸入設備標準化處理的一種方式,使別人使用這類驅動時不必關心驅動細節即可使用,輸入設備分為好多類型,鍵盤類、鼠標類、觸摸屏類等等,linux將輸入子系統設備主設備定為13,次設備號以32為間隔細分了幾大類,例如事件設備evdev,屬于次設備號為64起始向后32個成員都屬于事件設備分段,64-95這些設備都屬于事件設備,這些設備次設備號除以32結果都是2,在調用驅動操作時他們都可以使用事件設備提供的fops,從而不用驅動編寫者自己編寫fops,大大提高了驅動易用性
分析:
struct input_handler *handler = input_table[iminor(inode) >> 5];將傳入的節點的次設備號除32放入input_table數組中,并將其賦值給handle,創建文件操作結構體new_fops,并將其用剛剛傳入節點的fops初始化,實現復制,這里input_table首次出現,那么它由誰構造,怎么初始化的呢:全局搜索一下

int input_register_handler(struct input_handler *handler) {struct input_dev *dev;INIT_LIST_HEAD(&handler->h_list);//判斷傳進來的文件操作結合不是空的進行進一步操作if (handler->fops != NULL) {//如果分配的位置已經有值不為空,說明此位置已經被占用,返回EBUSYif (input_table[handler->minor >> 5])return -EBUSY;// 將 handler 放入 input_table數組,數組序號為次設備號/32input_table[handler->minor >> 5] = handler;}// 將 handler 放入 input_handler_list 鏈表list_add_tail(&handler->node, &input_handler_list);// 取出 input_dev_list 鏈表中的每一個 dev 與 該 handler 進行 比對list_for_each_entry(dev, &input_dev_list, node)input_attach_handler(dev, handler);input_wakeup_procfs_readers();return 0; }

全局搜索input_register_handler被誰調用:搜索結果如下:

---- input_register_handler Matches (10 in 9 files) ---- evbug_init in evbug.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) : return input_register_handler(&evbug_handler); evdev_init in evdev.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) : return input_register_handler(&evdev_handler); input.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) line 1182 : int input_register_handler(struct input_handler *handler) input.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) line 1203 : EXPORT_SYMBOL(input_register_handler); input.h (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\include\linux) line 1130 : int input_register_handler(struct input_handler *); joydev_init in joydev.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) : return input_register_handler(&joydev_handler); kbd_init in keyboard.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\char) : error = input_register_handler(&kbd_handler); mousedev_init in mousedev.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) : error = input_register_handler(&mousedev_handler); rfkill_handler_init in rfkill-input.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\net\rfkill) : return input_register_handler(&rfkill_handler); tsdev_init in tsdev.c (F:\SourceInsightProj\JZ2440_2.6\linux-2.6.22.6\drivers\input) : return input_register_handler(&tsdev_handler);

我們可以看到在evdev.c joydev.c mousedev.c等等都通過input_register_handler向核心層注冊自己的結構,分析其中一個evdev.c,在其入口函數中:

static int __init evdev_init(void) {return input_register_handler(&evdev_handler); }

看看evdev_handler這個結構體是怎樣定義的:

static struct input_handler evdev_handler = {.event = evdev_event,//.connect:連接函數,將設備input_dev和某個input_handler建立連接.connect = evdev_connect,.disconnect = evdev_disconnect,//.fops:文件操作結構體,其中evdev_fops函數就是自己的寫的操作函數,然后賦到.fops.fops = &evdev_fops,//.minor:用來存放次設備號/*其中EVDEV_MINOR_BASE=64, 然后調用input_register_handler(&evdev_handler)后,由于EVDEV_MINOR_BASE/32=2,所以存到input_table[2]中,所以當open打開這個input設備,就會進入 input_open_file()函數,執行evdev_handler-> evdev_fops -> .open函數*/.minor = EVDEV_MINOR_BASE,.name = "evdev",/*.id_table : 表示能支持哪些輸入設備,比如某個驅動設備的input_dev->的id和某個input_handler的id_table相匹配,就會調用.connect連接函數*/.id_table = evdev_ids,}; static const struct file_operations evdev_fops = {.owner = THIS_MODULE,.read = evdev_read,.write = evdev_write,.poll = evdev_poll,.open = evdev_open,.release = evdev_release,.unlocked_ioctl = evdev_ioctl, #ifdef CONFIG_COMPAT.compat_ioctl = evdev_ioctl_compat, #endif.fasync = evdev_fasync,.flush = evdev_flush,.llseek = no_llseek, };

input_register_device()函數,如何創建驅動設備的

int input_register_device(struct input_dev *dev) //*dev:要注冊的驅動設備 {... ...list_add_tail(&dev->node, &input_dev_list); //(1)放入鏈表中... ...list_for_each_entry(handler, &input_handler_list, node) //(2)input_attach_handler(dev, handler); ... ... }

(1)將要注冊的input_dev驅動設備放在input_dev_list鏈表中
(2)其中input_handler_list在前面講過,就是存放每個input_handle驅動處理結構體,然后list_for_each_entry()函數會將每個input_handle從鏈表中取出,放到handler中,最后會調用input_attach_handler()函數,將每個input_handle的id_table進行判斷,若兩者支持便進行連接。

然后我們在回過頭來看注冊input_handler的input_register_handler()函數

int input_register_handler(struct input_handler *handler) {struct input_dev *dev;int retval;retval = mutex_lock_interruptible(&input_mutex);if (retval)return retval;INIT_LIST_HEAD(&handler->h_list);if (handler->fops != NULL) {if (input_table[handler->minor >> 5]) {retval = -EBUSY;goto out;}input_table[handler->minor >> 5] = handler;}list_add_tail(&handler->node, &input_handler_list);list_for_each_entry(dev, &input_dev_list, node)//在設備列表中找出設備結構體input_attach_handler(dev, handler);//設備結構體中的id與handler中的id進行匹配input_wakeup_procfs_readers();out:mutex_unlock(&input_mutex);return retval; }

所以,不管新添加input_dev還是input_handler,都會進入input_attach_handler()判斷兩者id是否有支持, 若兩者支持便進行連接

我們來看看input_attach_handler()如何實現匹配兩者id的:

static int input_attach_handler(struct input_dev *dev, struct input_handler *handler) { ... ... id = input_match_device(handler->id_table, dev); //匹配兩者if (!id) //若不匹配,return退出 return -ENODEV; error = handler->connect(handler, dev, id); //調用input_handler ->connect函數建立連接 ... ... }

若兩者匹配成功,就會自動進入input_handler 的connect函數建立連接

我們還是以evdev.c(事件驅動) 的evdev_handler->connect函數來分析是怎樣建立連接的

evdev_handler的.connect函數是evdev_connect(),代碼如下:

static int evdev_connect(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id) { ... ... for (minor = 0; minor < EVDEV_MINORS && evdev_table[minor]; minor++); //查找驅動設備的子設備號if (minor == EVDEV_MINORS) { // EVDEV_MINORS=32,所以該事件下的驅動設備最多存32個,printk(KERN_ERR "evdev: no more free evdev devices\n");return -ENFILE; //沒找到驅動設備}... ...evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL); //分配一個input_handle全局結構體(沒有r)... ...evdev->handle.dev = dev; //指向參數input_dev驅動設備 evdev->handle.name = evdev->name; evdev->handle.handler = handler; //指向參數 input_handler驅動處理結構體 evdev->handle.private = evdev; sprintf(evdev->name, "event%d", minor); //(1)保存驅動設備名字, event%d ... ... devt = MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor), //(2) 將主設備號和次設備號轉換成dev_t類型 cdev = class_device_create(&input_class, &dev->cdev, devt,dev->cdev.dev, evdev->name); // (3)在input類下創建驅動設備... ... error = input_register_handle(&evdev->handle); //(4)注冊這個input_handle結構體... ... }

(1) 是在保存驅動設備名字,名為event%d, 因為沒有設置子設備號,默認從小到大排列,其中event0是表示這個input子系統,所以這個鍵盤驅動名字就是event1
(2)是在保存驅動設備的主次設備號,其中主設備號INPUT_MAJOR=13,因為EVDEV_MINOR_BASE=64,所以此設備號=64+驅動程序本事子設備號
(3)在之前在2小結里就分析了input_class類結構,會在/sys/class/input類下創建驅動設備event%d
(4)最終會進入input_register_handle()函數來注冊,代碼在下面

int input_register_handle(struct input_handle *handle) {struct input_handler *handler = handle->handler; //handler= input_handler驅動處理結構體 list_add_tail(&handle->d_node, &handle->dev->h_list); //(1)list_add_tail(&handle->h_node, &handler->h_list); // (2)if (handler->start)handler->start(handle);return 0; }

(1) 因為handle->dev指向input_dev驅動設備,所以就是將handle->d_node放入到input_dev驅動設備的h_list鏈表中,即input_dev驅動設備的h_list鏈表就指向handle->d_node
(2) 同樣, input_handler驅動處理結構體的h_list也指向了handle->h_node,兩者的.h_list都指向了同一個handle結構體,然后通過.h_list 來找到handle的成員.dev和handler,便能找到對方,便建立了連接

建立了連接后,又如何讀取evdev.c(事件驅動) 的evdev_handler->.fops->.read函數

事件驅動的.read函數是evdev_read()函數,我們來分析下

static ssize_t evdev_read(struct file *file, char __user * buffer, size_t count, loff_t *ppos) {... ... /*判斷應用層要讀取的數據是否正確*/ if (count < evdev_event_size()) return -EINVAL;/*在非阻塞操作情況下,若client->head == client->tail|| evdev->exist時(沒有數據),則return返回*/if (client->head == client->tail && evdev->exist && (file->f_flags & O_NONBLOCK)) return -EAGAIN;/*若client->head == client->tail|| evdev->exist時(沒有數據),等待中斷進入睡眠狀態 */retval = wait_event_interruptible(evdev->wait,client->head != client->tail || !evdev->exist);... ... //上傳數據 }

若read函數進入了休眠狀態,又是誰來喚醒

我們搜索這個evdev->wait這個等待隊列變量,找到evdev_event函數里喚醒:

static void evdev_event(struct input_handle *handle, unsigned int type, unsigned int code, int value) { ... ...wake_up_interruptible(&evdev->wait); //有事件觸發,便喚醒等待中斷 }

其中evdev_event()是evdev.c(事件驅動)的evdev_handler->.event成員,當有事件發生了,比如對于按鍵驅動,當有按鍵按下時,就會進入.event函數中處理事件

分析下,是誰調用evdev_event()這個.event事件驅動函數

應該就是之前分析的input_dev那層調用的,我們來看看內核 gpio_keys_isr()函數代碼例子就知道了(driver/input/keyboard/gpio_key.c)

static irqreturn_t gpio_keys_isr(int irq, void *dev_id) {/*獲取按鍵值,賦到state里*/... ... /*上報事件*/ input_event(input, type, button->code, !!state); input_sync(input); //同步信號通知,表示事件發送完畢 }

顯然就是通過input_event()來調用.event事件函數,我們來看看:

void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct input_handle *handle; ... .../* 通過input_dev ->h_list鏈表找到input_handle驅動處理結構體*/ list_for_each_entry(handle, &dev->h_list, d_node) if (handle->open) //如果input_handle之前open 過,那么這個就是我們的驅動處理結構體handle->handler->event(handle, type, code, value); //調用evdev_event()的.event事件函數 }

若之前驅動input_dev和處理input_handler已經通過input_handler的.connect函數建立起了連接,那么就調用evdev_event()的.event事件函數


本節總結分析:

1.注冊輸入子系統,進入put_init():
1)創建主設備號為13的”input“字符設備
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);


2.open打開驅動,進入input_open_file():
1)更新設備的file_oprations
file->f_op=fops_get(handler->fops);
2)執行file_oprations->open函數
err = new_fops->open(inode, file);


3.注冊input_handler,進入input_register_handler():
1)添加到input_table[]處理數組中
input_table[handler->minor >> 5] = handler;
2)添加到input_handler_list鏈表中
list_add_tail(&handler->node, &input_handler_list);
3)判斷input_dev的id,是否有支持這個驅動的設備 list_for_each_entry(dev, &input_dev_list, node) //遍歷查找input_dev_list鏈表里所有input_dev
input_attach_handler(dev, handler); //判斷兩者id,若兩者支持便進行連接。


4.注冊input_dev,進入input_register_device():
1)放在input_dev_list鏈表中
list_add_tail(&dev->node, &input_dev_list);
2)判斷input_handler的id,是否有支持這個設備的驅動
list_for_each_entry(handler, &input_handler_list, node) //遍歷查找input_handler_list鏈表里所有input_handler
input_attach_handler(dev, handler); //判斷兩者id,若兩者支持便進行連接。


5.判斷input_handler和input_dev的id,進入input_attach_handler():
1)匹配兩者id,
input_match_device(handler->id_table, dev); //匹配input_handler和dev的id,不成功退出函數
2)匹配成功調用input_handler ->connect
handler->connect(handler, dev, id); //建立連接


6.建立input_handler和input_dev的連接,進入input_handler->connect():
1)創建全局結構體,通過input_handle結構體連接雙方
evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL); //創建兩者連接的input_handle全局結構體
list_add_tail(&handle->d_node, &handle->dev->h_list); //連接input_dev->h_list
list_add_tail(&handle->h_node, &handler->h_list); // 連接input_handle->h_list


7.有事件發生時,比如按鍵中斷,在中斷函數中需要進入input_event()上報事件:
1)找到驅動處理結構體,然后執行input_handler->event()
list_for_each_entry(handle, &dev->h_list, d_node) // 通過input_dev ->h_list鏈表找到input_handle驅動處理結構體
if (handle->open) //如果input_handle之前open 過,那么這個就是我們的驅動處理結構體(有可能一個驅動設備在不同情況下有不同的驅動處理方式)
handle->handler->event(handle, type, code, value); //調用evdev_event()的.event事件函數

參考鏈接:http://www.cnblogs.com/lifexy/p/7542989.html
http://www.cnblogs.com/lifexy/p/7553861.html

總結

以上是生活随笔為你收集整理的Linux输入子系统框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久在草 | 在线观看片 | 911国产| 久久久亚洲精华液 | www.久艹| 黄在线免费看 | 免费三及片 | 男女拍拍免费视频 | 少妇bbr搡bbb搡bbb | 日本精品久久久久影院 | 久久视频网 | 久久成人精品 | 992tv成人免费看片 | 国产又粗又猛又爽又黄的视频先 | 91视频在线免费 | 1区2区3区在线观看 三级动图 | 久久久影院官网 | 天天艹天天干天天 | 黄色一及电影 | 日日爱999| 免费v片 | 午夜精品一区二区三区免费 | 日韩激情免费视频 | 欧美激情片在线观看 | 又黄又爽的视频在线观看网站 | 国产精品12345| 成人精品久久 | 久久综合一本 | 中文字幕高清av | 超碰在线最新 | 黄色app网站在线观看 | 丁香六月婷婷综合 | 精品久久久成人 | 91看片淫黄大片一级在线观看 | 日本天天操 | 天天操夜操视频 | 国产视频一区精品 | 一级黄色大片在线观看 | 精品国产福利在线 | 视频二区在线 | 成人免费影院 | 久久精品官网 | 国产精品wwwwww | 精品国产乱码久久久久久1区二区 | 中文字幕麻豆 | 久久综合狠狠综合久久狠狠色综合 | 国精产品999国精产品岳 | 欧美一区二视频在线免费观看 | 五月宗合网 | 成人羞羞免费 | 成人欧美一区二区三区在线观看 | 国产视频精品免费播放 | 夜色.com | 欧美久久久久久久久久久久久 | 99精品视频在线 | 久久99深爱久久99精品 | 亚洲人成人天堂h久久 | 日韩精品在线一区 | 日韩精品一区二区电影 | 日韩中文字幕在线看 | 999在线精品 | av在线免费观看不卡 | 视频一区在线免费观看 | 天无日天天操天天干 | 国产精品18久久久久久久久 | 蜜桃麻豆www久久囤产精品 | 天天综合人人 | 99精品影视 | 亚洲乱码国产乱码精品天美传媒 | 成人影片免费 | 肉色欧美久久久久久久免费看 | 国产亚州精品视频 | 99视频网址| 免费在线观看毛片网站 | 免费精品在线观看 | 欧美成a人片在线观看久 | 青青河边草免费直播 | 综合久久精品 | 亚洲视频免费在线看 | 黄色av免费电影 | 亚洲午夜电影网 | 国产91aaa| 在线一区电影 | 91香蕉视频污在线 | 国产成人精品综合久久久久99 | 奇米影视四色8888 | 成人99免费视频 | 亚洲国产精品第一区二区 | 精品影院一区二区久久久 | 欧美性色xo影院 | 免费观看一级一片 | 欧美另类成人 | av免费电影在线 | 91福利在线导航 | av片中文字幕 | 久久免费av电影 | 99国产精品久久久久久久久久 | 国产美女无遮挡永久免费 | 在线免费看片 | 亚洲免费小视频 | 国产精品久久久免费 | 最近中文字幕在线中文高清版 | 亚洲综合黄色 | 天天干,天天操,天天射 | 狠狠狠色| 国产精品久久久久久久久久直播 | 久久99国产精品久久 | 免费看三级黄色片 | 国产中文a | 欧美一区二视频在线免费观看 | 欧美激情视频一二区 | 中文在线免费观看 | 粉嫩高清一区二区三区 | 国产一性一爱一乱一交 | 国产精品免费视频网站 | 夜色资源站国产www在线视频 | 欧美精品久 | 日韩高清无线码2023 | 久草在线高清视频 | 麻豆国产精品va在线观看不卡 | 国产亚洲观看 | 免费观看www7722午夜电影 | 日韩视频中文字幕在线观看 | 国产中文字幕亚洲 | 精品亚洲免费 | 日韩欧美视频 | 成人黄色大片在线免费观看 | 久久久久麻豆v国产 | 日韩爱爱网站 | 日韩精品一区二区免费视频 | 亚洲视频电影在线 | 91丨九色丨蝌蚪丨老版 | 欧美日本在线视频 | 成人精品国产免费网站 | 久久公开免费视频 | 精品国产人成亚洲区 | 国产一级片免费视频 | 美女视频黄的免费的 | 看片网站黄 | 亚洲精品国产精品国自产在线 | 国内成人精品2018免费看 | 亚洲女裸体| 国产精品久久久久久欧美 | 国产精品色婷婷 | 日韩av视屏在线观看 | av在线电影网站 | 国内久久久久久 | www.五月天激情 | 日韩在线免费观看视频 | 免费高清在线视频一区· | 国产99久久| 久久精品人人做人人综合老师 | 日韩精品高清视频 | 在线视频免费观看 | 久久久久国产一区二区三区四区 | 欧美日本高清视频 | 久久99热精品这里久久精品 | 久久综合国产伦精品免费 | 伊人伊成久久人综合网站 | www.99av| 亚洲日韩精品欧美一区二区 | 91成人在线观看高潮 | 久久免费影院 | 久久激情婷婷 | 色网免费观看 | 亚洲区二区 | 日韩欧美电影网 | 日本三级国产 | 92中文资源在线 | 国产日韩在线一区 | 青青草国产精品 | 国内精品亚洲 | 96精品在线 | 国产一级视频在线 | 亚洲 欧美 精品 | 国产日韩欧美在线看 | 亚洲精品乱码久久久久久按摩 | 婷婷综合电影 | 久久精品亚洲国产 | 999视频在线播放 | 成年人国产视频 | 人人涩 | 综合国产视频 | av.com在线 | 日本69hd| 夜夜躁日日躁狠狠久久88av | 久草在线免费看视频 | 欧美日韩不卡在线视频 | 国产黄在线 | 日韩欧三级 | 色天天综合网 | 亚洲精品国产精品久久99 | a'aaa级片在线观看 | 五月天婷婷综合 | 亚洲黄色成人av | 亚洲 在线 | 中文在线天堂资源 | 国产亚洲婷婷免费 | 国产 在线 日韩 | 免费下载高清毛片 | 免费热情视频 | 精品免费久久久久 | 国产成人精品综合久久久久99 | 99热.com | 日本动漫做毛片一区二区 | 在线色亚洲| 69av在线播放 | 蜜臀久久99精品久久久无需会员 | 国产精品视频免费观看 | 欧美一二三区播放 | 国产一区二区午夜 | 欧美另类69 | 狠狠色丁香婷综合久久 | 成人一级在线观看 | 国产激情电影综合在线看 | 日批视频 | 日韩电影一区二区三区在线观看 | 成人午夜免费剧场 | 日韩精品中文字幕在线观看 | 天天躁日日躁狠狠躁av中文 | 一区二区三区四区五区在线 | 久久精品8 | 日韩av一区二区在线 | 国产资源精品在线观看 | 亚洲精品ww | 国产精品中文字幕在线观看 | 亚洲伊人成综合网 | 国产亚洲欧美日韩高清 | 91视频3p| 日韩在线观看的 | 久久新 | 国产黄a三级 | 国产福利精品一区二区 | 久久久久久久国产精品影院 | 99在线高清视频在线播放 | 依人成人综合网 | 久久久网 | 欧美日韩中文在线视频 | 国产永久免费高清在线观看视频 | www黄免费 | 91免费网站在线观看 | 一区二区三区免费看 | 91久久国产综合精品女同国语 | 成人在线视频论坛 | 91亚洲免费| 天天射综合| 国产精品无av码在线观看 | 看国产黄色大片 | 91成人在线视频观看 | 日韩av一区二区在线播放 | 亚洲 av网站 | 久久久久| 久久午夜网| 91麻豆精品 | 免费高清在线观看电视网站 | www.夜夜爽 | 欧美精品在线视频 | 女人18精品一区二区三区 | 在线观看久 | 国产专区在线视频 | 久久综合免费 | 看av在线 | 黄色软件在线看 | 亚洲最大av| 伊人婷婷久久 | 国产免费人成xvideos视频 | 日本在线视频网址 | 999色视频 | 久草在线欧美 | 97操操操| 亚洲精品一区二区在线观看 | 免费精品在线视频 | 久久免费视频一区 | 日韩免费一区 | 97人人模人人爽人人少妇 | 久久国产精品久久w女人spa | 欧美日本啪啪无遮挡网站 | 91精品在线免费 | 日本黄色大片免费看 | 九九在线免费视频 | 国产精品免费视频观看 | 国产精品欧美一区二区三区不卡 | 日韩久久久久久久久久久久 | 99免费在线视频 | 国产精品一区二区久久精品 | 色精品视频 | 国产精品一码二码三码在线 | 九九精品在线观看 | 中文字幕在线播放一区二区 | 成人免费视频免费观看 | 日韩一区在线免费观看 | 99精彩视频在线观看免费 | www.国产在线 | 亚洲精品色 | japanesefreesex中国少妇 | 天天草天天干 | 亚洲乱码一区 | 国产97色 | 亚洲伦理电影在线 | 日韩成人在线免费观看 | 一级片视频在线 | 天天操天天爱天天爽 | 激情综合站| 日韩av线观看 | 久久99精品久久久久久三级 | 国产一级二级在线播放 | 久草视频在线资源 | 久久激情影院 | 伊人天天狠天天添日日拍 | 九月婷婷色 | 国产 色 | 亚洲电影久久久 | 久久看片网 | 天堂av观看 | 成人av免费在线观看 | 亚洲香蕉在线观看 | 久久看免费视频 | 欧美色综合天天久久综合精品 | 五月综合| 在线观看亚洲免费视频 | 日韩精品中文字幕在线 | 四虎影视成人精品国库在线观看 | 国产一级免费观看视频 | 免费观看www视频 | 911精品美国片911久久久 | 96精品视频| 国产精品二区在线 | 久久97超碰| 久久成人亚洲欧美电影 | av片在线观看免费 | 天天天干夜夜夜操 | 91久色蝌蚪 | 久久精品国产免费观看 | 色噜噜噜 | www.在线观看视频 | 91丨九色丨国产丨porny精品 | 美女在线免费观看视频 | 特级黄色片免费看 | 97国产电影| 国产清纯在线 | 国内精品久久久久久久久久 | 91成年人网站 | 欧美极品xxxx | 国产一级在线播放 | 米奇影视7777 | 国产美女视频免费观看的网站 | 日韩免费观看av | 久久麻豆视频 | 激情伊人五月天 | 国产视频中文字幕 | 日韩一级黄色片 | 免费网站黄 | 久久高清视频免费 | 国产在线国产 | 国产一卡二卡在线 | 在线三级播放 | 美女免费黄网站 | 国产精品免费不 | 国产午夜视频在线观看 | 一区二区三区四区精品 | 99视频久| 福利网址在线观看 | 国产精品自产拍在线观看中文 | av网址在线播放 | 日韩三级视频在线看 | 日韩在线小视频 | 成人在线播放视频 | 亚洲成年人av | 国产精品一区二区你懂的 | 97超碰人人模人人人爽人人爱 | 六月婷婷色| 欧美日韩激情视频8区 | 在线亚洲午夜片av大片 | 中文字幕日韩精品有码视频 | 日韩精品一区二区三区三炮视频 | 国产在线视频导航 | 婷婷久月 | 日韩成人一级大片 | 亚洲 欧美 国产 va在线影院 | 狠色在线 | 在线观看亚洲成人 | 久久久精品一区二区 | 久久成人国产精品一区二区 | 一区二区久久久久 | 中文字幕资源网在线观看 | 久久久夜色 | 美腿丝袜av | 色播六月天 | 日本一区二区不卡高清 | 亚洲一二三区精品 | 日韩免费看片 | 91网在线看| 国产一级电影 | 99色国产| 玖草影院| 五月婷婷丁香在线观看 | 色婷在线 | 中文字幕乱码一区二区 | 欧美激情视频一区二区三区 | www.国产高清 | 日本精品中文字幕 | 午夜10000| 在线看不卡av | 国产一区在线不卡 | 国产福利91精品张津瑜 | 日韩av专区| 天天做天天爱夜夜爽 | 中文一区二区三区在线观看 | 欧美夫妻生活视频 | 韩国av在线 | 亚洲黄色在线观看 | 国产高清视频在线 | 91欧美精品 | 日韩在线观看一区二区 | 久久精品久久久久电影 | 欧日韩在线视频 | 久久精品毛片 | 欧美一级电影在线观看 | 免费看黄在线观看 | 激情视频一区二区 | 国产在线观看中文字幕 | 婷婷五综合 | www.国产精品 | 91完整版观看 | 9ⅰ精品久久久久久久久中文字幕 | 99九九99九九九视频精品 | 久久国产精品免费视频 | 91视频3p | 一区二区三区www | 国产在线播放不卡 | 亚洲精品xxxx | 色网站在线 | 亚洲理论电影网 | 成人av片在线观看 | 中文字幕一区二区三区四区 | 久久97久久 | 免费看污污视频的网站 | 狠狠干天天射 | 日日婷婷夜日日天干 | 四虎8848免费高清在线观看 | 午夜影院在线观看18 | 国产99久久精品 | 色婷婷综合视频在线观看 | 久久国产网站 | 久久久久亚洲精品国产 | 亚洲天堂免费视频 | 高清有码中文字幕 | 亚洲精品自拍视频在线观看 | 天天做天天看 | 激情五月婷婷激情 | 天海冀一区二区三区 | 日韩高清国产精品 | 国产精品一级在线 | 色综合久久久久综合 | 午夜狠狠操 | 中文免费 | 久久精品老司机 | 九色91在线 | 久久另类小说 | 在线v片免费观看视频 | 国产精品久久久一区二区 | 色橹橹欧美在线观看视频高清 | 亚洲天堂精品视频 | 色综合久久久久久中文网 | 久久综合九色99 | 狠狠色狠狠色 | 欧美性受极品xxxx喷水 | 女人18精品一区二区三区 | 婷婷久久丁香 | 一区二区三区在线免费播放 | 欧美一级性视频 | 操操操日日 | 日韩欧美高清视频在线观看 | 色综合久久综合网 | 91福利视频久久久久 | 黄色一级免费电影 | 色狠狠一区二区 | 欧美日韩不卡一区二区 | 欧美国产日韩在线观看 | 日韩免费高清在线 | 午夜少妇av| 久在线观看视频 | 88av网站 | 一区二区精品在线观看 | 日日操日日插 | 91理论片午午伦夜理片久久 | 久久久久国产精品午夜一区 | 国产一区观看 | 1024手机看片国产 | 天天操天天操天天操天天操天天操天天操 | 欧美一区二区在线免费观看 | 色视频 在线 | 在线精品观看国产 | 高清视频一区二区三区 | 婷婷九月激情 | 久久免费成人 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 亚洲欧美日韩一二三区 | 高清av在线 | 91麻豆精品国产91久久久使用方法 | 91精品久久久久久久91蜜桃 | www日日夜夜| 夜夜夜夜夜夜操 | 欧美精品久久久久久久久久丰满 | 久久视频免费观看 | 国产欧美综合视频 | 国产视频资源 | 久久综合影视 | 色多多在线观看 | 麻豆va一区二区三区久久浪 | 免费在线色电影 | 激情五月在线 | 亚洲丝袜中文 | 国产第一页在线观看 | 亚洲经典视频在线观看 | 久久人人爽人人片av | 欧美在线视频日韩 | 久久免费精品视频 | 成年人在线电影 | 91久久奴性调教 | 九色91在线视频 | 亚洲片在线 | 欧美三级在线播放 | 四虎国产永久在线精品 | 99精品视频精品精品视频 | 最新av在线网址 | 91夫妻视频 | 日本在线观看一区二区 | 久久免费精品一区二区三区 | 夜夜夜夜操 | 日韩欧美电影网 | 亚洲欧美视频网站 | 在线 国产 亚洲 欧美 | 丁香伊人网 | 欧美一级视频免费看 | 91av美女| 国产精品www | 91视频黄色 | 国产精品系列在线播放 | 亚洲国产999 | 国产高清视频免费观看 | 五月激情亚洲 | 亚洲视频在线观看 | 一级黄色在线免费观看 | 国产亚洲情侣一区二区无 | 丝袜av一区 | 免费人成网| 国产高清视频免费最新在线 | 五月婷婷在线视频观看 | 日韩小视频网站 | 成人久久久久久久久久 | 91成年人网站| 亚洲精品在线一区二区 | 国产区第一页 | 狠日日| 草久电影| 亚洲精品白浆高清久久久久久 | 99久久久久久 | 韩国av免费在线 | 一级片观看| 久久久久免费观看 | 国产精品一区在线观看 | 欧美一级视频免费 | 日韩性片| 国产精品白丝jk白祙 | 五月激情综合婷婷 | 91在线看片| 免费国产一区二区视频 | 97色在线视频 | 亚洲精品在线免费观看视频 | 久久精品专区 | 成年人免费在线播放 | 天天操夜夜操夜夜操 | 高清国产一区 | 色播99 | 国产精品美乳一区二区免费 | 天天干天天射天天插 | av高清影院 | 日韩一二区在线观看 | 一级a性色生活片久久毛片波多野 | 天天爱天天爽 | 亚洲狠狠操 | 日韩精品 在线视频 | 少妇啪啪av入口 | 久久久久国产一区二区三区 | 五月天色站 | 亚洲国产日韩欧美在线 | 狠狠狠狠干 | 97精品免费视频 | 中文永久免费观看 | 天堂av免费在线 | 99精品视频免费观看视频 | 97人人网 | 五月天综合在线 | 亚洲一区二区视频 | 亚洲国产美女久久久久 | 中文字幕av电影下载 | 91看片淫黄大片在线播放 | 久久婷婷视频 | 色美女在线 | 久草在线观看资源 | 国产香蕉在线 | 久久久免费少妇 | 99精品欧美一区二区蜜桃免费 | 国产精品综合久久久久 | 国产中文字幕第一页 | www.少妇| 丁香亚洲 | 精品亚洲在线 | 婷婷成人在线 | 亚洲欧美视频在线 | 日韩一区二区三区高清在线观看 | 久久婷婷视频 | 婷婷视频在线 | 手机成人av | 在线观看自拍 | 欧美污在线观看 | 久久99久久精品 | 91在线免费观看网站 | 97精品国产97久久久久久粉红 | 亚洲最新合集 | 国产成人三级 | 欧美日韩国产色综合一二三四 | 人人干人人干人人干 | 国产午夜小视频 | 亚洲免费一级电影 | 精品国产精品一区二区夜夜嗨 | 毛片网在线观看 | 午夜国产福利在线 | 亚洲日韩欧美一区二区在线 | 久久成人一区 | 日本最新高清不卡中文字幕 | 超碰97在线资源站 | 91精品啪在线观看国产线免费 | 欧美日韩综合在线 | 国产情侣一区 | 欧美怡红院 | 一级c片 | 国产精品一区二区三区电影 | 中文字幕免费高清在线观看 | 亚洲天堂网站视频 | 又色又爽又黄高潮的免费视频 | 国产精品乱码久久 | 亚洲欧美日本国产 | 91精品高清| 精壮的侍卫呻吟h | 国产精品美女久久久久久久 | 亚洲国产精品久久久久久 | 国产在线观看你懂的 | 日韩欧美视频在线免费观看 | 中文字幕在| 99成人在线视频 | 日韩成人免费在线 | 福利一区二区在线 | 久久免费视频6 | 女人18精品一区二区三区 | 中文字幕日本在线 | 久久av免费观看 | 国产不卡一 | 日本中文字幕网站 | 国偷自产中文字幕亚洲手机在线 | 韩国精品视频在线观看 | 激情婷婷丁香 | 国产精品一区二区三区电影 | 欧美最猛性xxxxx免费 | 国产一区二区高清不卡 | 最近最新最好看中文视频 | 91人人人| 国产91全国探花系列在线播放 | 激情欧美丁香 | 91片在线观看 | 国产做爰视频 | 亚洲综合色视频 | 天天干夜夜夜操天 | 久久久久久久久久久综合 | 蜜桃麻豆www久久囤产精品 | 美女亚洲精品 | 国产日韩精品在线 | 激情婷婷 | 亚洲精品88欧美一区二区 | 亚洲无线视频 | 日韩黄色av网站 | 夜夜夜| 久久精品欧美日韩精品 | 久久国产三级 | 免费看一及片 | 欧美日韩亚洲第一 | 中文字幕在线看视频国产 | 人人干人人添 | 免费激情在线电影 | 日韩在线电影一区 | 国产一区二区三区免费视频 | 天天天插| 四虎永久精品在线 | 国产亚洲婷婷免费 | 国产精品高清一区二区三区 | 精品视频免费久久久看 | 国产在线综合视频 | 综合天天 | 久插视频| 91看成人| 日韩中文字幕免费视频 | 国产免码va在线观看免费 | 国产999视频 | 成人91在线观看 | 国产亚洲精品成人av久久影院 | 91视频91色 | 午夜视频在线观看欧美 | 一区二区三区高清不卡 | 丁香婷婷激情啪啪 | 在线观看中文字幕网站 | 一区二区三区在线免费观看 | 亚洲乱码精品久久久久 | 精品亚洲成a人在线观看 | 久久久久久麻豆 | 国产成人精品不卡 | 西西444www大胆高清图片 | 97国产精品一区二区 | 日本性xxxxx 亚洲精品午夜久久久 | 免费看片网站91 | 一区二区亚洲精品 | 91麻豆看国产在线紧急地址 | 精品96久久久久久中文字幕无 | 亚洲成人黄色网址 | 亚洲伊人第一页 | 美女在线免费观看视频 | 午夜av在线| 深爱激情婷婷网 | 99精品视频免费观看 | 在线色视频小说 | 国产精品mv在线观看 | 91热这里只有精品 | 婷婷激情站 | 五月亚洲综合 | 丁香婷婷亚洲 | 午夜精品在线看 | www.在线观看av | 看片网站黄色 | 在线观看成人一级片 | 免费h漫在线观看 | 99国产一区| 日韩视频免费观看高清 | 国产aa免费视频 | 国产美女永久免费 | 狠狠躁夜夜躁人人爽超碰91 | 国产精品一区电影 | 日日干综合 | 国产精品美女久久久免费 | 亚洲国产精品日韩 | 日本一区二区三区免费观看 | 午夜精品一区二区三区视频免费看 | 精品99在线观看 | 色婷婷在线播放 | av免费看在线 | 91在线观| 97色狠狠| 国产视 | 久久久久久麻豆 | av中文字幕亚洲 | 日韩欧美在线国产 | 国产国语在线 | 不卡日韩av | 国产精品久久久久久久久久久久冷 | 日本久久高清视频 | www.天天色 | 中文字幕在线视频精品 | 欧美aa级 | va视频在线观看 | 国产精品第 | 日韩精品无码一区二区三区 | 久久理论影院 | 久草新在线| 色婷婷88av视频一二三区 | 91精品在线看 | a v在线视频| 色综合狠狠干 | 国产精品久久久久一区二区三区共 | 国产99久久久国产精品成人免费 | 亚洲91视频| 日韩一区二区在线免费观看 | 五月婷在线 | 日韩免费一区二区 | 久久视频精品在线 | 91毛片在线 | 一区二区三区四区五区在线视频 | 亚洲美女视频在线观看 | 99r在线精品| 亚洲在线综合 | 国产成人精品一区一区一区 | 久久国产精品影片 | 国产精品永久在线观看 | 97视频免费播放 | 日韩爱爱网站 | 亚洲综合导航 | 日日爽视频 | 综合天堂av久久久久久久 | 在线观看免费黄视频 | 四虎在线免费观看 | 久久91久久久久麻豆精品 | 成人久久免费 | 久久xxxx| 美女视频黄频大全免费 | 国产精品欧美一区二区三区不卡 | 人人插人人澡 | 欧美精品一二三 | 婷婷综合国产 | 国产三级av在线 | 欧美日韩视频在线播放 | 久久免费视频在线观看30 | 国内丰满少妇猛烈精品播放 | 在线va网站 | 97成人超碰| 亚洲第一av在线播放 | 欧美日韩国产mv | 久久女同性恋中文字幕 | 9在线观看免费高清完整版在线观看明 | 亚洲精品国偷自产在线99热 | 在线播放91| 日韩视频欧美视频 | 亚洲视频1| 天天操人人要 | 久久精国产 | 成人在线播放免费观看 | 日韩一区二区三区免费视频 | 91成人免费视频 | 亚洲黄色在线观看 | 久久精品国产一区 | 亚洲黄电影 | 欧美成人影音 | 欧美日韩国产页 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 免费视频三区 | 亚洲做受高潮欧美裸体 | 免费在线成人av | 国产日韩欧美在线免费观看 | 日韩超碰在线 | 国产一区在线精品 | 成片视频在线观看 | 91午夜精品 | 亚洲精品美女久久久 | 日韩精品国产一区 | www.五月天色 | 日日干天夜夜 | 五月天综合网站 | 特级毛片在线 | 伊人日日干| 91麻豆看国产在线紧急地址 | 色伊人网 | 91九色网站| 国语自产偷拍精品视频偷 | 99热9| 久久99精品久久久久婷婷 | 开心激情五月网 | 久草网视频| 久久久精品影视 | 91中文字幕在线播放 | 国产成人1区 | 欧美激情综合五月 | 操操操操网 | 日韩成人免费在线电影 | 国产精品video| 狠狠久久伊人 | 久久久久伊人 | 91日韩精品| 久久精品电影网 | 亚洲黄色免费网站 | 亚洲精品在线二区 | 99精品免费久久久久久久久日本 | 色综合久久88| 正在播放久久 | 国产精品黄色影片导航在线观看 | 精品一区二区免费在线观看 | 蜜桃视频成人在线观看 | 日韩精品欧美专区 | 欧美另类高清 | 久久中文字幕在线视频 | 久久精品国产一区二区 | 国产片网站 | 四虎影视成人精品国库在线观看 | 精品国产资源 | 美女黄网久久 | 久久久国产精华液 | 蜜臀av免费一区二区三区 | 天天操天天色天天射 | av在线网站免费观看 | 久久免费的精品国产v∧ | 欧美另类v | 亚洲成人黄色在线观看 | 欧美日韩国产免费视频 | 日韩一二区在线观看 | 免费看污网站 | 国产视频二区三区 | 国产无限资源在线观看 | 欧美在线观看视频免费 | 亚洲国产精品推荐 | 成 人 黄 色 视频播放1 | 在线看小早川怜子av | 亚洲精品久久久久中文字幕二区 | 久久噜噜少妇网站 | 高清日韩一区二区 | 丁香五婷 | 一区二区三区四区五区在线 | 一区中文字幕在线观看 | 国产中文字幕在线观看 | 久久激情电影 | 丁香视频 | 99久久精品免费看国产四区 | 欧美男同网站 | 久爱精品在线 | 亚洲男男gaygayxxxgv | 超碰在线最新地址 | 99视频在线精品 | 欧美成人按摩 | 日韩精品在线观看av | 久久久久久毛片精品免费不卡 | 亚洲国产精彩中文乱码av | 欧美日韩精品在线播放 | 伊甸园av在线 | 999视频在线播放 | 狠狠狠的干 | 91热爆在线观看 | 日本精品久久久一区二区三区 | 午夜免费久久看 | 在线免费观看黄色小说 | 国产精品9999久久久久仙踪林 | 8x8x在线观看视频 | 色综合久久综合中文综合网 | 免费精品在线 | 国产91电影在线观看 | av资源在线观看 | 91精品久久久久久久久久入口 | 免费福利小视频 | 91精品国产亚洲 | 日韩电影在线观看一区二区三区 | 96精品高清视频在线观看软件特色 | 香蕉91视频 | 日本99精品| 91一区一区三区 | 日韩综合视频在线观看 | 精品久久久久久电影 | 草久久久久久 | 久一网站 | 国产成人久久精品亚洲 | 国产精品99视频 | 欧美在线观看视频一区二区三区 | 在线成人中文字幕 | 亚洲国产wwwccc36天堂 | 日日婷婷夜日日天干 | 欧美激情视频在线免费观看 | 婷婷色在线 | 五月婷婷丁香在线观看 | 成人宗合网 | 亚洲黄色免费 | 99久久www| 国产精品国产亚洲精品看不卡 | 最近2019好看的中文字幕免费 | 夜添久久精品亚洲国产精品 | 亚洲性xxxx | 精品成人网 | 久久免费视频一区 | 亚洲激情校园春色 | 国产精品一区二区三区在线看 | 久草观看视频 | 夜夜骑天天操 | 日韩av在线网站 | 免费黄av| 国产在线观看你懂的 | 国外成人在线视频网站 | 国产小视频在线看 | 国产精品18久久久久久不卡孕妇 | 精品在线观看一区二区三区 | 国产视频日韩视频欧美视频 | 处女av在线 | 成人黄在线观看 | 国产精品久久久久久久免费大片 | 97免费在线观看视频 | 夜色资源站wwwcom | 国产精品久久久免费看 | 99热最新 | 一级欧美黄 | 日本久久久亚洲精品 | 久久综合中文字幕 | 国产成人黄色 | 在线 国产一区 | 久久这里只有精品首页 | 国产无遮挡又黄又爽馒头漫画 | 99精品国产兔费观看久久99 | 九九九九热精品免费视频点播观看 | 中文字幕第一页在线视频 | 四虎成人精品永久免费av | 国产精品网在线观看 | 日韩91精品| av看片网址| 久久你懂得 | 成人一级片免费看 | 国产尤物一区二区三区 | 一区二区视频在线观看免费 | 成人在线视频在线观看 |