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

歡迎訪問 生活随笔!

生活随笔

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

linux

教你写Linux设备驱动程序:一个简短的教程

發布時間:2023/12/31 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教你写Linux设备驱动程序:一个简短的教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘自:http://blog.chinaunix.net/uid-20799298-id-99675.html
原文為 Writing device driver in Linux:A brief tutorial.
該文重點給出了三個實例來講解Linux驅動,使新手快速、從代碼層了解什么是Linux設備驅動。
本文算是筆記,大體上是翻譯該文的前兩部分,即前兩個實例,這兩個例子都可能正確成功運行。

文件: Writing device drivers in Linux.pdf
大小: 216KB
下載: 下載

所需知識

- C 語言編程- 微處理器編程.對處理器的工作原理有一定的了解,如內存管理、中斷等

用戶空間和內核空間

寫設備驅動時,了解“用戶空間”和“內核空間”之間的區別是非常重要的。

- 內核空間。Linux內核簡單并高效地管理著機器的硬件,為用戶提供簡單并規范的編程接口。同樣地,內核,特別是內核中的驅動,是用戶/程序員與硬件之間的橋梁或接口。內核的任何例程或函數(比如模塊、驅動)都屬于內核空間。- 用戶空間。用戶程序,比如unix shell或其他的gui應用程序(比如kpresenter),都屬于用戶空間。顯然,這些應用程序都要與硬件打交道。但是它們不并直接操作硬件,而是通過內核提供的函數來實現。

用戶空間與內核空間之間的接口函數

內核為用戶空間提供了一系列的例程或函數,用戶的應用程序利用這些接口來與硬件交互
。通常,在UNIX或Linux系統中,這種對話是通過函數或子程序來讀寫文件的。原因是從
用戶的角度來看,UNIX設備就是文件。

另一方面,在內核空間中Linux也提供了一系列的函數或子程序來完成底層與硬件的交互
,并允許從內核向用戶空間傳遞信息。

通常,每個用戶空間的(設備或文件允許使用的)函數,都能在內核空間中找到一個類似
的函數,(允許信息從內核傳遞給用戶空間,反之亦然)

內核空間與硬件設備之間的接口函數

內核空間中有許多函數用于控制硬件或在內核與硬件之間交互信息。

第一個驅動:在用戶空間加載和移除驅動

現在將展示如何完成第一個驅動,在內核中將看作模塊

新建一個文件nothing.c如下

include

MODULE_LICENSE(“Dual BSD/GPL”);

2.6.x版本后的內核,編譯模塊會略微復雜一點。首先,需要有一份完整的、編譯過的內
核源碼樹。在下面的文字中,將假設使用2。6。8版本的內核。

其次,需要一個makefile文件,本例中的makefile文件名為Makefile,內容如下:

obj-m := nothing.o

與之前版本的內核不同,現在編譯模塊時使用的內核需要與模塊將要加載的內核相同。
編譯上面的文件,可以使用命令:

make -C /usr/src/kernel-source-2.6.8 M=pwd modules

這個極其簡單的模塊就屬于內核空間,一旦其被加載,它就是內核空間的一部分。
在用戶空間,可以使用下面的命令加載它,需要root權限:

insmod nothing.ko

insmod 這個命令用于為內核加載模塊。盡管現在我們已經加載了nothing.ko這個模塊,
但是這個模塊畢竟沒有任何用處。

可以通過查看系統里已加載的模塊來檢查是否已經成功加載了nothing.ko

lsmod

最后,需要卸載該模塊時使用下面的命令:

rmmod nothing

重新使用lsmod,可以發現nothing模塊已經不在了。

“Hello world”驅動:在內核空間加載和移除驅動

當一個模塊設備驅動加載到內核,將執行一些初始的工作,如重新設置設備,reserving
RAM, reserving interrupts, reserving input/output ports, etc.

這些工作得以在內核空間執行,必須要有兩個函數存在:module_init 和
module_exit;它們對應于用戶空間的insmod和rmmod命令。總之,用戶命令insmod和
rmmod使用了內核空間的函數module_init和module_exit.

來看一個經典的程序 HELLO WORLD:

//hello.c #include #include #inlucde MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void) {printk("<1> Hello world!\n");return 0; }static void hello_exit(void) {printk("<1> Bye, cruel world!\n"); }module_init(hello_init); module_exit(hello_exit);

其中hello_init 和 hello_exit 函數可以取任意名,但為了加載和移除功能是更容易識
別,它們作為參數傳遞給函數module_init 和 module_exit.

printk函數與printf函數非常類似,但printk只工作在內核中。<1>表示打印信息
為最高優先級(數字越低,優先級越高)。這樣,不僅可以在內核系統日志中看到該
打印信息,還能在系統控制臺接收到該打印信息。

可以用之前的命令來編譯這個模塊,此時只需要將模塊名加入到Makefile文件中即可:

obj-m := nothing.o hello.o

本文的其他部分,將Makefile作為給讀者的練習。一個完整的Makefile文件可以編譯
本教程中的所有示例模塊。

當模塊被加載或卸載時,通過printk打印的信息將會出現在系統控制臺。如果打印
信息沒有出現在終端里,則可通過dmesg命令或查看系統日志文件(cat
var/log/syslog)看到打印信息。

一個完整的驅動“memory“:此驅動的初始部分

接著將介紹如何構建一個完整的設備驅動:memory.c。可以從該設備中讀取一個字符,
也可向其寫入一個字符。這個設備并沒有實際意義,只是因為它是一個完整的
驅動程序,遂將其作為一個實例來說明。它很容易實現,因為它并不是一個正真的
硬件設備的接口(除了電腦本身)。

這個驅動中,要添加幾個在設備驅動程序中頻繁出現的#inclu#include

include

include

include

include

include

include

include

include

include

include

MODULE_LICENSE(“Dual BSD/GPL”);

