亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? linux_usb_driver.txt

?? 基于LINUX操作系統(tǒng)下的各種詳細(xì)配置(如FTP
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
linux usb 驅(qū)動(dòng)


我們知道了在Linux下如何去使用一些最常見(jiàn)的USB設(shè)備。但對(duì)于做系統(tǒng)設(shè)計(jì)的程序員來(lái)說(shuō),這是遠(yuǎn)遠(yuǎn)不夠的,我們還需要具有驅(qū)動(dòng)程序的閱讀、修改和開(kāi)發(fā)能力。在此下篇中,就是要通過(guò)簡(jiǎn)單的USB驅(qū)動(dòng)的例子,隨您一起進(jìn)入U(xiǎn)SB驅(qū)動(dòng)開(kāi)發(fā)的世界。 

USB骨架程序(usb-skeleton),是USB驅(qū)動(dòng)程序的基礎(chǔ),通過(guò)對(duì)它源碼的學(xué)習(xí)和理解,可以使我們迅速地了解USB驅(qū)動(dòng)架構(gòu),迅速地開(kāi)發(fā)我們自己的USB硬件的驅(qū)動(dòng)。 

USB驅(qū)動(dòng)開(kāi)發(fā) 

在掌握了USB設(shè)備的配置后,對(duì)于程序員,我們就可以嘗試進(jìn)行一些簡(jiǎn)單的USB驅(qū)動(dòng)的修改和開(kāi)發(fā)了。這一段落,我們會(huì)講解一個(gè)最基礎(chǔ)USB框架的基礎(chǔ)上,做兩個(gè)小的USB驅(qū)動(dòng)的例子。 

USB骨架 

在Linux kernel源碼目錄中driver/usb/usb-skeleton.c為我們提供了一個(gè)最基礎(chǔ)的USB驅(qū)動(dòng)程序。我們稱(chēng)為USB骨架。通過(guò)它我們僅需要修改極少的部分,就可以完成一個(gè)USB設(shè)備的驅(qū)動(dòng)。我們的USB驅(qū)動(dòng)開(kāi)發(fā)也是從她開(kāi)始的。 

那些linux下不支持的USB設(shè)備幾乎都是生產(chǎn)廠(chǎng)商特定的產(chǎn)品。如果生產(chǎn)廠(chǎng)商在他們的產(chǎn)品中使用自己定義的協(xié)議,他們就需要為此設(shè)備創(chuàng)建特定的驅(qū)動(dòng)程序。當(dāng)然我們知道,有些生產(chǎn)廠(chǎng)商公開(kāi)他們的USB協(xié)議,并幫助Linux驅(qū)動(dòng)程序的開(kāi)發(fā),然而有些生產(chǎn)廠(chǎng)商卻根本不公開(kāi)他們的USB協(xié)議。因?yàn)槊恳粋€(gè)不同的協(xié)議都會(huì)產(chǎn)生一個(gè)新的驅(qū)動(dòng)程序,所以就有了這個(gè)通用的USB驅(qū)動(dòng)骨架程序, 它是以pci 骨架為模板的。 

如果你準(zhǔn)備寫(xiě)一個(gè)linux驅(qū)動(dòng)程序,首先要熟悉USB協(xié)議規(guī)范。USB主頁(yè)上有它的幫助。一些比較典型的驅(qū)動(dòng)可以在上面發(fā)現(xiàn),同時(shí)還介紹了USB urbs的概念,而這個(gè)是usb驅(qū)動(dòng)程序中最基本的。 

Linux USB 驅(qū)動(dòng)程序需要做的第一件事情就是在Linux USB 子系統(tǒng)里注冊(cè),并提供一些相關(guān)信息,例如這個(gè)驅(qū)動(dòng)程序支持那種設(shè)備,當(dāng)被支持的設(shè)備從系統(tǒng)插入或拔出時(shí),會(huì)有哪些動(dòng)作。所有這些信息都傳送到USB 子系統(tǒng)中,在usb骨架驅(qū)動(dòng)程序中是這樣來(lái)表示的: 


