《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于編譯選項的Linux內核交互式圖解軟件設計*
基于編譯選項的Linux內核交互式圖解軟件設計*
2015年微型機與應用第8期
潘朋飛,李素科,荊 琦
(北京大學 軟件與微電子學院,北京 102600)
摘要: Linux內核龐大并且可定制性非常高,而且目前市場上并沒有學習內核的指導軟件。針對Linux內核學習難、配置難等問題,對Linux內核模塊進行了重新的邏輯劃分,提出了“虛目錄”的概念,并在此基礎上,圍繞Linux內核的編譯選項設計并開發了一款學習指導軟件。該軟件為一套內核編譯配置的輔助工具,虛目錄的劃分清晰地展示了內核功能模塊的邏輯劃分,展開虛目錄后,會顯示與此虛目錄功能配置相關的所有編譯配置選項,使用戶了解到該目錄項的功能是通過哪些編譯選項來配置的。編譯配置選項之間存在著編譯依賴關系,本軟件可以從源碼的層次(如函數調用、變量引用等)來解釋編譯依賴關系的具體實現。
Abstract:
Key words :

  摘  要: Linux內核龐大并且可定制性非常高,而且目前市場上并沒有學習內核的指導軟件。針對Linux內核學習難、配置難等問題,對Linux內核模塊進行了重新的邏輯劃分,提出了“虛目錄”的概念,并在此基礎上,圍繞Linux內核的編譯選項設計并開發了一款學習指導軟件。該軟件為一套內核編譯配置的輔助工具,虛目錄的劃分清晰地展示了內核功能模塊的邏輯劃分,展開虛目錄后,會顯示與此虛目錄功能配置相關的所有編譯配置選項,使用戶了解到該目錄項的功能是通過哪些編譯選項來配置的。編譯配置選項之間存在著編譯依賴關系,本軟件可以從源碼的層次(如函數調用、變量引用等)來解釋編譯依賴關系的具體實現。
  關鍵詞: Linux內核;虛目錄;編譯選項;交互式圖解軟件
0 引言
  Linux操作系統以其開源源碼、高性能和高可靠性等諸多優勢在商業服務器和個人桌面系統中得到日益廣泛的應用。近年來,隨著Linux內核的不斷發展和完善,內核變得日趨龐大,想深入了解其模塊的劃分以及各個模塊的功能機制,也變得相對困難。在對Linux體系結構及內核功能模塊間關系分析的基礎上,對Linux內核進行了重新的邏輯架構劃分,形成“虛目錄”,并且將所有內核源碼分配到相應的虛目錄下。同時,Linux內核的可定制性也是非常高的,它有著數以萬計的編譯配置選項,針對不同的需求可以進行相應的配置。但是,如此大數目的編譯配置選項也正是問題的所在,不管是初學者,還是內核的精通者,都無法保證能了解到每個編譯配置選項處于內核的哪個大模塊中,以及編譯選項配置所涉及的文件,等等。通過對內核Kconfig文件的語法分析,識別出所有的編譯選項;通過對Makefile文件的語法分析,解析出每個編譯所需要的源碼文件;根據之前劃分好的虛目錄,以源碼文件作為中介,將編譯選項劃分到相應的虛目錄中。這樣就可以很清楚地知道內核的哪些功能(虛目錄)需要哪些配置選項去配置,以及每個配置選項配置需要涉及哪些文件。為了深入到最底層來了解每個功能以及配置的實現,對文件進行解析,提取出具體函數以及變量的調用關系。虛目錄與編譯選項的關系,通過逐層細化,可以很清晰地體現到底層的函數與變量的關系上,對各個模塊功能的具體實現進行了很好的展示。
  使用本交互式圖解軟件可以從細節上理清Linux的代碼,從宏觀上的邏輯模塊(虛目錄)層層細化到小模塊、編譯選項、文件、函數來快速地認識Linux內核以及內核各個模塊間的關系。
