在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Linux操作系統(tǒng)實(shí)現(xiàn)無配置信息PCI設(shè)備的驅(qū)動(dòng)設(shè)計(jì)

電子設(shè)計(jì) ? 來源:電子元器件應(yīng)用 ? 作者:陳寧,虢莉敏,王新 ? 2020-09-17 16:42 ? 次閱讀

引言

Linux是非常優(yōu)秀的開源操作系統(tǒng),有著十分廣泛的應(yīng)用。基于該操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序的需求越來越多。PCI作為一種廣泛采用的總線標(biāo)準(zhǔn),在嵌入式系統(tǒng)中正被大量使用,而Linux的內(nèi)核也能很好地支持PCI設(shè)備。為此,本文介紹了Linux下無配置信息PCI設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)開發(fā)方法。

1 PCI總線及無配置信息PCI設(shè)備

1.1 PCI總線

PCI是外圍設(shè)備互連(Peripheral ComponentInterconnect)的簡(jiǎn)稱,是一種通用的總線接口標(biāo)準(zhǔn),原先是應(yīng)用于計(jì)算機(jī)系統(tǒng)的。PCI提供了一組完整的總線接口規(guī)范,其目的是描述如何將計(jì)算機(jī)系統(tǒng)中的外圍設(shè)備以一種結(jié)構(gòu)化和可控化的方式連接在一起。該規(guī)范同時(shí)詳細(xì)定義了計(jì)算機(jī)系統(tǒng)中各個(gè)不同部件之間應(yīng)該如何正確地進(jìn)行交互。在一般的計(jì)算機(jī)系統(tǒng)中,總線子系統(tǒng)與存儲(chǔ)子系統(tǒng)被PCI總線分開,CPU通過一塊稱為PCI橋的設(shè)備來完成同總線子系統(tǒng)的交互,圖1所示是一個(gè)PCI子系統(tǒng)的體系結(jié)構(gòu)。

基于Linux操作系統(tǒng)實(shí)現(xiàn)無配置信息PCI設(shè)備的驅(qū)動(dòng)設(shè)計(jì)

盡管目前PCI設(shè)備大多采用32位數(shù)據(jù)總線,但PCI規(guī)范中已經(jīng)給出了64位的擴(kuò)展實(shí)現(xiàn)方案,從而使PCI總線能夠更好地實(shí)現(xiàn)平臺(tái)無關(guān)性。雖然PCI總線是由Intel公司提出的,但它不局限于Intel系列的處理器。當(dāng)今流行的其它處理器系列如Alpha、PowerPC、APARC,以及多處理器結(jié)構(gòu)的下一代處理器都可以使用PCI總線。具體而言,PCI總線包含的特點(diǎn)可簡(jiǎn)要描述為高性能、線性突發(fā)傳輸、極小的存取延誤、采用總線主控和同步操作、獨(dú)立于處理器、兼容性強(qiáng)、預(yù)留了發(fā)展空間、低成本、高效益、軟件透明等等。

1.2 PCI設(shè)備的配置空間

標(biāo)準(zhǔn)的PCI設(shè)備上有三種地址空間:I/O空間、存儲(chǔ)空間及配置空間。CPU可以訪問PCI設(shè)備上的所有地址空間,其中I/O空間和存儲(chǔ)空間提供給設(shè)備驅(qū)動(dòng)程序使用,主要用來實(shí)現(xiàn)PCI設(shè)備和Linux內(nèi)核中設(shè)備驅(qū)動(dòng)程序之間的通訊。而配置空間則裝載著PCI設(shè)備的配置信息,主要由Linux內(nèi)核中的PCI初始化代碼使用。PCI設(shè)備的配置信息空間如圖2所示。

