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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

研究UEVENT相关东西,看到2篇优秀的博文,转载与此

發布時間:2024/4/14 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 研究UEVENT相关东西,看到2篇优秀的博文,转载与此 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.chinaunix.net/u3/92745/showart_2145668.html
LINUX設備驅動之設備模型一--kobject

LINUX設備驅動驅動程序模型的核心數據結構是kobjectkobject數據結構在\linux\kobject.h中定義:?

struct kobject {

?????? const char???????????? *name;

?????? struct list_head?????? entry;

?????? struct kobject???????? *parent;

?????? struct kset???????????? *kset;

?????? struct kobj_type???? *ktype;

?????? struct sysfs_dirent? *sd;

?????? struct kref???????????? kref;

?????? unsigned int state_initialized:1;

?????? unsigned int state_in_sysfs:1;

?????? unsigned int state_add_uevent_sent:1;

?????? unsigned int state_remove_uevent_sent:1;

?????? unsigned int uevent_suppress:1;

};

每個kobject都有它的父節點parentksetkobj_type指針,這三者是驅動模型的基本結構,ksetkobject的集合,在\linux\kobject.h中定義:

struct kset {

?????? struct list_head list;

?????? spinlock_t list_lock;

?????? struct kobject kobj;

?????? struct kset_uevent_ops *uevent_ops;

};

可以看到每個kset內嵌了一個kobjectkobj字段),用來表示其自身節點,其list字段指向了所包含的kobject的鏈表頭。我們在后面的分析中將看到kobject如果沒有指定父節點,parent將指向其kset內嵌的kobject

每個kobject都有它的kobj_type字段指針,用來表示kobject在文件系統中的操作方法,kobj_type結構也在\linux\kobject.h中定義:

struct kobj_type {

?????? void (*release)(struct kobject *kobj);

?????? struct sysfs_ops *sysfs_ops;

?????? struct attribute ** default_attrs;

};

release方法是在kobject釋放是調用,sysfs_ops指向kobject對應的文件操作,default_attrskobject的默認屬性,sysfs_ops的將使用default_attrs屬性(在后面的分析中我們將會看到)。

從上面的分析我們可以想象到kobjectksetkobj_type的層次結構:

500)this.width=500;" width="500" border="0">

我們可以把一個kobject添加到文件系統中去(實際上是添加到其父節點所代表的kset中去),內核提供kobject_create_and_add()接口函數:

struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)

{

?????? struct kobject *kobj;

?????? int retval;

?

?????? kobj = kobject_create();

?????? if (!kobj)

????????????? return NULL;

?

?????? retval = kobject_add(kobj, parent, "%s", name);

?????? if (retval) {

????????????? printk(KERN_WARNING "%s: kobject_add error: %d\n",

????????????? ?????? __func__, retval);

????????????? kobject_put(kobj);

????????????? kobj = NULL;

?????? }

?????? return kobj;

}

kobject _create()為要創建的kobject分配內存空間并對其初始化。

struct kobject *kobject_create(void)

{

?????? struct kobject *kobj;

?

?????? kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);

?????? if (!kobj)

????????????? return NULL;

?

?????? kobject_init(kobj, &dynamic_kobj_ktype);

?????? return kobj;

}

kobject_init()kobject基本字段進行初始化,用輸入參數設置kobj_type屬性。

這里粘出代碼以供參考:

void kobject_init(struct kobject *kobj, struct kobj_type *ktype)

{

?????? char *err_str;

?

?????? if (!kobj) {

????????????? err_str = "invalid kobject pointer!";

????????????? goto error;

?????? }

?????? if (!ktype) {

????????????? err_str = "must have a ktype to be initialized properly!\n";

????????????? goto error;

?????? }

?????? if (kobj->state_initialized) {

????????????? /* do not error out as sometimes we can recover */

????????????? printk(KERN_ERR "kobject (%p): tried to init an initialized "

????????????? ?????? "object, something is seriously wrong.\n", kobj);

????????????? dump_stack();

?????? }

?

?????? kobject_init_internal(kobj);

?????? kobj->ktype = ktype;

?????? return;

?

error:

?????? printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str);

?????? dump_stack();

}

static void kobject_init_internal(struct kobject *kobj)

{

?????? if (!kobj)

????????????? return;

?????? kref_init(&kobj->kref);

?????? INIT_LIST_HEAD(&kobj->entry);

?????? kobj->state_in_sysfs = 0;

?????? kobj->state_add_uevent_sent = 0;

?????? kobj->state_remove_uevent_sent = 0;

?????? kobj->state_initialized = 1;

}

接著看kobject_add()函數:

int kobject_add(struct kobject *kobj, struct kobject *parent,

????????????? const char *fmt, ...)

{

?????? va_list args;

?????? int retval;

?

?????? if (!kobj)

????????????? return -EINVAL;

?

?????? if (!kobj->state_initialized) {

????????????? printk(KERN_ERR "kobject '%s' (%p): tried to add an "

????????????? ?????? "uninitialized object, something is seriously wrong.\n",

????????????? ?????? kobject_name(kobj), kobj);

????????????? dump_stack();

????????????? return -EINVAL;

?????? }

?????? va_start(args, fmt);

?????? retval = kobject_add_varg(kobj, parent, fmt, args);

?????? va_end(args);

?

?????? return retval;

}

在上面的初始化中已把位變量設位1

va_start(args, fmt)va_end(args)使用可變參數(可見參數用法不在這里分析),在kobject_add_varg中將把fmt指向的內容賦給kobjectname字段。下面我們詳細看看kobject_add_varg函數:

static int kobject_add_varg(struct kobject *kobj, struct kobject *parent,

???????????????????? ??? const char *fmt, va_list vargs)

{

?????? int retval;

?

?????? retval = kobject_set_name_vargs(kobj, fmt, vargs);

?????? if (retval) {

????????????? printk(KERN_ERR "kobject: can not set name properly!\n");

????????????? return retval;

?????? }

?????? kobj->parent = parent;

?????? return kobject_add_internal(kobj);

}

kobject_set_name_vargs(kobj, fmt, vargs),如果kobjname字段指向的內容為空,則為分配一個內存空間并用fmt指向的內容初始化,把地址賦給kobjname字段。

int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,

??????????????????????????? ? va_list vargs)

{

?????? const char *old_name = kobj->name;

?????? char *s;

?

?????? if (kobj->name && !fmt)

????????????? return 0;

?

?????? kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);

?????? if (!kobj->name)

????????????? return -ENOMEM;

?

?????? /* ewww... some of these buggers have '/' in the name ... */

?????? while ((s = strchr(kobj->name, '/')))

????????????? s[0] = '!';

?

?????? kfree(old_name);

?????? return 0;

}

char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap)

