999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

S698-T處理器的RTEMS移植和應用程序開發(fā)

2015-07-02 00:17:24熊瑤歐陽高翔
關鍵詞:系統(tǒng)

熊瑤,歐陽高翔

(1.中國科學院大學,北京 100094;2.中國科學院 光電研究所)

?

熊瑤1,2,歐陽高翔2

(1.中國科學院大學,北京 100094;2.中國科學院 光電研究所)

一個簡單的星載計算機模型由一個模擬真實衛(wèi)星的嵌入式系統(tǒng)和系統(tǒng)運行所必需的數(shù)據(jù)集合組成,該數(shù)據(jù)集合由PC機上運行的程序生成,模擬真實衛(wèi)星的運行環(huán)境。為了構建這個模型,首先要完成以SPARC V8架構處理器S698-T為基礎的RTEMS操作系統(tǒng)移植,然后分別在S698-T端和PC端開發(fā)對應的應用程序,討論構建嵌入式系統(tǒng)的主要步驟和需要注意的問題。

星載計算機;RTEMS;S698-T;SPARC

引 言

建立一個簡單的星載計算機模型,可以很方便地對某些技術和設備進行驗證,降低正式項目的研究成本。模型的各類參數(shù)應當與實際的星載計算機一致,因此對構建模型的處理器與相應的操作系統(tǒng)都提出了較高的技術要求。同時,在保證項目質量的前提下控制研究成本,最可靠的辦法是采用在航天領域已經(jīng)成功應用的開源產(chǎn)品。

SPARC是一種開源的精簡指令集處理器架構,其突出特點是具有可擴展性。ERC32是歐洲航天局為了打破美國對星載微處理器的壟斷地位而開發(fā)的一款基于SPARC V7架構的面向空間應用的微處理器,后續(xù)基于SPARC V8的處理器也成功應用于航天工程。事實證明,SPARC架構處理器正在航天領域發(fā)揮越來越大的作用。RTEMS是一款開源嵌入式實時操作系統(tǒng),最初由美國國防部開發(fā)并應用于導彈控制系統(tǒng),后來轉為開源,由OAR公司進行維護。

本文搭建的星載計算機模型,至少需要一個模擬真實衛(wèi)星軟硬件環(huán)境的嵌入式系統(tǒng)和一個系統(tǒng)運行所必需的數(shù)據(jù)集合。在本文中,嵌入式系統(tǒng)是在SPARC V8架構處理器S698-T 基礎上移植RTEMS完成的,而數(shù)據(jù)集合由PC機上運行的程序生成,二者通過串口進行數(shù)據(jù)通信。

1 星載計算機模型的實現(xiàn)

1.1 主要步驟

本文的目標是建立一個簡單的星載計算機模型,使之能夠對相關技術進行驗證。最理想的情況是,在模型操作系統(tǒng)中運行的應用程序應當是實際星務軟件在該系統(tǒng)下的移植版本,但為了能夠盡早對星載計算機模型進行測試,以便及時發(fā)現(xiàn)可能存在的問題,本文將不會涉及星務軟件的移植工作。操作系統(tǒng)中運行的應用程序應盡可能簡化,但必須能夠在S698-T處理器上完成一定量的數(shù)據(jù)處理工作,并實現(xiàn)與PC機間的數(shù)據(jù)通信功能,模擬的是星載計算機的數(shù)據(jù)處理流程和與地面控制站的數(shù)據(jù)通信過程。

首先, RTEMS嵌入式操作系統(tǒng)到S698-T處理器的移植,這部分工作的主要內容是RTEMS開發(fā)環(huán)境的建立和BSP的開發(fā)。其次,RTEMS嵌入式操作系統(tǒng)中應用程序的建立,實現(xiàn)串口控制以及與PC機間的數(shù)據(jù)通信功能。

1.2 RTEMS操作系統(tǒng)的移植

1.2.1 建立交叉開發(fā)環(huán)境

開發(fā)環(huán)境采用宿主機/目標機模式,宿主機為x86架構PC機,運行Fedora 19,目標機為SPARC V8架構的S698-T處理器,運行RTEMS。宿主機和目標機通過串口與DSU連接,串口負責數(shù)據(jù)通信,DSU負責在PC端對S698-T處理器進行在線調試。