標(biāo)準(zhǔn)PCI設(shè)備配置信息空間的大小為256個(gè)字節(jié),其中低64個(gè)字節(jié)稱為頭標(biāo)區(qū),這部分區(qū)域的格式是固定的。內(nèi)容包括PCI設(shè)備號(hào)、廠商識(shí)別號(hào)、命令寄存器、狀態(tài)寄存器、基址寄存器等重要信息;其余的192個(gè)字節(jié)稱為設(shè)備有關(guān)區(qū),不同的設(shè)備可以對(duì)這部分寄存器進(jìn)行不同的定義。

1.3 無配置信息的PCI設(shè)備

目前的嵌人式系統(tǒng)往往會(huì)要求CPU和專用數(shù)據(jù)運(yùn)算器之間以很高的速率通信。由于現(xiàn)行的總線規(guī)范中,PCI的高性能是最為突出的,因此PCI總線的連接方式被大量采用。數(shù)據(jù)運(yùn)算器往往是針對(duì)某一系統(tǒng)設(shè)計(jì)的,通常會(huì)采用FPGA設(shè)計(jì)。即在FPGA中添加進(jìn)PCI的接口設(shè)計(jì),也就是把FPGA設(shè)計(jì)成為一塊PCI設(shè)備。但是由于嵌入式系統(tǒng)的局限性,在某些FPGA的PCI接口設(shè)計(jì)中不能劃分配置信息空間(I/O空間和存儲(chǔ)空間是設(shè)備與CPU信息交互的基礎(chǔ),是必須存在的),因此這個(gè)設(shè)計(jì)也就是一塊無配置信息的PCI設(shè)備。

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

Linux的設(shè)備驅(qū)動(dòng)程序大致可以分為驅(qū)動(dòng)程序的注冊(cè)與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理幾個(gè)部分。

2.1 設(shè)備的注冊(cè)與注銷

向系統(tǒng)增加一個(gè)驅(qū)動(dòng)程序就要賦予它一個(gè)主設(shè)備號(hào),這一賦值過程應(yīng)該在驅(qū)動(dòng)程序的初始化中完成,它通過調(diào)用函數(shù)register_chrdev()或reg-iste_blkdev ()向內(nèi)核注冊(cè)。接下來就是給程序一個(gè)設(shè)備驅(qū)動(dòng)程序名,這個(gè)名字必須插入到/dev目錄中,并與驅(qū)動(dòng)程序的主設(shè)備號(hào)和次設(shè)備號(hào)相連。獲得主設(shè)備號(hào)的方法是選擇一個(gè)當(dāng)前不用的設(shè)備號(hào),或者在調(diào)用register_chrdev時(shí)讓參數(shù)ma-jor為0,這樣,其返回值便是設(shè)備的主設(shè)備號(hào)。另外,在關(guān)閉字符設(shè)備或塊設(shè)備時(shí),還需要通過unregisler_chrdev()或unregister_blkdev()從內(nèi)核中注銷設(shè)備,并釋放主設(shè)備號(hào)。

2.2 設(shè)備的打開與釋放

打開設(shè)備可由open()完成。在大部分驅(qū)動(dòng)程序中,open主要用于檢查設(shè)備相關(guān)錯(cuò)誤(如設(shè)備尚未準(zhǔn)備好等)、識(shí)別次設(shè)備號(hào)(如有必要更新當(dāng)前read/write位置f_ops指針),以及分配和填寫要放在file-》private_data里的數(shù)據(jù)結(jié)構(gòu)。

釋放設(shè)備由release()完成,release的作用與open相反,主要是釋放file-》private_data中open分配的內(nèi)存,并在最后一次關(guān)閉操作時(shí)關(guān)閉設(shè)備。

2.3 設(shè)備的讀寫操作