{

?????? unsigned int len;

?????? char *p;

?????? va_list aq;

?

?????? va_copy(aq, ap);

?????? len = vsnprintf(NULL, 0, fmt, aq);

?????? va_end(aq);

?

?????? p = kmalloc(len+1, gfp);

?????? if (!p)

????????????? return NULL;

?

?????? vsnprintf(p, len+1, fmt, ap);

?

?????? return p;

}

繼續kobject_add_varg()返回kobject_add_internal(kobj),就是在這個函數理為kobj創建文件系統結構:

static int kobject_add_internal(struct kobject *kobj)

{

?????? int error = 0;

?????? struct kobject *parent;

?

?????? if (!kobj)

????????????? return -ENOENT;

?????? if (!kobj->name || !kobj->name[0]) {

????????????? WARN(1, "kobject: (%p): attempted to be registered with empty "

???????????????????? ?"name!\n", kobj);

????????????? return -EINVAL;

?????? }

檢查kobj和它的name字段,不存在則返回錯誤信息。

?

?????? parent = kobject_get(kobj->parent);

獲得其父節點,并增加父節點的計數器,kobject結構中的kref字段用于容器的計數,kobject_getkobject_put分別增加和減少計數器,如果計數器為0,則釋放該kobjectkobject_get返回該kobject

?????? /* join kset if set, use it as parent if we do not already have one */

?????? if (kobj->kset) {

????????????? if (!parent)

???????????????????? parent = kobject_get(&kobj->kset->kobj);

????????????? kobj_kset_join(kobj);

????????????? kobj->parent = parent;

?????? }

在這里我們可以看到,如果調用kobject_create_and_add()時參數parent設為NULL,則會去檢查kobjkset是否存在,如果存在就會把kset所嵌套的kobj作為其父節點,并把kobj添加到kset中去。

?????? ?????? pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n",

????????????? ?kobject_name(kobj), kobj, __func__,

????????????? ?parent ? kobject_name(parent) : "<NULL>",

????????????? ?kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>");

打印一些調試信息,接著為kobj創建目錄:

?????? error = create_dir(kobj);

?????? if (error) {

????????????? kobj_kset_leave(kobj);

????????????? kobject_put(parent);

????????????? kobj->parent = NULL;

?

????????????? /* be noisy on error issues */

????????????? if (error == -EEXIST)

???????????????????? printk(KERN_ERR "%s failed for %s with "

???????????????????? ?????? "-EEXIST, don't try to register things with "

???????????????????? ?????? "the same name in the same directory.\n",

???????????????????? ?????? __func__, kobject_name(kobj));

????????????? else

???????????????????? printk(KERN_ERR "%s failed for %s (%d)\n",

???????????????????? ?????? __func__, kobject_name(kobj), error);

????????????? dump_stack();

?????? } else

????????????? kobj->state_in_sysfs = 1;

?

?????? return error;

}

如果創建不成功,則回滾上面的操作,成功的話則設置kobjstate_in_sysfs標志。

在看看create_dir()函數中具體創建了那些內容:

static int create_dir(struct kobject *kobj)

{

?????? int error = 0;

?????? if (kobject_name(kobj)) {

????????????? error = sysfs_create_dir(kobj);

????????????? if (!error) {

???????????????????? error = populate_dir(kobj);

???????????????????? if (error)

??????????????????????????? sysfs_remove_dir(kobj);

????????????? }

?????? }

?????? return error;

}

sysfs_create_dir()先為kobj創建了一個目錄文件

int sysfs_create_dir(struct kobject * kobj)

{

?????? struct sysfs_dirent *parent_sd, *sd;

?????? int error = 0;

?

?????? BUG_ON(!kobj);

?

?????? if (kobj->parent)

????????????? parent_sd = kobj->parent->sd;

?????? else

????????????? parent_sd = &sysfs_root;

?

?????? error = create_dir(kobj, parent_sd, kobject_name(kobj), &sd);

?????? if (!error)

????????????? kobj->sd = sd;

?????? return error;

}

如果kobj->parentNULL,就把&sysfs_root作為父節點sd,即/sys下面創建結點。

然后調用populate_dir

static int populate_dir(struct kobject *kobj)

{

?????? struct kobj_type *t = get_ktype(kobj);

?????? struct attribute *attr;

?????? int error = 0;

?????? int i;

?

?????? if (t && t->default_attrs) {

????????????? for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) {

???????????????????? error = sysfs_create_file(kobj, attr);

???????????????????? if (error)

??????????????????????????? break;

????????????? }

?????? }

?????? return error;

}

得到kobjkobj_type,歷遍kobj_typedefault_attrs并創建屬性文件,文件的操作會回溯到sysfs_opsshowstore會調用封裝了attributekobj_attribute結構的storeshow方法(在后面的代碼中將會分析)。

由于上面kobject_init(kobj, &dynamic_kobj_ktype)用默認dynamic_kobj_ktype作為kobj_type參數,而dynamic_kobj_ktypedefault_attrsNULL,所以這里沒有創建屬性文件。

至此,我們已經知道了kobject_create_and_add()函數創建kobject,掛到父kobject,并設置其kobj_type,在文件系統中為其創建目錄和屬性文件等。

另外,如果我們已靜態定義了要創建的kobject,則可以調用kobject_init_and_add()來注冊kobject,其函數如下:

int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,

???????????????????? ?struct kobject *parent, const char *fmt, ...)

{

?????? va_list args;

?????? int retval;

?

?????? kobject_init(kobj, ktype);

?

?????? va_start(args, fmt);

?????? retval = kobject_add_varg(kobj, parent, fmt, args);

?????? va_end(args);

?

?????? return retval;

}

通過上面的分析我們很輕松就能理解這個函數。

?

內核提供注銷kobject的函數是kobject_del()

void kobject_del(struct kobject *kobj)

{

?????? if (!kobj)

????????????? return;

?

?????? sysfs_remove_dir(kobj);

?????? kobj->state_in_sysfs = 0;

?????? kobj_kset_leave(kobj);

?????? kobject_put(kobj->parent);

?????? kobj->parent = NULL;

}

刪除kobj目錄及其目錄下的屬性文件,清kobjstate_in_sysfs標志,把kobjkset中刪除,減少kobj->parent的計數并設其指針為空。

?


LINUX設備驅動之設備模型二--kset

我們已經知道了kset內嵌了kobject來表示自身的節點,創建kset就要完成其內嵌kobject,注冊kset時會產生一個事件,事件而最終會調用uevent_ops字段指向結構中的函數,這個事件是通過用戶空間的hotplug程序處理。下面我們一步一步分析。

內核同樣提供了創建和注冊kset的函數kset_create_and_add()

struct kset *kset_create_and_add(const char *name,

??????????????? ?struct kset_uevent_ops *uevent_ops,

??????????????? ?struct kobject *parent_kobj)

{

??? struct kset *kset;

??? int error;

?

??? kset = kset_create (name, uevent_ops, parent_kobj);

??? if (!kset)

??????? return NULL;

??? error = kset_register(kset);

??? if (error) {

??????? kfree(kset);

??????? return NULL;

??? }

??? return kset;

}