在Fedora系統(tǒng)中建立交叉開發(fā)環(huán)境時,安裝的交叉開發(fā)工具采用添加了RTEMS補丁的GNU工具鏈(GCC、GDB、binary utilties、newlib等),這些工具可通過在RTEMS官網(wǎng)的ftp服務器上下載對應的RPM包直接安裝,比使用源碼包編譯安裝更加方便,且能夠避免后者在安裝過程中可能遇到的大部分問題。

在安裝完交叉開發(fā)工具后,需要為系統(tǒng)指定開發(fā)工具的安裝路徑,即設置環(huán)境變量:

export PATH=/opt/rtems-4.10/bin:$PATH

其中,/opt/rtems-4.10/bin是使用RPM包安裝交叉編譯工具時默認的安裝路徑。同時需要注意,F(xiàn)edora采用bash作為shell,如果只在命令終端執(zhí)行上述命令,則會發(fā)現(xiàn)環(huán)境變量將還原至初始狀態(tài),需要重新設置。該問題最好的解決辦法是,將編譯工具的路徑寫到~/.bashrc中:

echo "export PATH="/opt/rtems-4.10/bin:"$PATH">>~/.bashrc

重新登錄后,環(huán)境變量保持改變后的狀態(tài)。

1.2.2 BSP的開發(fā)與測試

第1步,選擇BSP模板,RTEMS源碼提供了市場上流通的大多數(shù)架構處理器的BSP模板,從中選擇與S698-T架構最相似的leon2 BSP作為開發(fā)基礎,做進一步修改。

第2步,修改BSP配置文件leon2.cfg中相關的結構體系定義。

第3步,修改BSP目錄下的所有Makefile.am文件,并重新生成Makefile.in文件。

第4步,修改啟動代碼,包括建立TRAP表、基本的CPU初始化、設置中斷堆棧等。

第5步,RTEMS系統(tǒng)配置,如設置RTEMS配置表、系統(tǒng)初始化任務表、用戶初始化任務表等,同時還需要提供板上外設的驅動程序。

第6步,測試和調試,生成可執(zhí)行映像并下載到S698-T處理器上運行,測試BSP的正確性。

1.3 BSP的開發(fā)

在上述BSP開發(fā)相關的步驟中,第3步修改啟動代碼最為重要。RTEMS BSP的啟動代碼主要包含在start.s、bootcard.c和bspstart.c等文件中。其中,start.s是系統(tǒng)上電后執(zhí)行的第一段程序,包含了用于安裝trap表和硬件初始化的代碼,之后跳轉到bootcard.c執(zhí)行進一步的系統(tǒng)初始化。

1.3.1 trap表安裝

leon2 BSP中的trap表結構簡單,主要作用是對各類trap處理函數(shù)入口地址進行統(tǒng)一管理,其格式一般為TRAP( trap_type, SYM(trap_handler) ),作用是當處理器發(fā)生具體的trap時,系統(tǒng)根據(jù)trap_type調用對應的處理函數(shù)SYM(trap_handler)。

默認的trap表簡要如下:

PUBLIC(trap_table)

SYM(trap_table):

RTRAP( 0, SYM(hard_reset) ); ! 00復位

BAD_TRAP; ! 01取指令異常

BAD_TRAP; ! 02企圖執(zhí)行UNIMP或其他未實現(xiàn)的指令

BAD_TRAP; ! 03用戶模式下企圖執(zhí)行特權指令

BAD_TRAP; ! 04FPU不存在或關閉時,企圖執(zhí)行浮點處理指令

TRAP(5, SYM(window_overflow_trap_handler) );

! 05窗口上溢

TRAP(6,SYM(window_underflow_trap_handler) );

! 06窗口下溢

其中BAD_TRAP在start.s文件開頭定義,與硬件復位的trap處理函數(shù)一致。第0x00~0x7F為硬件trap,其中,第0x7E號trap定義為系統(tǒng)時鐘頻率,默認為10 MHz;第0x80~0xFF定義為軟件trap,可通過ta指令使用。