int memory_open(struct inode *inode, struct file *filp);
int memory_release(struct inode *inode, struct file *filp);
ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t
*f_pos);
ssize_t memory_write(struct file *filp, char *buf, size_t count, loff_t
*f_pos);
void memory_exit(void);
int memory_init(void);

struct file_operations memory_fops = {
read: memory_read,
write: memory_write,
open: memory_open,
release: memory_release
};

module_init(memory_init);
module_exit(memory_exit);

int memory_major = 60;r *memory_buffer;件之后,聲明了幾個后面要定義的函數。在file_operations結構的定義中聲明了
幾個通常用來操作文件的函數。這些在后面會詳細介紹到。接著,向內核聲明初始化和
退出函數-加載和卸載模塊時使用的。最后,聲明驅動的全局變量:memory_major表示驅
動的主驅動號,memory_buffer指向一塊用于存儲驅動數據的內存區域。

“memory”驅動:設備與其文件的連接

在UNIX和Linux中,從用戶空間訪問設備與訪問文件相同。這些設備文件通常位于/dev目
錄下。

將一個普通文件與設備文件關聯起來需要使用兩個數字:major number 和 minor
number。內核使用major number將一個文件鏈接到它的驅動。而minor number是供設備內
部使用。

要做到這一點,一個文件(將用于訪問設備驅動程序)的創建必須使用root身份鍵入以下
命令:

mknod /dev/memory c 60 0

上面這句命令中,c表示創建一個字符設備,該設備的主驅動號major number為60,次驅
動號minor number為0。

對于這個驅動,為了在內核空間將其鏈接到對應的/dev下的文件,需要使用
register_chrdev函數。調用該函數使用到三個參數:major number,
一個字符串用于表示該模塊的名字,一個file_operations結構。
在安裝模塊時它以下面的方式被調用:

int memory_init(void)
{
int result;

result = register_chrdev(memory_major, "memory", &memory_fops);if (result < 0) {printk("<1>memory: can't obtain major number %d\n",memory_major);return result;}memory_buffer = kmalloc(1, GFP_KERNEL);if (!memroy_buffer) {result = -ENOMEM;goto fail;}memset(memory_buffer, 0, 1);printk("<1> Inserting memory module\n");return 0;

fail:
memory_exit();
return result;
}

注意kmalloc函數的使用。這個函數在內核空間中分配一塊用于設備驅動緩沖區的內存。
它的使用方法與著名的malloc函數類似。最后,如果注冊主驅動號失敗或分配內存失敗,
這個模塊也將失敗。

“memory”驅動:移除驅動

為了在memory_exit函數中移除模塊,需要使用到unregsiter_chrdev函數。它將為內核
釋放相應的主驅
void memory_exit(void)
{
unregister_chrdev(memory_major, “memory”);

if (memory_buffer) {kfree(memory_buffer);}printk("<1> Removing memory module\n");

}移除驅動時還原一個干凈的內核,在這個函數中同時釋放了驅動的緩沖區。

“memory”驅動:像打開文件一樣打開設備

內核空間中與用戶空間中打開文件(fopen)相對應的是open:調用register_chrdev時
使用到了一個file_operations結構,而open正是這個結構的成員。open函數的參數有:
一個inode結構,它向內核傳遞有關主驅動號major number和次驅動號minor number的相
關信息;一個file結構,該結構中包括操作文件的多個不同函數。但本文并不對這些函數
作詳細介紹。

當一個文件被打開,通常需要初始化驅動變量或重新設置這個設備。但在這個例子中這
些沒有做這些工作。

memory_open函數如下:

int memory_open(struct inode *inode, struct file *filp)
{
return 0;
}

“memory”驅動:像關閉文件一樣關閉設備

與用戶空間中關閉文件(fclose)相對應的是release:調用register_chrdev時使用到一
個file_operations結構,release正是該結構的成員。在本例中,它對應
memory_release函數,與前面類似,它也有兩個參數:inode結構和file結構。

當一個文件關閉,通常需要釋放已使用的內存和任何打開文件時關鏈到的變量。但是,同
樣的因為本例十分簡單,這些工作這里都沒有做。

memory_release函數如下:

int memory_release(struct inode *inode, struct file *filp)
{
return 0;
}

“memory”驅動:讀設備

同樣,對應于用戶空間讀文件的fread,這里用到read:它也是file_operations結構的成
員。這里它對應memory_read函數。它的參數有:一個file結構;一個緩沖區buf,用戶
空間從該緩沖區中讀數據;一個計數器count記錄傳輸的字節;最后,還有f_pos,用來
指示從文件的哪里開始讀取。

在本例中,memory_read函數使用函數copy_to_user從驅動緩沖區中發送一個字節給用戶
ssize_t memory_read(struct *file filp, char *buf,
size_t count, loff_t *f_pos)
{
copy_to_user(buf, memory_buffer, 1);

if (*f_pos == 0) {*f_pos += 1;return 1;} else {return 0;}

}置f_pos同時也會改變。如果從文件開頭讀起,f_pos會以1遞增,并且返回已正確
讀到的字節數,即1。如果不是從文件開頭讀起,文件的結束標志0將被返回,因為文件中
沒有數據。

“memory”驅動:寫設備

與fwrite類似,內核空間有write:它是file_operations結構的成員。本例中為
memory_write,有下面幾個參數:一個file結構;buf緩沖區,供用戶空間寫入;count,
計數器記錄寫入數據的字節數;f_pos,寫入的ssize_t memory_write(struct file *filp, char *buf,
size_t count, loff_t *f_pos)
{
char *tmp;

tmp = buf + count - 1;copy_from_user(memory_buffer, tmp, 1);return 1;

}
copy_from_user將數據從用戶空間傳送到內核空間。

完整的“memory“驅動

加入之前的所有代碼后,便組成了完整的memory驅動memory.c:

在使用本驅動之前,當然需要先編譯它,方法與前面類似。加載模塊:

insmod memory.ko

