精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux內(nèi)核調(diào)試技術(shù)之自構(gòu)proc

系統(tǒng) Linux
在內(nèi)核中使用printk可以講調(diào)試信息保存在log_buf緩沖區(qū)中,可以使用命令 #cat /proc/kmsg 將緩沖區(qū)的數(shù)區(qū)的數(shù)數(shù)據(jù)打印出來,今天我們就來研究一下,自己寫kmsg這個文件,我們?nèi)∶凶?mymsg。

1、簡介

在內(nèi)核中使用printk可以講調(diào)試信息保存在log_buf緩沖區(qū)中,可以使用命令 #cat /proc/kmsg 將緩沖區(qū)的數(shù)區(qū)的數(shù)數(shù)據(jù)打印出來,今天我們就來研究一下,自己寫kmsg這個文件,我們?nèi)∶凶?mymsg。

2、查看內(nèi)核中 /proc/kmsg怎么寫的!

在Proc_misc.c (fs\proc) 文件中:

  1. void __init proc_misc_init(void){ 
  2.     ......................... 
  3.         struct proc_dir_entry *entry; 
  4.         //這里創(chuàng)建了一個proc入口kmsg 
  5.         entry = create_proc_entry("kmsg", S_IRUSR, &proc_root); 
  6.         if (entry)       /*構(gòu)造一個proc_fops結(jié)構(gòu)*/ 
  7.        entry->proc_fops = &proc_kmsg_operations;  ......................... }  

在Kmsg.c (fs\proc) 文件中:

  1. const struct file_operations proc_kmsg_operations = { 
  2.     .read        = kmsg_read, 
  3.     .poll        = kmsg_poll, 
  4.     .open        = kmsg_open, 
  5.     .release    = kmsg_release,};  

在用戶空間中使用 cat /proc/kmsg的時候,會調(diào)用kmsg_open,在調(diào)用kmsg_read函數(shù),讀取log_buf中的數(shù)據(jù),拷貝到用戶空間顯示。

3、在寫之前,我們需要來學(xué)習(xí)一下循環(huán)隊列

環(huán)形隊列是在實際編程極為有用的數(shù)據(jù)結(jié)構(gòu),它有如下特點:

  • 它是一個首尾相連的FIFO的數(shù)據(jù)結(jié)構(gòu),采用數(shù)組的線性空間,數(shù)據(jù)組織簡單,能很快知道隊列是否滿為空。能以很快速度的來存取數(shù)據(jù)。
  • 因為有簡單高效的原因,甚至在硬件都實現(xiàn)了環(huán)形隊列。
  • 環(huán)形隊列廣泛用于網(wǎng)絡(luò)數(shù)據(jù)收發(fā),和不同程序間數(shù)據(jù)交換(比如內(nèi)核與應(yīng)用程序大量交換數(shù)據(jù),從硬件接收大量數(shù)據(jù))均使用了環(huán)形隊列。

3.1.環(huán)形隊列實現(xiàn)原理

內(nèi)存上沒有環(huán)形的結(jié)構(gòu),因此環(huán)形隊列實上是數(shù)組的線性空間來實現(xiàn)。那當(dāng)數(shù)據(jù)到了尾部如何處理呢?它將轉(zhuǎn)回到0位置來處理。這個的轉(zhuǎn)回是通過取模操作來執(zhí)行的。

因此環(huán)列隊列的是邏輯上將數(shù)組元素q[0]與q[MAXN-1]連接,形成一個存放隊列的環(huán)形空間。

為了方便讀寫,還要用數(shù)組下標(biāo)來指明隊列的讀寫位置。head/tail.其中head指向可以讀的位置,tail指向可以寫的位置。 

 

 

[[181482]] 

環(huán)形隊列的關(guān)鍵是判斷隊列為空,還是為滿。當(dāng)tail追上head時,隊列為滿時,當(dāng)head追上tail時,隊列為空。但如何知道誰追上誰。還需要一些輔助的手段來判斷.

如何判斷環(huán)形隊列為空,為滿有兩種判斷方法。

(1)是附加一個標(biāo)志位tag

當(dāng)head趕上tail,隊列空,則令tag=0,