當掌握trap表中trap及對應處理函數(shù)的映射關系后,可以嘗試在start.s中對某些BAD_TRAP類的trap的處理函數(shù)做出具體的定義:首先在start.s文件開頭聲明一個trap處理函數(shù),然后在trap表中完成指定處理函數(shù)和指定trap的映射關系,最后在strat.s文件末尾前定義具體的處理函數(shù)代碼,上述代碼全部由匯編語句完成。通過這種方式,就可以清楚直觀地認識到strat.s中trap表的工作方式,但并不推薦在實際工作中使用這種方法定義自己的trap處理函數(shù)。

一般定義自己的trap處理函數(shù)是在RTEMS應用程序中完成的。S698-T處理器包含了32類trap,其中包括S698-T處理器的15個一級中斷(0x11~0x1F號trap)和32個二級中斷。二級中斷的輸出連在了一級中斷的10號中斷(0x1A號trap)上,trap_type即所需中斷向量號,例如,在安裝“系統(tǒng)默認uart0中斷”的處理函數(shù)時,主要使用的指令如下所示:

rtems_interrupt_catch(uart0_interrupt_handler,0x13,&old_isr_entry);//捕捉中斷向量號為0x13的中斷,即uart0中斷,將其與一個具體的中斷處理函數(shù)聯(lián)系起來

rtems_isr uart0_interrupt_handler(rtems_vector_number vector)//安裝具體的中斷處理函數(shù)

在進入中斷處理函數(shù)時,首先要關掉中斷,在執(zhí)行完中斷處理代碼后再打開中斷,然后才能退出中斷處理函數(shù),返回程序中斷點繼續(xù)運行。

1.3.2 系統(tǒng)硬件初始化

在系統(tǒng)上電完成trap表的安裝后,開始執(zhí)行硬件的復位初始化代碼,主要完成以下功能:

① 初始化陷阱基址寄存器tbr,將trap表的安裝地址存入tbr寄存器中,這也是系統(tǒng)的啟動地址,在S698-T處理中是0x 4000 0000;

② 初始化窗口無效屏蔽寄存器wim;

③ 使能trap;

④ 設置系統(tǒng)堆棧,根據(jù)現(xiàn)有的sp設置fp;

⑤ 復制.data段和清空.bss段;

⑥ 跳轉到bootcard.c,完成目標板特定的系統(tǒng)配置和RTEMS的系統(tǒng)初始化。

需要注意的是,默認的硬件初始化代碼中沒有對psr寄存器和sp寄存器進行初始化,也沒有對內存配置寄存器進行初始化,更重要的是,沒有對S698-T內8個窗口的寄存器進行初始化,可能會造成不必要的異常。因此,在S698-T的初始化代碼中,必須要對8個窗口的寄存器清零。

對窗口寄存器清零略——編者注。

1.3.3 RTEMS的系統(tǒng)初始化

在執(zhí)行完start.s中的啟動代碼后,將跳轉到bootcard.c,完成RTEMS的基本配置,如設置RTEMS配置表、CPU依賴信息表的相關入口等[3]。bootcard.c會根據(jù)目標機環(huán)境重新配置RTEMS,為系統(tǒng)初始化任務建立標準C支持環(huán)境。最后,開啟多任務調度,運行應用程序中配置的第一個任務。

1.4 BSP的測試

RTEMS內核與應用程序構成了一個基于函數(shù)調用形式的整體功能單元,其最直接的表現(xiàn)形式是RTEMS內核與應用程序代碼共同編譯生成一個可執(zhí)行文件,當二者能夠正常編譯可執(zhí)行文件,且該文件下載到S698-T處理器上后能夠正常運行時,證明了BSP的有效性,進而可以進行下一步工作。測試使用RTEMS自帶用例hello_world_c,使用默認配置時,生成的可執(zhí)行文件為hello.exe。

值得注意的是,在編譯應用程序時使用標準的Makefile文件,最后編譯生成的可執(zhí)行文件目錄下將會有記錄整個鏈接過程的.num文件,該文件記錄了hello.exe中所有符號及其在內存中的加載地址。在這里,符號指的是程序中定義過的函數(shù)、全局變量和靜態(tài)變量。

在應用程序的開發(fā)過程中,可直接在測試用例Makefile文件基礎上進行改造,以減少工作量。

2 應用程序開發(fā)

在完成BSP的測試后,就要實現(xiàn)S698-T處理器與PC機間的數(shù)據(jù)通信和處理功能,需要在 PC/Windows端和S698-T/RTEMS端均開發(fā)一個串口控制程序。