static struct usb_driver skel_driver = { 
name: "skeleton", 
probe: skel_probe, 
disconnect: skel_disconnect, 
fops: &skel_fops, 
minor: USB_SKEL_MINOR_BASE, 
id_table: skel_table, 
}; 



變量name是一個(gè)字符串,它對(duì)驅(qū)動(dòng)程序進(jìn)行描述。probe 和disconnect 是函數(shù)指針,當(dāng)設(shè)備與在id_table 中變量信息匹配時(shí),此函數(shù)被調(diào)用。 

fops和minor變量是可選的。大多usb驅(qū)動(dòng)程序鉤住另外一個(gè)驅(qū)動(dòng)系統(tǒng),例如SCSI,網(wǎng)絡(luò)或者tty子系統(tǒng)。這些驅(qū)動(dòng)程序在其他驅(qū)動(dòng)系統(tǒng)中注冊(cè),同時(shí)任何用戶(hù)空間的交互操作通過(guò)那些接口提供,比如我們把SCSI設(shè)備驅(qū)動(dòng)作為我們USB驅(qū)動(dòng)所鉤住的另外一個(gè)驅(qū)動(dòng)系統(tǒng),那么我們此USB設(shè)備的read、write等操作,就相應(yīng)按SCSI設(shè)備的read、write函數(shù)進(jìn)行訪(fǎng)問(wèn)。但是對(duì)于掃描儀等驅(qū)動(dòng)程序來(lái)說(shuō),并沒(méi)有一個(gè)匹配的驅(qū)動(dòng)系統(tǒng)可以使用,那我們就要自己處理與用戶(hù)空間的read、write等交互函數(shù)。Usb子系統(tǒng)提供一種方法去注冊(cè)一個(gè)次設(shè)備號(hào)和file_operations函數(shù)指針,這樣就可以與用戶(hù)空間實(shí)現(xiàn)方便地交互。


USB骨架程序的關(guān)鍵幾點(diǎn)如下: 

USB驅(qū)動(dòng)的注冊(cè)和注銷(xiāo) 
Usb驅(qū)動(dòng)程序在注冊(cè)時(shí)會(huì)發(fā)送一個(gè)命令給usb_register,通常在驅(qū)動(dòng)程序的初始化函數(shù)里。 

當(dāng)要從系統(tǒng)卸載驅(qū)動(dòng)程序時(shí),需要注銷(xiāo)usb子系統(tǒng)。即需要usb_unregister 函數(shù)處理: 


static void __exit usb_skel_exit(void) 
{ 
/* deregister this driver with the USB subsystem */ 
usb_deregister(&skel_driver); 
} 
module_exit(usb_skel_exit); 




當(dāng)usb設(shè)備插入時(shí),為了使linux-hotplug(Linux中PCI、USB等設(shè)備熱插拔支持)系統(tǒng)自動(dòng)裝載驅(qū)動(dòng)程序,你需要?jiǎng)?chuàng)建一個(gè)MODULE_DEVICE_TABLE。代碼如下(這個(gè)模塊僅支持某一特定設(shè)備): 


/* table of devices that work with this driver */ 
static struct usb_device_id skel_table [] = { 
{ USB_DEVICE(USB_SKEL_VENDOR_ID, 
USB_SKEL_PRODUCT_ID) }, 
{ } /* Terminating entry */ 
}; 

MODULE_DEVICE_TABLE (usb, skel_table); 




USB_DEVICE宏利用廠(chǎng)商ID和產(chǎn)品ID為我們提供了一個(gè)設(shè)備的唯一標(biāo)識(shí)。當(dāng)系統(tǒng)插入一個(gè)ID匹配的USB設(shè)備到USB總線(xiàn)時(shí),驅(qū)動(dòng)會(huì)在USB core中注冊(cè)。驅(qū)動(dòng)程序中probe 函數(shù)也就會(huì)被調(diào)用。usb_device 結(jié)構(gòu)指針、接口號(hào)和接口ID都會(huì)被傳遞到函數(shù)中。 