字符設(shè)備使用各自的read()和write ()來對(duì)設(shè)備進(jìn)行數(shù)據(jù)讀寫。塊設(shè)備則使用通用block_read()和block_write()來對(duì)設(shè)備進(jìn)行數(shù)據(jù)讀寫。這兩個(gè)通用函數(shù)可以向請(qǐng)求表中增加讀寫請(qǐng)求,這樣,內(nèi)核就可以優(yōu)化請(qǐng)求順序。由于是對(duì)內(nèi)存緩沖區(qū)而不是對(duì)設(shè)備進(jìn)行操作,因而能加快讀寫請(qǐng)求。如果內(nèi)存緩沖區(qū)內(nèi)沒有要讀入的數(shù)據(jù)或者需要將寫請(qǐng)求寫入設(shè)備,那么就需要真正地執(zhí)行數(shù)據(jù)傳輸。

2.4 設(shè)備的控制操作和中斷處理

除了讀寫操作外,有時(shí)還需要控制設(shè)備。這在操作時(shí)可以通過設(shè)備驅(qū)動(dòng)程序中的ioctl()來完成。另外,對(duì)于不支持中斷的設(shè)備,讀寫時(shí)需要輪流查詢?cè)O(shè)備狀態(tài),以決定是否繼續(xù)進(jìn)行數(shù)據(jù)傳輸。如果設(shè)備支持中斷,則可按中斷方式進(jìn)行。

3 無配置信息PCI設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)

無配置信息PCI設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)的關(guān)鍵在于初始化,其余部分與標(biāo)準(zhǔn)PCI設(shè)備驅(qū)動(dòng)差別不大。其初始化的方法有兩種:一是選用外接的EEPROM來存儲(chǔ)該設(shè)備的配置信息;二是直接在驅(qū)動(dòng)程序的探測(cè)模塊里注冊(cè)設(shè)備。

用外接EEPROM配置方式時(shí),內(nèi)核啟動(dòng)后會(huì)檢測(cè)EEPROM,然后讀出其中的配置信息,并將設(shè)備的信息注冊(cè)到pci dev里。

在實(shí)際的系統(tǒng)應(yīng)用中,如果無法外接EEP-ROM,就必須直接在驅(qū)動(dòng)程序的探測(cè)模塊里注冊(cè)設(shè)備。在這種方式下,若系統(tǒng)中沒有其它的即插即用PCI設(shè)備,則可能會(huì)導(dǎo)致檢測(cè)設(shè)備失敗,但事實(shí)上已經(jīng)注冊(cè)了該P(yáng)CI設(shè)備,因此完全可以正常運(yùn)行。

筆者開發(fā)的嵌入式TDMA衛(wèi)星通信系統(tǒng)中的CPU采用MPC8250芯片,基帶信號(hào)處理模塊采用Xilinx公司的X3SC4000(FG676)。MPC8250是Mo-torola公司開發(fā)的一款PowerPC系列嵌入式處理器,該處理器中有32位超標(biāo)量體系結(jié)構(gòu)Power-PC603e處理器內(nèi)核,并集成有PCI橋、PCI仲裁器、存儲(chǔ)器控制器等部件。FPGA的設(shè)計(jì)中則包括PCI接口、sdram控制器及編碼調(diào)制運(yùn)算模塊。

此操作系統(tǒng)采用Linux,內(nèi)核版本為2.6。由于Linux能很好地支持PCI總線,本設(shè)計(jì)在CPU和FPGA之間采用了PCI總線連接方式。由于FPGA的設(shè)計(jì)要求,PCI總線的中斷信號(hào)未被使用,而是另行設(shè)定了兩條中斷信號(hào)線通往MPC8250的通用設(shè)計(jì)口。該系統(tǒng)支持FPGA中bin文件的實(shí)時(shí)更新,因此沒有采用配置EPROM來配置FPGA,而是把要下載到FPGA里的bin文件同Uboot、Linux內(nèi)核及jffs2文件系統(tǒng)一起放在了FLASH里,然后通過MPC8250提供的SPI總線下載到FPGA中。實(shí)際上,如需要更新FPGA的.bin文件,則可通過以太網(wǎng)口將文件拷入FLASH中再下載。