1 虛目錄
  1.1 虛目錄概念
  本軟件是對于Linux內核架構、編譯選項以及各層次關系的詳細展示。Linux內核架構也是整個軟件依托的基礎。但是Linux內核源碼的固有架構(目錄劃分)是相對工程化的,不便于用戶的理解,比如:(1)/kernel文件夾意義不明確,包括多個功能模塊中的內容;(2)對于arch文件夾,實際運行的Linux內核只對應一個架構,并且arch文件夾下的內容與許多其他功能模塊緊密相關;(3)/mm、/virt/kvm等目錄需要繼續細化。
  于是本文提出了虛目錄的思想,虛目錄是與實目錄(即內核源碼的相對路徑)相對應的說法。本文將內核源代碼根據其功能及邏輯關系進行了重新劃分。與實目錄相比,虛目錄體現了內核的邏輯結構,虛目錄按照內核的功能對源碼進行了重新的組織,更人性化,更體現了源碼的相關性和功能性。
  1.2 虛目錄劃分
  對于虛目錄的劃分,主要是從以下4個方面來綜合考慮的:
  (1)重點閱讀了Linux內核源碼[1-6]。眾所周知,功能相關聯或者類似的內核代碼大多都在相同目錄下(比如ext4和btrfs都在fs目錄下),因此Linux內核源碼的組織方式可以作為模塊劃分的一個重要參考;
  (2)參考關于內核的經典書籍(如:《Understanding the Linux Kernel》[1]、《Professional Linux Kernel Architecture》[2]、《Linux內核源代碼情景分析》[3]、《Linux操作系統內核分析》[4]、《Linux內核分析及高級編程》[5]、《Linux內核完全注釋》[6]等),這些書籍的各個章節(比如進程、內存管理、虛擬文件系統)既可作為各個子模塊來進行單獨分析,同時排版上相鄰的章節(比如進程、中斷等)關聯比較緊密,可以考慮劃分到大的模塊中來進行分析;
 ?。?)參考現有的一些模塊劃分手段,比如主流的五大子系統的劃分:內存管理、進程調度、進程間通信、虛擬文件系統、網絡子系統,以及kernel map圖;
 ?。?)查看了Linux內核的維護者列表,由相同人員來維護的內容,往往是同一個子模塊,或者是同一模塊的不同子模塊,這可以作為模塊劃分輔助手段,來幫助確定各個模塊的劃分;
 ?。?)與紅帽、阿里等內核小組負責人進行交流,對于存在疑問、分歧的劃分點進行討論,以保證劃分的合理性。
  虛目錄相對于實目錄,最大的改變在于以下幾點:
 ?。?)/kernel文件夾:實目錄中,此文件夾的意義并不是很明確,所包含的文件功能涉及很多模塊,需要將其劃分到多個模塊中;
  (2)/arch文件夾:實際運行的Linux系統中只有一種體系架構,任一體系結構中包含的文件也是涉及內核中的各個大模塊的,為了保證其他各個模塊功能的完整性,需要將/arch文件夾下的各個體系架構所包含的文件細分到其他各大模塊中,剩余的common文件應該隸屬于系統管理;
 ?。?)/mm、/virt/kvm等目錄:內核中有一些這樣的模塊,從它的機制來理解,它應該是架構分層的,但是在實際的源碼中卻并非如此,它將包含的所有文件平級地放在了一個大文件夾下,對于這樣的模塊,本文按照架構和功能對其重新做了劃分;
  (4)將Linux內核分成以下8大模塊:進程管理、內存管理、系統運行、文件系統、網絡模塊、安全模塊、設備管理和虛擬化(各個模塊具體內容可以參看下面的模塊圖);同時,由于各個大模塊的功能和復雜程度各不相同,為了較好地對各模塊進行分析,并沒有拘泥于嚴格的模塊分層,而是針對每個特定的模塊進行了適當的分層,從而更好地完成對各個模塊的分析。
  圖1為Linux內核虛目錄。

Image 002.png

2 軟件架構設計
  本軟件采用B/S架構,系統架構圖如圖2所示。