很方便即可取消對設備的保護:

chmod 666 /dev/memory

如果一切順利,將有一個設備/dev/memory存在,且可以將其中寫字符串或字符,它將存
儲字符串或多個字符中的最后一個。可以像這樣來操作:

echo -n abcdef > /dev/memory

使用cat來檢查這個設備的內容:

cat /dev/memory

已存的字符不會改變,除非再寫入覆蓋它或這個模塊被卸載。

附:
實例2 memory 驅動實驗:

代碼 memory.c

#include <linux/init.h> //#include #include <linux/module.h> #include <linux/kernel.h> #include <linux/slab.h> #include <linux/fs.h> #include <linux/errno.h> #include <linux/types.h> #include <linux/proc_fs.h> #include <linux/fcntl.h> //#include #include <linux/uaccess.h>MODULE_LICENSE("Dual BSD/GPL");int memory_open(struct inode *inode, struct file *filp); int memory_release(struct inode *inode, struct file *filp); ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t *f_pos); ssize_t memory_write(struct file *filp, char *buf, size_t count, loff_t *f_pos); void memory_exit(void); int memory_init(void);struct file_operations memory_fops = {read:memory_read,write:memory_write,open:memory_open,release:memory_release };module_init(memory_init); module_exit(memory_exit);int memory_major = 60;char *memory_buffer;int memory_init(void) {int result;result = register_chrdev(memory_major, "memory", &memory_fops);if (result < 0) {printk("<1>memory: can't obtain major number %d\n", memory_major);return result;}memory_buffer = kmalloc(1, GFP_KERNEL);if (!memory_buffer) {result = - ENOMEM;goto fail;}memset(memory_buffer, 0, 1);printk("<1>Inserting memory module\n");return 0;fail:memory_exit();return result; }void memory_exit(void) {unregister_chrdev(memory_major, "memory");if (memory_buffer)kfree(memory_buffer);printk("<1>Removing memory module\n"); }int memory_open(struct inode *inode, struct file *filp) {return 0; }int memory_release(struct inode *inode, struct file *filp) {return 0; }ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) {copy_to_user(buf, memory_buffer, 1);if (*f_pos == 0) {*f_pos += 1;return 1;} elsereturn 0; }ssize_t memory_write(struct file *filp, char *buf, size_t count, loff_t *f_pos) {char *tmp;tmp = buf + count - 1;copy_from_user(memory_buffer, tmp, 1);return 1; }

Makefile:
obj-m := memory.o

KERNELDIR := /lib/modules/(shelluname?r)/buildPWD:=(shell pwd)

modules:
(MAKE)?C(KERNELDIR) M=$(PWD) modules

編譯:make
生成文件中有 memory.ko, 該文件即要使用的目標模塊

加載:sudo insmod ./memory.ko

查看dmesg信息:dmesg | tail -n 1
[10911.945739] Inserting memory module

改變操作設備文件權限:sudo chmod 666 /dev/memory

向驅動中寫入數據:echo -n abcdefg > /dev/memory

查看驅動中保存的數據:
[linux@ ~]cat/dev/memoryg[linux@?]

可見其為最后寫入的數據。

卸載驅動:
[linux@ ~]sudormmodmemory[linux@?] dmesg | tail -n 2
[10911.945739] Inserting memory module
[11155.809076] Removing memory module

—————————-實驗完畢
分析
上面代碼中主要有五個函數重點注意下:
register_chrdev
unregister_chrdev
copy_to_user
copy_from_user
kmalloc

/*
* 成功:返回0
* 失敗:-EINVAL表示申請的主設備號非法(可能是主設備號大于最大設備號)
* -EBUSY 表示所申請的主設備號已為其它設備使用
* 如果動態分配成功,則此函數將返回主設備號
*
*/
static inline int register_chrdev(
unsigned int major, //設備驅動向內核申請主設備號,若為0則系統動態分配一個主設備號
const char *name, //設備名
const struct file_operations *fops //各調用的入口點
);

static inline void unregister_chrdev(
unsigned int major,
const char *name
);

arch/x86/lib/usercopy_32.c
/**
* copy_to_user: - Copy a block of data into user space.
* @to: Destination address, in user space.
* @from: Source address, in kernel space.
* @n: Number of bytes to copy.
*
* Context: User context only. This function may sleep.
*
* Copy data from kernel space to user space.
*
* Returns number of bytes that could not be copied.
* On success, this will be zero.
*/
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n);

/**
* copy_from_user: - Copy a block of data from user space.
* @to: Destination address, in kernel space.
* @from: Source address, in user space.
* @n: Number of bytes to copy.
*
* Context: User context only. This function may sleep.
*
* Copy data from user space to kernel space.
*
* Returns number of bytes that could not be copied.
* On success, this will be zero.
*
* If some data could not be copied, this function will pad the copied
* data to the requested size using zero bytes.
*/
unsigned long _copy_from_user(void *to, const void __user *from, unsigned long n);

在內核中動態開辟內存
void *kmalloc(size_t size, int flags);
size:要分配內存的大小
flags:分配標志,以幾個方式控制kmalloc的行為

總結