2.1 PC/Windows端串口控制程序

使用VS2008的MSCOMM控件,在MFC程序中可以很方便地對串口進行控制[4]。而在開發(fā)MFC程序時,應當特別注意兩個問題:多字節(jié)數(shù)據(jù)的串口連續(xù)發(fā)送以及不同硬件平臺編址方式的差異。

2.1.1 多字節(jié)數(shù)據(jù)的串口連續(xù)發(fā)送

S698-T處理器自帶兩個通用異步串口,其接收和發(fā)送緩存均為一個字節(jié),即串口一次只能處理一個字節(jié)的數(shù)據(jù),而在MFC應用程序中通過串口發(fā)送的數(shù)據(jù)包括整型、長整型、浮點型和字符型,在內存中分別占4、4、4和1個字節(jié)。因而必須解決串口中多字節(jié)數(shù)據(jù)連續(xù)收發(fā)的問題,為此,需要定義一個共同體:

{union data

int idata; //整型

int ldata; //長整型

float fdata; //浮點型

char scdata; //字符型

char cdata[4]; //字符數(shù)組

}temp_data;

共同體所有成員共占一段存儲單元,例如上面的定義是把一個整型成員、一個長整型成員、一個浮點型成員、一個字符型成員和一個字符數(shù)組成員安排在同一個地址開始的內存單元中[5],從而可用其中的字符數(shù)組成員來統(tǒng)一表示其他不同類型的成員數(shù)據(jù)。

在數(shù)據(jù)通信時,MFC應用程序給不同類型的數(shù)據(jù)分配對應的標志位,通過共同體的字符數(shù)組成員將所有帶標志位的數(shù)據(jù)組合成一個更大的字符數(shù)組,再通過串口依次發(fā)送給S698-T處理器。S698-T/RTEMS端應用程序接收到數(shù)據(jù)后,將根據(jù)事先約定的標志位對數(shù)據(jù)進行分類處理,再發(fā)送回PC/Windows端。

值得注意的是,在MFC應用程序中,當通過串口發(fā)送完數(shù)據(jù)后,應該等待一定時間,這是因為S698-T/RTEMS端應用程序通過串口接收數(shù)據(jù)、經(jīng)過處理再發(fā)送回PC端的整個過程有一定的時間消耗。在沒有精確測量S698-T/RTEMS端應用程序收發(fā)處理數(shù)據(jù)的整個流程所消耗時間的情況下,MFC應用程序“睡眠”100 ms能夠滿足需求,但應該還可以繼續(xù)縮減。當“睡眠”時間結束后,MFC應用程序才開始執(zhí)行串口數(shù)據(jù)的接收代碼。

2.1.2 不同硬件平臺編址方式的差異

在通過串口進行數(shù)據(jù)收發(fā)時,還應當注意不同硬件平臺上字節(jié)順序方式的差異:SPARC V8為大端字節(jié)順序,而x86為小端字節(jié)順序,同樣一個多字節(jié)數(shù)據(jù),例如浮點數(shù),在兩種平臺的內存中其字節(jié)存放順序是相反的。這一差異并不會導致應用程序在兩種硬件平臺間進行數(shù)據(jù)通信時發(fā)生顯式錯誤,但顯然在進行數(shù)據(jù)處理時會生成錯誤的數(shù)據(jù)源。因此,在數(shù)據(jù)處理時,需要根據(jù)自身平臺的字節(jié)順序方式對接收到的多字節(jié)數(shù)據(jù)進行不同形式的處理。

2.2 S698-T/RTEMS端串口控制程序

在RTEMS應用程序中可以直接對串口進行控制,方式如下:

#define UART0_DATA *(volatile unsigned int *)(0x80000070)

其中,0x 8000 0070為串口0的數(shù)據(jù)接收(只讀)/發(fā)送(只寫)寄存器地址,從而在應用程序中可以通過UART0_DATA的不同處理實現(xiàn)對串口的控制。在RTEMS操作系統(tǒng)中對外設的控制均采用相同的處理方式。

RTEMS系統(tǒng)中應用程序主要包括3部分:

① 用戶初始化任務Init(),負責串口初始化,創(chuàng)建并啟動兩個用戶任務task1、task2,創(chuàng)建方式略——編者注。