static void * skel_probe(struct usb_device *dev, 
unsigned int ifnum, const struct usb_device_id *id) 




驅(qū)動(dòng)程序需要確認(rèn)插入的設(shè)備是否可以被接受,如果不接受,或者在初始化的過(guò)程中發(fā)生任何錯(cuò)誤,probe函數(shù)返回一個(gè)NULL值。否則返回一個(gè)含有設(shè)備驅(qū)動(dòng)程序狀態(tài)的指針。通過(guò)這個(gè)指針,就可以訪(fǎng)問(wèn)所有結(jié)構(gòu)中的回調(diào)函數(shù)。 

在骨架驅(qū)動(dòng)程序里,最后一點(diǎn)是我們要注冊(cè)devfs。我們創(chuàng)建一個(gè)緩沖用來(lái)保存那些被發(fā)送給usb設(shè)備的數(shù)據(jù)和那些從設(shè)備上接受的數(shù)據(jù),同時(shí)USB urb 被初始化,并且我們?cè)赿evfs子系統(tǒng)中注冊(cè)設(shè)備,允許devfs用戶(hù)訪(fǎng)問(wèn)我們的設(shè)備。注冊(cè)過(guò)程如下: 


/* initialize the devfs node for this device 
and register it */ 
sprintf(name, "skel%d", skel->minor); 
skel->devfs = devfs_register 
(usb_devfs_handle, name, 
DEVFS_FL_DEFAULT, USB_MAJOR, 
USB_SKEL_MINOR_BASE + skel->minor, 
S_IFCHR | S_IRUSR | S_IWUSR | 
S_IRGRP | S_IWGRP | S_IROTH, 
&skel_fops, NULL); 




如果devfs_register函數(shù)失敗,不用擔(dān)心,devfs子系統(tǒng)會(huì)將此情況報(bào)告給用戶(hù)。 

當(dāng)然最后,如果設(shè)備從usb總線(xiàn)拔掉,設(shè)備指針會(huì)調(diào)用disconnect 函數(shù)。驅(qū)動(dòng)程序就需要清除那些被分配了的所有私有數(shù)據(jù)、關(guān)閉urbs,并且從devfs上注銷(xiāo)調(diào)自己。





/* remove our devfs node */ 
devfs_unregister(skel->devfs); 




現(xiàn)在,skeleton驅(qū)動(dòng)就已經(jīng)和設(shè)備綁定上了,任何用戶(hù)態(tài)程序要操作此設(shè)備都可以通過(guò)file_operations結(jié)構(gòu)所定義的函數(shù)進(jìn)行了。首先,我們要open此設(shè)備。在open函數(shù)中MODULE_INC_USE_COUNT 宏是一個(gè)關(guān)鍵,它的作用是起到一個(gè)計(jì)數(shù)的作用,有一個(gè)用戶(hù)態(tài)程序打開(kāi)一個(gè)設(shè)備,計(jì)數(shù)器就加一,例如,我們以模塊方式加入一個(gè)驅(qū)動(dòng),若計(jì)數(shù)器不為零,就說(shuō)明仍然有用戶(hù)程序在使用此驅(qū)動(dòng),這時(shí)候,你就不能通過(guò)rmmod命令卸載驅(qū)動(dòng)模塊了。 



/* increment our usage count for the module */ 
MOD_INC_USE_COUNT; 
++skel->open_count; 
/* save our object in the file's private structure */ 
file->private_data = skel; 




當(dāng)open完設(shè)備后,read、write函數(shù)就可以收、發(fā)數(shù)據(jù)了。 