輸入參數有一個kset_uevent_ops類型的結構變量,其結構包含三個函數指針,我們在后面的分析到這三個函數在什么時候被調用,kset_uevent_ops結構定義如下:

struct kset_uevent_ops {

??? int (*filter)(struct kset *kset, struct kobject *kobj);

??? const char *(*name)(struct kset *kset, struct kobject *kobj);

??? int (*uevent)(struct kset *kset, struct kobject *kobj,

??????? ????? struct kobj_uevent_env *env);

};

繼續看上面的函數,先調用kset_create ()創建一個kset,接著調用kset_register()注冊它。

static struct kset *kset_create(const char *name,

??????????????? struct kset_uevent_ops *uevent_ops,

??????????????? struct kobject *parent_kobj)

{

??? struct kset *kset;

??? int retval;

?

??? kset = kzalloc(sizeof(*kset), GFP_KERNEL);

??? if (!kset)

??????? return NULL;

??? retval = kobject_set_name(&kset->kobj, name);

??? if (retval) {

??????? kfree(kset);

??????? return NULL;

??? }

??? kset->uevent_ops = uevent_ops;

??? kset->kobj.parent = parent_kobj;

?

??? /*

??? ?* The kobject of this kset will have a type of kset_ktype and belong to

??? ?* no kset itself.? That way we can properly free it when it is

??? ?* finished being used.

??? ?*/

??? kset->kobj.ktype = &kset_ktype;

??? kset->kobj.kset = NULL;

?

??? return kset;

}

kset分配內存,如我們上面分析,初始化了kset內嵌的kobject(這里還未將kobject注冊到文件系統),另外用輸入參數初始化ksetuevent_ops字段。

接著看kset的注冊函數kset_register()

int kset_register(struct kset *k)

{

??? int err;

?

??? if (!k)

??????? return -EINVAL;

?

??? kset_init(k);

??? err = kobject_add_internal(&k->kobj);

??? if (err)

??????? return err;

??? kobject_uevent(&k->kobj, KOBJ_ADD);

??? return 0;

}

在這里終于看到調用kobject_add_internal()將kset內嵌的kobject注冊到文件系統,這個函數我們在上面已經分析。

我們上面說到注冊kset會產生一個事件,就是在這里調用了kobject_uevent(&k->kobj, KOBJ_ADD)

kobject_uevent()\lib\ kobject_uevent.c中:

int kobject_uevent(struct kobject *kobj, enum kobject_action action)

{

??? return kobject_uevent_env(kobj, action, NULL);

}

轉入kobject_uevent_env()

這個函數比較長,我們分段分析

int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,

??????? ?????? char *envp_ext[])

{

??? struct kobj_uevent_env *env;

??? const char *action_string = kobject_actions[action];

??? const char *devpath = NULL;

??? const char *subsystem;

??? struct kobject *top_kobj;

??? struct kset *kset;

??? struct kset_uevent_ops *uevent_ops;

??? u64 seq;

??? int i = 0;

??? int retval = 0;

?

??? pr_debug("kobject: '%s' (%p): %s\n",

??????? ?kobject_name(kobj), kobj, __func__);

?

??? /* search the kset we belong to */

??? top_kobj = kobj;

??? while (!top_kobj->kset && top_kobj-> parent)

??????? top_kobj = top_kobj->parent;

?

??? if (!top_kobj->kset) {

??????? pr_debug("kobject: '%s' (%p): %s: attempted to send uevent "

??????????? ?"without kset!\n", kobject_name(kobj), kobj,

??????????? ?__func__);

??????? return -EINVAL;

??? }

?

??? kset = top_kobj->kset;

??? uevent_ops = kset-> uevent_ops;

如果如果kobjksetparent字段都不存在,說明找不到所屬kset,也就沒有uevent_ops,不能產生事件,返回錯誤信息;相反則找到了存在ksetkobj或父kobject(依次往上找),并賦值給uevent_ops

?

??? /* skip the event, if uevent_suppress is set*/

??? if (kobj-> uevent_suppress) {

??????? pr_debug("kobject: '%s' (%p): %s: uevent_suppress "

??????????????? ?"caused the event to drop!\n",

??????????????? ?kobject_name(kobj), kobj, __func__);

??????? return 0;

??? }

如果設置了uevent_suppress字段,說明不希望產生事件,忽略事件正確返回。注意驅動程序將在適當的地方產生改事件。

??? /* skip the event, if the filter returns zero. */

??? if (uevent_ops && uevent_ops->filter)

??????? if (!uevent_ops->filter(kset, kobj)) {

??????????? pr_debug("kobject: '%s' (%p): %s: filter function "

??????????????? ?"caused the event to drop!\n",

??????????????? ?kobject_name(kobj), kobj, __func__);

??????????? return 0;

??????? }

如果uevent_ops->filter返回0,同樣忽略事件正確返回。

??? if (uevent_ops && uevent_ops->name)

??????? subsystem = uevent_ops->name(kset, kobj);

??? else

??????? subsystem = kobject_name(&kset->kobj);

??? if (!subsystem) {

??????? pr_debug("kobject: '%s' (%p): %s: unset subsystem caused the "

??????????? ?"event to drop!\n", kobject_name(kobj), kobj,

??????????? ?__func__);

??????? return 0;

??? }

獲得子系統的名稱,不存在則返回。

??? /* environment buffer */

??? env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);

??? if (!env)

??????? return -ENOMEM;

分配一個kobj_uevent_env結構內存,用于存放環境變量的值。

/* complete object path */

??? devpath = kobject_get_path(kobj, GFP_KERNEL);

??? if (!devpath) {

??????? retval = -ENOENT;

??????? goto exit;

??? }

獲得引發事件的kobjectsysfs中的路徑。

??? /* default keys */

??? retval = add_uevent_var(env, "ACTION=%s", action_string);

??? if (retval)

??????? goto exit;

??? retval = add_uevent_var(env, "DEVPATH=%s", devpath);

??? if (retval)

??????? goto exit;

??? retval = add_uevent_var(env, "SUBSYSTEM=%s", subsystem);

??? if (retval)

??????? goto exit;

?

??? /* keys passed in from the caller */

??? if (envp_ext) {

??????? for (i = 0; envp_ext[i]; i++) {

??????????? retval = add_uevent_var(env, "%s", envp_ext[i]);

??????????? if (retval)

??????????????? goto exit;

??????? }

??? }

調用add_uevent_var()kobj_uevent_env填充action_string,kobject路徑,子系統名稱以及其他指定環境變量。

?

???? /* let the kset specific function add its stuff */

???? if (uevent_ops && uevent_ops->uevent) {

???????? retval = uevent_ops->uevent(kset, kobj, env);

???????? if (retval) {

????????????? pr_debug("kobject: '%s' (%p): %s: uevent() returned "

?????????????????? ?"%d\n", kobject_name(kobj), kobj,

?????????????????? ?__FUNCTION__, retval);

????????????? goto exit;

???????? }

???? }