Image 003.png

  根據上面的架構設計,可以把系統分為圖3所示的幾個模塊。
  各模塊設計如下:

Image 004.png

  展示模塊:負責前臺數據的展示,可以分為如下兩個子模塊:
  (1)布局模塊:用來計算各個矢量圖的坐標位置布局,以及拖拽、放大、縮小等之后的布局。
  (2)渲染模塊:將布局模塊計算好之后的坐標,使用Raphael的庫來渲染到界面上。
  數據交互模塊:
  (1)數據獲取模塊:從MySQL數據庫中獲取數據,經過格式化之后,轉換成json格式。
  (2)數據持久化模塊:提供數據持久化接口,可以將數據持久化到數據庫中。
  數據爬取模塊:
 ?。?)數據實體(虛目錄、模塊、文件、函數、變量)爬?。孩倥廊√撃夸?、模塊以及文件并存儲到數據庫之中;②爬取文件中函數及變量的數據,并存儲到數據庫中。
 ?。?)關系爬?。号廊。?)中的元素之間的關系,并存儲到數據庫中。
  2.1 展示模塊
  前端采用Jquery和Raphael在Web界面上畫出所需要的矢量圖,用來表示模塊及模塊之間的關系,以及函數/變量之間的關系。
  2.2 數據交互模塊
  交互式圖解軟件中,使用PHP作為中間層,連接前端界面與后端數據庫,前端使用的JavaScript繪圖引擎會向PHP發出getJSON請求,PHP解析參數,完成指定類型的數據查詢工作,最后形成與前端統一標準json結構,利用回調函數的形式返回給前端繪圖引擎。其整個過程如圖4所示。

Image 005.png

  2.3 數據爬取模塊
  數據爬取模塊主要負責數據實體(虛目錄、模塊、文件、函數、變量)爬取以及這些實體之間關系的爬取。爬取模塊邏輯如圖5所示。

Image 006.png

  整體思想:
 ?。?)根據Linux內核文檔kconfig-language.txt的說明,了解Kconfig語法規則。在此基礎上,對Linux內核的Kconfig文件做語法分析,爬取出Linux定義的編譯選項及其之間的關系。
 ?。?)根據Linux內核文檔makefile.txt和modules.txt的說明,了解Makefile文件中,定義編譯選項對應文件的規則。在此規則基礎上,對Linux內核的Makefile文件進行語法分析,爬取出編譯選項與文件關系。
 ?。?)函數與文件關系的數據爬取方面,可用的現成開源工具較多,經過調研,可以使用到的工具主要有:Clang編譯器、ctags、cscope、eclipse CDT插件、pycparser等?;パa的運用這些工具,對Linux內核源碼文件進行AST或者符號標記的生成并輸出為中間文件,然后對這些文件進行讀取,可以解析獲得變量、函數、宏的定義與它們之間的調用關系。
  在爬取完上述關系之后,存在一個比較大的疑問,即虛目錄如何與編譯選項對應虛目錄與編譯選項的對應,可以通過文件巧妙的連接起來。對于劃分好的虛目錄的爬取,得到了虛目錄與文件的層次結構;對于Makefile的爬取,得到了編譯選項與文件的對應關系。從而,通過一個編譯選項包含了哪些文件,這些文件位于哪些虛目錄下,就可以確定編譯選項位于哪些虛目錄下了。
3 軟件展示
  3.1 實例場景
  內核的輸入和輸出都屬于設備驅動的范疇。在進行虛目錄劃分時,將其劃分為設備驅動下輸入子系統。內核的輸入子系統是對分散、多種不同類別的輸入設備(如鍵盤、鼠標、操縱桿、觸摸屏、加速計和手寫板)進行統一處理的驅動程序。
  內核輸入子系統的頂層核心編譯選項配置是CONFIG_INPUT,Kconfig中說明如圖6所示。

Image 007.png

  可以看出,此編譯選項默認為打開狀態,任何輸入設備(mouse、keyboard…)需要連接到系統,必須保證其為打開狀態,不然輸入設備是無法加載驅動的。
  相應Makefile的定義如圖7所示。