skel的write、和read函數(shù) 
他們是完成驅(qū)動(dòng)對(duì)讀寫(xiě)等操作的響應(yīng)。 

在skel_write中,一個(gè)FILL_BULK_URB函數(shù),就完成了urb 系統(tǒng)callbak和我們自己的skel_write_bulk_callback之間的聯(lián)系。注意skel_write_bulk_callback是中斷方式,所以要注意時(shí)間不能太久,本程序中它就只是報(bào)告一些urb的狀態(tài)等。 

read 函數(shù)與write 函數(shù)稍有不同在于:程序并沒(méi)有用urb 將數(shù)據(jù)從設(shè)備傳送到驅(qū)動(dòng)程序,而是我們用usb_bulk_msg 函數(shù)代替,這個(gè)函數(shù)能夠不需要?jiǎng)?chuàng)建urbs 和操作urb函數(shù)的情況下,來(lái)發(fā)送數(shù)據(jù)給設(shè)備,或者從設(shè)備來(lái)接收數(shù)據(jù)。我們調(diào)用usb_bulk_msg函數(shù)并傳提一個(gè)存儲(chǔ)空間,用來(lái)緩沖和放置驅(qū)動(dòng)收到的數(shù)據(jù),若沒(méi)有收到數(shù)據(jù),就失敗并返回一個(gè)錯(cuò)誤信息。 

usb_bulk_msg函數(shù) 
當(dāng)對(duì)usb設(shè)備進(jìn)行一次讀或者寫(xiě)時(shí),usb_bulk_msg 函數(shù)是非常有用的; 然而, 當(dāng)你需要連續(xù)地對(duì)設(shè)備進(jìn)行讀/寫(xiě)時(shí),建議你建立一個(gè)自己的urbs,同時(shí)將urbs 提交給usb子系統(tǒng)。 

skel_disconnect函數(shù) 
當(dāng)我們釋放設(shè)備文件句柄時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。MOD_DEC_USE_COUNT宏會(huì)被用到(和MOD_INC_USE_COUNT剛好對(duì)應(yīng),它減少一個(gè)計(jì)數(shù)器),首先確認(rèn)當(dāng)前是否有其它的程序正在訪(fǎng)問(wèn)這個(gè)設(shè)備,如果是最后一個(gè)用戶(hù)在使用,我們可以關(guān)閉任何正在發(fā)生的寫(xiě),操作如下: 



/* decrement our usage count for the device */ 
--skel->open_count; 
if (skel->open_count <= 0) { 
/* shutdown any bulk writes that might be 
going on */ 
usb_unlink_urb (skel->write_urb); 
skel->open_count = 0; 
} 
/* decrement our usage count for the module */ 
MOD_DEC_USE_COUNT;







最困難的是,usb 設(shè)備可以在任何時(shí)間點(diǎn)從系統(tǒng)中取走,即使程序目前正在訪(fǎng)問(wèn)它。usb驅(qū)動(dòng)程序必須要能夠很好地處理解決此問(wèn)題,它需要能夠切斷任何當(dāng)前的讀寫(xiě),同時(shí)通知用戶(hù)空間程序:usb設(shè)備已經(jīng)被取走。 

如果程序有一個(gè)打開(kāi)的設(shè)備句柄,在當(dāng)前結(jié)構(gòu)里,我們只要把它賦值為空,就像它已經(jīng)消失了。對(duì)于每一次設(shè)備讀寫(xiě)等其它函數(shù)操作,我們都要檢查usb_device結(jié)構(gòu)是否存在。如果不存在,就表明設(shè)備已經(jīng)消失,并返回一個(gè)-ENODEV錯(cuò)誤給用戶(hù)程序。當(dāng)最終我們調(diào)用release 函數(shù)時(shí),在沒(méi)有文件打開(kāi)這個(gè)設(shè)備時(shí),無(wú)論usb_device結(jié)構(gòu)是否存在、它都會(huì)清空skel_disconnect函數(shù)所作工作。 

