国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

實(shí)時(shí)操作系統(tǒng)到Linux系統(tǒng)的應(yīng)用移植

發(fā)布時(shí)間:2010-9-25 11:21    發(fā)布者:eetech
從一個(gè)操作系統(tǒng)到另一個(gè)操作系統(tǒng)應(yīng)用程序的移植即使在最好的情況下也經(jīng)常是一個(gè)艱巨的任務(wù)。把一個(gè)實(shí)時(shí)的嵌入式應(yīng)用程序移植到一個(gè)新的操作系統(tǒng)上可以說(shuō)是一項(xiàng)最困難的任務(wù)。

為了幫助開(kāi)發(fā)人員計(jì)劃在不久的將來(lái)轉(zhuǎn)移到嵌入式Linux上,或者考慮將現(xiàn)有的應(yīng)用程序運(yùn)行在嵌入式Linux上這種投資的必要性,Jim 解釋了這一轉(zhuǎn)換的過(guò)程,評(píng)估了涉及到的困難和挑戰(zhàn),并且闡述了認(rèn)識(shí)這種轉(zhuǎn)換的益處。

越來(lái)越多的公司正在轉(zhuǎn)向嵌入式Linux,把它作為他們下一代產(chǎn)品的操作系統(tǒng)。然而他們以前都是使用實(shí)時(shí)操作系統(tǒng)作為他們的嵌入式系統(tǒng)。事實(shí)上,VDC的報(bào)告顯示了嵌入式Linux可以占到32位和64位領(lǐng)域設(shè)計(jì)的三分之一,是其他所有嵌入式系統(tǒng)的兩倍。

很明顯,關(guān)于從老式RTOS產(chǎn)品的應(yīng)用程序移植到Linux的可行性的問(wèn)題必須得到回答,由此這種移植才能夠被有效的用于工程管理。

一個(gè)典型的基于RTOS的應(yīng)用程序依賴于很多因素,其中最重要的是編程/內(nèi)存模型、API、性能、特別是實(shí)時(shí)響應(yīng)的能力。另外一個(gè)重要的考慮是軟件開(kāi)發(fā)環(huán)境,但那是軟件環(huán)境文章值得討論的話題。

編程模型

幾乎所有使用的RTOS有一個(gè)簡(jiǎn)單的編程模型,它由多線程的執(zhí)行(通常稱為任務(wù))構(gòu)成,包含在單一的地址空間中。舉例來(lái)說(shuō),一個(gè)c語(yǔ)言的程序有一個(gè)單一的主函數(shù),它創(chuàng)建所有其他的線程。每一個(gè)線程依次被定義為總程序中的一個(gè)c函數(shù)。典型的,不管是RTOS還是非保護(hù)內(nèi)存中的應(yīng)用程序,他們的物理地址和邏輯地址都是一樣的。可能會(huì)有一些超級(jí)用戶模式下的操作使用限制了在用戶模式下的應(yīng)用程序發(fā)出一些指令。基本上,所有的內(nèi)存對(duì)于應(yīng)用程序來(lái)說(shuō)是虛擬的。

在過(guò)去,大多數(shù)嵌入式處理器沒(méi)有內(nèi)存管理單元,因此RTOS單地址空間模式是必須的。然而今天大多數(shù)的中高端處理器配備了MMU,因此如果需要的話,MMU能夠管理內(nèi)存。

該體系結(jié)構(gòu)的描述提出了一個(gè)移植RTOS代碼到Linux上的簡(jiǎn)單架構(gòu)。

RTOS的全部應(yīng)用代碼移植到一個(gè)Linux單進(jìn)程

RTOS的任務(wù)轉(zhuǎn)換成Linux線程

RTOS的物理地址空間映射到Linux的虛擬地址空間

諸如VME機(jī)架的多板或多處理器架構(gòu),移植到一個(gè)多進(jìn)程的Linux應(yīng)用。

構(gòu)架上的考慮:進(jìn)程和線程的創(chuàng)建