在最后,用戶初始化任務Init()負責把自身刪除,將CPU控制權轉移給任務就緒隊列中的第一個任務。

② task1和task2的實現(xiàn)代碼,task1通過串口0接收數(shù)據(jù)并按照SPARC硬件平臺上對應的字節(jié)順序分類存放,task2通過串口1逆序發(fā)送接收到的數(shù)據(jù),task1和task2通過共同體全局變量進行數(shù)據(jù)通信。特別地,在task1中需要知道什么時候串口0有數(shù)據(jù)到達,可以檢查串口狀態(tài)寄存器([31:0],共32位)的第[0]位DR,其默認值為0,而當串口接收到新數(shù)據(jù)時,該位將被寫入1,而沒有接收到新數(shù)據(jù)時將保持默認值不變。具體的實現(xiàn)語句如下:

{while(1)

while(!(UART0_STATUS &0x1));

…… //具體的串口數(shù)據(jù)接收代碼

}

每次循環(huán)開始時都會判斷DR位的狀態(tài),當DR位為0,即串口還沒有接收到新的數(shù)據(jù)時,循環(huán)內的while()語句構成一個無條件循環(huán),外在表現(xiàn)就是系統(tǒng)持續(xù)等待串口輸入的狀態(tài),而當串口接收到新數(shù)據(jù)時,DR位置位為1,從而死循環(huán)被打破,開始執(zhí)行接下來具體的串口數(shù)據(jù)接收代碼。接收到的數(shù)據(jù)依次存放在一個實現(xiàn)定義的字符數(shù)組內,以方便數(shù)據(jù)接收完成后進行處理。

③ 系統(tǒng)配置與裁減,RTEMS系統(tǒng)必須針對特定應用進行配置[6],配置參數(shù)包含在一些系統(tǒng)初始化過程中使用到的數(shù)據(jù)結構中,但RTEMS也提供了一套宏指令,可在應用程序中完成系統(tǒng)的快速配置,如設置RTEMS相關全局變量和常量、RTEMS配置表、API配置表、系統(tǒng)初始化任務表等,還可以提供板上外設的驅動程序。confdefs.h包含了操作系統(tǒng)的配置模板,是實現(xiàn)上述系統(tǒng)配置功能的關鍵。RTEMS系統(tǒng)配置與裁減可通過預編譯的方式來實現(xiàn)[7],一般結構略——編者注。

此時,RTEMS系統(tǒng)配置與裁剪同步完成。而RTEMS系統(tǒng)的初步裁減是在完成BSP開發(fā)后進行系統(tǒng)編譯配置configure參數(shù)時實現(xiàn)的:configure參數(shù)的數(shù)個disable與enable組合可禁用或許可某些系統(tǒng)功能,從而實現(xiàn)系統(tǒng)的初步裁減。

結 語

本文初步實現(xiàn)了搭建一個簡單的星載計算機模型的目標,較為詳細地論述了模型實現(xiàn)步驟和應該注意的問題,對基于SPARC芯片的RTEMS移植和應用程序開發(fā)有了較深刻的認識,相關經(jīng)驗具有一定的借鑒意義。同時,該模型還可繼續(xù)優(yōu)化:BSP的開發(fā)目前只實現(xiàn)了最基本的功能,還可繼續(xù)豐富;應用程序應針對數(shù)據(jù)的循環(huán)收發(fā)進行改進,將模擬星載計算機控制律輸出—衛(wèi)星狀態(tài)更新—數(shù)據(jù)采集的過程,形成一個閉環(huán);實現(xiàn)隨機中斷、模擬地面數(shù)據(jù)注入等過程;進一步優(yōu)化應用程序的時間開銷。

[1] 孫魯毅.四種流行的嵌入式實時操作系統(tǒng)的比較研究-VxWorks,QNX,μClinux,RTEMS[J].計算機應用與軟件,2007,24(8):196-197.

[2] SPARC International.The SPARC Architecture Manual:Version 8,1998.

[3] 樊超,桂先洲.開發(fā)RTEMS實時系統(tǒng)的板級支持包[J].單片機與嵌入式系統(tǒng)應用,2005(6):35-38.