Usb 骨架驅(qū)動(dòng)程序,提供足夠的例子來(lái)幫助初始人員在最短的時(shí)間里開(kāi)發(fā)一個(gè)驅(qū)動(dòng)程序。更多信息你可以到linux usb開(kāi)發(fā)新聞組去尋找。



U盤(pán)、USB讀卡器、MP3、數(shù)碼相機(jī)驅(qū)動(dòng) 

對(duì)于一款windows下用的很爽的U盤(pán)、USB讀卡器、MP3或數(shù)碼相機(jī),可能Linux下卻不能支持。怎么辦?其實(shí)不用傷心,也許經(jīng)過(guò)一點(diǎn)點(diǎn)的工作,你就可以很方便地使用它了。通常是此U盤(pán)、USB讀卡器、MP3或數(shù)碼相機(jī)在WindowsXP中不需要廠(chǎng)商專(zhuān)門(mén)的驅(qū)動(dòng)就可以識(shí)別為移動(dòng)存儲(chǔ)設(shè)備,這樣的設(shè)備才能保證成功,其他的就看你的運(yùn)氣了。 

USB存儲(chǔ)設(shè)備,他們的read、write等操作都是通過(guò)上章節(jié)中提到的鉤子,把自己的操作鉤到SCSI設(shè)備上去的。我們就不需要對(duì)其進(jìn)行具體的數(shù)據(jù)讀寫(xiě)處理了。 

第一步:我們通過(guò)cat /proc/bus/usb/devices得到當(dāng)前系統(tǒng)探測(cè)到的USB總線(xiàn)上的設(shè)備信息。它包括Vendor、ProdID、Product等。下面是我買(mǎi)的一款雜牌CF卡讀卡器插入后的信息片斷: 



T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=12 MxCh= 0 
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=8 #Cfgs= 1 
P: Vendor=07c4 ProdID=a400 Rev= 1.13 
S: Manufacturer=USB 
S: Product=Mass Storage 
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=70mA 
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(vend.) Sub=06 Prot=50 Driver=usb-storage 
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms 
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms 




其中,我們最關(guān)心的是Vendor=07c4 ProdID=a400和Manufacturer=USB(果然是雜牌,廠(chǎng)商名都看不到)Product= Mass Storage。 

對(duì)于這些移動(dòng)存儲(chǔ)設(shè)備,我們知道Linux下都是通過(guò)usb-storage.o驅(qū)動(dòng)模擬成scsi設(shè)備去支持的,之所以不支持,通常是usb-storage驅(qū)動(dòng)未包括此廠(chǎng)商識(shí)別和產(chǎn)品識(shí)別信息(在類(lèi)似skel_probe的USB最初探測(cè)時(shí)被屏蔽了)。對(duì)于USB存儲(chǔ)設(shè)備的硬件訪(fǎng)問(wèn)部分,通常是一致的。所以我們要支持它,僅需要修改usb-storage中關(guān)于廠(chǎng)商識(shí)別和產(chǎn)品識(shí)別列表部分。 

第二部,打開(kāi)drivers/usb/storage/unusual_devs.h文件,我們可以看到所有已知的產(chǎn)品登記表,都是以UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, vendor_name, product_name, use_protocol, use_transport, init_function, Flags)方式登記的。其中相應(yīng)的涵義,你就可以根據(jù)命名來(lái)判斷了。所以只要我們?nèi)缦绿钊胛覀冏约旱淖?cè),就可以讓usb-storage驅(qū)動(dòng)去認(rèn)識(shí)和發(fā)現(xiàn)它。 


UNUSUAL_DEV(07c4, a400, 0x0000, 0xffff, 
" USB ", " Mass Storage ", 
US_SC_SCSI, US_PR_BULK, NULL, 
US_FL_FIX_INQUIRY | US_FL_START_STOP |US_FL_MODE_XLATE ) 