是否使用遵循API的VXWORKS和PSOS等RTOS仿真軟件包,開(kāi)發(fā)人員最終必須決定是否將線程或是進(jìn)程作為執(zhí)行RTOS的任務(wù)。在這點(diǎn)上,Linux內(nèi)核對(duì)待不管是線程還是進(jìn)程都是同等的,都是以調(diào)度為目的。然而不同的API創(chuàng)建和管理每個(gè)實(shí)體的類型、性能、資源的成本和益處都是關(guān)聯(lián)的。

通常來(lái)說(shuō),進(jìn)程比線程大一點(diǎn),因?yàn)樗麄儌魉椭嗟纳舷挛男畔ⅰR粋(gè)Linux線程的上下文如同RTOS的一個(gè)任務(wù),主要由cpu寄存器、堆棧、當(dāng)前的程序指針以及一些內(nèi)核數(shù)據(jù)結(jié)構(gòu)的入口組成。一個(gè)進(jìn)程加上一個(gè)完整的虛擬地址空間。這樣,至少內(nèi)核必須創(chuàng)建和跟蹤進(jìn)程的頁(yè)轉(zhuǎn)換、所有代碼的類型、上下文、數(shù)據(jù)等。對(duì)于重量級(jí)進(jìn)程上下文的主要影響有兩點(diǎn):創(chuàng)建的時(shí)間和相互的上下文切換時(shí)間。

只要可能,RTOS的代碼都會(huì)爭(zhēng)取要輕量級(jí)的執(zhí)行。同樣的,當(dāng)很多RTOS提供了動(dòng)態(tài)的任務(wù)創(chuàng)建API,其他以靜態(tài)任務(wù)定義頁(yè)表為特色,所有RTOS的商家不鼓勵(lì)使用頻繁的任務(wù)創(chuàng)建以節(jié)省時(shí)間和空間。Linux進(jìn)程的創(chuàng)建不是故意那么麻煩;Linux進(jìn)程是重量級(jí)的,因?yàn)樗麄兲峁┝烁嗟谋Wo(hù)性和依賴性。

這個(gè)熟悉地老式的架構(gòu),因?yàn)楹?jiǎn)單,所以非常容易遭受破壞。正在運(yùn)行的任務(wù)能夠覆蓋應(yīng)用程序的代碼和數(shù)據(jù),另外還會(huì)寫入到外圍設(shè)備的寄存器、破壞內(nèi)核的數(shù)據(jù)結(jié)構(gòu)、覆蓋內(nèi)核代碼。任務(wù)的堆棧能夠很容易的溢出,并且一個(gè)接一個(gè)被覆蓋掉或者通過(guò)控制內(nèi)存來(lái)破壞堆的頂部、其他數(shù)據(jù)或者附近的代碼。

更高的層次來(lái)說(shuō),這種非正式有組織的,高度非遮掩的架構(gòu)提出了對(duì)于代碼質(zhì)量的兩個(gè)主要挑戰(zhàn):自身的失敗機(jī)會(huì)以及和主要事件再次失敗的結(jié)合。

當(dāng)個(gè)別任務(wù)或者其他軟件組件失敗了,它失敗的原因幾乎不可能被定位。甚至當(dāng)檢測(cè)到失敗并且嘗試恢復(fù)時(shí)候會(huì)以整個(gè)系統(tǒng)的失敗而結(jié)束。監(jiān)視代碼不能夠經(jīng)常安全地重啟任務(wù),RTOS不能夠恢復(fù)由失敗任務(wù)動(dòng)態(tài)定位的資源。結(jié)果就是復(fù)位通常是通過(guò)強(qiáng)制使用看門狗定時(shí)器來(lái)完成的,看門狗定時(shí)器重新啟動(dòng)整個(gè)系統(tǒng)或者軟件引起的系統(tǒng)錯(cuò)誤。

通常當(dāng)一個(gè)程序跑飛了,它沒(méi)有任何征兆。一個(gè)錯(cuò)誤的任務(wù)能夠破壞在RTOS系統(tǒng)中任何地方的數(shù)據(jù)和代碼。幸運(yùn)的是,雖然這些破壞的影響瞬間產(chǎn)生,但是好像破壞的影響會(huì)在幾秒、幾小時(shí)、幾個(gè)月以后才會(huì)出現(xiàn)。