調用uevent_opsuevent函數,編程人員可在此函數中實現自定義的功能。

??? /*

??? ?* Mark "add" and "remove" events in the object to ensure proper

??? ?* events to userspace during automatic cleanup. If the object did

??? ?* send an "add" event, "remove" will automatically generated by

??? ?* the core, if not already done by the caller.

??? ?*/

??? if (action == KOBJ_ADD)

??????? kobj->state_add_uevent_sent = 1;

??? else if (action == KOBJ_REMOVE)

??????? kobj->state_remove_uevent_sent = 1;

設置KOBJ_ADDKOBJ_REMOVE的標志。

??? /* we will send an event, so request a new sequence number */

??? spin_lock(&sequence_lock);

??? seq = ++uevent_seqnum;

??? spin_unlock(&sequence_lock);

??? retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq);

??? if (retval)

??????? goto exit;

?

#if defined(CONFIG_NET)

??? /* send netlink message */

??? if (uevent_sock) {

??????? struct sk_buff *skb;

??????? size_t len;

?

??????? /* allocate message with the maximum possible size */

??????? len = strlen(action_string) + strlen(devpath) + 2;

??????? skb = alloc_skb(len + env->buflen, GFP_KERNEL);

??????? if (skb) {

??????????? char *scratch;

?

??????????? /* add header */

??????????? scratch = skb_put(skb, len);

??????????? sprintf(scratch, "%s@%s", action_string, devpath);

?

??????????? /* copy keys to our continuous event payload buffer */

??????????? for (i = 0; i < env->envp_idx; i++) {

??????????????? len = strlen(env->envp[i]) + 1;

??????????????? scratch = skb_put(skb, len);

??????????????? strcpy(scratch, env->envp[i]);

??????????? }

?

??????????? NETLINK_CB(skb).dst_group = 1;

??????????? retval = netlink_broadcast(uevent_sock, skb, 0, 1,

??????? ??????????????? ?? GFP_KERNEL);

??????????? /* ENOBUFS should be handled in userspace */

??????????? if (retval == -ENOBUFS)

??????????????? retval = 0;

??????? } else

??????????? retval = -ENOMEM;

??? }

#endif

??? /* call uevent_helper, usually only enabled during early boot */

??? if (uevent_helper[0]) {

??????? char *argv [3];

?

??????? argv [0] = uevent_helper;

??????? argv [1] = (char *)subsystem;

??????? argv [2] = NULL;

??????? retval = add_uevent_var(env, "HOME=/");

??????? if (retval)

??????????? goto exit;

??????? retval = add_uevent_var(env,

??????????????????? "PATH=/sbin:/bin:/usr/sbin:/usr/bin");

??????? if (retval)

??????????? goto exit;

添加HOMEPATH環境變量。

??????? retval = call_usermodehelper(argv[0], argv,

??????????????????? ???? env->envp, UMH_WAIT_EXEC);

??? }

?

exit:

??? kfree(devpath);

??? kfree(env);

??? return retval;

}

調用hotplug函數。

看一下kset_unregister()

void kset_unregister (struct kset *k)

{

??? if (!k)

??????? return;

??? kobject_put(&k-> kobj);

}

減少其內嵌的kobj計數,為0則釋放其內存空間。

?

已經分析完kobjectksetlinux的設備模型就是基于這兩個數據結構的,在此基礎上,后續將分析設備模型中的devicedriver、和bus

轉載于:https://www.cnblogs.com/yuanfang/archive/2010/12/24/1916229.html

總結

