亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux 的PXIe 可重構(gòu)儀器設(shè)備驅(qū)動程序開發(fā)

        2021-04-29 03:21:20王法臻崔少輝
        計算機(jī)工程 2021年4期
        關(guān)鍵詞:驅(qū)動程序調(diào)用應(yīng)用程序

        王法臻,崔少輝,王 成

        (陸軍工程大學(xué)石家莊校區(qū),石家莊 050003)

        0 概述

        PXIe 總線是PCIe 總線在儀器領(lǐng)域的拓展,通過在PCIe 總線基礎(chǔ)上附加必要的時鐘信號、觸發(fā)總線、星形總線和本地總線等,可形成PXIe 擴(kuò)展信號[1]。PXIe 總線采用點(diǎn)對點(diǎn)的通信方式并利用差分信號進(jìn)行數(shù)據(jù)傳輸,可使數(shù)據(jù)的傳輸速率和品質(zhì)得到大幅提升。

        設(shè)備驅(qū)動程序作為操作系統(tǒng)的重要組成部分,是應(yīng)用程序與硬件完成數(shù)據(jù)交互所必需的媒介[2-3]。為滿足自主設(shè)計的PXIe 可重構(gòu)儀器與上位機(jī)之間的通信需求,在完成PXIe 接口硬件部分設(shè)計的基礎(chǔ)上,必須開發(fā)相應(yīng)的PXIe 設(shè)備驅(qū)動程序才能實(shí)現(xiàn)功能控制指令和測試數(shù)據(jù)經(jīng)PXIe 總線的傳輸。因此,設(shè)計穩(wěn)定可靠的驅(qū)動程序十分關(guān)鍵。

        本文在研究Linux 字符設(shè)備驅(qū)動結(jié)構(gòu)的基礎(chǔ)上開發(fā)可重構(gòu)儀器的PXIe 設(shè)備驅(qū)動程序。設(shè)計直接存儲器存?。―irect Memory Acess,DMA)傳輸操作流程,并對應(yīng)用程序與驅(qū)動程序數(shù)據(jù)的交互方式進(jìn)行優(yōu)化,從而提高數(shù)據(jù)傳輸效率,使PXIe 可重構(gòu)儀器能夠在國產(chǎn)操作系統(tǒng)下穩(wěn)定運(yùn)行。

        1 PXIe 可重構(gòu)儀器

        通用自動測試系統(tǒng)(Automatic Test System,ATS)采用共享資源架構(gòu),其通過開關(guān)系統(tǒng)分配測試通道和資源,易產(chǎn)生開關(guān)延遲、測試資源競爭和死鎖等問題[4]。多通道可重構(gòu)儀器具備良好的通用性和靈活性[5-6],可根據(jù)用戶需求進(jìn)行重構(gòu)從而獲得不同的測試能力,且每路測試通道均具有獨(dú)立完成測試的能力,因此為傳統(tǒng)通用ATS 存在的問題提供了良好的解決方案。

        多通道PXIe可重構(gòu)儀器以Altera公司的Cyclone IV系列FPGA 為核心,配置測量功能電路模塊,其32 路測試通道均具備數(shù)模轉(zhuǎn)換、模數(shù)轉(zhuǎn)換、波形產(chǎn)生以及電壓比較等功能,各通道可根據(jù)測試需求通過重構(gòu)實(shí)現(xiàn)一定的功能擴(kuò)展。上位機(jī)與儀器設(shè)備經(jīng)PXIe總線接口完成功能控制指令及測試數(shù)據(jù)的傳輸。由于PXIe 與PCIe 遵循相同的協(xié)議,因此PXIe 接口的開發(fā)通過FPGA 中的PCIe IP 硬核實(shí)現(xiàn),配置選擇為PCIe 1.1 x4 鏈路,理論上最大傳輸速率可達(dá)1 GB/s。該實(shí)現(xiàn)方式相比采用專用芯片進(jìn)行接口開發(fā)的優(yōu)勢在于可簡化電路設(shè)計同時降低開發(fā)成本。

        2 Linux 設(shè)備驅(qū)動程序

        Linux 貫徹“一切皆文件”的思想,因此各類外部設(shè)備也都被看作是文件,一般稱作設(shè)備文件(或設(shè)備節(jié)點(diǎn))[7]。用戶層應(yīng)用程序并不能直接訪問操作外部硬件設(shè)備,需要先通過如open、close、read、write 和unlocked_ioctl 等系統(tǒng)調(diào)用訪問設(shè)備文件,然后借助Linux 中虛擬文件系統(tǒng)(Virtual File System,VFS)所提供的訪問接口尋找各個系統(tǒng)調(diào)用的響應(yīng)函數(shù),從而進(jìn)一步操作外部硬件設(shè)備[8]。

        設(shè)備文件所對應(yīng)的設(shè)備驅(qū)動程序負(fù)責(zé)為操作外部硬件設(shè)備提供與系統(tǒng)調(diào)用相關(guān)聯(lián)的響應(yīng)函數(shù),這些響應(yīng)函數(shù)可直接訪問外部硬件設(shè)備。因此,用戶層應(yīng)用程序必須通過設(shè)備驅(qū)動程序來實(shí)現(xiàn)對外部硬件設(shè)備的訪問操作。Linux 系統(tǒng)下設(shè)備驅(qū)動程序、應(yīng)用程序及硬件設(shè)備三者之間的關(guān)系如圖1 所示。

        圖1 設(shè)備驅(qū)動、應(yīng)用程序與硬件設(shè)備間的關(guān)系Fig.1 Relationship of device driver,application and hardware device

        Linux 設(shè)備驅(qū)動程序按設(shè)備類型一般劃分為字符設(shè)備驅(qū)動、塊設(shè)備驅(qū)動和網(wǎng)絡(luò)接口驅(qū)動3 類[9]。字符設(shè)備以字節(jié)為單位傳輸數(shù)據(jù),塊設(shè)備以塊為單位(每塊至少512 Byte)傳輸數(shù)據(jù),網(wǎng)絡(luò)設(shè)備以用戶數(shù)據(jù)包形式在網(wǎng)絡(luò)媒介上傳輸數(shù)據(jù)。

        PXIe 設(shè)備驅(qū)動程序以字符設(shè)備驅(qū)動結(jié)構(gòu)為主體框架進(jìn)行設(shè)計開發(fā),因此,需要先對字符設(shè)備驅(qū)動的相關(guān)情況有所掌握。字符設(shè)備、字符設(shè)備驅(qū)動和應(yīng)用程序之間的結(jié)構(gòu)關(guān)系如圖2 所示,具體描述如下:

        1)應(yīng)用程序通過系統(tǒng)調(diào)用經(jīng)VFS 提供的接口訪問驅(qū)動程序,驅(qū)動程序根據(jù)應(yīng)用程序要求進(jìn)一步操作訪問設(shè)備。

        2)結(jié)構(gòu)體cdev 負(fù)責(zé)描述字符設(shè)備驅(qū)動,其主要由設(shè)備號和文件操作結(jié)構(gòu)體兩部分組成。當(dāng)系統(tǒng)調(diào)用宏module_init 加載驅(qū)動時,即實(shí)現(xiàn)該結(jié)構(gòu)體的實(shí)例化并完成字符設(shè)備的注冊。

        3)設(shè)備號dev_t 負(fù)責(zé)存放驅(qū)動程序給設(shè)備分配的主設(shè)備號和次設(shè)備號,主設(shè)備號負(fù)責(zé)標(biāo)識設(shè)備類型,次設(shè)備號負(fù)責(zé)標(biāo)識同類設(shè)備中的特定設(shè)備。由于設(shè)備號是設(shè)備文件在系統(tǒng)中的標(biāo)志且唯一確定,因此新設(shè)備號的申請不能與已有設(shè)備號發(fā)生沖突。

        4)文件操作結(jié)構(gòu)體file_operations 作為用戶層與內(nèi)核層交互的接口,是建立起應(yīng)用程序與驅(qū)動程序交互的關(guān)鍵所在。當(dāng)用戶層應(yīng)用程序使用open、release、unlocked_ioctl 等Linux 系統(tǒng)調(diào)用時,系統(tǒng)經(jīng)由VFS 間接尋找并執(zhí)行file_operations 結(jié)構(gòu)體中所對應(yīng)的xxx_open、xxx_release、xxx_unlocked_ioctl 等操作函數(shù),完成對設(shè)備的指定操作。

        5)驅(qū)動卸載在系統(tǒng)調(diào)用宏module_exit 時完成,負(fù)責(zé)設(shè)備號的釋放和所申請的相關(guān)資源并注銷cdev結(jié)構(gòu)體。

        圖2 字符設(shè)備驅(qū)動程序結(jié)構(gòu)Fig.2 Structure of character device driver

        為使儀器能夠在國產(chǎn)操作系統(tǒng)下工作運(yùn)行,驅(qū)動程序的開發(fā)環(huán)境選擇國產(chǎn)Deepin 15.11 操作系統(tǒng),Linux 內(nèi)核版本號4.15.0-30-generic,使用系統(tǒng)自帶vim 編輯器和GCC 編譯器完成驅(qū)動程序代碼的編寫及編譯。

        3 PXIe 設(shè)備驅(qū)動設(shè)計

        PXIe 設(shè)備驅(qū)動程序基于字符設(shè)備驅(qū)動結(jié)構(gòu)的開發(fā)設(shè)計流程如圖3 所示。

        圖3 PXIe 設(shè)備驅(qū)動程序設(shè)計流程Fig.3 Procedure of PXIe device driver design

        3.1 驅(qū)動初始化

        驅(qū)動程序的初始化主要完成對結(jié)構(gòu)體cdev 和結(jié)構(gòu)體pci_driver 的初始化,目的在于完成PXIe 設(shè)備在系統(tǒng)中的注冊、硬件資源的獲取以及建立與應(yīng)用程序的交互關(guān)系。

        cdev 結(jié)構(gòu)體已在上文進(jìn)行相關(guān)介紹,主要實(shí)現(xiàn)設(shè)備在系統(tǒng)中的注冊并建立與應(yīng)用程序的交互關(guān)系。設(shè)備號dev_t 申請成功后,通過調(diào)用函數(shù)cdev_init 初始化cdev 中的file_operations 結(jié)構(gòu)體,建立其與應(yīng)用程序的交互關(guān)系,通過調(diào)用函數(shù)cdev_add 向系統(tǒng)添加字符設(shè)備從而完成設(shè)備注冊。Linux 系統(tǒng)調(diào)用所對應(yīng)的file_operations結(jié)構(gòu)體成員函數(shù)設(shè)置如下:函數(shù)pxie_open和pxie_release 負(fù)責(zé)連接和斷開應(yīng)用程序與驅(qū)動程序的連接;函數(shù)dma_mmap 負(fù)責(zé)實(shí)現(xiàn)內(nèi)存共享映射以提高應(yīng)用層與內(nèi)核層間數(shù)據(jù)交互速率;函數(shù)pxie_read 和pxie_write 負(fù)責(zé)對BAR 空間上寄存器的訪問,函數(shù)dma_unlocked_ioctl 用于DMA 傳輸控制指令的發(fā)送。

        pci_driver 結(jié)構(gòu)體實(shí)現(xiàn)驅(qū)動程序與特定設(shè)備的匹配以及硬件資源信息的獲取。驅(qū)動初始化的實(shí)現(xiàn)代碼如下:

        3.1.1 設(shè)備匹配

        操作系統(tǒng)啟動后會自動檢測總線上的所有設(shè)備,并將廠商號(VendorID)、設(shè)備號(DeviceID)等硬件信息記錄在pci_dev 結(jié)構(gòu)體中。驅(qū)動程序即通過這些硬件信息實(shí)現(xiàn)與設(shè)備的匹配連接。

        驅(qū)動程序的pci_device_id 結(jié)構(gòu)體中包含設(shè)備的ID 信息,通過宏MODULE_DEVICE_TABLE 將其導(dǎo)出至用戶空間。在驅(qū)動初始化過程中,當(dāng)調(diào)用函數(shù)pci_register_driver 初始化pci_driver 結(jié)構(gòu)體時,系統(tǒng)會自動匹配pci_dev 結(jié)構(gòu)體與驅(qū)動程序pci_device_id結(jié)構(gòu)體中的設(shè)備ID 信息。若匹配成功,則激發(fā)驅(qū)動程序調(diào)用pxie_probe 函數(shù)去探測設(shè)備以獲取硬件資源信息[10-11]。設(shè)備匹配的實(shí)現(xiàn)代碼如下:

        3.1.2 設(shè)備探測

        設(shè)備硬件資源的探測通過pxie_probe 函數(shù)進(jìn)行,主要完成I/O 資源的申請、基址寄存器(Base Address Register,BAR)空間基地址的獲取、設(shè)備中斷號的申請以及中斷處理函數(shù)的注冊,同時將相關(guān)資源信息保存至私有數(shù)據(jù)結(jié)構(gòu)體private_data 中供驅(qū)動程序使用。設(shè)備探測的實(shí)現(xiàn)代碼如下:

        PXIe 設(shè)備共有6 個BAR 可使用,均可配置為I/O空間或存儲器空間,兩者在訪問方式上有所不同,設(shè)備僅使用BAR0、BAR1 且配置為存儲器空間。在完成BAR 物理地址到內(nèi)核空間虛擬地址的映射后,便可通過函數(shù)ioread32/iowrite32 訪問BAR 中相應(yīng)地址上的配置寄存器實(shí)現(xiàn)DMA 傳輸。

        3.1.3 設(shè)備刪除

        通過調(diào)用函數(shù)cdev_del 和pci_unregister_ driver分別注銷cdev結(jié)構(gòu)體和pci_driver結(jié)構(gòu)體,以實(shí)現(xiàn)設(shè)備的移除并調(diào)用pxie_remove 函數(shù)刪除所申請的硬件資源。設(shè)備刪除的實(shí)現(xiàn)代碼如下:

        3.2 共享內(nèi)存映射

        以DMA 方式向設(shè)備發(fā)送數(shù)據(jù),用戶層應(yīng)用程序需要先將數(shù)據(jù)傳輸至內(nèi)核層驅(qū)動程序的DMA 緩沖區(qū)中,再通過對該緩沖區(qū)的操作寫入設(shè)備。以DMA方式從設(shè)備中讀取數(shù)據(jù)沿反方向執(zhí)行。在頻繁進(jìn)行數(shù)據(jù)傳輸時,大量數(shù)據(jù)若通過函數(shù)copy_from_user和copy_to_user 以拷貝的方式實(shí)現(xiàn)用戶層和內(nèi)核層之間的數(shù)據(jù)交互,會影響整體傳輸效率[12],而通過建立共享內(nèi)存映射可有效解決這一問題[13-14]。

        共享內(nèi)存映射是指將一段物理內(nèi)存同時映射出用戶空間虛擬地址和內(nèi)核空間虛擬地址,這樣應(yīng)用程序和驅(qū)動程序均可對該段物理內(nèi)存進(jìn)行訪問,從而減少數(shù)據(jù)拷貝帶來的時間開銷,提高數(shù)據(jù)的傳輸效率。共享內(nèi)存映射的具體實(shí)現(xiàn)由系統(tǒng)調(diào)用mmap,通過其在file_operations 結(jié)構(gòu)體中的響應(yīng)函數(shù)dma_mmap 完成。利用虛擬內(nèi)存區(qū)(Virtual Memory Areas,VMA)結(jié)構(gòu)將驅(qū)動程序創(chuàng)建的DMA 緩沖區(qū)的虛擬地址轉(zhuǎn)換到該段內(nèi)存的物理地址,然后通過此物理地址為該段內(nèi)存建立新的頁表并映射出起始的用戶空間虛擬地址供應(yīng)用程序使用[15-16]。共享內(nèi)存映射的實(shí)現(xiàn)代碼如下:

        用戶層應(yīng)用程序通過mmap 系統(tǒng)調(diào)用所得到的返回地址就是該段共享內(nèi)存在用戶層的虛擬地址,應(yīng)用程序通過該地址可直接對DMA 緩沖區(qū)進(jìn)行訪問。

        unsigned int *user_dmaaddress=(unsigned int *)mmap(NULL,DMA_LENGTH,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

        當(dāng)設(shè)備停止使用時,應(yīng)解除共享內(nèi)存映射關(guān)系并釋放所申請的DMA 緩沖區(qū)。應(yīng)用程序在release系統(tǒng)調(diào)用的響應(yīng)函數(shù)pxie_release 中,通過調(diào)用函數(shù)munmap 和pci_free_consistent 實(shí)現(xiàn)。

        3.3 DMA 及中斷處理

        上位機(jī)同設(shè)備之間的數(shù)據(jù)傳輸采用DMA 方式實(shí)現(xiàn)。由于在FPGA 內(nèi)部已設(shè)計實(shí)現(xiàn)DMA 控制器,因此CPU 只需要完成對DMA 傳輸相關(guān)寄存器的配置以及中斷信號的處理即可,而不必直接參與數(shù)據(jù)傳輸,從而有效降低CPU 負(fù)荷并提高數(shù)據(jù)的傳輸速率。DMA 傳輸操作流程如圖4 所示。

        圖4 DMA 傳輸操作流程Fig.4 Procedure of DMA transmission operating

        在啟動DMA 傳輸前,通過函數(shù)iowrite32 設(shè)置BAR 空間上DMA 傳輸首地址、傳輸長度以及中斷服務(wù)寄存器,然后設(shè)置讀寫控制寄存器以啟動DMA傳輸。同時,通過等待隊列方式阻塞當(dāng)前進(jìn)程直至設(shè)備向上位機(jī)發(fā)出中斷信號,該信號是數(shù)據(jù)傳輸完畢的標(biāo)志。

        由于接口設(shè)計采用INTx 中斷方式,設(shè)備可能與其他設(shè)備共享同一中斷號,系統(tǒng)在實(shí)際運(yùn)行過程所接收到的中斷信號可能源自其他設(shè)備,因此還需要對中斷信號的來源進(jìn)行判斷,即通過函數(shù)ioread32檢查BAR空間上中斷服務(wù)寄存器的數(shù)值變化。若中斷信號確由設(shè)備產(chǎn)生,則清除中斷信號并喚醒等待隊列所阻塞的進(jìn)程以通知應(yīng)用程序傳輸結(jié)束。

        4 驅(qū)動程序的測試

        Linux 驅(qū)動程序以內(nèi)核模塊形式通過靜態(tài)或動態(tài)的方式加載至內(nèi)核中[17]。由于靜態(tài)加載方式在內(nèi)核編譯以及重啟系統(tǒng)過程中會帶來大量的時間開銷,因此在驅(qū)動程序開發(fā)調(diào)試階段采用動態(tài)加載方式添加和移除驅(qū)動模塊。驅(qū)動模塊的加載與卸載通過命令insmod 和命令rmmod 實(shí)現(xiàn)[18-19]。

        4.1 加載與卸載

        驅(qū)動代碼文件pxie_device.c 的編譯通過vim 編輯器編寫Makefile 文件實(shí)現(xiàn)。由于Makefile 文件可通過make 工具自動完成編譯工作,因此只需要通過系統(tǒng)終端在源代碼文件所在目錄下執(zhí)行make 命令,即可通過GCC 編譯器生成驅(qū)動模塊pxie_device.ko。pxie_device.ko 通過動態(tài)方式加載至內(nèi)核后需創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn)(設(shè)備文件),該節(jié)點(diǎn)的創(chuàng)建為應(yīng)用程序提供了訪問設(shè)備的接口。加載與卸載的實(shí)現(xiàn)代碼如下:

        系統(tǒng)驅(qū)動模塊顯示列表如圖5 所示。

        圖5 系統(tǒng)驅(qū)動模塊顯示列表Fig.5 Display list of system driver module

        4.2 測試結(jié)果

        Qt 是一個跨平臺的C++應(yīng)用程序開發(fā)框架[20],本文通過其集成開發(fā)環(huán)境Qt Creator 以圖形化界面的方式開發(fā)實(shí)現(xiàn)測試程序,如圖6 所示。測試程序通過對FPGA 中FIFO(First Input First Output)存儲器進(jìn)行數(shù)據(jù)讀寫傳輸以驗(yàn)證驅(qū)動程序是否符合設(shè)計需求,數(shù)據(jù)校驗(yàn)結(jié)果如圖7 所示。

        圖6 測試程序界面Fig.6 Test program interface

        圖7 數(shù)據(jù)校驗(yàn)結(jié)果Fig.7 Data verification result

        在測試過程中,數(shù)據(jù)實(shí)際傳輸速率較理論峰值存在一定差距,這主要是由于軟件時間花銷和協(xié)議規(guī)范消耗帶寬(8b/10b 編碼以及各協(xié)議層數(shù)據(jù)包封裝)所導(dǎo)致。當(dāng)數(shù)據(jù)量較小時,這部分花銷占用比較大,導(dǎo)致實(shí)際測得的傳輸速率較低;當(dāng)數(shù)據(jù)量較大時,這部分花銷占用比減小,從而使得傳輸速率顯著提高。

        DMA 寫(設(shè)備接收上位機(jī)發(fā)送的數(shù)據(jù))數(shù)據(jù)傳速率可達(dá)350 MB/s,DMA 讀(上位機(jī)接收設(shè)備發(fā)送的數(shù)據(jù))數(shù)據(jù)傳輸速率可達(dá)420 MB/s。在傳輸相同數(shù)據(jù)量的情況下,DMA 讀速率大于DMA 寫速率,這主要是因?yàn)樵谲浖脑O(shè)備讀取數(shù)據(jù)時,硬件端只需發(fā)送存儲器寫請求TLP 即可;而向設(shè)備寫入數(shù)據(jù)時,硬件端在發(fā)送存儲器讀請求TLP 后,還需要有存儲器讀完成報文進(jìn)行應(yīng)答,從而產(chǎn)生了一些時間花銷。

        5 結(jié)束語

        目前,Windows 操作系統(tǒng)仍占據(jù)國內(nèi)操作系統(tǒng)絕大部分市場份額,但微軟已停止對Win7 的技術(shù)支持,而Win8/Win10 安全性較差,因此,實(shí)現(xiàn)面向國產(chǎn)操作系統(tǒng)的軟件開發(fā)具有重大意義。本文介紹國產(chǎn)Deepin操作系統(tǒng)下PXIe 驅(qū)動程序的開發(fā)方法,對應(yīng)用程序與驅(qū)動程序間的數(shù)據(jù)交互過程進(jìn)行優(yōu)化,同時結(jié)合阻塞機(jī)制和中斷機(jī)制設(shè)計DMA 傳輸操作流程。測試結(jié)果表明,該方法數(shù)據(jù)傳輸準(zhǔn)確穩(wěn)定,可滿足PXIe 可重構(gòu)儀器的數(shù)據(jù)通信需求,并且其通用性較好,在工程實(shí)踐應(yīng)用中具有一定參考價值。在實(shí)際測試系統(tǒng)中往往需要使用多個同類型儀器,下一步將實(shí)現(xiàn)應(yīng)用程序通過單個驅(qū)動同時對多個可重構(gòu)儀器的操作控制及數(shù)據(jù)傳輸。

        猜你喜歡
        驅(qū)動程序調(diào)用應(yīng)用程序
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        刪除Win10中自帶的應(yīng)用程序
        電腦報(2019年12期)2019-09-10 05:08:20
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        關(guān)閉應(yīng)用程序更新提醒
        電腦迷(2012年15期)2012-04-29 17:09:47
        三星電子將開設(shè)應(yīng)用程序下載商店
        微軟軟件商店開始接受應(yīng)用程序
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        国产精品日日摸夜夜添夜夜添| 亚洲欧洲无码一区二区三区| 亚洲av永久无码精品网站| 国产精品麻豆va在线播放| 女人色熟女乱| 无码免费一区二区三区| a级毛片在线观看| 看黄网站在线| 加勒比精品久久一区二区三区 | 国产成人久久精品77777综合| av天堂吧手机版在线观看| 国产av精品一区二区三区不卡 | 又粗又粗又黄又硬又深色的| 久久久久久久综合狠狠综合| 高清在线亚洲中文精品视频| 国产主播无套内射一区| 日产精品一区二区免费| 亚洲国产精品嫩草影院久久av| 一道之本加勒比热东京| 免费观看91色国产熟女| 男人和女人做爽爽免费视频| 亚洲一区二区三区无码国产| 国产亚洲精品aaaa片app| 国产乱子伦精品免费女| 久久91精品国产91久久麻豆| 精品久久精品久久精品| 一本一道久久综合久久| 亚洲成a人片在线观看无码专区| 凹凸在线无码免费视频| 久久精品中文字幕一区| 亚洲中文一本无码AV在线无码| 日本岛国一区二区三区四区| 亚洲视频在线一区二区| 国产美女自慰在线观看| 欧美另类在线视频| 日本高清二区视频久二区| 久久人妻中文字幕精品一区二区| 亚洲av综合av成人小说| 国产欧美日韩精品a在线观看| 另类一区二区三区| 国产在线观看精品一区二区三区|