[4] 龔建偉,熊光明.Visual C++/Turbo C串口通信編程實踐[M].北京:電子工業(yè)出版社,2004:46-63.

[5] 譚浩強.C++程序設計[M].北京:清華大學出版社,2011.

[6] OAR.RTEMS C User's Guide:Version 4.10.99.0,2013.

[7] 楊云,李言俊.RTEMS移植到SAILINGS698處理的BSP開發(fā)[J].微電子學與計算機,2009,26(6):109-113.

熊瑤(碩士研究生),研究方向為嵌入式系統(tǒng)與應用。

Xiong Yao1,2,Ouyang Gaoxiang2

(1.University of Chinese Academy of Sciences,Beijing 100094,China;2.Academy of Opto-Electronics of Chinese Academy of Sciences)

A simple model of on-board computer consists of an embedded system and a set of data which is necessary for the system’s appropriate running.The set of data is produced by programs running on PC,and the embedded system is a simulation of the real satellite.In order to construct this model,RTEMS operating system based on S698-T using SPARC V8 architecture processor should be ported first, then application programs are developed on both the S698-T and the PC,steps and some problems will be discussed simultaneously.

on-board computer;RTEMS;S698-T;SPARC

TP316

A

士然

2014-12-04)

猜你喜歡
系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機系統(tǒng)
ZC系列無人機遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
基于UG的發(fā)射箱自動化虛擬裝配系統(tǒng)開發(fā)
半沸制皂系統(tǒng)(下)
FAO系統(tǒng)特有功能分析及互聯(lián)互通探討
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統(tǒng) 德行天下
PLC在多段調速系統(tǒng)中的應用
主站蜘蛛池模板: 国模粉嫩小泬视频在线观看| 91在线视频福利| 国产网站免费观看| 欧美日韩一区二区在线免费观看 | 欧美另类图片视频无弹跳第一页| 色婷婷亚洲综合五月| 中文无码精品a∨在线观看| 天堂在线视频精品| 中国精品久久| 国产无码精品在线| 欧美一级一级做性视频| 亚洲bt欧美bt精品| 成人久久精品一区二区三区 | 久久精品这里只有国产中文精品 | 日本午夜影院| 国产精品久久国产精麻豆99网站| 亚洲中文字幕在线精品一区| 久草美女视频| 色老头综合网| 亚洲欧洲日产国产无码AV| 中文字幕第4页| 亚洲精品第一页不卡| 成人在线第一页| 在线中文字幕日韩| 99re视频在线| 国产福利在线观看精品| 欧美曰批视频免费播放免费| 日韩一区二区三免费高清| 麻豆国产在线不卡一区二区| 国产成人盗摄精品| 国产成人精品18| 日韩不卡高清视频| 国产熟睡乱子伦视频网站| 欧美一区二区福利视频| 亚洲国产成人在线| 亚洲人成人伊人成综合网无码| 一区二区影院| 欧美日韩成人| 日韩免费毛片视频| 在线观看亚洲天堂| 午夜啪啪福利| 国产免费自拍视频| 视频国产精品丝袜第一页| 国产门事件在线| 不卡无码h在线观看| 亚卅精品无码久久毛片乌克兰| 亚洲精品黄| 国产成人夜色91| 亚洲最新在线| 久久综合婷婷| 18禁高潮出水呻吟娇喘蜜芽| 国产微拍一区| 亚洲第一黄片大全| 精品一区二区三区无码视频无码| 天天综合网亚洲网站| 看国产一级毛片| 国产丰满成熟女性性满足视频| 久久久黄色片| 99re视频在线| 天堂中文在线资源| 欧美日韩国产在线播放| 国产乱人视频免费观看| 国产精品毛片一区| 亚洲第一成网站| 91蝌蚪视频在线观看| 久久久91人妻无码精品蜜桃HD| 国产SUV精品一区二区6| 久久精品国产999大香线焦| 久久久久国产精品嫩草影院| 亚洲香蕉在线| 91九色最新地址| 亚洲三级成人| 久久亚洲美女精品国产精品| 91福利国产成人精品导航| 国产一区二区三区视频| 啪啪国产视频| 久久精品最新免费国产成人| 综合亚洲色图| 久久99国产视频| 色香蕉影院| 91精品人妻互换| 久草视频福利在线观看 |