當(dāng)tail趕上head,隊列滿,則令tag=1,

(2)限制tail趕上head,即隊尾結(jié)點與隊首結(jié)點之間至少留有一個元素的空間。

隊列空: head==tail

隊列滿: (tail+1)% MAXN ==head 

[[181483]]

 

4、程序編寫

  1. #include <linux/module.h> 
  2. #include<linux/kernel.h> 
  3. #include<linux/fs.h> 
  4. #include<linux/init.h> 
  5. #include<linux/delay.h> 
  6. #include<asm/uaccess.h> 
  7. #include<asm/irq.h> 
  8. #include<asm/io.h> 
  9. #include<asm/arch/regs-gpio.h> 
  10. #include<asm/hardware.h> 
  11. #include<linux/proc_fs.h> 
  12.  
  13. #define MYLOG_BUF_LEN 1024 
  14. static char mylog_buf[MYLOG_BUF_LEN]; 
  15. static char tmp_buf[MYLOG_BUF_LEN]; 
  16. static int mylog_r = 0; 
  17. static int mylog_w = 0; 
  18. static int mylog_r_tmp = 0; 
  19.  
  20. /*休眠隊列初始化*/ 
  21. static DECLARE_WAIT_QUEUE_HEAD(mymsg_waitq); 
  22.  
  23. /* 
  24. *判斷環(huán)形隊列是否為空 
  25. *返回0:表示不空  返回1:表示空 
  26. */ 
  27. static int is_mylog_empty(void) 
  28.    return (mylog_r == mylog_w); 
  29.  
  30. /* 
  31. *判斷環(huán)形隊列是否滿 
  32. *返回0:表示不滿  返回1:表示滿 
  33. */ 
  34. static int is_mylog_full(void) 
  35.    return((mylog_w + 1)% MYLOG_BUF_LEN == mylog_r); 
  36.  
  37. /* 
  38. *在讀取的時候,判斷環(huán)形隊列中數(shù)據(jù)是否為空 
  39. *返回0:表示不空  返回1:表示空 
  40. */ 
  41. static int is_mylog_empty_for_read(void) 
  42.    return (mylog_r_tmp == mylog_w); 
  43.  
  44. /* 
  45. *往循環(huán)隊列中存字符 
  46. *輸入:c字符 單位:1byte 
  47. *輸出:無 
  48. */ 
  49. static void mylog_putc(char c) 
  50.  
  51.    if(is_mylog_full()) 
  52.     { 
  53.        /*如果檢測到隊列已經(jīng)滿了,則丟棄該數(shù)據(jù)*/ 
  54.         mylog_r= (mylog_r + 1) % MYLOG_BUF_LEN; 
  55.          
  56.        /*mylog_r_tmp不能大于mylog_r*/ 
  57.         if((mylog_r_tmp + 1)% MYLOG_BUF_LEN == mylog_r) 
  58.             mylog_r_tmp= mylog_r; 
  59.          
  60.     } 
  61.     mylog_buf[mylog_w]= c; 
  62.    /*當(dāng)mylog_w=1023的時候 (mylog_w+1) % MYLOG_BUF_LEN =0,回到隊列頭,實現(xiàn)循環(huán)*/ 
  63.     mylog_w= (mylog_w + 1) % MYLOG_BUF_LEN; 
  64.    /* 喚醒等待數(shù)據(jù)的進(jìn)程*/     
  65.     wake_up_interruptible(&mymsg_waitq);   
  66.  
  67. /* 
  68. *從循環(huán)隊列中讀字符 
  69. *輸入:*p 單位:1byte 
  70. *輸出:1表示成功 
  71. */ 
  72. static int mylog_getc(char *p) 
  73.    /*判斷數(shù)據(jù)是否為空*/ 
  74.     if (is_mylog_empty_for_read()) 
  75.     { 
  76.        return 0; 
  77.     } 
  78.    *p = mylog_buf[mylog_r_tmp ]; 
  79.     mylog_r_tmp = (mylog_r_tmp  + 1) % MYLOG_BUF_LEN; 
  80.    return 1; 
  81.  
  82. /* 
  83. *調(diào)用myprintk,和printf用法相同 
  84. */ 
  85. int myprintk(const char *fmt, ...) 
  86.     va_list args; 
  87.    int i; 
  88.    int j; 
  89.  
  90.     va_start(args, fmt); 
  91.     i= vsnprintf(tmp_buf, INT_MAX, fmt, args); 
  92.     va_end(args); 
  93.      
  94.    for (j = 0; j < i; j++) 
  95.         mylog_putc(tmp_buf[j]); 
  96.          
  97.    return i; 
  98.  
  99.  
  100. static ssize_t mymsg_read(struct file *file, char __user *buf, 
  101.             size_t count, loff_t*ppos) 
  102.    int error=0; 
  103.     size_t i=0; 
  104.    char c; 
  105.    /* 把mylog_buf的數(shù)據(jù)copy_to_user, return*/ 
  106.  
  107.     /*非阻塞 和 緩沖區(qū)為空的時候返回*/ 
  108.     if ((file->f_flags & O_NONBLOCK) && is_mylog_empty()) 
  109.        return -EAGAIN; 
  110.      
  111.    /*休眠隊列wait_event_interruptible(xxx,0)-->休眠*/ 
  112.     error= wait_event_interruptible(mymsg_waitq, !is_mylog_empty_for_read()); 
  113.      
  114.    /* copy_to_user*/ 
  115.     while (!error && (mylog_getc(&c)) && i < count) { 
  116.         error= __put_user(c, buf); 
  117.         buf++; 
  118.         i++; 
  119.     } 
  120.    if (!error) 
  121.         error= i; 
  122.    /*返回實際讀到的個數(shù)*/ 
  123.     return error; 
  124.  
  125. static int mymsg_open(struct inode * inode, struct file * file) 
  126.     mylog_r_tmp= mylog_r; 
  127.    return 0; 
  128.  
  129.  
  130. const struct file_operations proc_mymsg_operations = { 
  131.     .read= mymsg_read, 
  132.     .open= mymsg_open, 
  133.     }; 
  134. static int mymsg_init(void) 
  135.    struct proc_dir_entry *myentry; kmsg 
  136.     myentry= create_proc_entry("mymsg", S_IRUSR, &proc_root); 
  137.    if (myentry) 
  138.         myentry->proc_fops = &proc_mymsg_operations; 
  139.    return 0; 
  140.  
  141. static void mymsg_exit(void) 
  142.     remove_proc_entry("mymsg", &proc_root); 
  143.  
  144. module_init(mymsg_init); 
  145. module_exit(mymsg_exit); 
  146.  
  147. /*聲名到內(nèi)核空間*/ 
  148. EXPORT_SYMBOL(myprintk); 
  149.  
  150. MODULE_LICENSE("GPL");  