當(dāng)異常的征兆出現(xiàn)了,去聯(lián)想預(yù)想不到的應(yīng)用程序行為是及其困難的,這些行為由于原始的原因或者是很微小的,或者是破壞性的。

Linux編程模型的內(nèi)部編譯的可靠性

Linux作為一個(gè) unix兼容的操作系統(tǒng)代表著一個(gè)更加強(qiáng)大的應(yīng)用和系統(tǒng)編程模型。應(yīng)用程序執(zhí)行在他們受保護(hù)的地址空間,因?yàn)樗鼈冎g的地址相互是不可見(jiàn)的,并且它們通過(guò)硬件的MMU來(lái)預(yù)防覆蓋掉他們自己的代碼,MMU出現(xiàn)在多數(shù)現(xiàn)代化的32位64位的處理器中。  

當(dāng)他們共享Linux內(nèi)核的虛擬地址空間時(shí),他們不能夠覆蓋內(nèi)核代碼或數(shù)據(jù)。既然進(jìn)程不能夠相互看到,他們就不能夠相互破壞數(shù)據(jù)或代碼

API和實(shí)時(shí)庫(kù)

在開(kāi)源標(biāo)準(zhǔn)以前,RTOS的制作者定義了他們自己的系統(tǒng)調(diào)用或API,這對(duì)于每個(gè)RTOS的制作者來(lái)說(shuō)都是獨(dú)一無(wú)二的。接口函數(shù)是為流行的編程語(yǔ)言而提供的,諸如c、c++,這使得API函數(shù)對(duì)于使用高級(jí)語(yǔ)言的程序員是合適的。

在過(guò)去的十年中,盡管只有POSIX規(guī)范的一部分和嵌入式應(yīng)用程序相關(guān),大多數(shù)的RTOS制作者還是給標(biāo)準(zhǔn)的POSIX提供了兼容庫(kù)。很多客戶使用他們自己的API集使本地RTOS接口分層以獲得獨(dú)立性和便捷性,而不是想被鎖定成為一個(gè)私有的特殊版權(quán)的接口。

開(kāi)發(fā)人員使用標(biāo)準(zhǔn)的API建立應(yīng)用程序來(lái)獲得兩個(gè)另外的目的:允許代碼被移植成像Linux那樣的標(biāo)準(zhǔn)操作系統(tǒng)以及允許以后同樣的代碼在這樣的一個(gè)環(huán)境下比使用私有的API更加容易移植。

很多包括標(biāo)準(zhǔn)調(diào)用的商業(yè)RTOS以POSIX或者BSD來(lái)設(shè)定,但是那些API經(jīng)常只存在于windows下。特別是一個(gè)內(nèi)核私有的API是最常被使用的,就是這些API鎖定了項(xiàng)目到一個(gè)特殊的平臺(tái)或者解決方案。

如果開(kāi)發(fā)人員正在移植標(biāo)準(zhǔn)的代碼或者考慮哪個(gè)API運(yùn)用到新的代碼中,那么理解在Linux和其他操作系統(tǒng)中使用的最普遍的標(biāo)準(zhǔn)是非常重要的。

POSIX  

POSIX流行在基于UNIX的開(kāi)源系統(tǒng)中、政府和軍事舞臺(tái)。然而POSIX對(duì)于傳統(tǒng)的嵌入式實(shí)時(shí)系統(tǒng)幾乎沒(méi)有影響。POSIX標(biāo)準(zhǔn)家族起源于美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所,現(xiàn)在有被歸入IEEE、IEEE1003和其他標(biāo)準(zhǔn)的預(yù)兆。在過(guò)去的十年中,POSIX經(jīng)歷了多次的修訂,最近的一次是在2000年。

兼容性和一致性是兩個(gè)關(guān)于POSIX的重要觀點(diǎn)。兼容性意味著一個(gè)特定的操作系統(tǒng)平臺(tái)貫徹標(biāo)準(zhǔn)的一些子集,這種貫徹是備有文件證明的。甚至那些執(zhí)行微小子集的平臺(tái)能夠兼容于POSIX標(biāo)準(zhǔn)。POSIX的一致性,相反的,代表了更加嚴(yán)格的標(biāo)準(zhǔn),意味著一個(gè)操作系統(tǒng)服從于過(guò)去的已證明測(cè)試。

