《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 嵌入式Linux中I2C設備驅動程序的研究與實現
嵌入式Linux中I2C設備驅動程序的研究與實現
摘要: I2C 作為一種目前通用的總線技術,已廣泛應用于EEPROM、實時鐘、小型LCD 等設備與CPU 的接口中。分析了嵌入式Linux 中I2C 驅動程序的體系結構,I2C 驅動程序中一些重要數據結構之間的關系以及I2C 驅動程序的運行機制。最后,結合具體的EEPROM 芯片AT24C08 說明了在嵌入式Linux 下開發I2C設備驅動程序的一般流程。另外還創新了一般的驅動方法,實現了單設備多驅動的驅動模式。
Abstract:
Key words :

  引言

  I2C是“Inter Integrated Circuit Bus”的縮寫,中文譯成“內部集成電路總線”, 它是Philips 公司于20 世紀80 年代研發成功的一種具有多端控制功能的雙線雙向串行數據總線標準, 其具有模塊化、電路結構簡單等優點。在嵌入式系統中,I2C總線已經成為器件接口的標準之一, 常用于連接RAM、EEPROM 以及LCD 控制器等設備。另外,總線的數據傳輸是以字節為單位的。

  目前,標準的I2C的傳輸速率可以達到100kbit/s,能支持128 個設備,增強型I2C傳輸速率可達400kbit/s,能支持多達1024 個設備,高速模式下的I2C 傳輸速率更高達3.4Mbit/s。

  1 Linux 驅動程序

  驅動程序是指系統內核與系統硬件之間的接口。Linux 中的每一個外圍物理設備等都有一個專門用于控制該設備的設備驅動程序" title="設備驅動程序" target="_blank">設備驅動程序。設備驅動可以完成初始化、釋放以及檢測硬件設備;差錯和故障處理;負責內核與硬件、應用程序與硬件之間的數據傳輸與通信的一些重要工作。在嵌入式系統中,設備驅動為嵌入式操作系統和應用程序訪問硬件設備提供統一的接口。通過它, 操作系統和應用程序就可以輕松地操作和驅動硬件架構的分層。

  2 Linux 的I2C 體系結構

  2.1 Linux 下I2C 體系結構分析

  Linux 的I2C 體系結構由3 大部分組成:

  (1)I2C框架:I2C.h 和I2C-core.c 為I2C框架的主體,提供了核心數據結構的定義、I2C 適配器驅動和設備驅動的注冊、注銷方法,I2C 通信方法(algorithm)上層的、與具體適配器無關的代碼、以及檢測設備地址的上層代碼等。作為核心的I2C-core.c 還為總線驅動設備提供了一些統一的調用接口進行讀寫和設置操作, 另外它還提供了將各種支持的總線設備驅動添加到這個體系中的方法, 以及當不再使用這些總線驅動時從體系中刪除的方法。

  (2)I2C 總線驅動I2C總線驅動是對I2C 硬件體系結構中適配器端的實現,I2C 總線驅動主要包含了I2C 適配器數據結構I2C_adapter, 以及描述在具體I2C 適配器上的總線通信方法i2c_algorithm 數據結構。

  (3)I2C 設備驅動:I2C 設備驅動是對I2C 硬件體系結構中設備端的實現, 設備一般掛接在受CPU 控制的I2C 適配器上, 通過I2C 適配器與CPU 交換數據。I2C 設備驅動主要包含了數據結構i2c_driver 和i2c_client。

  這三部分的關系如圖1 所示。