5、測試程序

注意:在上面程序中 使用了 EXPORT_SYMBOL(myprintk);意思是把myprintk可以在整個內(nèi)核空間使用。

使用方法:

①extern int myprintk(const char *fmt, ...);聲明

② myprintk("first_drv_open : %d\n", ++cnt);使用

  1. #include <linux/module.h> 
  2. #include<linux/kernel.h> 
  3. #include<linux/fs.h> 
  4. #include<linux/init.h> 
  5. #include<linux/delay.h> 
  6. #include<asm/uaccess.h> 
  7. #include<asm/irq.h> 
  8. #include<asm/io.h> 
  9. #include<asm/arch/regs-gpio.h> 
  10. #include<asm/hardware.h> 
  11.  
  12. static struct class *firstdrv_class; 
  13. static struct class_device    *firstdrv_class_dev; 
  14.  
  15. volatile unsigned long *gpfcon = NULL
  16. volatile unsigned long *gpfdat = NULL
  17.  
  18. extern int myprintk(const char *fmt, ...); 
  19.  
  20. static int first_drv_open(struct inode *inode, struct file *file) 
  21.    static int cnt = 0; 
  22.     myprintk("first_drv_open : %d\n", ++cnt); 
  23.    /* 配置GPF4,5,6為輸出*/ 
  24.     *gpfcon &= ~((0x3<<(4*2)) | (0x3<<(5*2)) | (0x3<<(6*2))); 
  25.    *gpfcon |= ((0x1<<(4*2)) | (0x1<<(5*2)) | (0x1<<(6*2))); 
  26.    return 0; 
  27.  
  28. static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos) 
  29.    int val; 
  30.    static int cnt = 0; 
  31.  
  32.     myprintk("first_drv_write : %d\n", ++cnt); 
  33.  
  34.     copy_from_user(&val, buf, count); //    copy_to_user(); 
  35.  
  36.     if (val == 1) 
  37.     { 
  38.        // 點燈 
  39.         *gpfdat &= ~((1<<4) | (1<<5) | (1<<6)); 
  40.     } 
  41.    else 
  42.     { 
  43.        // 滅燈 
  44.         *gpfdat |= (1<<4) | (1<<5) | (1<<6); 
  45.     } 
  46.      
  47.    return 0; 
  48.  
  49. static struct file_operations first_drv_fops = { 
  50.     .owner =  THIS_MODULE,    /* 這是一個宏,推向編譯模塊時自動創(chuàng)建的__this_module變量*/ 
  51.     .open  =  first_drv_open,     
  52.     .write   =    first_drv_write,       
  53. }; 
  54.  
  55.  
  56. int major; 
  57. static int first_drv_init(void) 
  58.     myprintk("first_drv_init\n"); 
  59.     major= register_chrdev(0, "first_drv", &first_drv_fops); // 注冊, 告訴內(nèi)核 
  60.  
  61.     firstdrv_class= class_create(THIS_MODULE, "firstdrv"); 
  62.  
  63.     firstdrv_class_dev= class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL"xyz"); /* /dev/xyz*/ 
  64.  
  65.     gpfcon= (volatile unsigned long *)ioremap(0x56000050, 16); 
  66.     gpfdat= gpfcon + 1; 
  67.  
  68.    return 0; 
  69.  
  70. static void first_drv_exit(void) 
  71.     unregister_chrdev(major,"first_drv"); // 卸載 
  72.  
  73.     class_device_unregister(firstdrv_class_dev); 
  74.     class_destroy(firstdrv_class); 
  75.     iounmap(gpfcon); 
  76.  
  77. module_init(first_drv_init); 
  78. module_exit(first_drv_exit); 
  79.  
  80.  
  81. MODULE_LICENSE("GPL");  