SVR4,BSD和其他UNIX的API

事實(shí)上SVR4和UNIX的BSD版本是流行的系統(tǒng)標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)對(duì)于Linux的影響是巨大的。Linux貫徹了那些UNIX API的大的子集(舉個(gè)例子,對(duì)于共享內(nèi)存、隊(duì)列、信號(hào)量、BSD套接口和TCP/IP堆的Linux的ipc系統(tǒng)調(diào)用)。

熟悉SVR4、BSD,或者像AIX,HP-UX等其他通用的UNIX的開(kāi)發(fā)人員對(duì)于Linux他們也能夠很快的掌握。

c語(yǔ)言庫(kù)

在嵌入式設(shè)計(jì)、RTOS或其他方面,很多API僅僅是標(biāo)準(zhǔn)c庫(kù),這些庫(kù)或者是直接執(zhí)行函數(shù)或者是作為系統(tǒng)調(diào)用的包裝。Linux有熟悉的libc/glibc,盡管尺寸很大,但易于理解。

glibc的運(yùn)行時(shí)間是對(duì)嵌入式應(yīng)用程序內(nèi)存尺寸的挑戰(zhàn)。很多Linux的供應(yīng)商為對(duì)于尺寸敏感的應(yīng)用程序提供了經(jīng)過(guò)裁減了的庫(kù)。

RTOS接口層

RTOS的核心是對(duì)于進(jìn)程間通訊調(diào)用的使用,這種調(diào)用提供了在任務(wù)中同步和通訊的機(jī)制。

表1提供了在典型的RTOS進(jìn)程間通訊調(diào)用和同等的Linux調(diào)用之間的映射總結(jié)。

盡管在RTOS的調(diào)用和同等的Linux調(diào)用之間的映射是直接的,但是移植的工作量會(huì)被增加,如果使用仿真庫(kù),這種仿真庫(kù)為其他RTOS移植過(guò)來(lái)的Linux應(yīng)用程序提供了同樣的調(diào)用接口。

對(duì)于Xenomai開(kāi)源項(xiàng)目,這樣的一個(gè)仿真技術(shù)是適用的。而這里,不同的仿真層提供給POSIX、VxWorks、VRTX和Itron這些被廣泛使用的RTOS。注意,像很多開(kāi)源項(xiàng)目,Xenomai和它的外殼是正在進(jìn)行的工作,他們可能還沒(méi)有完成或者還要進(jìn)行修改。不過(guò),它代表了一個(gè)在移植過(guò)程中潛在的高價(jià)值的出發(fā)點(diǎn)。

舉個(gè)例子,POSIX模塊主要是用來(lái)提供PSE51兼容的API.為了幫助移植其他PSE51兼容

API的應(yīng)用程序,它包含了一些對(duì)于POSIX規(guī)范的擴(kuò)展。

POSIX外殼已經(jīng)包含了以下這些基本的特色:
  • 線程
  • 互斥量
  • 信號(hào)量
  • 條件變量
  • 實(shí)時(shí)信號(hào)的支持
  • 放棄和放棄處理
  • 特殊線程數(shù)據(jù)
  • 消息隊(duì)列
  • 定時(shí)器支持
  • 共享內(nèi)存

POSIX外殼創(chuàng)建實(shí)時(shí)線程,他們或是運(yùn)行在Linux內(nèi)核模塊或者在用戶空間的周期應(yīng)用程序中。

實(shí)時(shí)內(nèi)核的API允許內(nèi)核和用戶空間的編程。開(kāi)發(fā)人員通常更喜歡在用戶空間編程,因?yàn)樗麄冎g的延遲小,特別是在硬件上,MMU的切換開(kāi)銷很小。目前為止在用戶空間編程比直接從內(nèi)核空間運(yùn)行應(yīng)用程序更為容易。在用戶空間編程帶來(lái)了內(nèi)存保護(hù)和在這個(gè)環(huán)境中調(diào)試實(shí)時(shí)應(yīng)用程序的GNU調(diào)試器的支持。