在系統(tǒng)上電啟動(dòng)后,由于Linux內(nèi)核先于jffs2解壓,而FPGA的文件又必須在jffs2解壓完后才能釋放到內(nèi)核空間,然后再借助SPI總線下載到FP-GA中,因此無法在FPGA中創(chuàng)建PCI設(shè)備配置信息空間,所以,本設(shè)計(jì)采用在檢測(cè)PCI設(shè)備時(shí)直接注冊(cè)的方法。

3.1 驅(qū)動(dòng)程序的總體框架

下面是筆者驅(qū)動(dòng)的整體框架,從中可以很明顯地看出幾個(gè)模塊是如何聯(lián)系起來的:

3.2 具體模塊的實(shí)現(xiàn)

由于本系統(tǒng)沒有采用標(biāo)準(zhǔn)PCI總線提供的中斷信號(hào),因此驅(qū)動(dòng)程序中無中斷處理模塊,下面著重介紹對(duì)本設(shè)計(jì)比較重要的初始化設(shè)備過程以及打開設(shè)備模塊、讀寫模塊的設(shè)計(jì)方法。

(1) 初始化設(shè)備過程

初始化設(shè)備過程也是本系統(tǒng)PCI設(shè)備驅(qū)動(dòng)中最為關(guān)鍵的部分。由于本系統(tǒng)中允許PCI總線掛接其它的即插即用設(shè)備,因此,這部分程序還需要保留。其部分代碼及注釋如下:

在2.4之前的內(nèi)核版本中,需要手動(dòng)調(diào)用pci_find_device()函數(shù)來查找PCI設(shè)備,但在2.4版本后,則可以調(diào)用probe探測(cè)函數(shù)來完成對(duì)硬件的檢測(cè)及信息獲取工作。其部分代碼如下:

在獲取的PCI信息子函數(shù)pci_rewin_pci_re-sources_claim()和注冊(cè)設(shè)備子函數(shù)pci_rewin_de-vice_register()里,筆者自己創(chuàng)建的PCI設(shè)備信息可以寫人到pci_dev,然后由Liunx內(nèi)核通過pci_register_drivet ()將此PCI設(shè)備信息創(chuàng)建在PCI設(shè)備列表中。

(2) 打開設(shè)備模塊

打開設(shè)備模塊主要用來檢查設(shè)備號(hào)、開辟PCI總線映射空間。打開設(shè)備模塊的部分代碼及注釋如下:

(3) 讀寫模塊

讀操作就是先通過memcpy_fromio函數(shù)將PCI上傳來的數(shù)據(jù)搬移到內(nèi)核空間中的接收緩沖區(qū),再用copy_to_user搬移到用戶數(shù)據(jù)空間。接收緩沖區(qū)和接收數(shù)據(jù)散列表都要在初始化模塊中進(jìn)行處理。讀操作的部分代碼及注釋如下:

寫操作與讀操作正好相反,它先通過copy_from_user函數(shù)將用戶空間的數(shù)據(jù)搬移到內(nèi)核空間中的發(fā)送緩沖區(qū),再通過memcpy函數(shù)搬移到PCI總線上。由于發(fā)送的數(shù)據(jù)長(zhǎng)度是可變的,所以每次發(fā)送都需要構(gòu)造不同的發(fā)送散列表(發(fā)送緩沖區(qū)可以再初始化時(shí)分配)。寫操作的代碼與讀操作類似,故此省略。

值得注意的是,在PCI設(shè)備用I/O方式讀寫的時(shí)候,CPU將被迫停止工作以等待PCI設(shè)備完成此操作,且每次只允許一個(gè)設(shè)備訪問。這個(gè)策略不利于提升系統(tǒng)性能。但利用MPC8250芯片提供的DMA(直接內(nèi)存訪問)機(jī)制則可大大提高PCI總線的性能,這也是筆者下一步需要改進(jìn)的地方。

4 結(jié)束語