6、在tty中測試效果

  1. # insmod my_msg.ko 
  2. # insmod first_drv.ko 
  3. # cat /proc/mymsg 
  4. mymsg_open mylog_r_tmp=0 
  5. first_drv_init  
責(zé)任編輯:龐桂玉 來源: 嵌入式Linux中文站
相關(guān)推薦

2016-08-23 09:17:08

LinuxD狀態(tài)TASK_RUNNIN

2017-03-30 10:13:11

Linux內(nèi)核文件系統(tǒng)

2014-08-28 15:08:35

Linux內(nèi)核

2010-01-22 11:01:04

linux內(nèi)核模塊

2009-12-18 16:08:17

Fedora proc

2025-05-28 10:05:00

Linux系統(tǒng)/proc

2021-07-11 06:45:18

Linux內(nèi)核靜態(tài)

2022-02-08 15:15:26

OpenHarmonlinux鴻蒙

2021-07-10 08:29:13

Docker內(nèi)核Namespace

2021-04-15 05:51:25

Linux

2023-04-10 09:44:22

內(nèi)核鼠標(biāo)調(diào)試鴻蒙

2010-06-02 09:31:43

Linux core

2025-10-27 01:55:00

2025-11-17 00:00:55

2021-11-15 04:00:07

Linux 內(nèi)核動態(tài)

2021-11-14 07:29:55

Linux 內(nèi)核靜態(tài)追蹤Linux 系統(tǒng)

2023-02-28 09:47:42

2022-03-03 18:18:53

BPF解釋器系統(tǒng)

2021-07-14 10:33:22

Docker內(nèi)核Mount Names

2023-03-01 23:56:11

點贊
收藏

51CTO技術(shù)棧公眾號