實(shí)時(shí)性能

也許對(duì)于嵌入式應(yīng)用程序來(lái)說(shuō)最重要的是滿足實(shí)時(shí)的要求。對(duì)于設(shè)計(jì)RTOS使得它們及時(shí)響應(yīng)來(lái)滿足實(shí)時(shí)的要求,并且測(cè)量RTOS的系統(tǒng)調(diào)用,已經(jīng)做了相當(dāng)大的努力加以實(shí)現(xiàn),因此開(kāi)發(fā)人員能夠確定系統(tǒng)的性能滿足于實(shí)時(shí)的要求。RTOS的調(diào)用在一定意義上是循環(huán)的,應(yīng)用程序和由RTOS提供的中斷是同步的。因此進(jìn)行一個(gè)同步調(diào)用花費(fèi)RTOS的時(shí)間是中斷處理時(shí)間的一部分。

在2002年以前,Linux的實(shí)時(shí)性比較差,而它的吞吐量特別是在網(wǎng)絡(luò)方面比較好。然而那是吞吐量而不是實(shí)時(shí)性。原因是基本的Linux內(nèi)核和unix應(yīng)用框架。這些系統(tǒng)被設(shè)計(jì)成在應(yīng)用程序開(kāi)銷的時(shí)候,內(nèi)核執(zhí)行它所需要的。其原因就是如果開(kāi)發(fā)人員知道內(nèi)核不會(huì)被一個(gè)異常中斷搶占,內(nèi)核的代碼就更容易編寫。

雖然這種方法被廣泛使用于unix和早期的Linux中,但是近來(lái)有一個(gè)下降的趨勢(shì)。它使得運(yùn)行在多處理器體系的系統(tǒng)變得效率很低。同一時(shí)刻,非搶占式Linux使得Linux達(dá)到實(shí)時(shí)的標(biāo)準(zhǔn)變得困難,因?yàn)榧词挂粋(gè)中斷發(fā)生并且中斷事件被調(diào)度運(yùn)行,內(nèi)核還會(huì)完成當(dāng)前的任務(wù)。為了解決在多處理器系統(tǒng)的運(yùn)行效率問(wèn)題,Linux內(nèi)核的開(kāi)發(fā)人員開(kāi)始侵入Linux內(nèi)核的內(nèi)部區(qū)域讓它非搶占區(qū)域變得更小,以至于更多的內(nèi)核區(qū)域在多處理器系統(tǒng)上能夠并行的執(zhí)行并且完成的更好。

那些對(duì)于改善Linux實(shí)時(shí)性有興趣的人使用搶占的Linux內(nèi)核來(lái)加速本地的實(shí)時(shí)響應(yīng)。延遲減小到幾百微秒到1毫秒之間。更多的性能提高包括縮短非搶占區(qū)域來(lái)減小那些區(qū)域帶來(lái)的任何延遲。

自2002年以來(lái),Linux已經(jīng)支持實(shí)時(shí)應(yīng)用程序。從那時(shí)起,Linux開(kāi)發(fā)人員開(kāi)始加強(qiáng)它的實(shí)時(shí)性能,標(biāo)準(zhǔn)Linux的實(shí)時(shí)性能在不斷的提高。現(xiàn)在Linux的實(shí)時(shí)性能相當(dāng)于大多數(shù)特有的實(shí)時(shí)內(nèi)核。最近出現(xiàn)了對(duì)于Linux實(shí)時(shí)能力的重要推進(jìn),消耗CPU時(shí)間的同步機(jī)制的自旋鎖被繼承優(yōu)先級(jí)互斥這種更可靠的同步機(jī)制替代了。互斥機(jī)制保證了cpu時(shí)間總是盡可能的分配給優(yōu)先級(jí)最高的應(yīng)用程序,從而更縮短了從中斷到實(shí)時(shí)應(yīng)用程序的過(guò)程。