Image 008.png

  可以看出,配置該選項后,將編譯input.c、input-compat.c、input-mt.c、ff-core.c,通過實際分析文件可以了解到,這些文件中實現了諸如input_register_handler(),input_unregister_handler()等INPUT子系統的核心函數。
  而mosue dev很顯然屬于輸入設備中的一部分。既然CONFIG_INPUT是輸入子系統的頂層核心編譯選項,那么實際的輸入設備的配置必然是依賴于它的,從Kconfig的定義中發現/drivers/input/Kconfig片段如圖8所示。

Image 009.png

  INPUT_MOUSEDEV編譯選項確實處于INPUT配置的IF條件中(為了方便截圖,用省略號省去了其他配置說明)。

Image 010.png

  從相應的Makefile的定義(如圖9所示)中可以看出,配置該選項后,將編譯mousedev.c文件,通過實際分析文件可以了解到,文件中實現了諸如mousedev_init()、mousedev_exit()等與mouse dev相關的核心函數。
  實際分析文件中的函數如圖10所示。

Image 011.png

  mousedev_init()在進行鼠標設備初始化時,需要調用input.c的函數input_register_handler()注冊一個鼠標類型的Handler,這里的Handler是鼠標類設備的統一處理接口,如圖11所示。

Image 012.png

  同樣,mousedev_exit()在進行鼠標設備的退出時,需要調用文件input.c的函數input_unregister_handler()來注銷初始化時注冊的鼠標Handler。從最低層的函數調用中體現出了INPUT_MOUSEDEV對于INPUT編譯選項的依賴性。
  3.2 實際演示
  圖解軟件首頁如圖12所示。

Image 013.png

  對上述機制進行說明,當進行虛目錄劃分時,INPUT子系統被劃分到了設備驅動中,并且由于input.c和mousedev.c中實現的函數都是輸入輸出中通用的機制,因此二者都被劃分到了虛目錄input-common中,由于虛目錄和編譯選項的包含關系是通過文件聯系的,從而包含文件input.c和mousedev.c的編譯選項INPUT和INPUT_MOUSEDEV會出現在虛目錄input-common中。接下來通過圖解軟件進行展示(具體編譯選項位置:設備驅動->iput->input-common),展開后可以看到(注:以下展示過程中,為了使得所展示的模塊間關系突出,均使用過濾操作濾除了其他不相關線條):
 ?。?)INPUT_MOSUEDEV到INPUT編譯選項的依賴關系如圖13所示。


Image 014.png


 ?。?)展開編譯選項INPUT,可以看到INPUT_ MOUSEDEV對于INPUT編譯選項包含的文件drivers/input/input.c的依賴關系,如圖14所示。

Image 015.png

 ?。?)展開INPUT_MOUSEDEV編譯選項,可以看到,INPUT_MOUSEDE編譯選項包含的文件drivers/input/mousedev.c對于INPUT編譯選項包含的文件drivers/input/input.c的依賴關系,如圖15所示。

Image 001.png

 ?。?)展開文件drivers/input/mousedev.c,可以看到drivers/ input/mousedev.c包含的函數mouse_init和mouse_exit對于文件drivers/input/input.c的依賴關系,如圖16所示。

Image 016.png

  (5)展開文件drivers/input/input.c,可以看到drivers/input/mousedev.c包含的函數mouse_init和mouse_exit對于文件drivers/input/input.c包含的函數input_register_handler和input_unregister_handler的依賴關系,如圖17所示。

Image 017.png

