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

        ?

        基于VxWorks新型映像的三模冗余啟動機制研究

        2017-11-01 07:18:05鄒玉龍田小莉郭宗芝
        計算機測量與控制 2017年8期
        關(guān)鍵詞:機制

        鄒玉龍,劉 彬,田小莉,郭宗芝,牛 崇

        (上海微小衛(wèi)星工程中心,上海 201210)

        基于VxWorks新型映像的三模冗余啟動機制研究

        鄒玉龍,劉 彬,田小莉,郭宗芝,牛 崇

        (上海微小衛(wèi)星工程中心,上海 201210)

        針對VxWorks啟動映像依賴于ROM地址,不能適應(yīng)航天型號中三模存儲要求的缺點,利用VxWorks自帶的壓縮算法,按照航天型號軟件任務(wù)要求設(shè)計了一種基于VxWorks內(nèi)存型映像的新型壓縮映像,實現(xiàn)了軟件映像與ROM區(qū)地址無關(guān);并且實現(xiàn)了新型壓縮映像的三模冗余引導(dǎo)啟動,啟動時每一個bit數(shù)據(jù)都從三份映像獲取,并進行三取二判斷,將最后結(jié)果拷貝到內(nèi)存作為目的映像的bit數(shù)據(jù),目的映像啟動后能夠回寫正確數(shù)據(jù)自動糾正空間環(huán)境下可能發(fā)生的單粒子翻轉(zhuǎn)錯誤,為軟件的可靠啟動建立了基礎(chǔ)。

        VxWorks;三模冗余;壓縮映像;引導(dǎo)啟動

        0 引言

        航天型號軟件任務(wù)中,ROM存儲空間緊張,要求應(yīng)用映像大小盡量小,啟動時間盡量短,另外對于應(yīng)用映像的啟動可靠性也有較高的要求,對軟件映像一般會要求進行三模冗余存儲。VxWorks操作系統(tǒng)由于良好的實時性,穩(wěn)定性和可裁剪性,在航天領(lǐng)域得到了廣泛的應(yīng)用。但是VxWorks/Tornado提供的啟動機制并沒有直接支持三模冗余,這給軟件設(shè)計工作帶來了一定的困難。設(shè)計出一種應(yīng)用映像占用存儲空間小,啟動時間短的三模冗余啟動機制成為航天型號軟件任務(wù)中的關(guān)鍵技術(shù)要求。

        1 VxWorks/Tornado啟動機制分析

        VxWorks/Tornado開發(fā)過程中使用的啟動機制有如下幾種[1]。

        1.1 有引導(dǎo)映像的啟動機制

        1) ROM區(qū)僅存儲一份只包含引導(dǎo)功能的引導(dǎo)映像,引導(dǎo)映像往往比較小,啟動速度比較快。在引導(dǎo)映像正常啟動后,將應(yīng)用映像再通過其他途徑(如網(wǎng)絡(luò)端口,調(diào)試串口端口等)下載到RAM中,然后進行一次地址跳轉(zhuǎn),從RAM中開始運行應(yīng)用映像。由于通過網(wǎng)絡(luò)端口或者調(diào)試串口下載應(yīng)用映像速度比較快,并且避免了多次燒寫ROM區(qū)而影響ROM器件的壽命,在軟件開發(fā)階段,往往通過這種機制進行軟件調(diào)試,提高了軟件開發(fā)的效率。

        2) ROM區(qū)存儲一份引導(dǎo)映像和一份未壓縮的應(yīng)用映像,系統(tǒng)上電后首先從引導(dǎo)映像開始運行,在引導(dǎo)映像正常啟動后,將應(yīng)用映像從ROM拷貝到RAM中,然后從RAM中開始運行應(yīng)用映像。這種機制一般適用于ROM存儲空間足夠并且系統(tǒng)啟動時間及穩(wěn)定性要求不高的場景。

        3) ROM區(qū)存儲一份引導(dǎo)映像和一份壓縮的應(yīng)用映像,在引導(dǎo)映像正常啟動后,將應(yīng)用映像從ROM解壓到RAM中,解壓功能在引導(dǎo)映像中。然后從RAM中開始運行應(yīng)用映像。這種機制一般適用于ROM存儲空間緊張,但系統(tǒng)啟動時間及穩(wěn)定性要求不高的場景。

        1.2 沒有引導(dǎo)映像的啟動機制

        1) ROM區(qū)存儲一份未壓縮的應(yīng)用映像,啟動時直接從ROM區(qū)應(yīng)用映像的代碼段開始運行,應(yīng)用映像將自身拷貝到RAM區(qū)中,然后從RAM區(qū)開始運行。這種機制適用于ROM存儲空間充足的場景。

        2) ROM區(qū)存儲一份壓縮的應(yīng)用映像,啟動時直接從ROM區(qū)應(yīng)用映像的代碼段開始運行,應(yīng)用映像將自身解壓到RAM區(qū)中,然后從RAM區(qū)開始運行。這種機制適用于ROM存儲空間緊張但對啟動速度要求不高的場景。

        3) ROM區(qū)存儲一份駐留型的應(yīng)用映像,啟動時直接從ROM區(qū)應(yīng)用映像的代碼段開始運行,應(yīng)用映像僅將數(shù)據(jù)段拷貝RAM區(qū)中。由于軟件代碼段是在速度比較慢的ROM中,軟件運行時需要進行比較多的IO操作,導(dǎo)致軟件運行速度下降。這種機制適用于對運行速度要求不高但RAM空間緊張的的場景。

        2 應(yīng)用場景分析

        以某型號CPU軟件任務(wù)為例,軟件任務(wù)要求應(yīng)用映像進行三模冗余存儲,并且軟件啟動時間在10秒之內(nèi),軟件啟動后能夠?qū)Υ鎯^(qū)域進行自檢,如果發(fā)現(xiàn)bit數(shù)據(jù)被打翻,則利用三模冗余對錯誤數(shù)據(jù)進行糾錯。程序存儲器件分為PROM和EEPROM兩種,PROM大小為32 KB,EEPROM大小為1 MB。

        將整個系統(tǒng)映像分為引導(dǎo)映像和應(yīng)用映像兩部分。引導(dǎo)映像存儲于PROM中,不可修改。應(yīng)用映像存儲于EEPROM中,可修改。由Tordando開發(fā)環(huán)境編譯之后的二進制應(yīng)用映像大小接近500 kB,直接對編譯后的應(yīng)用映像三模冗余存儲需要1.5 MB的存儲空間,超過了可用的存儲空間大小,這就要求對軟件映像進行壓縮處理后再進行三模冗余存儲。雖然VxWorks/Tornado提供的壓縮映像啟動機制并沒有支持三模冗余,但是其壓縮解壓過程和壓縮解壓工具和算法有一定的參考價值。

        3 新型壓縮映像制作

        利用VxWorks/Tornado的壓縮算法對原始應(yīng)用映像進行壓縮,壓縮后的應(yīng)用映像大小為200 kB左右,這樣應(yīng)用映像大小足夠小,滿足了三模冗余存儲的要求。由于VxWorks/Tornado提供的壓縮映像技術(shù)是ROM地址相關(guān)的,不能直接存儲三份在EEPROM中。我們將VxWorks/Tornado的壓縮和解壓縮功能提取出來,單獨對編譯后的VxWorks原始映像進行壓縮,并且將解壓縮功能編譯到壓縮后的應(yīng)用映像中,使得壓縮映像在運行時可以自解壓。并且設(shè)置壓縮后的映像的代碼段起始地址為RAM空間中某個高地址[2],這樣就做到了壓縮映像的起始運行地址與ROM地址無關(guān)。軟件映像可以存儲在EEPROM中的任意地址處,并且可以復(fù)制多份進行冗余存儲。

        壓縮鏡像的制作步驟如下:

        1)首先將Tornado應(yīng)用工程編譯,得到可以直接在RAM運行的vxWorks原始文件。這一步通過Tornado軟件界面操作進行。

        2)將Tornado應(yīng)用工程編譯后的vxWorks文件轉(zhuǎn)換為二進制文件格式。其中%AOUTTOBIN1%為Tornado開發(fā)環(huán)境提供的aoutToBin.exe軟件工具。

        命令:

        %AOUTTOBIN1% tmp.bin

        3)對tmp.bin進行壓縮處理。其中%DEFLATE1%為Tornado開發(fā)環(huán)境提供的deflate.exe軟件工具。

        命令:%DEFLATE1% tmp.Z

        4)將壓縮后的tmp.Z轉(zhuǎn)換成匯編源文件格式。其中%BINTOASM1%為Tornado開發(fā)環(huán)境提供的binToAsm.exe軟件工具。

        命令:

        %BINTOASM1% tmp.Z > vxWorks.Z.s

        5)將vxWorks.Z.s編譯成目標文件。其中%CC1%為Tornado開發(fā)環(huán)境提供的ccsparc.exe軟件工具。%CFLAGS%為“-g -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT -fvolatile -fno-builtin -DCPU=SPARC -DPRJ_BUILD -g -O0 -Wall -DFLASH_TEST”編譯選項。%WIND_BASE%為Tornado開發(fā)環(huán)境的根目錄。

        命令:

        %CC1% %CFLAGS% -I%WIND_BASE% argeth -c vxWorks.Z.s -o vxWorks.Z.o

        6)將解壓文件uncompress.c編譯成目標文件。其中%CC1%,%CFLAGS%與%WIND_BASE%含義同(5)。

        命令:

        %CC1% %CFLAGS% -I%WIND_BASE% argeth -c uncompress.c -o uncompress.o

        7)將初始化配置文件start_up.s編譯成目標文件。其中%CC1%,%CFLAGS%與%WIND_BASE%含義同(5)。

        命令:

        %CC1% %CFLAGS% -c start_ up.s -o start_up.o

        8)對目標文件進行鏈接。使得新的應(yīng)用映像為帶硬件初始化功能并且能夠自解壓的應(yīng)用映像。RAM_HIGH_ADRS為RAM高地址。其中%LD1%為Tornado開發(fā)環(huán)境提供的ldsparc.exe軟件工具命令:%LD1% -n -N -nostartupfiles -static -e _start -Map mapfile -Ttext RAM_HIGH_ADRS start_up.ouncompress.o vxWorks.Z.o %WIND_BASE% argetliblibSPARCgnuvx.a -o selfUnCmp

        9)將鏈接后的文件轉(zhuǎn)換成二進制可執(zhí)行文件。其中%OBJCOPY1%為Tornado開發(fā)環(huán)境提供的objcopysparc.exe軟件工具。

        命令:%OBJCOPY1% -O binary selfUnCmpselfUnCmp.bin

        其中uncompress.c為自解壓模塊代碼。關(guān)鍵代碼如下。Inflate()為vxWorks的解壓縮函數(shù)。RAM_DST_ADRS為解壓后的程序映像的起始運行位置,也稱RAM低地址。解壓縮模塊首先將壓縮映像解壓到RAM_DST_ADRS地址處,然后通過absEntry (0)進行跳轉(zhuǎn)到RAM_DST_ADRS處運行解壓后的映像[3]。

        void uncompress()

        {

        volatile FUNCPTR absEntry = (volatile FUNCPTR)RAM_DST_ADRS;

        if(inflate (binArrayStart,

        RAM_DST_ADRS,

        &binArrayEnd - binArrayStart)!=0)

        return;

        /* and jump to it */

        absEntry (0);

        }

        4 三模引導(dǎo)啟動過程設(shè)計

        在EEPROM中存儲三份一樣的壓縮映像,并且由于解壓過程是在RAM中進行,大大提高了解壓速度,滿足10秒內(nèi)啟動的要求。這三份壓縮映像由引導(dǎo)程序選擇合成一份正確的拷貝到RAM空間指定的高地址處,然后從該高地址處開始運行。

        由于引導(dǎo)映像是存儲在PROM中,不可更改,并且PROM可用空間比較小,所以引導(dǎo)映像的功能必須盡可能的簡單。除了基本的硬件初始化外,引導(dǎo)映像只做一件事情,就是將存儲在EEPROM中的三模冗余應(yīng)用映像合成一份正確的拷貝到RAM某高地址處,最后跳轉(zhuǎn)到該RAM高地址處運行[4]。為了有效利用三模冗余的應(yīng)用映像,引導(dǎo)映像在進行三取二選擇時,首先簡單的對三模的三個字節(jié)進行相等比較,然后取兩個字節(jié)相等的作為判定結(jié)果,如果發(fā)生了同一地址處的3個映像的字節(jié)都不相等的情況時,按照bit級進行判定。例如拷貝應(yīng)用映像的某個字節(jié)數(shù)據(jù)時,對這一字節(jié)的每一個bit進行三取二的判定,由于bit只有0和1兩種情況,這樣就避免了三個字節(jié)都不相等而無法判定的問題,提高了系統(tǒng)啟動的可靠性,即只要不是某bit位兩份映像或者三份映像都發(fā)生錯誤,即使三個字節(jié)都不相等,都能判定出正確的數(shù)據(jù)。

        引導(dǎo)啟動過程核心代碼如下。

        //三??截悏嚎s映像到內(nèi)存區(qū)。

        for(cnt=0u; cnt

        {

        des = (UINT8 *)(RAM_HIGH_ADDRESS + cnt);

        dtA = IO_READB(IMAGE_FIRST_ADDRESS + cnt); /*get three image addr value*/

        dtB = IO_READB(IMAGE_SECOND_ADDRESS + cnt);

        dtC = IO_READB(IMAGE_THIRD_ADDRESS + cnt);

        judgeImgValue(cnt, des, dtA, dtB, dtC, &errorByteCnt); /*compare three image value*/

        }

        //判斷3個字節(jié)是否相同并記錄錯誤字節(jié)數(shù)

        void judgeImgValue(const UINT32 index, UINT8 *des, UINT8 dtA, UINT8 dtB, UINT8 dtC, UINT8 *Errordes)

        {

        if((dtA == dtB)&&(dtB == dtC))

        {

        *des = dtA;

        }

        else if((dtC == dtB)&&(dtB != dtA)) /*A Error*/

        {

        *des = dtB;

        saveErrorFlag(Errordes,index);

        }

        else if((dtA == dtC)&&(dtC != dtB)) /*B Error*/

        {

        *des = dtA;

        saveErrorFlag(Errordes,index);

        }

        else if((dtA == dtB)&&(dtB != dtC)) /*C Error*/

        {

        *des = dtA;

        saveErrorFlag(Errordes,index);

        }

        else /*three code not same*/

        {

        *des = TMR8Bit(&dtA, &dtB, &dtC);

        saveErrorFlag(Errordes,index);

        }

        }

        //如果3個字節(jié)都不相同則調(diào)用該函數(shù)進行bit判定

        UINT8 TMR8Bit(UINT8 *first, UINT8 *seconde, UINT8 *third)

        {

        UINT8 nCnt = 0;

        UINT8 nTmp = 0u;

        UINT8 nTmp1 = 0u;

        UINT8 nTmp2 = 0u;

        UINT8 nTmp3 = 0u;

        UINT8 nResult = 0u;

        for(nCnt = 0; nCnt < 8; nCnt = nCnt + 1)

        {

        nTmp1 = (((*first)>>nCnt)&0x1);

        nTmp2 = (((*seconde)>>nCnt)&0x1);

        nTmp3 = (((*third)>>nCnt)&0x1);

        if((nTmp1 == nTmp2)||(nTmp1 == nTmp3))

        {

        nTmp = nTmp1;

        }

        else

        {

        nTmp = nTmp2;

        }

        nTmp = nTmp << nCnt;

        nResult = nResult | nTmp;

        }

        return nResult;

        }

        應(yīng)用映像啟動后需要進行自檢,對于EEPROM區(qū)域中可能出現(xiàn)的數(shù)據(jù)存儲錯誤進行糾正,這時可以利用RAM區(qū)中已經(jīng)存在的正確軟件映像進行糾錯。如果將RAM區(qū)中壓縮映像的每一字節(jié)與EEPROM中每一壓縮映像的字節(jié)進行比較,如果不一致,則用RAM區(qū)中的正確數(shù)據(jù)覆蓋EEPROM中的錯誤數(shù)據(jù),雖然這樣也可以達到糾正錯誤數(shù)據(jù)的目的,但是比較耗時,影響了實時系統(tǒng)的啟動速度。實際工程中為了提高啟動速度,在引導(dǎo)啟動過程中將EEPROM中的軟件映像數(shù)據(jù)向RAM區(qū)進行拷貝時記錄了出錯的數(shù)據(jù)的字節(jié)下標,在系統(tǒng)啟動后通過檢查這些錯誤字節(jié)下標,就可以有針對性的對發(fā)生錯誤的字節(jié)進行修復(fù),而不用再次檢查一遍所有3份軟件映像的數(shù)據(jù)正確性。如果沒有錯誤,則直接往下運行程序,避免了無意義的重復(fù)檢查錯誤過程。為了軟件能夠長期穩(wěn)定運行,設(shè)置了關(guān)于EEPROM中三份應(yīng)用映像的CRC校驗值作為遙測數(shù)據(jù),軟件運行時定期對EEPROM中應(yīng)用映像進行CRC校驗,當遙測數(shù)據(jù)中觀測到三份應(yīng)用映像的CRC校驗數(shù)據(jù)發(fā)生改變時,可以通過特定的指令控制應(yīng)用軟件進行自檢,及時糾正錯誤數(shù)據(jù),避免由于長期不維護,造成EEPROM中三模冗余應(yīng)用映像bit錯誤過多而無法自主修復(fù)。整個啟動過程如圖1所示。

        5 測試與驗證

        5.1 正確映像啟動

        1)測試過程:將正確的應(yīng)用層軟件映像拷貝到EEPROM的3個不同位置,接著從引導(dǎo)地址0x00000000處啟動后,觀察調(diào)試串口的輸出,并記錄啟動過程所需的時間。

        2)測試結(jié)果:調(diào)試串口正常輸出運行信息,沒有錯誤記錄報告,整個系統(tǒng)啟動時間約為8 s,符合要求。

        5.2 同一位置1個字節(jié)錯誤類型映像啟動

        1)測試過程:對3份應(yīng)用層映像分別在第1個映像的第

        圖1 啟動過程圖

        1個字節(jié),第2個映像的第100K個字節(jié),第3個映像的第200K個字節(jié)處制造錯誤,然后將3份錯誤的應(yīng)用層映像拷貝到EEPROM的3個不同位置,接著從引導(dǎo)地址0x00000000處啟動后,觀察調(diào)試串口的輸出,并記錄啟動過程所需的時間。系統(tǒng)啟動1分鐘后再從EEPROM中讀取3份應(yīng)用層映像數(shù)據(jù)與正確映像分別進行比較,檢查是否正確的進行了映像修復(fù)。

        2)測試結(jié)果:調(diào)試串口輸出軟件運行信息,并且輸出錯誤報告,記錄了3處字節(jié)錯誤,并且修復(fù)完成。整個系統(tǒng)啟動時間約為8秒。3份從EEPROM中拷貝的軟件映像與正確的軟件映像數(shù)據(jù)二進制一致。結(jié)果表明錯誤數(shù)據(jù)已經(jīng)都被糾正。

        5.3 同一位置多個字節(jié)錯誤但bit位置不同錯誤類型映像啟動

        1)測試過程:對第1個應(yīng)用層軟件映像的第1個字節(jié)的bit0-bit2進行取反操作,對第2個應(yīng)用層軟件映像的第1個字節(jié)的bit3-bit5進行取反操作,對第3個應(yīng)用層軟件映像的第1個字節(jié)的bit6-bit7進行取反操作。對第1個應(yīng)用層軟件映像的第100K個字節(jié)的bit0-bit1進行取反操作,對第2個應(yīng)用層軟件映像的第100K個字節(jié)的bit2-bit4進行取反操作,對第3個應(yīng)用層軟件映像的第100K個字節(jié)的bit5-bit7進行取反操作。對第1個應(yīng)用層軟件映像的第200K個字節(jié)的bit0-bit2進行取反操作,對第2個應(yīng)用層軟件映像的第200K個字節(jié)的bit3-bit4進行取反操作,對第3個應(yīng)用層軟件映像的第200K個字節(jié)的bit5-bit7進行取反操作。然后將3份錯誤的應(yīng)用層映像拷貝到EEPROM的3個不同位置,從引導(dǎo)地址0x00000000處啟動后,觀察調(diào)試串口的輸出,并記錄啟動過程所需的時間。系統(tǒng)啟動1分鐘后再從EEPROM中讀取3份應(yīng)用層映像數(shù)據(jù)與正確映像分別進行比較,檢查是否正確的進行了映像修復(fù)。

        2)測試結(jié)果:調(diào)試串口輸出軟件運行信息,并且輸出錯誤報告,記錄了3處字節(jié)錯誤,并且修復(fù)完成。整個系統(tǒng)啟動時間約為8秒。3份從EEPROM中拷貝的軟件映像與正確的軟件映像數(shù)據(jù)二進制一致。結(jié)果表明錯誤數(shù)據(jù)已經(jīng)都被糾正。

        6 結(jié)論

        本文分析了基于VxWorks系統(tǒng)進行工程設(shè)計的幾種啟動機制,并針對航天型號軟件任務(wù)設(shè)計了基于VxWorks的新型三模冗余壓縮映像的引導(dǎo)啟動機制,給出了測試驗證結(jié)果。該技術(shù)已經(jīng)在某航天型號軟件上應(yīng)用,軟件在軌運行情況良好。

        [1] River W. Tornado用戶指南[M].王金剛,等譯.北京:清華大學(xué)出版社,2003.

        [2] 周治國,崔國輝,劉志文.基于S3C2440 NandFlashVxWorks啟動及性能分析[J].計算機工程與應(yīng)用,2010,46(9S):164-166.

        [3] 黃海宇,姜連祥,楊勤榮,等.內(nèi)存受限系統(tǒng)下的VxWorks映像壓縮算法[J].計算機測量與控制,2010,18(2):419-421.

        [4] 康鳳舉,段曉軍,吳成富,等.基于VxWorks的無人機飛控計算機快速啟動導(dǎo)引技術(shù)研究[J].計算機測量與控制,2010,18(6):1446-1448.

        Research on Triple Modular Redundancy Boot Mechanism Based on New Type VxWorks Compressed Image

        Zou Yulong, Liu Bin, Tian Xiaoli, Guo Zongzhi, Niu Chong

        (Shanghai Engineering Center for Microsatellites,Shanghai 201210, China)

        Aerospace Engineering often requires triple modular redundancy (TMR). While VxWorks bootable image is ROM address relevant and it cannot be used as a TMR type image directly. The new compressed image based on VxWorks compressing algorithm is independent of ROM address. The image can be copied exactly to store in three ROM areas. When system booting , each bit data copied to RAM to make up a complete image is got by comparing three bits in the same position in three same image stored in ROM area. After software boot, the one bit type error which is usually caused by Single Event Upset (SEU) can be corrected by writing back the correct data in image. The software boot reliability benefits from the new type image and TMR booting mechanism greatly.

        VxWorks; triple modular redundancy(TMR); compressed image; bootloader

        2017-02-17;

        2017-03-03。

        鄒玉龍(1984-),男,江蘇東臺人,碩士研究生,工程師,主要從事衛(wèi)星軟件技術(shù)方向的研究。

        1671-4598(2017)08-0120-03

        10.16526/j.cnki.11-4762/tp.2017.08.031

        TP273

        A

        猜你喜歡
        機制
        構(gòu)建“不敢腐、不能腐、不想腐”機制的思考
        自制力是一種很好的篩選機制
        文苑(2018年21期)2018-11-09 01:23:06
        “三項機制”為追趕超越蓄力
        當代陜西(2018年9期)2018-08-29 01:21:00
        丹鳳“四個強化”從嚴落實“三項機制”
        當代陜西(2017年12期)2018-01-19 01:42:33
        保留和突破:TPP協(xié)定ISDS機制中的平衡
        定向培養(yǎng) 還需完善安置機制
        破除舊機制要分步推進
        氫氣對缺血再灌注損傷保護的可能機制
        注重機制的相互配合
        打基礎(chǔ) 抓機制 顯成效
        中國火炬(2014年4期)2014-07-24 14:22:19
        一本一道波多野结衣一区| 亚洲sm另类一区二区三区| 国产精品午夜福利视频234区| 青楼妓女禁脔道具调教sm| 五月天综合网站| 高清av一区二区三区在线| 国产精品成人av大片| 欧美亚洲日本国产综合在线美利坚| 亚洲欧洲中文日韩久久av乱码| 国产一起色一起爱| 亚洲av专区一区二区| 国模精品一区二区三区| 97一区二区国产好的精华液 | 国产精品自产拍在线18禁| 精品在线视频免费在线观看视频| 国产一区国产二区亚洲精品| 久久国内精品自在自线图片| 欧美国产亚洲精品成人a v| 四虎在线中文字幕一区| 日日噜噜夜夜狠狠久久丁香五月 | 精品 无码 国产观看| 午夜婷婷国产麻豆精品| 欲香欲色天天天综合和网| 亚洲男人的天堂在线播放| 2021精品综合久久久久| 亚洲色图偷拍自拍在线| 山外人精品影院| 99久久久久国产| 色哟哟精品中文字幕乱码| 无码专区人妻系列日韩精品| 使劲快高潮了国语对白在线| 亚洲色欲色欲大片WWW无码| 大屁股流白浆一区二区三区| 精品伊人久久大香线蕉综合| 精品欧美在线| 蜜桃成人精品一区二区三区| 999精品无码a片在线1级| 又污又黄又无遮挡的网站| 日本高清中文一区二区三区| 无遮挡很爽很污很黄的女同| 国产精品熟女一区二区|