以上是生活随笔為你收集整理的教你写Linux设备驱动程序:一个简短的教程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久综合视频网 | 成人av网址大全 | 久久黄色精品视频 | 91x色| 国产一区二区精品久久91 | 深爱开心激情 | 久久国产精品99国产 | 色妞色视频一区二区三区四区 | 激情小说网站亚洲综合网 | 三级黄免费看 | 四虎在线免费观看 | 久久久久亚洲精品男人的天堂 | 亚州av免费 | 天干啦夜天干天干在线线 | 一区二区三区视频网站 | 三级av免费 | 91丨九色丨高潮 | 伊人伊成久久人综合网站 | 成人九九视频 | 在线看的av网站 | 亚洲日本欧美在线 | 98精品国产自产在线观看 | 综合婷婷| 精品亚洲免费 | 天天操综合网站 | 日韩三级免费 | 色噜噜日韩精品一区二区三区视频 | 97超碰免费在线观看 | 91精品视频观看 | 激情一区二区三区欧美 | av在线直接看 | 操操操操网| 成人av片在线观看 | 欧美亚洲另类在线视频 | 天天视频色版 | 国产精品99爱 | 日韩精品一区二区三区在线播放 | 91精品视频免费看 | 欧美精品久久久久 | 91麻豆福利| 久久精品视频一 | 国产成人av网站 | 色插综合 | 欧美日在线观看 | 婷婷色社区 | 西西44人体做爰大胆视频 | 大型av综合网站 | 蜜臀aⅴ国产精品久久久国产 | 在线观看精品一区 | 在线国产一区二区三区 | 久久ww | 香蕉看片| 992tv人人草| 中文字幕第一 | 日韩最新理论电影 | 久久久久久看片 | 成人午夜影院在线观看 | 日本韩国中文字幕 | 三级黄色片子 | 波多野结衣一区二区 | 亚洲撸撸 | 日韩xxxbbb | 激情av资源 | 亚洲理论片在线观看 | 日韩h在线观看 | 久久国产电影院 | 超碰人人99| 国产四虎在线 | 成人a级网站 | 欧美一二三区在线播放 | 亚洲精品9| 91 | 国产在线观看你懂得 | 香蕉视频日本 | 国产一区二区不卡视频 | 欧美资源| 亚洲极色| 亚洲精品久久在线 | 日本黄色免费观看 | 国产美女精彩久久 | 色偷偷88888欧美精品久久久 | 伊人久在线 | 在线播放日韩av | 超级碰99 | 欧美一级日韩三级 | 极品久久久久 | 国产视频一 | 久青草电影 | 日韩理论电影网 | 人人玩人人添人人澡超碰 | 国产色网站 | 久久精品中文视频 | 国内成人综合 | 久久公开视频 | 福利视频一区二区 | 久久电影色 | 精品国产a| 国产中文字幕一区二区 | 国产专区视频在线 | 国产精品亚洲视频 | 五月婷婷播播 | 91久久一区二区 | 五月天丁香亚洲 | zzijzzij亚洲成熟少妇 | 国产一区二区在线播放视频 | 西西444www高清大胆 | 97超级碰碰碰碰久久久久 | 亚洲激情av| 91精品伦理 | 日韩在线观看视频中文字幕 | 欧美嫩草影院 | 久久久国产精品电影 | 国产91在线观看 | 免费看片网站91 | 免费aa大片 | 日韩色综合 | v片在线看 | 日韩在线电影观看 | 97视频免费看 | 91视频在线观看大全 | 日批视频在线 | 久久精品久久久久电影 | 97色免费视频 | 欧美在线视频一区二区 | 日韩免费观看一区二区 | 黄网站色成年免费观看 | 色九九在线 | 九九免费在线视频 | 激情综合色综合久久综合 | 日韩av在线免费播放 | 一区中文字幕 | 日韩在线观看第一页 | 国产中文字幕在线免费观看 | 中文字幕色婷婷在线视频 | 精品视频在线播放 | 精品国产理论 | 91丨九色丨高潮 | 特级西西人体444是什么意思 | a电影在线观看 | 免费av影视| 伊人开心激情 | 一区二区伦理 | 免费中文字幕视频 | 国产小视频在线播放 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 五月婷婷另类国产 | 精品久久九九 | 91免费视频网站在线观看 | 成年人在线观看免费视频 | 久久综合免费视频影院 | 中文字幕av专区 | 色欧美88888久久久久久影院 | 亚洲日本色 | av一区二区三区在线观看 | 五月天久久综合 | 操操操操网 | 久久精品艹 | 天天干天天摸天天操 | 麻豆视频免费观看 | 亚洲激情综合 | 亚洲影视九九影院在线观看 | 色婷婷激情四射 | 综合精品在线 | 摸bbb搡bbb搡bbbb| 亚洲人成影院在线 | 国产精品原创视频 | 日韩视频中文字幕在线观看 | 日一日操一操 | 91看成人 | 91视频 - v11av| 波多野结衣综合网 | 91成品视频 | 一级片免费在线 | 韩国av免费观看 | 国产中文在线观看 | 日本中文字幕在线播放 | 天天躁日日躁狠狠躁 | 国产一区二区免费在线观看 | 久久久一本精品99久久精品66 | 亚洲精品玖玖玖av在线看 | 91亚洲网站| 久久精品一区二区三区中文字幕 | 激情久久影院 | 精品一区二区三区香蕉蜜桃 | 久草久草久草久草 | 四虎国产精品免费 | 在线视频中文字幕一区 | 天天草综合网 | 亚洲午夜久久久影院 | 99精品国产一区二区 | 国产在线观看中文字幕 | 精品国产一区二区三区蜜臀 | 美女久久久久久 | 国产97碰免费视频 | 免费av 在线 | 五月天丁香视频 | 婷婷电影在线观看 | 99久热在线精品视频成人一区 | 天天曰天天曰 | 国产麻豆成人传媒免费观看 | 日韩字幕 | 精品一区二区综合 | av久久在线 | 亚洲精品国产自产拍在线观看 | 日韩理论电影网 | 在线欧美中文字幕 | 91免费视频黄 | 亚洲午夜精品一区 | 成人午夜黄色 | 一区二区在线电影 | wwwww.国产 | 在线观看国产福利片 | 国产美女精品视频 | 黄色免费网站 | 久草视频手机在线 | 久久夜色精品国产欧美乱极品 | 欧美日韩一级在线 | 亚洲精品视频网 | 国产精品99久久久久久人免费 | 又色又爽又激情的59视频 | 欧美a级成人淫片免费看 | 美女在线观看av | 精品成人久久 | 日韩免费电影一区二区 | 成人国产精品久久久 | 蜜臀久久99精品久久久无需会员 | 亚洲日韩精品欧美一区二区 | 天天av在线播放 | 国产在线精品区 | 97国产精品视频 | 精品国产不卡 | 国产中文字幕免费 | 国产高清网站 | 成人黄色电影在线 | 欧美日韩久久不卡 | 久久久久久蜜av免费网站 | 成年人免费电影在线观看 | 久久久一本精品99久久精品66 | 日韩美一区二区三区 | 黄色影院在线免费观看 | 成人免费在线观看av | 国产一线二线三线性视频 | 又黄又爽又湿又无遮挡的在线视频 | 日韩理论片在线观看 | 国产亚洲精品久久久久秋 | 成人毛片一区 | 91亚洲激情 | 国产精品资源在线 | 毛片久久久 | 亚洲狠狠丁香婷婷综合久久久 | 91精品久久久久久久久 | 日韩特黄一级欧美毛片特黄 | 99成人在线视频 | 日韩理论电影在线 | 久久日本视频 | 综合激情网... | 欧美日韩精品免费观看视频 | 国产亚洲精品中文字幕 | 色噜噜在线观看 | 亚洲日本一区二区在线 | 视频一区二区在线观看 | 最新国产精品视频 | 高清视频一区二区三区 | 欧美综合久久 | 97超碰超碰| a视频在线播放 | 久久精品美女视频网站 | 欧美国产高清 | 狠狠干,狠狠操 | 91综合色 | 九九热视频在线免费观看 | 看片一区二区三区 | 日韩mv欧美mv国产精品 | 久久在线视频精品 | a天堂在线看 | 成人午夜剧场在线观看 | 午夜视频在线观看一区二区三区 | 国产91在线 | 美洲 | 日本丰满少妇免费一区 | 激情视频91 | 黄色毛片视频 | 国产黄色美女 | 玖玖视频免费在线 | 亚洲黄色av | 国产精品黄网站在线观看 | 亚洲免费国产视频 | 韩国在线一区二区 | 久影院| 国产精品免费视频观看 | 视频二区在线 | 国产成人精品午夜在线播放 | 国产精品免费久久久久影院仙踪林 | 亚州欧美精品 | 日韩欧美精品在线观看视频 | 日韩啪啪小视频 | 人人澡人人爽欧一区 | 最新日韩精品 | 欧美激情综合五月色丁香小说 | 在线观看中文av | 亚洲男男gaygay无套同网址 | 国产精品久久久av | 久久久国产精品免费 | 久久人人爽人人爽人人 | 亚洲国产精品久久久 | 99久精品视频 | 日韩欧美69 | 日韩精品一区二区三区在线播放 | av免费看在线 | 在线观看的黄色 | 国产精品自拍在线 | 国产视频中文字幕在线观看 | 国产欧美精品一区二区三区 | 久久情侣偷拍 | 蜜桃av综合网 | 久久免视频 | 久久综合狠狠综合久久激情 | 91精品国产综合久久婷婷香蕉 | 久久调教视频 | 精品久久久精品 | 国产精品福利午夜在线观看 | 高清精品视频 | 天天干天天操天天入 | 久久天堂网站 | 91在线亚洲 | 亚洲精品视频在线 | 久久久黄色av | 丁香婷婷综合网 | 狠狠五月婷婷 | 日韩精品中文字幕一区二区 | 青青河边草免费观看完整版高清 | 国产精品11| 久久在线免费观看 | 天天干天天搞天天射 | 狠狠躁日日躁狂躁夜夜躁 | 色网站在线观看 | 91色国产| 丁香六月久久综合狠狠色 | 天堂av网址| 国产美女免费 | 欧美精品久久久久久久亚洲调教 | 波多野结衣精品在线 | 免费av免费观看 | 五月天色丁香 | 免费高清看电视网站 | 99色| 97理论电影 | 狠狠色噜噜狠狠 | 91中文字幕永久在线 | aaa毛片视频 | 91av播放| 91伊人影院 | 国产亚洲视频中文字幕视频 | 中文字幕大全 | 国产va在线观看免费 | 91视频在线观看大全 | 涩涩色亚洲一区 | 久久无码精品一区二区三区 | 深夜视频久久 | 中文字幕日韩一区二区三区不卡 | 成人一级电影在线观看 | 亚洲无在线 | 婷婷亚洲综合 | 国产精品色婷婷视频 | 婷婷色av | 正在播放一区 | 九九热免费精品视频 | 婷婷色网视频在线播放 | 国产品久精国精产拍 | 精品99免费 | 日日射av| 久久久精品高清 | 色伊人网| 国产资源在线视频 | 欧美另类高潮 | 九九久久免费视频 | 国产成人一区三区 | 久久精品视频在线观看免费 | 国产精品99在线播放 | 天天色天天操综合网 | 成人免费毛片aaaaaa片 | 精品久久91 | 久草国产在线观看 | 摸bbb搡bbb搡bbbb| 黄色一级免费网站 | 久久久在线观看 | 婷婷六月激情 | 国产小视频在线免费观看视频 | 亚洲成av片人久久久 | 三级黄色在线 | 免费视频国产 | 国产一级视频 | 中文字幕2021| 久久综合久久综合这里只有精品 | 午夜精品久久久久久99热明星 | 国产伦精品一区二区三区四区视频 | 精品国产1区二区 | 日韩精品中文字幕在线播放 | 中文字幕观看av | 一区二区三区高清 | 免费高清在线观看成人 | 99视频久 | 视频二区在线 | 婷婷激情综合网 | 中文字幕在线看视频 | 91麻豆精品国产91久久久久久久久 | 久久精品视频一 | 亚洲日韩欧美一区二区在线 | 久久国产精品影视 | 午夜性生活 | 国内成人精品视频 | av一级网站| 色射色 | 成人毛片一区二区三区 | 国产成人精品女人久久久 | 中文字幕在线观看视频免费 | 最近中文字幕mv | 国产在线永久 | 国产aaa免费视频 | 天天躁天天狠天天透 | 国产资源中文字幕 | 欧美网址在线观看 | 久久久久久久久久久久国产精品 | 免费进去里的视频 | 国产精品入口麻豆 | 天天爽网站 | av中文字幕电影 | 国产黑丝袜在线 | 国产精品中文字幕在线 | 久久久久 | 欧美在线视频一区二区三区 | 久久视频免费看 | 久久久污 | 久久精品中文字幕 | 制服丝袜天堂 | 欧美日韩国产在线精品 | 在线观看免费版高清版 | 国产福利一区二区三区在线观看 | 99视频在线看 | 国产尤物在线观看 | 久久精品国产免费观看 | 亚洲a成人v | 久久一区二区三区超碰国产精品 | 日韩在线观看中文字幕 | 911国产 | 久久99精品一区二区三区三区 | 国产一级性生活 | 最新一区二区三区 | 久久一区二区三区四区 | 国产黄色片久久 | 欧美在线视频a | 手机在线观看国产精品 | 美女视频永久黄网站免费观看国产 | 婷婷色av| 国产精品麻豆三级一区视频 | 91在线91 | 国产精品视频久久 | 国产精品久久久久久久久久尿 | 天天综合视频在线观看 | 亚洲狠狠操 | av电影免费在线看 | 99色99| 欧美久草网| 久草网视频在线观看 | av在线短片 | 久久精品一区二区 | 中文字幕亚洲五码 | 91视频国产免费 | 日韩中文字幕第一页 | 91亚洲网 | 日本成人中文字幕在线观看 | 国产福利91精品一区二区三区 | av在线网站大全 | 婷婷丁香国产 | 国产精品亚洲精品 | 999成人免费视频 | 又黄又爽又刺激视频 | 丁香资源影视免费观看 | 9i看片成人免费看片 | 久久色中文字幕 | 91视频黄色 | 2023av| 美女网色 | 久久综合射 | 91av色| 久久综合久久久 | 丁香婷婷在线 | 国产精品久久久久久久妇 | 精品视频久久 | 国产视频一区二区三区在线 | 精品少妇一区二区三区在线 | 免费中文字幕视频 | 中文在线最新版天堂 | 激情婷婷六月 | 日韩免费观看一区二区 | 免费色黄| 亚洲激情中文 | 免费成人在线视频网站 | 亚洲综合视频在线 | 久久精品国产99 | 九九色网| 最近日韩中文字幕中文 | 碰天天操天天 | 久久99精品久久久久久 | 丁香六月婷婷开心婷婷网 | 欧美成a人片在线观看久 | 久久99精品久久久久婷婷 | 成人免费中文字幕 | av观看免费在线 | 久久久久久久久电影 | 中文字幕一区二区三区视频 | 国产精品美女久久久久久久久久久 | 狠狠狠狠狠狠狠狠干 | 国产精品二区三区 | 欧美人体xx | 天天操人人干 | 国产二区精品 | 国产精品 9999 | 麻豆系列在线观看 | 91九色成人蝌蚪首页 | 精品亚洲免费视频 | 成人国产精品久久久久久亚洲 | 91看毛片| 在线观看视频你懂 | 日韩精品观看 | 中文字幕在线观看免费高清电影 | 啪啪免费观看网站 | 综合色狠狠 | 国产毛片久久久 | 一级黄色片在线观看 | 四虎亚洲精品 | 久久综合亚洲鲁鲁五月久久 | 久久ww| 五月天伊人 | 国产精品毛片一区二区在线 | 成年人免费在线观看网站 | 一区二区三区在线免费 | 天天综合入口 | 黄色不卡av | 精品国产伦一区二区三区观看说明 | 涩涩网站在线播放 | 91人人视频在线观看 | 精品成人在线 | 玖玖在线播放 | 亚洲精品合集 | 精品国产不卡 | 国产精品午夜久久久久久99热 | 天天天综合网 | www.伊人色.com | 日韩精品一区二区在线 | 国产精品亚洲综合久久 | 九九久久久久99精品 | 国产一区在线观看免费 | 国产福利一区在线观看 | 欧美视频18 | 色婷婷亚洲综合 | 国产精品va在线播放 | 亚洲小视频在线 | 波多野结衣精品在线 | 精品久久久久久久久久国产 | 91香蕉视频色版 | 国产精品久久99综合免费观看尤物 | 国产精品第7页 | 精品一区二区视频 | 午夜久久美女 | 综合色婷婷 | 久久99婷婷 | 国产精品久久久久久久久久久免费看 | 成人免费观看网站 | 国产精品成人av电影 | 欧美日韩中字 | 久久视频网 | 亚洲欧美精品在线 | 国产高清视频在线免费观看 | 日韩乱码中文字幕 | 狠狠操欧美| 久久国产精品99国产精 | www.国产在线观看 | 一区二区理论片 | 激情五月在线观看 | 日日夜夜天天久久 | 一级全黄毛片 | 午夜电影中文字幕 | 国产成人精品三级 | 香蕉国产91| 91在线视频网址 | www.伊人网 | 国产精品久久久久毛片大屁完整版 | 中文字幕精 | 免费午夜在线视频 | 99婷婷 | 中日韩三级视频 | 日本天天操 | 香蕉日日| 一 级 黄 色 片免费看的 | 成人永久在线 | 精品久久久网 | 久久在线精品 | 国产一区二区免费 | 国产玖玖在线 | 色婷婷播放 | 国产精品欧美一区二区三区不卡 | 黄色免费网站 | 人人爽人人澡 | 国产一级视频在线免费观看 | av播放在线 | 久久男女视频 | 最近中文字幕大全中文字幕免费 | 人人干干人人 | 午夜精品一区二区国产 | 国产精品久久久久久久久久东京 | 国内精品久久久久久久久 | 久久经典国产 | 色狠狠干 | 色婷婷丁香 | 九色自拍视频 | av在线播放国产 | 亚洲综合丁香 | 国产日本高清 | 日韩视频一区二区在线观看 | 黄色av三级在线 | 9在线观看免费高清完整 | 狠狠干夜夜 | 久久婷婷丁香 | 人人超碰在线 | 国产一区在线视频 | 在线观看亚洲精品 | 亚洲精品电影在线 | 天天干 天天摸 天天操 | 国产精品久久久久免费观看 | 免费精品视频 | 国产美女黄网站免费 | 亚洲中字幕 | 一区二区精品在线视频 | 亚洲国产手机在线 | 久久成人午夜视频 | 久久理论影院 | 国产美女在线精品免费观看 | 色播五月激情五月 | 456免费视频 | 黄色一级大片在线免费看国产一 | 欧美国产精品久久久久久免费 | 亚洲爱爱视频 | 麻豆传媒一区二区 | 免费看短 | 国产大陆亚洲精品国产 | 久久综合成人网 | 久久免费视频网 | 成人免费观看a | 国产精品一区久久久久 | 日韩免费播放 | 性色大片在线观看 | 91亚洲网 | 亚洲欧美视屏 | 欧美精品久久久久 | 日本精品视频在线播放 | 特级西西444www高清大视频 | 91视频电影| 黄色av电影一级片 | 欧美日韩精品在线免费观看 | 亚州免费视频 | 成人在线观看日韩 | 97香蕉超级碰碰久久免费软件 | 一级欧美日韩 | av 一区二区三区 | 久一在线 | 国产精品久久久亚洲 | 国精产品999国精产品岳 | 久久午夜国产 | 日韩高清黄色 | 免费h精品视频在线播放 | 国产精品美女久久久久久久 | 亚洲精品视频在线播放 | 96视频免费在线观看 | 国产色道| 黄色在线免费观看网站 | 国产又粗又猛又爽 | 色中文字幕在线观看 | 美女性爽视频国产免费app | 中文字幕 国产视频 | 91视频com| 天天操天天干天天插 | 久久国产福利 | 在线看国产日韩 | 91超国产| 美女免费黄网站 | 精品久久一二三区 | 精品视频久久 | 亚洲码国产日韩欧美高潮在线播放 | 久久精品牌麻豆国产大山 | 欧美成年网站 | 97视频在线观看视频免费视频 | 亚洲美女精品视频 | 国产在线第三页 | 在线久热 | 涩涩网站在线观看 | 国产精品a成v人在线播放 | 三级黄色在线观看 | 久久久久99精品国产片 | 免费黄色a网站 | 天天操天天色天天射 | 日韩欧美在线视频一区二区三区 | 91精品视频免费看 | 色视频网站免费观看 | 最近中文字幕第一页 | 亚洲精品乱码久久久久久蜜桃不爽 | 97电影在线观看 | 亚洲成人黄色 | 97国产超碰 | 97在线观看免费观看高清 | 一区二区精品在线 | 波多野结衣在线观看一区 | 超碰999| 国产精品尤物视频 | 天天色宗合 | 天天射成人 | 99精品视频一区二区 | 欧美91精品国产自产 | 日本最新中文字幕 | 天天综合成人 | 欧美国产日韩一区二区 | 欧美一级电影在线观看 | 亚洲激情电影在线 | 午夜成人影视 | 日韩中文字幕视频在线观看 | 欧美日韩3p | 久热电影 | 在线一区观看 | 久久精品国产亚洲a | 三级黄色在线 | 夜夜高潮夜夜爽国产伦精品 | 日本中文字幕一二区观 | www毛片com| 97综合在线 | 成人免费一级 | 精品国产乱码 | 444av| 国产麻豆果冻传媒在线观看 | 丁香影院在线 | 黄色大片av | 五月婷婷操 | 国产视频在线播放 | 欧美成人影音 | 天堂在线v | 精品国产乱码一区二 | 又色又爽又黄 | 久草在线免费电影 | 久久久国产成人 | 中文字幕二区在线观看 | 久久尤物电影视频在线观看 | 在线观看国产福利片 | 亚洲精品在线网站 | 国产亚洲综合精品 | 免费涩涩网站 | 天天爱天天干天天爽 | 狠狠色伊人亚洲综合网站野外 | 青青河边草观看完整版高清 | 最近能播放的中文字幕 | 麻豆视频在线免费 | 97成人在线免费视频 | 中文国产字幕在线观看 | 亚洲欧美国产精品 | 麻豆视屏| 久久免费国产精品1 | 国产最新视频在线观看 | 免费黄色av片 | 亚洲精品乱码久久久一二三 | 国产剧情一区在线 | 五月天久久久 | 黄色成人在线 | 一级特黄av | 成人一级黄色片 | 日韩一区二区三免费高清在线观看 | 夜夜躁日日躁狠狠久久88av | 亚洲精品电影在线 | 亚洲精选视频在线 | 中文在线字幕免费观看 | 国产大陆亚洲精品国产 | 日韩精品视频在线观看网址 | 97在线观| 久久社区视频 | 日日婷婷夜日日天干 | 美女黄久久 | 色99之美女主播在线视频 | 毛片网在线| 日本精品视频在线观看 | 久久精品官网 | 国产第一页精品 | 丁香婷婷久久 | 久草视频在线看 | 日韩不卡高清 | 丁香高清视频在线看看 | 91视频a | 91爱爱网址| 久久久久久久久久久精 | 9幺看片 | 欧美一区二区在线免费看 | 久久亚洲视频 | 丁香av| 欧美久久久久久久久久久久久 | 亚洲精品午夜国产va久久成人 | 伊人影院得得 | 久久综合九色欧美综合狠狠 | 久草免费看 | 2022国产精品视频 | 人人爱夜夜操 | 一级黄网| 日韩三级一区 | 麻豆视频国产 | 在线国产能看的 | 国产色视频 | 夜夜干夜夜 | 国产麻豆果冻传媒在线观看 | 国语麻豆 | 国产午夜在线观看视频 | 久久午夜色播影院免费高清 | av日韩在线网站 | 福利视频导航网址 | 日韩精品第1页 | 三级黄在线 | 婷婷久久婷婷 | 日韩肉感妇bbwbbwbbw | 婷婷丁香六月 | 国产一二区免费视频 | 最近中文字幕完整视频高清1 | 国产在线观看你懂得 | 日韩国产精品久久久久久亚洲 | 最近高清中文在线字幕在线观看 | 亚洲黄色一级视频 | 永久免费在线 | 一区二区精品在线视频 | 一级全黄毛片 | 在线 影视 一区 | 国产精品久久久久久五月尺 | 中文字幕第一页在线视频 | 天天做日日做天天爽视频免费 | 又爽又黄又无遮挡网站动态图 | 国产主播大尺度精品福利免费 | 久久av网 | 亚洲精品乱码久久 | 久久久私人影院 | 国产伦精品一区二区三区四区视频 | 国产一区视频在线 | 日批视频在线播放 | 成人av免费 | 天天干中文字幕 | 国产中文字幕一区二区三区 | 国产一级精品在线观看 | 色午夜影院 | av不卡在线看 | 精品91在线| 亚洲精品在线免费 | 国产手机在线观看视频 | 天天摸天天干天天操天天射 | 九九视频精品在线 | 国产一级二级三级在线观看 | 日韩国产在线观看 | 国产精品一区二区三区免费视频 | 天天摸天天舔天天操 | 久久精品99久久久久久 | 五月激情站| 免费a v在线| 国产精品久久久久久久久久新婚 | 国产免费观看高清完整版 | 成人久久精品视频 | 中文字幕网址 | 亚洲 中文字幕av | 亚洲一区久久 | 99精品视频在线观看 | 国产一区欧美二区 | 激情丁香久久 | 久久久久久中文字幕 | 欧美日韩免费一区二区 | 国产亚洲日本 | 色激情五月| 狠狠的操你 | 中文字幕高清av | 久久久久久久久久伊人 | 黄色一级在线免费观看 | 伊人亚洲综合 | 丝袜少妇在线 | 久草新在线 | 波多野结衣久久精品 | 久久爱992xxoo | av一区二区在线观看中文字幕 | 国产视频在线一区二区 | 免费日韩电影 | 亚洲精品视频大全 | 久久极品| 亚洲国产播放 | 亚洲国产播放 | 久久狠狠亚洲综合 | 西西www4444大胆视频 | 蜜臀av夜夜澡人人爽人人 | 中文字幕网址 | 99久久er热在这里只有精品66 | 午夜精品电影 | 这里只有精品视频在线观看 | 国产福利在线不卡 | 精品国产乱码一区二 | av 一区二区三区 | 在线亚洲成人 | 亚洲色图美腿丝袜 | 999精品在线 | 在线国产一区二区三区 | 亚洲精品国产精品国产 | 亚洲精品玖玖玖av在线看 | 色美女在线 | 激情五月在线 | 国产区精品在线观看 | 探花视频在线观看 | 亚洲免费视频在线观看 | 免费看精品久久片 | 日韩一区二区三区观看 | 99精品热视频只有精品10 | 国产精品毛片一区二区在线看 | av日韩精品 | 国产精品成人一区二区 | 日韩美av在线 | 99综合电影在线视频 | 欧美va电影 | 国产精品一区二区三区在线播放 | 欧美日韩中文国产一区发布 | 久久爱992xxoo | 中文字幕第一页在线视频 | 国产精品18久久久久vr手机版特色 | 久久视频在线观看免费 | 中文字幕成人 | 久久在现 | 日日爽天天| 久久久精品一区二区三区 | 亚洲五月 | 深爱激情婷婷网 | 久久国产经典视频 | 成人黄色大片在线免费观看 | 国内精品视频在线 | 99精品久久久 | 成人一区二区在线 | 成年人免费观看在线视频 | 天天做日日做天天爽视频免费 | 久久久久9999亚洲精品 | 夜夜骑日日 | 碰超在线97人人 | 一本一本久久a久久 | 欧美成人一区二区 | 九九免费在线视频 | www日韩视频 | 奇米777777| 日本午夜在线亚洲.国产 | 欧美激情在线看 | 日韩美女av在线 | 中文字幕乱码电影 | 国产精品99久久久久久久久久久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品一码二码三码在线 | 99精品久久精品一区二区 | 亚洲专区在线 | 日韩精品最新在线观看 | 综合色中文 | 久久99久久99精品免观看粉嫩 | 国产精品1区2区3区 久久免费视频7 | 狠狠干天天 | 日本三级全黄少妇三2023 | av片一区 | 中文资源在线播放 | 国产精久久久 | 啪啪小视频网站 | 亚洲精品国产综合99久久夜夜嗨 | 91网站免费观看 | 日韩久久精品一区二区三区下载 | 久久99这里只有精品 | 在线高清 | 国产精品二区三区 | 国产精品麻豆一区二区三区 | 正在播放国产精品 | 日本久久久精品视频 | 免费网站黄 | 丁香婷婷激情网 | 久久婷婷五月综合色丁香 | 免费日韩三级 | 91成人网在线 | 偷拍区另类综合在线 | 国产精品视频资源 | 国产精品麻豆三级一区视频 | 久久久亚洲国产精品麻豆综合天堂 | 国产99久久九九精品免费 | 亚洲日本黄色 | 久久国产精品影片 | 欧美整片sss | 国产高清视频色在线www | 黄色在线免费观看网址 | 久久久福利 | 成人一区影院 | 国产99在线播放 | 99精品电影 | 精品国产中文字幕 | 欧美在一区 | 在线精品视频在线观看高清 | 亚洲成人黄色av |