以上是生活随笔為你收集整理的研究UEVENT相关东西,看到2篇优秀的博文,转载与此的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产一级电影免费观看 | 亚洲精选视频免费看 | 五月婷婷婷婷婷 | 日韩欧美网站 | 99免费在线观看视频 | 激情综合网五月激情 | 日日草av | 国产精品电影一区二区 | 国产色婷婷在线 | 免费日韩一区二区三区 | 69精品久久 | 91丨精品丨蝌蚪丨白丝jk | 久久激情视频 久久 | 中文字幕二区三区 | 久久久久国产精品一区 | 国产精品久久毛片 | 国产一区二区在线观看视频 | 国产日韩精品一区二区在线观看播放 | 久久电影中文字幕视频 | 天天爱天天操天天射 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 久久国产精品久久精品国产演员表 | 日韩视频免费在线观看 | 国产激情电影综合在线看 | 国产91精品看黄网站 | 色吊丝在线永久观看最新版本 | 九九热1| 日韩中文字| 夜夜操夜夜干 | 91视频在线免费下载 | 久草视频看看 | 久久久久久久久久网站 | 亚洲精品自拍视频在线观看 | 香蕉视频18 | 精品视频在线免费观看 | 国产理论一区二区三区 | 国产在线欧美 | 少妇bbbb揉bbbb日本 | 国产精品入口66mio女同 | 麻豆激情电影 | 超碰97国产精品人人cao | 免费视频xnxx com | 国产在线日韩 | 欧美激情精品久久久久久免费印度 | 成人黄色中文字幕 | 日韩高清免费电影 | 欧美性另类| 免费碰碰 | av一级黄| 欧美一性一交一乱 | 久久久久久久久久久久影院 | 国产乱码精品一区二区蜜臀 | 国产中文字幕在线 | 午夜影院一级 | 成人综合婷婷国产精品久久免费 | 久久久久久福利 | 夜夜操天天摸 | а天堂中文最新一区二区三区 | 日日噜噜噜噜夜夜爽亚洲精品 | 色多多视频在线 | 久久久国产电影 | 欧美性脚交 | 91污视频在线 | 色视频一区 | 黄色小说在线观看视频 | 涩涩爱夜夜爱 | 国内精品亚洲 | 99精品国产99久久久久久97 | 97综合在线 | 91av免费看 | 久久夜色精品国产欧美一区麻豆 | 久久你懂的 | 精品亚洲va在线va天堂资源站 | 久久久久久久av | www.777奇米| www91在线观看| 亚洲免费精彩视频 | 色网站免费在线观看 | 亚洲免费在线观看视频 | 国际精品久久 | 日本h在线播放 | 高清不卡毛片 | 午夜久久久久久久久久影院 | 一区二区亚洲精品 | 欧美精品少妇xxxxx喷水 | 日韩久久精品一区二区三区 | 在线草 | 91成人看片 | 高清国产一区 | 一级片免费观看视频 | 一区二区三区日韩视频在线观看 | 日躁夜躁狠狠躁2001 | 日韩一级精品 | 人人超在线公开视频 | 国产精品久久久久久久久久久久久久 | 免费一区在线 | 91视频在线 | 成人黄色电影在线播放 | 久久精品伊人 | 日韩乱色精品一区二区 | 黄色软件在线观看免费 | 欧美日韩二区在线 | 97在线观看免费观看 | 天天综合成人 | 亚洲日本va午夜在线影院 | 国产在线国偷精品产拍免费yy | 成年人黄色免费看 | 国产精品99久久久久人中文网介绍 | 99视频免费看 | 最近中文字幕大全中文字幕免费 | 色婷婷激情综合 | 超碰97.com| 亚洲精品乱码久久久久 | 亚洲1区在线| 在线观看完整版免费 | 亚洲视频每日更新 | 欧美日韩在线网站 | 天天插天天射 | 国产成人精品一区二区三区网站观看 | 99热99 | 午夜视频免费 | 黄色特级毛片 | 91精品国产入口 | 天天操天天射天天插 | 在线中文字幕一区二区 | 国产免费一区二区三区网站免费 | 天天拍天天色 | 99操视频 | 国产在线精品二区 | 草久久久久 | 成人97视频一区二区 | 99久久久久久| 日韩免费视频观看 | 超碰在线cao | 99久久精品一区二区成人 | 毛片网免费 | 国产精品中文字幕在线 | 91精品国产99久久久久久久 | 日韩大片免费观看 | 久青草影院 | 日韩欧美精品在线观看视频 | 97免费在线观看视频 | 日韩午夜剧场 | 中文av影院 | 日韩一区二区三区观看 | 黄色免费观看 | 欧美一级看片 | 日韩在线视频国产 | 国产99久久精品一区二区永久免费 | 精品专区一区二区 | 天堂va在线观看 | 成人一区二区在线观看 | www.人人草| 亚洲人人爱 | 中文字幕超清在线免费 | av在线免费观看网站 | 超碰97在线人人 | 在线 国产 日韩 | 久草在线免 | 天天天色综合a | 国产精品18久久久久久久久 | 国产精品porn | 视频一区二区在线 | 亚洲精品国产日韩 | a级片网站 | 国产成人精品三级 | 欧美性大战久久久久 | 亚洲 精品在线视频 | 99精品视频在线观看免费 | 四川bbb搡bbb爽爽视频 | 亚洲精品va | 久久久久女人精品毛片九一 | 中文字幕高清在线播放 | 精品1区2区3区| 国产中文字幕国产 | 中文字幕免费看 | 色五婷婷| 69国产精品成人在线播放 | 在线a亚洲视频播放在线观看 | a久久久久| 韩日av在线| 韩国一区二区在线观看 | 久久污视频 | 亚洲国产网站 | 国产裸体bbb视频 | 亚洲全部视频 | 最近字幕在线观看第一季 | 久久日韩精品 | 久久久久免费精品视频 | 99人成在线观看视频 | 国产精品成人av久久 | 99久久精品国产毛片 | 久草视频免费在线播放 | 国产午夜三级一二三区 | 色之综合网 | 久久影视中文字幕 | 日韩一区二区在线免费观看 | 97超碰.com| 午夜999| 手机av资源 | 97超碰免费在线 | 99精品欧美一区二区蜜桃免费 | 在线色吧 | 欧美91成人网| 777久久久 | 欧美日韩另类视频 | 亚洲视频在线观看网站 | 亚洲视频电影在线 | 一级做a爱片性色毛片www | 黄色的视频网站 | 麻花传媒mv免费观看 | 福利一区在线 | 一区二区三区高清 | 免费网站在线观看人 | 在线视频观看成人 | 久久不色 | 91手机视频 | 91视频在线观看下载 | 久久亚洲视频 | 日韩一区二区三区免费视频 | 久久人人爽人人爽人人 | 麻豆传媒一区二区 | 97在线视频免费观看 | 欧美成年性 | 午夜影视剧场 | 精品av在线播放 | 在线看黄网站 | 在线观看国产www | 中文字幕日韩有码 | 免费精品视频在线 | 天天综合天天综合 | 网站在线观看日韩 | 97国产一区二区 | 久久精品视频网站 | 91亚色在线观看 | 国产日韩欧美精品在线观看 | 国产精品高清免费在线观看 | 成年人看片网站 | 免费看片成年人 | 天天操天天舔天天干 | 亚洲欧美日韩精品久久久 | 韩国一区二区av | 国产精品久久久视频 | 久久伊99综合婷婷久久伊 | 中文字幕乱码一区二区 | 午夜成人免费影院 | 国产免费又爽又刺激在线观看 | 亚洲国产美女久久久久 | 天天干天天搞天天射 | 久久午夜羞羞影院 | 亚洲黄色免费在线看 | 成人看片| 亚洲激情在线视频 | www.伊人色.com | 人人搞人人干 | 99久久日韩精品视频免费在线观看 | 国产护士hd高朝护士1 | 日本二区三区在线 | 天天草视频| 成人在线免费观看视视频 | 久久久国产精品一区二区中文 | 欧美性成人 | 国产精品网在线观看 | 麻豆一区在线观看 | 又黄又刺激又爽的视频 | 国产精品久久影院 | 亚洲成a人片综合在线 | 三级免费黄色 | 成人在线免费小视频 | 在线免费观看视频a | av一级黄| 国产免费区 | 91天天操| 18av在线视频 | 亚洲第一色 | 亚洲精品国产精品国自产观看 | 色偷偷网站视频 | 久久视频网 | 激情婷婷综合 | 91在线视频播放 | 日韩视频免费在线 | 国产在线国偷精品产拍免费yy | 亚洲影院一区 | 久久视频精品在线观看 | 天天曰天天曰 | 国产大片免费久久 | 人人澡超碰碰97碰碰碰软件 | 亚洲成色777777在线观看影院 | 不卡日韩av| 亚洲欧美日韩精品久久久 | 一区二区三区四区久久 | 丁香高清视频在线看看 | 国产精品成人免费精品自在线观看 | 麻豆精品传媒视频 | 亚洲午夜久久久久久久久 | 免费三级大片 | 久久毛片网站 | 麻豆一精品传二传媒短视频 | 在线亚州 | 成人av在线网址 | 国产色视频123区 | 成人国产精品入口 | 超碰成人免费电影 | 五月激情综合婷婷 | 亚洲精品裸体 | 一区二区视频在线免费观看 | 久久免费视频1 | 国产视频精品在线 | 超碰免费公开 | 91精品小视频 | 亚洲毛片久久 | 日韩国产精品毛片 | 亚洲人xxx| 欧美精品乱码久久久久久按摩 | 97精品在线视频 | 91禁在线看 | 欧美色噜噜 | 欧美黑人xxxx猛性大交 | 天天添夜夜操 | 欧美日韩在线免费观看视频 | 在线天堂中文www视软件 | 综合色站导航 | 国产高清视频在线免费观看 | 国内毛片毛片 | 国产成人在线观看 | 97香蕉久久超级碰碰高清版 | 亚洲午夜精品在线观看 | 国产精品手机看片 | 日韩首页 | 国产麻豆视频网站 | 四虎成人精品永久免费av九九 | 888av| 99久久精品无码一区二区毛片 | 91成人午夜 | 免费看的国产视频网站 | 高清在线一区 | 精品亚洲视频在线 | 精品久久久久久久久亚洲 | 国产91国语对白在线 | 日本最大色倩网站www | 欧美国产日韩久久 | 亚洲伊人网在线观看 | 精品国产一二三 | 激情片av | 国产高清日韩 | 超碰在线日韩 | 日批网站免费观看 | 91久久人澡人人添人人爽欧美 | 欧美有色 | 日韩av不卡在线 | 久久久人人爽 | 国产成人黄色片 | 国产亚洲免费观看 | 波多野结衣在线中文字幕 | 香蕉国产91| 欧美一区二区免费在线观看 | 久久九九影院 | 国产成人一区二区三区 | 久久er99热精品一区二区三区 | 中文字幕在线观看完整 | 中文字幕国产在线 | 亚洲精品视 | 四虎成人免费影院 | 伊在线视频| 99爱在线观看 | 美女露久久 | 国产免费不卡 | 精品 激情 | 玖玖玖在线 | 99久久久久久久久久 | 啪啪免费观看网站 | 亚洲精品字幕在线 | 亚洲视频中文 | 黄色毛片网站在线观看 | 日韩欧美一区二区在线观看 | 韩国精品一区二区三区六区色诱 | 99婷婷| 久久国产系列 | 欧美做受高潮电影o | 国产成人精品久久二区二区 | 精品毛片一区二区免费看 | 亚洲日本在线视频观看 | 精品日韩中文字幕 | 亚洲综合黄色 | 国产免费片 | 日韩欧美电影 | 丁香综合五月 | 日日夜夜网 | 欧美在线久久 | 欧美日韩高清不卡 | 精品国产伦一区二区三区免费 | 免费高清国产 | 麻豆视频www | 国产亚洲精品美女久久 | 亚洲极色 | 日韩色高清 | 婷婷丁香色 | 久久国产高清 | 国产视频在线观看免费 | 91视频国产高清 | 国产精品成人久久 | 日日夜夜综合网 | 亚洲另类人人澡 | 在线观看成年人 | 日本中文字幕网址 | av免费在线看网站 | 中文字幕在线乱 | 天天天干夜夜夜操 | 日本大片免费观看在线 | 青青河边草免费观看 | 激情五月五月婷婷 | 国产99久久久久 | 欧洲亚洲精品 | 不卡的av在线 | 黄色av一级 | 久久午夜视频 | 欧美在线观看禁18 | 久久久免费在线观看 | 国产日韩精品在线 | 中文字幕在线免费看 | 中文字幕在线国产精品 | 成年人黄色av | 成人国产精品入口 | 国产精品a成v人在线播放 | 天天弄天天操 | 婷婷色中文| av导航福利 | 天天综合亚洲 | 91日韩在线播放 | 久久精品中文字幕免费mv | 久久精品99国产精品亚洲最刺激 | 亚洲精品成人av在线 | 一区二区三区三区在线 | 国产黄色高清 | 九九久久久久久久久激情 | 日韩久久久 | 视频三区在线 | 91在线视频免费91 | 久久久久黄色 | 国产不卡av在线播放 | 国产99久久精品一区二区300 | 五月婷婷伊人网 | 综合久久网 | 国产精品一区二区在线免费观看 | 免费黄色看片 | 天堂av色婷婷一区二区三区 | 日本黄色免费在线观看 | 狠狠躁日日躁狂躁夜夜躁av | 成人免费在线观看电影 | 在线观看日韩一区 | 天天玩天天干天天操 | 日韩一区二区三区在线观看 | 久久综合色综合88 | 亚洲欧美日韩国产精品一区午夜 | 爱情影院aqdy鲁丝片二区 | 久久免费播放视频 | 四虎影视精品永久在线观看 | 999热视频 | 亚洲激情网站免费观看 | 婷婷丁香久久五月婷婷 | 欧美精品做受xxx性少妇 | 操操碰 | 色婷婷欧美 | 亚洲精品综合久久 | 国产精品久久久久av | 在线播放 亚洲 | 最新久久免费视频 | 一级黄色片在线免费观看 | av高清网站在线观看 | 国产麻豆电影在线观看 | 日韩高清观看 | h视频在线看 | 亚洲午夜久久久综合37日本 | 欧美性大胆 | 综合久久久久久 | 国产精彩视频一区 | 亚洲精品成人av在线 | 在线观看午夜av | 中中文字幕av在线 | 久久深夜福利免费观看 | 国产又粗又猛又爽又黄的视频先 | 久久久久久久久久久久影院 | 狠狠干在线播放 | 国产精品久久片 | 怡红院成人在线 | 国产精品短视频 | 国产不卡在线观看视频 | 97在线观看免费观看高清 | 一区二区视频免费在线观看 | 久久久久久久久久影院 | 国产精品成人国产乱一区 | 公与妇乱理三级xxx 在线观看视频在线观看 | 日韩成人邪恶影片 | av 一区 二区 久久 | 2024av| 免费福利在线 | 欧美做受xxx | 日韩三级视频 | 色香网| 日韩免费在线观看视频 | 欧美另类tv| 午夜av网站 | 国产伦精品一区二区三区无广告 | 热热热热热色 | 日韩最新av | 国产精品第一视频 | 美女福利视频一区二区 | a色视频 | 成人av电影免费 | 91九色国产蝌蚪 | 国产精品欧美在线 | 精品久久久久久一区二区里番 | 色a资源在线 | 久久99热这里只有精品 | 国产精品第一 | 亚洲好视频 | 99久久精品久久久久久动态片 | 国产91区| 欧美激情精品久久久久久免费印度 | 夜夜操狠狠操 | 91人人在线 | 欧美精品中文在线免费观看 | 在线免费观看一区二区三区 | 超碰97人 | 国产精品高潮在线观看 | 91视频免费网站 | 2019av在线视频 | jizz18欧美18 | 婷婷色站 | 免费av网站在线看 | 国产视频一区二区三区在线 | 国产视频久久久 | 久久中文字幕导航 | 天天射天天爽 | www.69xx| 91人人网| 久久久免费| 91人人爽人人爽人人精88v | 国产精品毛片一区二区 | 久久免费电影 | 婷婷六月天在线 | 深夜福利视频一区二区 | 美女网站在线观看 | 91私密视频| 天海翼一区二区三区免费 | 久久精品国产成人精品 | 天海翼一区二区三区免费 | 超碰97中文 | 日韩电影精品 | 高潮久久久 | 美女天天操 | 午夜12点 | 亚洲自拍av在线 | 亚洲成av人片在线观看 | 久久精品视频在线免费观看 | 久久五月婷婷丁香社区 | 99成人精品 | 日本黄色免费播放 | 91中文在线 | 韩国在线视频一区 | 国产一级免费片 | 在线视频久 | 久久免费视频在线观看 | 成人高清av在线 | 美女久久久久久久久久久 | 日韩99热 | 国产精品成人a免费观看 | 国产精品九九热 | 国产99久久久久 | 日本在线观看一区二区三区 | 国产三级精品在线 | 欧美视频日韩视频 | 日韩成人精品一区二区三区 | 狠狠久久综合 | 欧美一级久久久久 | 日韩高清精品免费观看 | 三级黄色a| 精品国产人成亚洲区 | 正在播放国产一区二区 | 手机在线看永久av片免费 | 精品视频网站 | 国产涩涩网站 | 天堂在线一区二区 | 久久情网| 中文字幕 婷婷 | 中文字幕a∨在线乱码免费看 | 久久国产露脸精品国产 | 精品国产一区二区三区av性色 | 毛片永久免费 | 日韩电影在线观看一区二区三区 | 国产特级毛片aaaaaa | 免费看特级毛片 | 日韩精品中文字幕有码 | 亚洲国产字幕 | 视频国产一区二区三区 | 五月天色中色 | 亚洲狠狠丁香婷婷综合久久久 | 国产69精品久久久久99尤 | 欧美成人中文字幕 | 成人影音av| 欧美成人按摩 | 国产麻豆成人传媒免费观看 | 91亚洲欧美激情 | 麻豆av电影| 天天激情天天干 | 狂野欧美激情性xxxx | 国产无限资源在线观看 | 五月婷婷操 | 九九交易行官网 | 国产精品久久久久久久免费大片 | 国产一级二级视频 | 九九在线视频免费观看 | 精品久久久成人 | 中文国产成人精品久久一 | 国产精品一区二区久久精品爱微奶 | 亚洲精品国偷拍自产在线观看 | 国产一二区视频 | 欧美巨乳网 | 国产精品国产三级国产aⅴ入口 | 国产中文字幕在线免费观看 | 精品视频免费久久久看 | 久久天天躁 | 天天色天天骑天天射 | 一区 在线 影院 | 91热视频在线观看 | 国产精品久久久久aaaa九色 | 在线不卡的av | 人人插人人射 | 六月丁香激情综合色啪小说 | 亚洲成a人片在线www | 欧美极品xxxxx | 国产一级片免费观看 | 国产精品成人一区二区三区吃奶 | 天天爽天天射 | 操操爽| 亚洲五月综合 | 亚洲电影第一页av | 成人黄色片在线播放 | 99av国产精品欲麻豆 | 91精品国自产在线观看欧美 | 一区中文字幕电影 | 99视频精品免费观看, | 久久超级碰视频 | 四虎在线免费观看 | 国产中文字幕在线 | 激情欧美一区二区免费视频 | 免费能看的av | 免费国产黄线在线观看视频 | 国产在线一线 | 欧美日本国产在线观看 | 成人免费视频网站 | 黄色福利网站 | 又黄又爽又刺激 | 一区 二区 精品 | 国产精品一区二区av | 在线观看黄网站 | 国产精品亚洲成人 | 99热网站 | 黄色亚洲精品 | 国产精品字幕 | 在线一二区 | 国产精品视频永久免费播放 | 婷久久 | 久久国产精品色婷婷 | 成人在线免费视频 | 成人国产精品 | 国产成人精品午夜在线播放 | 中文字幕国产精品一区二区 | 天天操天天摸天天射 | 亚洲成人在线免费 | 四虎成人精品永久免费av | 亚洲一区精品人人爽人人躁 | 国产婷婷视频在线 | 天堂网av在线 | 九九热视频在线免费观看 | 97电影在线观看 | 黄色网址在线播放 | 久久久久久高潮国产精品视 | 久久久在线免费观看 | 一区二区三区四区在线 | 欧美精品三级 | 国产精品麻豆免费版 | 国产在线a视频 | 91久久精品一区 | 亚洲欧美日韩国产一区二区 | 蜜臀av夜夜澡人人爽人人 | 在线播放视频一区 | 在线电影a | 成人性生交大片免费观看网站 | 国产精品免费观看国产网曝瓜 | 五月婷婷狠狠 | 国产尤物在线 | 狠狠狠干 | 国产九九精品视频 | 91最新地址永久入口 | 国产成人在线一区 | 国产在线国偷精品产拍 | 天天天天射 | 久久伊人国产精品 | 麻豆一精品传二传媒短视频 | 九九九热精品免费视频观看网站 | 在线观看精品黄av片免费 | 麻豆小视频在线观看 | 极品美女被弄高潮视频网站 | 欧美日韩免费在线观看视频 | 亚洲a网| 国产精品热 | 天天舔天天射天天操 | 午夜视频播放 | 日韩欧美一区二区三区免费观看 | 国产一级电影免费观看 | 97精品欧美91久久久久久 | 精品国产诱惑 | 一 级 黄 色 片免费看的 | 国产精品小视频网站 | 中文字幕在线看视频国产中文版 | 亚洲精品乱码久久久久久 | 开心综合网 | 456免费视频| 亚洲va欧美| 91精品国产91久久久久久三级 | 国产专区免费 | av线上看 | 国产精品igao视频网入口 | 福利视频一区二区 | 精品久久在线 | 丁香狠狠| 久久久久久国产一区二区三区 | 亚洲精品成人在线 | 国产视频久久久 | 在线观看视频三级 | 欧美日韩中文字幕在线视频 | 激情久久小说 | av网址在线播放 | 国产精品视频永久免费播放 | 中文字幕在线观看完整 | 日韩午夜高清 | 一区二区三区不卡在线 | 美女网色 | 亚洲日本成人 | 国产精品欧美日韩在线观看 | 婷婷丁香狠狠爱 | 日韩91av | 国产精品手机在线观看 | 色婷婷88av视频一二三区 | 天天干人人 | 中文字幕在线观看视频一区二区三区 | 成人在线中文字幕 | 成年人视频免费在线播放 | 中国一级片免费看 | 国产亚洲日 | 国产一区在线免费观看 | 在线看v片成人 | 麻豆成人在线观看 | 高清av在线免费观看 | 国产精品h在线观看 | 日韩影视精品 | 亚洲激情视频 | 天天插狠狠干 | 综合亚洲视频 | 国产韩国精品一区二区三区 | 麻豆视频免费入口 | 欧美极品久久 | 808电影免费观看三年 | 欧美资源在线观看 | 一级欧美一级日韩 | 婷婷色在线观看 | 日本久久视频 | 久久色亚洲 | 91夫妻自拍 | 黄色影院在线免费观看 | 免费观看www小视频的软件 | 成人免费影院 | 国产精品一区二区久久久久 | 激情综合国产 | 亚洲精选在线 | 久久一视频 | 五月天国产精品 | 国产不卡一二三区 | 日韩欧三级| zzijzzij亚洲日本少妇熟睡 | 亚洲精品乱码久久久久久蜜桃欧美 | 美州a亚洲一视本频v色道 | 亚洲人视频在线 | 人人添人人澡人人澡人人人爽 | 玖草在线观看 | 亚洲视频综合 | 久久久久久综合网天天 | 欧美性久久久久久 | 久久久精品小视频 | 中文成人字幕 | 国产成人久久精品 | 中文字幕在线观看免费高清完整版 | 欧美日韩精品在线播放 | 婷婷色中文网 | 91视频久久久久 | 97天堂网| 99re国产视频 | 99久久综合精品五月天 | 国产亚洲成av片在线观看 | 五月婷婷视频在线 | 狠狠亚洲 | 日韩三级视频在线观看 | 国产成人精品一区二区在线观看 | 国产第一福利 | 亚洲高清在线视频 | 亚洲男男gaygay无套同网址 | 午夜精品福利影院 | 亚洲另类视频 | 欧美a在线免费观看 | 久草视频99 | 激情五月网站 | 亚洲精品视频免费看 | 日韩欧美视频在线播放 | a在线观看国产 | www久久com| 亚洲国产免费看 | 人人干,人人爽 | 国产精品一区免费看8c0m | 久久久久成人精品亚洲国产 | 人人爽人人爽人人爽学生一级 | 亚洲欧洲美洲av | 久热免费在线观看 | 91亚洲精品久久久久图片蜜桃 | 亚洲精品美女视频 | 日韩av一区二区三区在线观看 | 国产精品成人av电影 | 亚洲精品mv在线观看 | 国产在线欧美日韩 | 手机看国产毛片 | 91麻豆看国产在线紧急地址 | 国产精品成人自产拍在线观看 | 免费av网址在线观看 | 中文字幕精品三级久久久 | 日韩精品 在线视频 | 91麻豆精品国产91久久久使用方法 | 免费午夜av | 日韩在线电影 | 色天天综合久久久久综合片 | 97超碰在| av成年人电影 | 99久久精品免费 | 91av资源网 | 成人在线一区二区三区 | 国产精品久久视频 | 又色又爽又黄 | 亚洲精品电影在线 | 日本中文字幕一二区观 | 亚洲一区日韩在线 | 精品久久久久久国产 | 黄色a级片在线观看 | 日本精品免费看 | 久久99国产精品久久 | 色噜噜日韩精品欧美一区二区 | 欧洲一区二区在线观看 | 久久天堂影院 | 黄色免费视频在线观看 | www.com在线观看 | 国产精品一区二区电影 | 国产成人一区二 | 超碰成人av| 亚洲午夜av电影 | 国模一二三区 | 久久国内精品99久久6app | 国产视频黄 | 91精品毛片| 狠狠色噜噜狠狠狠狠2022 | www.国产在线视频 | 人人爽网站 | 中文字幕中文字幕在线一区 | 国产福利专区 | 国产又粗又猛又黄又爽的视频 | 日韩视频欧美视频 | 日韩在线播放视频 | 在线看国产一区 | 免费福利小视频 | 91精品国产高清自在线观看 | 天天射射天天 | 日日干夜夜操视频 | 久久久久免费精品 | 日韩av一区二区三区四区 | 亚洲成色| 最近最新最好看中文视频 | 亚洲全部视频 | 国产高清一 | 亚洲精品乱码久久久久久蜜桃不爽 | 六月丁香在线视频 | 粉嫩av一区二区三区四区在线观看 | av在线不卡观看 | 国产精品国内免费一区二区三区 | 久久视频在线观看 | 国产a级片免费观看 | 中文字幕国产在线 | 久久视频这里有精品 | 视频国产一区二区三区 | 亚洲美女久久 | 欧美一级久久 | 久久不卡日韩美女 | 91天堂在线观看 | 亚洲一级片免费观看 | 中文有码在线视频 | 黄色小视频在线观看免费 | 亚洲精欧美一区二区精品 | 天天干,夜夜操 | 九九亚洲精品 | 国产亚洲欧美精品久久久久久 | 91专区在线观看 | 日产av在线播放 | 国产精品成人自产拍在线观看 | 亚洲成人免费观看 | 国产精品av免费在线观看 | 在线岛国av | 免费毛片aaaaaa | 国产人成精品一区二区三 | 国产一区自拍视频 | 国产99久久久精品 | 国产成人综合在线观看 | 97香蕉视频 | 狠狠色噜噜狠狠 | 一区二区三区久久精品 | 91视频在线播放视频 | 国产精品久久久久久久久大全 | 午夜精品一区二区三区四区 | 日韩中文在线播放 | 五月婷婷色综合 | 最近高清中文字幕在线国语5 | 美女网站在线 | 国产成人黄色网址 | 久久免费视频这里只有精品 | 日韩电影一区二区三区在线观看 | 欧美日韩不卡在线视频 | 久久精国产| 久草a在线 | 国产精品福利在线观看 | 夜夜躁狠狠躁日日躁 | 99福利影院 | 日本在线观看中文字幕无线观看 | 日韩三级免费观看 | 在线观看日韩精品视频 | 91精品免费看 | 日本黄色一级电影 | 婷婷色综合色 | 免费精品国产va自在自线 | 成人h动漫精品一区二 | 992tv成人免费看片 | 午夜视频久久久 | 97在线观看视频免费 | 国产精品99久久久久久久久久久久 | 黄色大片免费播放 | 久久人人97超碰国产公开结果 | 激情五月婷婷综合 | 欧美日韩高清一区二区 | 精品免费观看 | 日韩mv欧美mv国产精品 | 国产亚洲精品久久久久久移动网络 | 日韩女同一区二区三区在线观看 | 日韩欧美在线高清 | 日韩av一区二区三区 | 中文字幕在线视频网站 | 国产1区2区 | 国产高清专区 | 夜夜爽88888免费视频4848 | 亚洲天堂网在线视频 | 久久久久久久久久久久久9999 | 日本xxxxav| 中文字幕有码在线播放 | 五月婷婷丁香在线观看 | 在线国产日韩 | 亚洲天堂网视频 | 我爱av激情网 | 91成人在线观看喷潮 | 欧美亚洲成人xxx | 久草视频免费观 | 国产一级片网站 | 午夜aaaa| 亚洲成人黄色在线观看 | 亚洲国产久| 午夜美女网站 | 黄a在线看 | 国产一区二区精品久久91 | 一区二区中文字幕在线 | 国产精品九色 | 99久精品 | 91人人视频在线观看 | 在线观看精品 | 狠狠狠色丁香综合久久天下网 | 一区 在线观看 | 久久tv视频 | 久久久免费观看视频 | 婷婷中文字幕 | 精品播放 | 国产成人精品日本亚洲999 | 五月开心婷婷网 | japanesexxxhd奶水| 国产极品尤物在线 | 国产精品久久久久久模特 | 亚洲激情视频在线 | 亚洲成a人片在线观看网站口工 |