本文討論了Linux2.6版本下開發(fā)設(shè)備驅(qū)動(dòng)程序的原理和相關(guān)知識(shí)。著重介紹了無配置信息PCI設(shè)備驅(qū)動(dòng)程序的開發(fā)方法。該驅(qū)動(dòng)開發(fā)方法可成功應(yīng)用于嵌入式TDMA衛(wèi)星通信系統(tǒng)。測(cè)試證明:本系統(tǒng)可穩(wěn)定有效工作。今后的工作將著重是提升系統(tǒng)性能并進(jìn)行改進(jìn)。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11469

    瀏覽量

    212901
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7103

    瀏覽量

    125036
  • PCI
    PCI
    +關(guān)注

    關(guān)注

    5

    文章

    678

    瀏覽量

    131500
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式LinuxPCI設(shè)備驅(qū)動(dòng)的設(shè)計(jì)

    關(guān)鍵問題的設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)控技術(shù),2002,21(8):58-60.[5] 錢晨,徐榮華,王欽若. 基于Linux操作系統(tǒng)設(shè)備驅(qū)動(dòng)
    發(fā)表于 10-08 09:44

    有無操作系統(tǒng)的嵌入式Linux驅(qū)動(dòng)設(shè)備有何區(qū)別?

    有無操作系統(tǒng)的嵌入式Linux驅(qū)動(dòng)設(shè)備有何區(qū)別? 一、驅(qū)動(dòng)的作用任何一個(gè)計(jì)算機(jī)系統(tǒng)的運(yùn)行都是
    發(fā)表于 08-13 17:53

    配置信息PCI設(shè)備驅(qū)動(dòng)程序的開發(fā)方法是什么

    本文介紹了Linux配置信息PCI設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)開發(fā)方法。
    發(fā)表于 04-27 06:10

    如何去實(shí)現(xiàn)基于Linux操作系統(tǒng)下的WiFi設(shè)備驅(qū)動(dòng)移植呢

    FS-MP1A開發(fā)板的原理是什么?如何去實(shí)現(xiàn)基于Linux操作系統(tǒng)下的WiFi設(shè)備驅(qū)動(dòng)移植呢?
    發(fā)表于 02-28 09:55

    基于Linux操作系統(tǒng)下的MIPI觸摸屏設(shè)備驅(qū)動(dòng)移植配置過程是如何實(shí)現(xiàn)

    基于Linux操作系統(tǒng)下的MIPI觸摸屏設(shè)備驅(qū)動(dòng)移植配置過程是如何實(shí)現(xiàn)的?
    發(fā)表于 02-28 10:10

    實(shí)時(shí)操作系統(tǒng)VxWorks下PCI總線配置技術(shù)

    實(shí)時(shí)操作系統(tǒng)VxWorks下PCI總線配置技術(shù)
    發(fā)表于 03-29 12:26 ?19次下載

    Linux系統(tǒng)PCI設(shè)備驅(qū)動(dòng)程序開發(fā)

    為了促進(jìn)“Linux+PCI”技術(shù)在工控領(lǐng)域中的應(yīng)用,通過對(duì)Linux系統(tǒng)PCI局部總線規(guī)范實(shí)現(xiàn)機(jī)制和
    發(fā)表于 07-16 09:55 ?17次下載

    基于Linux操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)

    本文介紹了Linux 系統(tǒng)的特點(diǎn),闡述了在Linux 操作系統(tǒng)下,對(duì)系統(tǒng)硬件的訪問和開發(fā)驅(qū)動(dòng)程序
    發(fā)表于 09-02 17:11 ?20次下載

    Linux操作系統(tǒng)中的PCI驅(qū)動(dòng)開發(fā)

    0引言PCI總線是一種成熟的計(jì)算機(jī)標(biāo)準(zhǔn)總線,而Linux操作系統(tǒng)則是一種源代碼公開的操作系統(tǒng)Linux構(gòu)架完全沿襲了UNIX的
    發(fā)表于 09-23 15:50 ?1161次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>中的<b class='flag-5'>PCI</b><b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)

    Linux操作系統(tǒng)下的PCI驅(qū)動(dòng)開發(fā)

    PCI總線是一種成熟的計(jì)算機(jī)標(biāo)準(zhǔn)總線,而Linux操作系統(tǒng)則是一種源代碼公開的操作系統(tǒng)Linux構(gòu)架完全沿襲了UNIX的
    發(fā)表于 06-07 10:30 ?1780次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>下的<b class='flag-5'>PCI</b><b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)

    基于操作系統(tǒng)PCI程序開發(fā)

    Vxworks是WindRiver公司開發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng),廣泛地應(yīng)用于航空航天、工業(yè)控制、通信等領(lǐng)域;分析了VxWorks下PCI設(shè)備驅(qū)動(dòng)程序的
    發(fā)表于 09-22 16:31 ?9次下載
    基于<b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>PCI</b>程序開發(fā)

    Linux操作系統(tǒng)下的PCI驅(qū)動(dòng)開發(fā)

    、安全的優(yōu)點(diǎn),尤其是Linux加入GNU并遵循公共版權(quán)許可證(GPL)之后,幾乎所有的GNU軟件都可以移植到Linux,從而完善和提高了Linux系統(tǒng)的使用性,并逐步成為通信、工業(yè)控制
    發(fā)表于 12-03 01:22 ?1410次閱讀
     <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>下的<b class='flag-5'>PCI</b><b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)

    PCILinux實(shí)現(xiàn)及其驅(qū)動(dòng)

    /pci.h里,它詳細(xì)描述了一個(gè)PCI設(shè)備幾乎所有的硬件信息,包括廠商ID、設(shè)備ID、各種資源等:?? 在
    發(fā)表于 04-02 14:37 ?810次閱讀

    有無操作系統(tǒng)的嵌入式Linux驅(qū)動(dòng)設(shè)備有何區(qū)別?

    是將系統(tǒng)的軟件與硬件連接起來,使它們能夠相互交互。 嵌入式系統(tǒng)常使用Linux系統(tǒng)作為開發(fā)平臺(tái),它具有開源、可移植、靈活的特點(diǎn)。而在嵌入式Linux
    的頭像 發(fā)表于 10-29 17:29 ?1007次閱讀

    Linux系統(tǒng)配置優(yōu)化技巧

    應(yīng)用系統(tǒng)跑在操作系統(tǒng)上面,系統(tǒng)的性能也關(guān)系到應(yīng)用程序的性能,這里講一些Linux性能關(guān)鍵的配置信息
    的頭像 發(fā)表于 03-04 11:27 ?400次閱讀
    主站蜘蛛池模板: 亚洲卡一卡2卡三卡4卡国色 | 天天射夜夜爽 | 欧美一级在线免费观看 | 欲色影院 | 国产福利久久 | 香港午夜理理伦_级毛片 | 成人三级在线观看 | 一区三区三区不卡 | 亚洲第一毛片 | 三级毛片网站 | 俄罗斯女人69xxx | 大蕉久久伊人中文字幕 | 国产激情久久久久影院小草 | 欧美成人午夜片一一在线观看 | 欧美一区二区三区黄色 | 特级毛片a级毛免费播放 | 精品视频一区二区三区四区五区 | 中文天堂在线观看 | 欧美男人的天堂 | 97av免费视频 | 四虎永久在线精品影院 | 在线播放一区二区精品产 | 国产手机在线国内精品 | 国产一级在线观看www色 | 国产成人精品日本亚洲语音1 | 午夜乩伦| 在线亚洲小视频 | 手机福利在线观看 | 亚洲狠狠婷婷综合久久久久图片 | 久久狠狠躁免费观看 | 999精品国产 | 色成人综合网 | 亚洲福利秒拍一区二区 | tueb69xxxxxhd日本| 欧美视频色 | 国产黄色片在线观看 | 2021国产成人午夜精品 | 操天天 | 狠狠狠色丁香婷婷综合久久五月 | 韩国三级理论在线看中文字幕 | 欧美在线网站 |