注意:添加以上幾句的位置,一定要正確。比較發(fā)現(xiàn),usb-storage驅(qū)動(dòng)對(duì)所有注冊(cè)都是按idVendor, idProduct數(shù)值從小到大排列的。我們也要放在相應(yīng)位置。 

最后,填入以上信息,我們就可以重新編譯生成內(nèi)核或usb-storage.o模塊。這時(shí)候插入我們的設(shè)備就可以跟其他U盤(pán)一樣作為SCSI設(shè)備去訪(fǎng)問(wèn)了。



目前很多鍵盤(pán)都有飛梭和手寫(xiě)板,下面我們就嘗試為一款鍵盤(pán)飛梭加入一個(gè)驅(qū)動(dòng)。在通常情況,當(dāng)我們插入U(xiǎn)SB接口鍵盤(pán)時(shí),在/proc/bus/usb/devices會(huì)看到多個(gè)USB設(shè)備。比如:你的USB鍵盤(pán)上的飛梭會(huì)是一個(gè),你的手寫(xiě)板會(huì)是一個(gè),若是你的USB鍵盤(pán)有USB擴(kuò)展連接埠,也會(huì)看到。 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲观看高清完整版在线观看 | 亚洲超丰满肉感bbw| 91网站在线播放| 亚洲欧洲在线观看av| jiyouzz国产精品久久| 国产精品久久久久婷婷二区次| 大桥未久av一区二区三区中文| 国产精品久久久久久久久久免费看 | 欧美一区二区精品在线| 免费在线观看日韩欧美| 欧美一个色资源| 国产老妇另类xxxxx| 国产精品卡一卡二卡三| 在线观看av不卡| 亚洲sss视频在线视频| 欧美成人video| 国产精品中文字幕日韩精品 | 色婷婷av一区二区三区之一色屋| 一区二区三区欧美亚洲| 欧美一级片免费看| 国产一区二区三区四| 亚洲欧美色一区| 欧美一区二区三区在线观看视频 | 免费观看91视频大全| 久久精品欧美一区二区三区麻豆| eeuss国产一区二区三区| 首页综合国产亚洲丝袜| 国产亚洲午夜高清国产拍精品| 91色porny蝌蚪| 久久精品国产99| 亚洲靠逼com| 欧美成人性福生活免费看| av高清久久久| 人人爽香蕉精品| 自拍视频在线观看一区二区| 欧美日韩国产免费| 国产精品一区二区黑丝| 亚洲高清免费观看| 亚洲国产成人在线| 欧美一级高清片| 色美美综合视频| 国产91精品免费| 免费成人在线观看| 亚洲自拍偷拍图区| 中文字幕不卡在线播放| 日韩三级高清在线| 日本韩国欧美一区二区三区| 国产精品18久久久久久久久| 肉肉av福利一精品导航| 亚洲色图制服丝袜| 日本一区二区视频在线观看| 日韩一区二区精品| 精品婷婷伊人一区三区三| av影院午夜一区| 国产精品亚洲一区二区三区妖精| 天天色综合成人网| 亚洲一区二区视频| 亚洲精品成人在线| 中文字幕制服丝袜一区二区三区| 久久久亚洲精品石原莉奈| 欧美一区二区三区视频在线| 欧美日韩精品系列| 色av一区二区| 日本福利一区二区| 日本韩国欧美一区二区三区| 91视频免费播放| thepron国产精品| 成人高清免费观看| 成人综合婷婷国产精品久久| 九九热在线视频观看这里只有精品| 亚洲成人激情av| 亚洲午夜日本在线观看| 亚洲精品高清在线观看| 一个色妞综合视频在线观看| 亚洲精品va在线观看| 亚洲美女偷拍久久| 亚洲精品国产成人久久av盗摄| 亚洲色欲色欲www| 亚洲激情中文1区| 艳妇臀荡乳欲伦亚洲一区| 亚洲精品国产第一综合99久久 | 欧美亚洲尤物久久| 欧美主播一区二区三区| 欧美视频在线一区二区三区| 欧美视频一区二区三区| 欧美日韩成人综合在线一区二区| 精品视频1区2区| 7777精品伊人久久久大香线蕉 | 亚洲国产精品黑人久久久| 中文字幕av在线一区二区三区| 国产偷v国产偷v亚洲高清| 国产欧美日韩三区| 亚洲欧美综合在线精品| 一区二区三区蜜桃网| 亚洲电影第三页| 蜜臀91精品一区二区三区| 激情五月播播久久久精品| 国产成人99久久亚洲综合精品| 99在线视频精品| 欧美视频完全免费看| 日韩欧美一级片| 欧美高清在线一区| 一区二区三区.www| 久久成人免费网站| eeuss鲁一区二区三区| 精品视频一区三区九区| 精品国产sm最大网站| 中文字幕av在线一区二区三区| 亚洲一区二区精品3399| 蜜臀a∨国产成人精品| 成人亚洲精品久久久久软件| 在线免费亚洲电影| 欧美v亚洲v综合ⅴ国产v| 欧美激情综合网| 亚洲一二三区不卡| 国产精品一区二区在线观看网站 | 欧美精品aⅴ在线视频| 久久精子c满五个校花| 亚洲免费观看高清完整版在线| 喷水一区二区三区| 99久久综合色| 日韩精品一区二区三区三区免费 | 国产成人在线色| 欧美伊人久久久久久午夜久久久久| 欧美tickle裸体挠脚心vk| 亚洲欧美日韩久久| 韩国av一区二区| 欧美日韩欧美一区二区| 国产精品无人区| 日韩电影一区二区三区| 91影视在线播放| 欧美精品一区二区三区视频| 亚洲一区二区五区| 成人免费高清在线| 欧美大片在线观看一区二区| 一区二区久久久久久| 国产91对白在线观看九色| 欧美日韩成人一区| 亚洲视频1区2区| 岛国精品一区二区| 精品国产123| 日韩精品一二三四| 欧美在线不卡视频| 亚洲欧洲日韩一区二区三区| 精品亚洲成a人在线观看| 欧美麻豆精品久久久久久| 亚洲三级在线观看| 国产成人av电影免费在线观看| 精品久久久久久综合日本欧美| 午夜一区二区三区视频| 色美美综合视频| 亚洲精品亚洲人成人网 | 亚洲va欧美va人人爽午夜| 成人av网站在线| 国产欧美日韩视频在线观看| 精品在线你懂的| 日韩区在线观看| 蜜桃精品视频在线| 91精品婷婷国产综合久久性色| 亚洲一区在线电影| 欧美亚洲高清一区| 一区二区三区国产精华| 色婷婷精品久久二区二区蜜臀av | 日韩免费高清电影| 久久国产精品99久久人人澡| 欧美日韩中文国产| 国内一区二区在线| 国产精品二三区| 欧美在线一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩欧美二区三区| av亚洲精华国产精华| 亚洲精品五月天| 日韩视频免费观看高清完整版| 精品一区二区三区久久| 亚洲一级二级三级| 日本久久一区二区| 亚洲午夜在线电影| 欧美精品日日鲁夜夜添| 日韩av一级电影| 精品国产伦一区二区三区观看体验| 九九精品视频在线看| 久久精品视频在线看| 成人一区二区三区| 一区二区三区在线观看动漫| 欧美午夜精品久久久久久孕妇| 首页亚洲欧美制服丝腿| 日韩欧美国产1| 成人免费视频一区| 亚洲精品老司机| 欧美一区二区三区小说| 国产一区二区在线观看视频| 亚洲国产岛国毛片在线| 在线看不卡av| 日韩在线观看一区二区| 久久免费视频色| 91在线一区二区| 视频一区国产视频| 国产性色一区二区| 日本精品视频一区二区三区|