最后一個(gè)主要的實(shí)時(shí)Linux的改進(jìn)是將中斷處理作為一個(gè)應(yīng)用程序的標(biāo)準(zhǔn)來(lái)執(zhí)行。以前Linux的設(shè)計(jì)賦予中斷處理比任何其他應(yīng)用程序更高的優(yōu)先級(jí)。通過(guò)把中斷處理作為一個(gè)普通的應(yīng)用程序處理,一旦優(yōu)先級(jí)更高的應(yīng)用程序可以搶占比它優(yōu)先級(jí)低的中斷處理程序。

現(xiàn)在這些改變已經(jīng)完成,性能和穩(wěn)定性的改進(jìn)使得Linux上的應(yīng)用和以前基于傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)擁有一樣的快速和穩(wěn)定。

邁步向前

現(xiàn)在開(kāi)發(fā)者正在放棄第一代實(shí)時(shí)操作系統(tǒng),選擇更穩(wěn)定的一個(gè)開(kāi)放式的嵌入式平臺(tái)比如像Linux。移植這些傳統(tǒng)的系統(tǒng)代表著挑戰(zhàn)同時(shí)又提供了非常豐厚的投資回報(bào)。真正的風(fēng)險(xiǎn)不是放棄熟悉的環(huán)境,工具和API,而是當(dāng)嵌入式系統(tǒng)開(kāi)發(fā)不斷前進(jìn)時(shí)候,它卻停滯不前。

遵循這篇文章概括的步驟和RTOS的移植技術(shù), 開(kāi)發(fā)人員可以通過(guò)最少的時(shí)間和精力成功地移植以前的RTOS的代碼到一個(gè)現(xiàn)代化的Linux平臺(tái)上來(lái)。  

Jim Ready是montavista的創(chuàng)始人和CTO, 擁有25以上的技術(shù)和豐富的經(jīng)驗(yàn), Jim被認(rèn)為是在嵌入式系統(tǒng)和實(shí)時(shí)軟件工程里的權(quán)威。做為Ready System的合伙創(chuàng)始人,他倡導(dǎo)VRTX實(shí)時(shí)內(nèi)核的開(kāi)發(fā),VRTX是第一個(gè)用于商業(yè)用途的RTOS產(chǎn)品。在Ready System和Microtec Research合并期間,Jim在Microtec/Mentor Graphics任職Ready System的董事長(zhǎng)兼CTO,Microtec Research后來(lái)被Mentor Graphics收購(gòu)了。他在1999創(chuàng)建了montavista 軟件公司,提供Linux系統(tǒng)到嵌入式系統(tǒng)市場(chǎng)并且給開(kāi)源的Linux社區(qū)提供了嵌入式系統(tǒng)的專業(yè)技術(shù)。Jim分別在伊利諾斯大學(xué),加利福尼亞大學(xué)獲得了學(xué)士和碩士學(xué)位。
本文地址:http://www.qingdxww.cn/thread-28948-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频 | 久久久久久国产精品免费免费 | 99精品国产综合久久久久五月天 | 在线欧美日韩国产 | 国产欧美日韩在线不卡第一页 | 国产欧美大片 | 忍者刺客韩国在线观看完整免费版 | 男人天堂2023 | 久久精品免费观看久久 | 成人午夜性a一级毛片美女 成人午夜小视频手机在线看 | 向日葵视频app在线观看 | 免费在线观看欧美 | 久久久久女人精品毛片 | 国产精品青青 | 香蕉成人福利片视频在线下载 | 女性爽爽影院免费观看麻豆 | a天堂影院 | 黄页网站在线观看免费 | 亚洲日本综合 | 亚洲图片自拍偷拍 | 片多多视频app黄版下载 | 日韩欧美一区二区三区在线观看 | 毛片在线视频在线播放 | 隔壁老王国产精品福利 | 99热精品成人免费观看 | 亚洲免费a| 青娱乐自拍视频 | 国产精品线在线精品国语 | 免费看污黄网站 | 久久精品国产一区二区三区不卡 | 午夜成a人片在线观看 | 污视频网站在线观看免费 | 青青国产在线视频 | 精品国产香蕉 | 中文国产欧美在线观看 | 韩国免费网站成人 | 狠狠插综合 | 欧美一区在线观看视频 | 精品国产品香蕉在线观看 | 日本免费不卡视频 | 国产一精品一aⅴ一免费 |