国产尤物在线视频| 亚洲黄色av片| 成人午夜在线观看视频| 久久国产精品99久久久久久老狼 | 亚洲qvod图片区电影| 印度午夜性春猛xxx交| 女仆av观看一区| 欧美日韩国产高清一区二区 | 日韩免费观看高清完整版| 黄色动漫在线免费看| 国产黄网站在线观看| 91免费观看视频在线| 成人做爽爽免费视频| 国产69精品久久久久久久久久| 成人综合久久| 日韩经典中文字幕| 国产裸体视频网站| 成人四虎影院| 色哟哟日韩精品| 国产精品一色哟哟| www.欧美日本韩国| 中文在线一区二区 | 成人久久一区| 亚洲国产精品一区二区久| 国产亚洲视频一区| 三级成人在线| 亚洲h精品动漫在线观看| 伊人久久大香线蕉精品| 国产无套粉嫩白浆在线2022年| 国产成人精品一区二区三区四区| 国产精品中文久久久久久久| 全部毛片永久免费看| 亚洲天堂男人| 色综合天天狠天天透天天伊人| 18精品爽国产三级网站| 亚洲影院天堂中文av色| 日韩国产精品一区| 亚洲图片综合网| 国产精品超碰| 欧美videos中文字幕| 国产农村妇女精品久久| 日韩国产91| 欧美喷潮久久久xxxxx| 国产成人精品视频ⅴa片软件竹菊| 国产中文在线播放| 午夜精品久久久久久久| 欧美乱大交xxxxx潮喷l头像| 久久亚洲导航| 性做久久久久久久免费看| 狠狠精品干练久久久无码中文字幕 | 国产一区视频导航| 成人黄色免费看| 国产乱淫a∨片免费视频| 久久99精品久久久久| 国产精品欧美激情| 中文字幕日本人妻久久久免费| 天堂成人免费av电影一区| 国产成人精品一区| 成人免费一级片| 蜜乳av一区二区三区| 国产精品亚洲自拍| 99精品视频免费看| 国产成人精品亚洲777人妖| 成人91视频| 欧美一区二区三区黄片| 91色|porny| 三级三级久久三级久久18| av男人的天堂在线| 亚洲欧美日韩一区二区三区在线观看 | 国产精品88a∨| 18国产免费视频| 国内精品视频666| 国产 高清 精品 在线 a | 在线电影欧美日韩一区二区私密| 神马久久久久久久久久久| 999精品一区| 欧美激情xxxx| www.com亚洲| 精品一区二区三区在线观看国产| 亚洲综合在线中文字幕| 色婷婷av一区二区三| 国产婷婷色一区二区三区在线| 亚洲国产一区二区三区在线播| 成人毛片av在线| 同产精品九九九| 成年网站在线播放| 大桥未久女教师av一区二区| 亚洲美女视频网| 欧美色视频一区二区三区在线观看| 欧美日韩国产成人精品| 日韩av免费看网站| 国产激情视频在线播放| 久久日韩精品一区二区五区| 在线观看成人一级片| 欧美人与性动交α欧美精品济南到 | 亚洲视频在线看| 一级黄色录像视频| 丝袜美腿一区二区三区| 亚洲精品免费av| 日本福利午夜视频在线| **欧美大码日韩| 国产91美女视频| 99国内精品久久久久| 精品小视频在线| 538任你躁在线精品视频网站| 新67194成人永久网站| 96国产粉嫩美女| 美州a亚洲一视本频v色道| 亚洲精品中文字幕乱码三区| 欧美成人黑人猛交| 久久久免费毛片| 久久亚洲成人精品| 波多野结衣电车痴汉| 岛国精品在线播放| 97超碰人人爱| 高清av一区二区三区| 亚洲国产精品福利| 丰满少妇被猛烈进入一区二区| 日韩精品一级二级| 久久久神马电影| 菠萝蜜视频在线观看www入口| 欧美日韩精品欧美日韩精品 | 成人免费一区二区三区视频| 日本精品www| 红杏一区二区三区| 久久99热精品这里久久精品| 中国精品一区二区| 久久久精品综合| 欧美a v在线播放| 国产精品丝袜在线播放| 欧美精品一区在线播放| 一级特黄aaa大片在线观看| 久久亚洲免费视频| 91在线视频成人| 99精品在线看| 中文字幕亚洲综合久久菠萝蜜| 国内外成人免费激情视频| 成人影院中文字幕| 欧美国产在线视频| 精品国产一级片| 亚洲欧洲综合另类| 国产美女视频免费看| 欧美gay男男猛男无套| 国产精品观看在线亚洲人成网| 亚洲三级中文字幕| 黑人巨大精品欧美一区二区三区| 人妻激情偷乱频一区二区三区| 欧美日韩爆操| 国产一区精品在线| 国产直播在线| 亚洲视频视频在线| 岳乳丰满一区二区三区| 国产精品色一区二区三区| www.夜夜爽| 91精品国产乱码久久久久久| 成人在线视频网站| 久久五月精品中文字幕| 精品久久国产老人久久综合| 久久久久99精品| 97精品电影院| 99久久国产宗和精品1上映| 欧美日韩在线二区| 91精品久久久久久久久久久| 91福利国产在线观看菠萝蜜| 日韩一区二区三区四区| 国产一级视频在线| 久久新电视剧免费观看| 日本 片 成人 在线| 欧美福利电影在线观看| 国产乱码精品一区二区三区中文 | 欧美中文字幕在线观看| 国产精品一级伦理| 91精品欧美一区二区三区综合在| 精品一级少妇久久久久久久| 91原创在线视频| 日韩av片网站| 欧美国产高清| 欧美日韩天天操| а天堂中文最新一区二区三区| 欧美高跟鞋交xxxxhd| 四虎精品成人影院观看地址| 在线观看一区日韩| 青青草手机视频在线观看| gogo大胆日本视频一区| 免费看污污网站| 精品96久久久久久中文字幕无| 欧美xxxx黑人又粗又长精品| 99re8精品视频在线观看| 555www成人网| 黄色动漫在线| 精品香蕉在线观看视频一| 国产又粗又猛又爽又黄的视频一| 午夜一区二区三区视频| 中国1级黄色片| av在线一区二区| 成 人 黄 色 小说网站 s色| 亚洲国产一区二区精品专区| 亚洲 日韩 国产第一区| 伊人www22综合色| 国产精品久久在线观看| av白虎一区| 亚洲一级免费视频| 韩国av在线免费观看| 欧美视频精品在线| 中国一级特黄毛片| 一区二区三区色| 制服丨自拍丨欧美丨动漫丨| 91丨porny丨首页| 国产精品19p| 麻豆91小视频| 午夜dv内射一区二区| 亚洲人成高清| 99亚洲精品视频| 成人激情视频| 日产精品高清视频免费| 精品丝袜久久| 高清视频在线观看一区| 中文成人在线| 91精品国产综合久久香蕉最新版 | 免费成人毛片| 日韩av片电影专区| 欧亚在线中文字幕免费| 欧美极品欧美精品欧美视频 | 丰满人妻一区二区三区大胸| 看电视剧不卡顿的网站| 久久人妻精品白浆国产| 一区二区高清| 国产va亚洲va在线va| 亚洲国产精品成人| 尤物一区二区三区| 国产精品91一区二区三区| 日韩欧美99| 欧美久久精品一级c片| 欧美日韩一区综合| 亚洲国产合集| 免费中文日韩| 久久综合影院| 无遮挡亚洲一区| 欧美日韩伦理| 亚洲在线色站| 欧美电影《轻佻寡妇》| 一区二区三区四区五区视频| 不卡在线一区二区| 亚洲日本理论电影| 欧美成人milf| 欧美日韩在线免费观看视频| 亚洲a在线视频| 国产女人18毛片| 黄色国产精品| 少妇高潮喷水在线观看| 国产视频亚洲| 国产一区视频免费观看| 免费成人美女在线观看| 一区二区三区视频网| 精品一区二区免费| 性色av浪潮av| www.亚洲色图.com| 中文字幕第4页| 国产精品情趣视频| 国语对白在线播放| 午夜电影网亚洲视频| 天堂中文字幕在线观看| 欧美在线不卡视频| 国产精品视频a| 精品国产第一区二区三区观看体验 | 日韩精品乱码久久久久久| 欧美日韩精品在线视频| 久久久久久久久久一级| 7777精品伊人久久久大香线蕉最新版| 国产成人av免费看| 亚洲开心激情网| 成人18在线| 欧美高清无遮挡| 成人小电影网站| 91欧美日韩一区| 日韩欧美在线精品| 亚洲一区影院| 国内精品久久久久久久影视麻豆| 国产青青在线视频| 久久精品国产99| 一边摸一边做爽的视频17国产 | 日本成人三级| 欧美1区2区视频| 蜜臀av午夜一区二区三区| 精品制服美女丁香| 免费中文字幕av| 国产精品成人一区二区艾草| 国产一级在线播放| 欧美在线视频全部完| 免费观看黄色一级视频| 中文字幕国内精品| av中文在线资源库| 国产日产久久高清欧美一区| 极品一区美女高清| 久久av喷吹av高潮av| 久久xxxx精品视频| 国产人妖在线观看| 国产精品网站在线观看| 国产无遮挡又黄又爽又色| 欧美日韩国产高清一区二区三区 | 国产精品成人av性教育| 97久久精品| 99精品视频网站| 久久精品伊人| 亚洲中文字幕无码一区| 日韩一区在线播放| 男操女视频网站| 精品视频—区二区三区免费| av免费在线观看网址| 国产精品黄页免费高清在线观看| 国产精品欧美大片| 黄色网在线视频| 久久91精品国产91久久小草| 久久久久亚洲av无码专区桃色| 亚洲制服丝袜av| 99久久国产免费| 久久精品久久精品亚洲人| 日韩在线免费| 蜜桃视频日韩| 亚洲精选在线| 污污污www精品国产网站| 亚洲美女少妇撒尿| 国产男女裸体做爰爽爽| 亚洲视频777| 香蕉久久免费电影| 看欧美日韩国产| 亚洲精品女人| 大桥未久恸哭の女教师| 亚洲综合免费观看高清完整版| 国产精品视频a| 欧美成人免费小视频| 996久久国产精品线观看| 自拍另类欧美| 国产一区二区三区国产| 波多野结衣不卡视频| 欧美在线一区二区| 97超碰人人在线| 国产日韩欧美自拍| 国产精品二区不卡| 日韩va在线观看| 伊人夜夜躁av伊人久久| 99在线精品视频免费观看20| 久久影院模特热| 亚洲国产aⅴ精品一区二区| 欧美一二三不卡| 成人精品小蝌蚪| 亚洲欧美在线视频免费| 日韩极品精品视频免费观看| 成人欧美大片| 色爱区成人综合网| 久久99最新地址| 欧美日韩国产精品一区二区三区| 精品毛片乱码1区2区3区| 国产调教在线| 色一情一乱一伦一区二区三欧美| 免费一级欧美片在线观看| www.99re6| 日韩美一区二区三区| 国产无遮挡裸体视频在线观看| 欧美凹凸一区二区三区视频 | 一本色道久久综合精品竹菊| 免费在线视频一级不卡| 国产美女直播视频一区| 女人香蕉久久**毛片精品| 国产视频精品视频| 色综合久久久久久久| 91成人高清| 99re在线观看| 老鸭窝91久久精品色噜噜导演| 特级西西人体高清大胆| 91精品国产综合久久久久久久久久 | 久久琪琪电影院| 九九综合在线| 伊人色在线视频| 激情av一区二区| 午夜视频成人| 国产伦精品一区二区三区高清| 久久久久久黄| 欧美日韩人妻精品一区二区三区| 亚洲国产欧美一区二区三区同亚洲 | 生活片a∨在线观看| 国产成人精品一区二区三区福利| 99精品视频免费全部在线| 午夜国产福利视频| 亚洲精品国产美女| 伊人久久一区| 播放灌醉水嫩大学生国内精品| 综合久久给合久久狠狠狠97色| 熟妇高潮一区二区三区| 国产精品视频内| a91a精品视频在线观看| 美国一级片在线观看| 亚洲国产欧美一区二区丝袜黑人| 综合久草视频| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲精品aⅴ中文字幕乱码| www.成人在线视频| 人妻熟妇乱又伦精品视频| 亚洲免费在线看| 黄色小视频在线观看|