4 結論
  本文在虛目錄的基礎上,圍繞著編譯選項提出了一套完整的開發交互式圖解軟件的設計方案。一方面,此交互式圖解軟件為Linux學習者提供了準確而便捷的途徑,同時也為高級用戶提供了深入探討Linux內核的平臺;另一方面,此軟件可以與“在線源碼協同分析平臺”和社區進行集成,將Linux體系構架的分析成果作為軟件中的編譯選項、文件以及函數和變量的注釋說明來在線展示,有著非常廣泛的應用前景。
  參考文獻
  [1] DANIEL P B, MARCO C. Understanding the Linux Kernel(3rd Edition)[M]. O′Reilly,2005.
  [2] MAUERER W. Professional Linux Kernel Architecture[M]. Wiley, 2008.
  [3] 胡希明,毛德操. Linux內核源代碼情景分析[M].杭州:浙江大學出版社,2001.
  [4] 陳莉君.Linux 操作系統內核分析[M].北京:人民郵電出版社,2000.
  [5] 吳國偉,李張,任廣臣.Linux內核分析及高級編程[M].北京:電子工業出版社,2008.
  [6] 趙炯.Linux內核完全注釋[M].北京:機械工業出版社,2004.

此內容為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>
          91久久国产精品91久久性色| 亚洲麻豆国产自偷在线| 国产毛片精品国产一区二区三区| 一本一本大道香蕉久在线精品| 日韩视频在线播放| 欧美成人激情视频免费观看| 国产精品男人爽免费视频1| 亚洲人成欧美中文字幕| 欧美一区二区三区在线看| 午夜一区二区三区在线观看| 亚洲午夜精品一区二区三区他趣| 欧美视频精品在线观看| 国产精品第十页| 亚洲一区二区三区三| 亚洲精品国产拍免费91在线| 国产综合久久久久久| 欧美紧缚bdsm在线视频| 欧美午夜精品久久久久久孕妇| 国产精品美女久久久浪潮软件| 亚洲人成精品久久久久| 亚洲精品视频免费在线观看| 亚洲视频在线观看一区| 亚洲欧美一区二区三区在线| 午夜久久资源| 一区二区三区.www| 亚洲精选一区| 99视频热这里只有精品免费| 亚洲乱码国产乱码精品精| 国产精品天天摸av网| 亚洲一区三区电影在线观看| 亚洲第一毛片| 国产精品美女www爽爽爽视频| 亚洲精品国产拍免费91在线| 你懂的网址国产 欧美| 欧美极品在线播放| 久久久不卡网国产精品一区| 欧美中文字幕在线观看| 欧美成人午夜剧场免费观看| 欧美日韩视频在线一区二区观看视频| 免费在线看一区| 国产综合色产在线精品| 国模套图日韩精品一区二区| 亚洲欧美日韩天堂| 日韩一级成人av| 欧美日韩一卡二卡| 亚洲二区免费| 欧美大片专区| 在线观看精品| 欧美一区视频| 欧美日韩91| 久久精品亚洲乱码伦伦中文| 亚洲欧洲日产国产综合网| 久久天堂精品| 亚洲在线第一页| 狠狠综合久久av一区二区小说| 一区免费观看视频| 性18欧美另类| 美女精品国产| 亚洲欧美国产精品桃花| 亚洲在线免费视频| 亚洲老板91色精品久久| 在线免费高清一区二区三区| 国产精品久久午夜| 欧美性猛交99久久久久99按摩| 欧美日韩亚洲一区三区| 在线成人www免费观看视频| 欧美在线日韩在线| 欧美在线黄色| 久久久免费精品视频| 在线色欧美三级视频| 欧美国产欧美亚州国产日韩mv天天看完整| 久久午夜国产精品| 蜜桃精品一区二区三区| 在线精品视频一区二区三四| 欧美精品福利视频| 欧美一级欧美一级在线播放| 国产精品日日摸夜夜添夜夜av| 国产精品xxx在线观看www| 亚洲三级视频| 欧美日韩性生活视频| 亚洲激情欧美| 欧美午夜精品久久久久免费视| 在线亚洲伦理| 在线观看三级视频欧美| 欧美激情1区| 欧美日韩一区二区在线观看| 国产精品视频免费| 日韩视频在线观看一区二区| 亚洲国产黄色| 亚洲天堂视频在线观看| 欧美精品一区三区| 亚洲精品一区在线| 国产亚洲综合在线| 亚洲精品久久久久久一区二区| 久久久女女女女999久久| 欧美一区观看| 最新国产拍偷乱拍精品| 国产欧美精品在线观看| 欧美性猛交xxxx免费看久久久| 欧美激情在线观看| 久久亚洲国产成人| 日韩一级裸体免费视频| 国产麻豆一精品一av一免费| 欧美成人精品影院| 国产一在线精品一区在线观看| 亚洲专区在线视频| 91久久久久久久久久久久久| 亚洲精品在线观看免费| 亚洲国产综合91精品麻豆| 精品福利电影| 欧美黄色片免费观看| 久久亚洲欧美国产精品乐播| 亚洲成人中文| 欧美va天堂va视频va在线| 国产日韩欧美夫妻视频在线观看| 亚洲黄网站黄| 久久久精品日韩| 亚洲人成网站精品片在线观看| 狠狠色伊人亚洲综合网站色| 欧美www视频在线观看| 欧美自拍偷拍| 国产亚洲第一区| 久久av二区| 欧美极品一区二区三区| 国产一区二区精品久久| 亚洲免费在线看| 国产精品亚洲不卡a| 国产欧美激情| 亚洲视频电影图片偷拍一区| 国内精品视频久久| 欧美日韩色婷婷| 国产亚洲精品高潮| 欧美a级大片| 午夜精品在线观看| 欧美一区三区二区在线观看| 国产精品久久久久9999高清| 亚洲精品国偷自产在线99热| 国产视频一区在线观看一区免费| 亚洲天堂网在线观看| 亚洲欧美日韩国产一区| 99亚洲伊人久久精品影院红桃| 蜜桃av一区二区三区| 国产精品免费网站在线观看| 欧美精品日韩精品| 亚洲大片在线观看| 国产精品二区三区四区| 亚洲国产欧美在线人成| 免费成人av在线| 中文亚洲字幕| 亚洲免费在线观看视频| 国产精品激情| 久久久久久伊人| 国产欧美在线播放| 美女主播精品视频一二三四| 黑人巨大精品欧美一区二区| 国产亚洲欧美日韩美女| 亚洲香蕉伊综合在人在线视看| 亚洲精品在线视频| 欧美高清hd18日本| 欧美日韩成人在线观看| 欧美日韩免费一区| 国产精品无人区| 欧美日本高清一区| 国模 一区 二区 三区| 亚洲国产精品久久久| 欧美另类videos死尸| 欧美色精品在线视频| 国产精品女主播一区二区三区| 亚洲欧洲精品一区二区三区不卡| 亚洲国产精品久久人人爱蜜臀| 亚洲国产天堂网精品网站| 国产农村妇女精品一二区| 亚洲第一免费播放区| 欧美日韩精品在线观看| 久久精品91久久久久久再现| 亚洲日本一区二区三区| 欧美激情a∨在线视频播放| 欧美在线1区| 久久精品午夜| 亚洲精品视频中文字幕| 国产精品国产亚洲精品看不卡15| 国产亚洲精品综合一区91| 亚洲一区二区精品在线观看| 久久资源av| 国内伊人久久久久久网站视频| 亚洲黑丝一区二区| 久久久亚洲国产天美传媒修理工| 国产亚洲一区二区精品| 亚洲欧美亚洲| 蜜桃av一区二区| 99视频精品全国免费| 欧美成人资源网| 久久久久国产一区二区三区四区| 欧美国产日本韩| 尤物yw午夜国产精品视频明星| 欧美~级网站不卡| 亚洲黄一区二区| 欧美日本精品在线| 亚洲精品一区二区三区四区高清| 亚洲特色特黄| 老司机精品视频一区二区三区| 久久综合五月天婷婷伊人| 亚洲精品乱码久久久久久按摩观| 亚洲人成啪啪网站| 国产午夜精品理论片a级探花| 亚洲黄色毛片| 欧美一区二区在线免费观看| 亚洲欧美国产日韩天堂区| 久久综合给合久久狠狠狠97色69| 国产精品高清一区二区三区| 久久精品国产免费看久久精品| 欧美视频在线播放| 日韩视频―中文字幕| 欧美成人a视频| 欧美性猛交99久久久久99按摩| 亚洲欧美日韩在线观看a三区| 久久香蕉国产线看观看网| 国产欧美日韩在线观看| 红桃av永久久久| 欧美成人免费网| 国产一区二区三区四区老人| 美日韩丰满少妇在线观看| 美女国产精品| 欧美成人免费小视频| 国产精品羞羞答答xxdd| 亚洲天堂av高清| 在线日韩视频| 亚洲第一精品影视| 国产亚洲精久久久久久| 欧美视频在线一区二区三区| 欧美激情免费观看| 一区二区三区欧美亚洲| 亚洲激情在线播放| 欧美系列精品| 欧美不卡一卡二卡免费版| 久久免费视频在线观看| 亚洲国产欧洲综合997久久| 久久成人精品一区二区三区| 欧美激情中文字幕一区二区| 国产色婷婷国产综合在线理论片a| 亚洲欧美日韩视频二区| 亚洲二区免费| 亚洲狼人精品一区二区三区| 午夜精品久久久久| 欧美久久九九| 久久久精品2019中文字幕神马| 老司机午夜免费精品视频| 亚洲国产婷婷香蕉久久久久久| 久久不射2019中文字幕| 国产美女精品| 欧美日韩一区二区三区视频| 国产精品成人久久久久| a91a精品视频在线观看| 一区二区高清视频| 欧美日韩另类国产亚洲欧美一级| 国产亚洲一区二区在线观看| 久久一区亚洲| 一区二区三区福利| 亚洲片区在线| 国产精品一二| 99riav国产精品| 欧美日韩91| 欧美另类视频在线| 久久九九精品99国产精品| 亚洲国产精品一区二区www在线| 亚洲美女色禁图| 欧美日韩精品一区视频| 一区二区三区在线看| 欧美在线一级视频| 欧美韩日一区二区三区| 国产精品大片wwwwww| 国产一区二区主播在线| 亚洲九九爱视频| 美女主播精品视频一二三四| 亚洲欧美另类中文字幕| 久久久国产精彩视频美女艺术照福利| 亚洲欧美日韩成人高清在线一区| 韩日视频一区| 国模吧视频一区| 亚洲另类黄色| 欧美午夜精品伦理| 国产精品av一区二区| 亚洲精品乱码久久久久久日本蜜臀| 久久国内精品视频| 亚洲一区免费在线观看| 亚洲欧美日韩在线不卡| 99国产一区二区三精品乱码| 亚洲精品国产精品乱码不99| 久久国产一区二区| 亚洲欧美日韩精品久久久久| 亚洲欧美日韩国产中文| 欧美性做爰猛烈叫床潮| 亚洲人成亚洲人成在线观看图片| 欧美特黄a级高清免费大片a级| 国产精品电影网站| 国产日本亚洲高清| 亚洲视频高清| 国产精品免费电影| 亚洲欧美日韩另类精品一区二区三区| 亚洲三级性片| 亚洲精品欧美在线| 亚洲欧美久久久| 亚洲大片免费看| 欧美不卡视频一区发布| 欧美区在线播放| 久久高清免费观看| 亚洲一区二区三区在线播放| 亚洲电影免费| 亚洲自拍另类| 久久综合五月天婷婷伊人| 欧美日一区二区三区在线观看国产免| 久久在线视频在线| 久久综合色综合88| 久久夜色精品国产噜噜av| 久久成人羞羞网站| 老司机精品久久| 99精品久久免费看蜜臀剧情介绍| 欧美一区二区三区在线观看| 激情91久久| 国产一区二区三区在线观看免费| 亚洲综合色网站| 黄网站色欧美视频| 国产综合视频在线观看| 一区二区在线免费观看| 亚洲欧洲综合| 国产精品久久久久久久7电影| 国产亚洲午夜高清国产拍精品| 亚洲调教视频在线观看|