圖1Linux 中I2C 體系結構

  2.2 I2C驅動程序中的重要數據結構

  在I2C 框架的i2c.h 這個頭文件中對4 個關鍵的結構體進行了定義, 它們分別是i2c_adapter、i2c_algorithm、i2c_driver 和i2c_client。結構體i2c_adapter 是一個I2C控制器的邏輯抽象,并且作為最核心的數據結構提供了I2C適配器的驅動。i2c_algorithm對應一套通信方法, 其封裝了對一個I2C 控制器的讀寫操作, 并且提供的通信函數可以控制適配器上產生特定的訪問周期,這套通信方法由驅動開發者來完成。i2c_driver 則是對應于一套驅動方法,用于輔助作用的數據結構,不對應任何物理實體,僅是提供了I2C 設備i2c_client 的驅動。而i2c_client 對應于真實的物理設備,描述具體設備可能的私有數據結構。

  2.3I2C驅動程序中重要數據結構之間的關系

  對于上述的4 個結構體來說, 其中的i2c_driver 和i2c_client 是與具體I2C 設備相關的,而i2c_adapter 和i2c_algorithm則共同構成I2C 總線適配器驅動。一個algorithm 可以適用于多個I2C 總線上的不同adapters, 但具體的每個adapter 只能對應于一個algorithm。在i2c_adapter 數據結構中設計了clients指針數組, 用于記錄該總線上每個設備的i2c_client 數據結構。

  另外, 定義內核中全局靜態指針數組adapters 和drivers 分別記錄已注冊的I2C 適配器驅動和I2C 設備驅動程序。值得注意的是同一個i2c_adapter 中的不同的i2c_client 可能使用同一個i2c_driver,而分屬于不同i2c_adapter 中的兩個i2c_client 也可能使用同一個i2c_driver。

  3 一個具體的I2C 設備驅動程序的開發

  AT24C08 是由ATMEL 公司出品的一款EEPROM 存儲器。

  作為一個標準的I2C 設備AT24C08 有4 個塊存儲區, 一個塊有256 個數據存儲單元,整個AT24C08 具有1024 個存儲單元。由于每個數據存儲單元可存1 字節的數據,所以整塊AT24C08 的存儲能力為1KB。

  3.1 I2C 設備驅動程序的一般結構及運行流程圖

  開發一個具體的I2C 設備驅動需要一個完整、標準的結構,而該結構的實現是通過編寫兩個方面的接口而完成的, 一個是用以掛接I2C adapter 層來實現對I2C 總線及I2C設備具體的訪問方法, 即I2C 核心層的接口, 主要實現attach_adapter,detach_client,command 等接口函數。另一個是對用戶應用層的接口, 提供用戶程序訪問I2C設備的接口, 包括實現open,release,read,write 以及ioctl 等標準文件操作的接口函數。下面將通過對核心層接口和應用層接口的分析來說明I2C 設備驅動程序的運行機制。圖2 為I2C 設備驅動程序運行流程圖(圖中at 代表具體的設備AT24C08):

  3.2 I2C 設備驅動的I2C 核心層接口分析

  如圖2 的用戶空間在通過insmod 命令加載設備驅動程序時, 設備驅動將通過使用動態模塊的方式加載并指向設備初始化函數at_init(),在初始化函數中使用register_chrdev()進行字符型設備的注冊, 并可以通過靜態和動態兩種方法來申請注冊到系統中的設備號。另外將調用核心i2c -core.c 中提供的i2c_add_driver()函數注冊由at_driver 數據結構描述的驅動方法,該數據結構中完成了對驅動程序的標示, 并包含了兩個重要的成員函數at_attach_adapter()和at_detach_client()。

  在i2c_add_driver () 注冊at_driver 數據結構后,at_attach_adapter()函數就會被自動調用,其遍歷系統中的每個i2c 總線驅動, 探測想要訪問的設備, 連接符合i2c driver 特定條件的i2c adapter,并通過i2c adapter 實現對I2C 總線及其設備的訪問。

  而at_attach_adapter()的功能則是依靠調用i2c-core.c 核心中的i2c_probe()函數來實現的,通過i2c_probe()函數可以認領adapter所指向的適配器上的所有合適的設備。設備可能使用的地址由addr_data 數組指出。通過設備地址每次檢測到新設備后,i2c_probe()將使用它的第三個參數即回調函數初始化設備的數據結構i2c_client,并用i2c_check_functionality()確定I2C 適配器所支持的通信方法。另外再使用i2c_attach_client()知會I2C 核心系統中包含了一個新的I2C 設備。

  通過rmmod 命令對設備驅動進行卸載時, 在卸載函數at_exit()中將使用i2c_del_driver(),其調用會引起與數據結構at_driver 關聯的每個i2c_client 與之解除關聯, 隨后at_detach_client()函數也將因此而被調用,而at_detach_client()中的i2c_detach_client()又完成與i2c_attach_client()相反的過程,并使用kfree 釋放由client 所占的內存。另外卸載函數at_exit()中還將使用unregister_chrdev()對字符型設備進行注銷。

  3.3I2C設備驅動用戶應用層接口分析

  在注冊字符型設備時, 設備驅動中初始化了一個structfile_operations 文件操作結構體變量用于鏈接字符設備驅動程序和用戶應用程序,在該結構中定義了一組函數指針。系統就是通過這組函數指針對AT24C08 進行具體的操作,系統首先通過設備文件的主設備號找到相應的設備驅動程序, 然后讀取這個數據結構相應的函數指針,找到相關的功能函數,接著把控制權交給該函數,從而就在上層屏蔽了設備驅動的具體實現細節,提供給用戶一個方便快捷的接口。該結構中的at_open(),對應于用戶應用層的open()接口函數,其通過mknod 創建的設備節點對設備文件進行打開操作。而對應用戶層release () 接口函數的at_release () 則負責設備文件的釋放操作。file_operations 中的at_ioctl()則主要是為用戶提供一些控制該AT24C08 的命令。對一塊具體設備進行讀寫操作是編寫驅動要達到目的,file_operations結構體中所指向的讀寫函數at_read(),at_write()完成了對AT24C08 的寫入和讀出操作。

  就寫函數而言, 在寫數據之前必須先輸入測試單元的起始地址, 然后再對寫入的數據分配相應內存, 然后使用copy_from_user 命令把從用戶空間獲得的數據拷貝到內核空間,并構造I2C 消息數據,最終通過i2c-core.c 的i2c-transfer()函數進行I2C消息數組的傳輸,而i2c_transfer()將指向總線驅動中的算法i2c_algorithm 所對應的具體適配器的master_xfer()方法,這樣就借助i2c-core.c 作為紐帶連接了設備驅動和總線驅動,并完成了兩者之間的通信,其運行流程如圖2 的內核空間所示。

  對于讀函數at_read(),同樣要對數據進行內存的分配,構造I2C消息,傳輸I2C 消息以及轉換數據空間等。兩者的主要區別則體現在對I2C 消息的構造上,在讀出數據之前,先要寫地址,根據寫入的地址來尋找將要讀出的數據的起始地址, 所以在讀函數中就需要構造兩條I2C 消息,一條用于寫地址操作,另一條用于讀數據操作。另外在轉換數據空間時, 讀函數將使用copy_to_user 把內核空間的數據拷貝到用戶空間。

  3.4 AT24C08 的單設備多驅動的實現方式

  單設備多驅動是本文的一個創新點。設計中實現了分3 個設備驅動一對1 塊AT24C08 進行操作。設備驅動1 對AT24C08的第1 個塊操作,設備驅動2 對第2 個塊操作,設備驅動3 對第3 和第4 個塊進行操作。對塊的分開操作體現在對設備地址的探測上,由于保存設備地址信息的是二元數組addr_data,所以在多驅動對單一的AT24C08 操作時就需要在該二元數組中指明每個設備驅動程序所控制的設備地址。對于控制第1 個塊的設備驅動1,通過數組normal_addr 指出要進行操作的設備地址為0x50,如下所示:

  static unsigned short normal_addr[]={ 0x50,I2C_CLIENT_END};

  再通過其對數組addr_data 進行初始化, 這樣, 設備驅動1就能檢測到數組中所指出的AT24C08 的第1 個塊,而跳過其他的塊, 達到了只對單一特定塊操作的目的。對于設備驅動2 來說, 只需把數組normal_addr 中地址改為AT24C08 的第2 個塊的地址0x51 即可。同理,對設備驅動3,只需把normal_addr 中的單一地址改為兩個地址即可,如下所示:

  static unsigned short normal_addr [] = { 0x52,0x53, I2C_CLIENT_END};

  這樣就可使設備驅動只探測到后兩個塊,而跳過其他塊,以達到對單一AT24C08 中多個塊操作的目的。然后再用insmod命令加載編譯好的三個.ko 驅動模塊, 獲得3 個不同的設備號后,接著根據所獲得的設備號使用mknod 命令創建3 個不同的字符型設備節點, 最后通過用戶層的3 個測試程序分別打開已創建的這3 個不同的設備節點就能分別對不同的塊進行讀寫操作,至此就實現了單設備多驅動的控制方式。

  同樣除了分3 個驅動外, 驅動開發者也可以編寫4 個設備驅動分別對每1 個塊進行操作, 或者就只編寫1 個設備驅動對4 個塊一起操作,也適用于綁定非連續塊進行操作,比如用一個設備驅動控制第1 和第3 個塊??傊寗娱_發人員可以根據不同的需要進行不同的組合方式。

  3.5 AT24C08 設備驅動程序的驗證與測試

  設備驅動程序的驗證, 需要通過用戶層的測試程序來實現,測試程序如下:

  fd=open("/dev/at", O_RDWR); //打開設備文件,獲得設備文件的文件描述符。

  scanf("%u", &start_address); //輸入測試單元起始地址。

  write(fd,buf,sizeof(buf)); //把以頁寫入方式把輸入的16 個數據寫入內核空間。

  4 結束語

  作為當前最流行的總線技術之一,I2C 總線具有結構小巧,使用簡單高效的特點,目前在各種設計中已得到廣泛的應用。本文分析了Linux 下I2C 的體系結構,較為詳盡的說明了I2C驅動程序中的一些重要數據結構以及這些數據結構之間的關系,并論述了I2C 驅動程序體系的運行機制, 最后以一個EEPROM 芯片AT24C08 為例,詳細的給出了一個具體設備驅動的基本開發過程, 并說明了設備驅動中的兩個重要接口,I2C 核心層接口和用戶應用層接口。更重要的是本文還提供了一種單設備多驅動的實現方式,這將帶給驅動開發人員一定的啟示。另外,本文還進行了設備驅動程序的測試與驗證工作, 保證了設備驅動程序編寫的正確性。本文的設備驅動設計方法也將對其他相關I2C設備驅動的設計提供良好的借鑒作用。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美日韩专区| 欧美精选午夜久久久乱码6080| 美女999久久久精品视频| 在线精品福利| 一区二区自拍| 亚洲在线一区| 欧美精品久久久久久久| 欧美成人亚洲成人日韩成人| 久久尤物电影视频在线观看| 亚洲欧美中文在线视频| 亚洲欧美偷拍卡通变态| 一区在线观看视频| 欧美一区二区三区四区高清| 久久影视精品| 欧美日韩国产成人高清视频| 在线亚洲一区观看| avtt综合网| 欧美视频一区在线观看| 国产精品一级久久久| 欧美破处大片在线视频| 国产人成一区二区三区影院| 国产日韩精品一区二区三区| 国产欧美日韩另类一区| 欧美日本视频在线| 一区二区三区四区五区在线| 亚洲精品日日夜夜| 欧美区高清在线| 欧美日韩伦理在线免费| 蜜桃伊人久久| 国内精品**久久毛片app| 国产情人综合久久777777| 影音国产精品| 国产精品草莓在线免费观看| 亚洲天堂免费在线观看视频| 国产精品分类| 亚洲综合视频网| 亚洲欧美一区二区三区极速播放| 国产日韩欧美一二三区| 久久av一区二区三区亚洲| 国产在线视频欧美| 亚洲小少妇裸体bbw| 性一交一乱一区二区洋洋av| 欧美日韩在线播放三区| 亚洲人成7777| 欧美特黄a级高清免费大片a级| 欧美在线国产精品| 亚洲一区二区黄色| 一区精品在线| 欧美激情2020午夜免费观看| 亚洲激情欧美| 久久久久久久综合狠狠综合| 久久婷婷国产综合精品青草| 欧美大片在线看免费观看| 亚洲一区免费视频| 国产一区二区三区高清在线观看| 亚洲国产成人午夜在线一区| 99国产精品一区| 国产农村妇女毛片精品久久莱园子| 欧美大片专区| 久久精品亚洲一区二区三区浴池| 欧美日产在线观看| 亚洲精品一区二区三区av| 激情欧美一区二区三区在线观看| 好看的亚洲午夜视频在线| 国产精一区二区三区| 亚洲免费电影在线| 亚洲精品视频免费观看| 国产日韩在线亚洲字幕中文| 久久综合色88| 国产亚洲成av人片在线观看桃| 欧美一区二区三区在线视频| 蜜桃av一区二区在线观看| 国产精品蜜臀在线观看| 欧美日韩精品一本二本三本| 亚洲一区二区三区涩| 最新日韩在线| 久久久精品欧美丰满| 亚洲色无码播放| 国产精品国产三级国产普通话蜜臀| 欧美日韩www| 久久久欧美精品sm网站| 欧美电影免费观看大全| 在线免费观看视频一区| 免费在线日韩av| 激情久久五月天| 免费观看亚洲视频大全| 国产亚洲视频在线观看| 欧美母乳在线| 亚洲免费播放| 欧美精品久久一区二区| 91久久精品国产91久久性色| 国产精品久久久久久久久果冻传媒| 久久免费视频观看| 亚洲婷婷国产精品电影人久久| 国产精品美女一区二区| 免费久久99精品国产自在现线| 欧美精品久久一区二区| 欧美性猛交xxxx乱大交退制版| 伊人精品在线| 欧美日韩色婷婷| 亚洲一区二区在线看| 99在线精品观看| 久久精品视频在线播放| 欧美11—12娇小xxxx| 欧美尤物一区| 欧美午夜精品久久久久久人妖| 小黄鸭精品aⅴ导航网站入口| 国产一区成人| 欧美亚洲在线视频| 欧美日韩一区二区在线视频| 国产精品日韩一区| 亚洲国产美女| 亚洲黑丝一区二区| 久久综合国产精品| 欧美日韩国产综合久久| 亚洲一区二区三区四区中文| 国产精品自在在线| 极品日韩久久| 亚洲福利视频在线| 欧美性淫爽ww久久久久无| 欧美国产日韩精品| 在线精品观看| 一区二区三区精密机械公司| 一个色综合导航| 亚洲伊人观看| 亚洲最新合集| 欧美日韩在线大尺度| 久久深夜福利| 久久综合中文字幕| 亚洲国产精品欧美一二99| 国产精品v欧美精品v日韩| 欧美一区三区三区高中清蜜桃| 一区二区日韩欧美| 欧美亚洲一区二区在线观看| 国产精品成人v| 欧美在线亚洲在线| 久久另类ts人妖一区二区| 欧美日韩性生活视频| 日韩视频精品在线观看| 99热这里只有精品8| 国产中文一区二区三区| 亚洲美女尤物影院| 国产日韩欧美夫妻视频在线观看| 国产日产欧美一区| 久久久久久久久久看片| 久久久久久9999| 91久久中文| 欧美精品色一区二区三区| 牛牛精品成人免费视频| 在线精品视频免费观看| 男女激情视频一区| 亚洲国产精品精华液2区45| 久久综合99re88久久爱| 国产午夜亚洲精品理论片色戒| a4yy欧美一区二区三区| 亚洲国产日韩综合一区| 一区二区三区在线观看视频| 蜜桃精品久久久久久久免费影院| 久久精品视频免费| 国产日韩精品一区二区| 亚洲欧美国产不卡| 欧美制服丝袜第一页| 久久综合激情| 国产老肥熟一区二区三区| 在线一区二区视频| 欧美在线视频不卡| 午夜国产精品影院在线观看| 午夜日本精品| 欧美高清视频一区| 国产日本欧美一区二区| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产视频一区| 欧美午夜在线| 亚洲欧美日韩另类| 欧美国产日韩精品| 亚洲二区在线观看| 日韩系列欧美系列| 欧美一进一出视频| 亚洲欧美日本国产有色| 久久精品国产精品亚洲精品| 国产一区二区三区黄视频| 免费观看亚洲视频大全| 欧美成人高清| 国产精品电影网站| 亚洲激精日韩激精欧美精品| 久久日韩精品| 国产精品入口尤物| 黄色精品在线看| 国产精一区二区三区| 亚洲欧美资源在线| 欧美精品一区在线播放| 激情综合色综合久久| 亚洲一区在线免费观看| 久久久久欧美| 亚洲国产精品成人综合色在线婷婷| 欧美日韩中文字幕日韩欧美| 欧美激情一区二区三区全黄| 一道本一区二区| 亚洲激情一区二区三区| 欧美国产日韩一区二区三区| 国产精品视频xxxx| 亚洲欧美日韩精品综合在线观看| 激情自拍一区| 国产精品一区二区三区乱码| 国产一区高清视频| 一区二区免费在线观看| 91久久一区二区| 亚洲欧美视频一区| 亚洲东热激情| 蜜臀99久久精品久久久久久软件| 欧美激情一区二区三级高清视频| 亚洲无亚洲人成网站77777| 国产一区二区三区最好精华液| 国产精品第一区| 久久亚洲国产精品日日av夜夜| 黄色av日韩| 欧美日韩一区国产| 国产精品乱码久久久久久| 噜噜噜91成人网| 女人色偷偷aa久久天堂| 欧美影院在线播放| 亚洲一区免费视频| 麻豆精品视频| 一区二区av在线| 国产精品久久久久国产a级| 亚洲蜜桃精久久久久久久| 久久婷婷色综合| 欧美韩日一区| 久久五月婷婷丁香社区| 国产精品卡一卡二| 欧美主播一区二区三区| 欧美成人乱码一区二区三区| 欧美电影免费观看网站| 欧美激情一区二区三区蜜桃视频| 欧美日韩在线观看视频| 亚洲国产日韩综合一区| 激情视频一区二区| 亚洲人成小说网站色在线| 久久只精品国产| 久久视频一区二区| 一区二区成人精品| 亚洲成色www久久网站| 在线观看一区二区视频| 国产亚洲精品成人av久久ww| 午夜亚洲性色视频| 国产精品v欧美精品∨日韩| 在线观看不卡| 亚洲男人的天堂在线观看| 亚洲一区二区高清| 精品88久久久久88久久久| 亚洲一区二区久久| 国产精品专区第二| 宅男噜噜噜66国产日韩在线观看| 久久九九久精品国产免费直播| 亚洲一区二区三区在线观看视频| 久久嫩草精品久久久精品一| 久久一区中文字幕| 欧美日韩伦理在线免费| 99国产欧美久久久精品| 国产精品99一区| 午夜日韩在线观看| 狠狠久久五月精品中文字幕| 亚洲国产精品一区二区www在线| 亚洲午夜精品一区二区三区他趣| 欧美夫妇交换俱乐部在线观看| 国产精品手机视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品第2页| 国一区二区在线观看| 亚洲精品久久久蜜桃| 国产精品草草| av成人老司机| 在线观看欧美黄色| 欧美/亚洲一区| 国产午夜精品美女毛片视频| 欧美日韩免费观看一区二区三区| 美女国内精品自产拍在线播放| 国产精品视频免费观看www| 国产日韩精品视频一区| 亚洲宅男天堂在线观看无病毒| 国产毛片精品视频| 在线免费精品视频| 欧美日韩国产美女| 蜜臀av在线播放一区二区三区| 亚洲欧美经典视频| 午夜视频一区二区| 亚洲尤物视频在线| 国产精品人人做人人爽人人添| 国产精品99免费看| 一本久道综合久久精品| 欧美日韩一区二区三区在线看| 国产亚洲精品一区二区| 亚洲综合清纯丝袜自拍| 日韩亚洲欧美中文三级| 在线观看日韩www视频免费| 蜜桃av一区二区| 久久九九国产精品| 六月天综合网| 国产精品v欧美精品∨日韩| 国产偷国产偷亚洲高清97cao| 狠狠网亚洲精品| 国产精品一区二区久久精品| 国产精品美女久久| 亚洲国产日韩欧美综合久久| 国产农村妇女毛片精品久久莱园子| 国产伦精品一区二区三区免费| 一区二区日韩免费看| 国产精品福利在线观看网址| 一区二区三区在线观看国产| 国产精品av久久久久久麻豆网| 欧美精品激情在线观看| 欧美午夜片在线免费观看| 国产视频一区欧美| 久久99在线观看| 亚洲美女色禁图| 欧美成人免费一级人片100| 一区二区三区精品在线| 精品成人a区在线观看| 欧美日韩一二三区| 欧美成人福利视频| 欧美大片免费久久精品三p| 欧美黄色视屏| 亚洲婷婷免费| 国产精品日韩一区二区| 国产九九精品| 在线观看欧美激情| 亚洲国产精品久久久久秋霞影院| 亚洲人精品午夜|