• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種嵌入式雙操作系統(tǒng)架構(gòu)中外設(shè)資源動態(tài)遷移的研究與實現(xiàn)*

      2022-01-24 02:16:16崔振禮
      計算機(jī)工程與科學(xué) 2022年1期
      關(guān)鍵詞:測試程序掩碼外設(shè)

      崔振禮,羅 宇

      (國防科技大學(xué)計算機(jī)學(xué)院,湖南 長沙 410073)

      1 引言

      隨著大規(guī)模集成電路的發(fā)展,嵌入式設(shè)備的性能越來越強(qiáng),功能越來越豐富,應(yīng)用場景也越來越復(fù)雜,在以智能制造和物聯(lián)網(wǎng)為主題的“工業(yè)4.0”概念被提出后,各應(yīng)用領(lǐng)域?qū)η度胧讲僮飨到y(tǒng)的要求也越來越高。復(fù)雜的應(yīng)用場景要求嵌入式操作系統(tǒng)在具有豐富功能性的同時支持實時性,但是在單操作系統(tǒng)中,豐富的功能性會不可避免地導(dǎo)致較多的運(yùn)行任務(wù)和復(fù)雜的調(diào)度算法,難以達(dá)到實時性要求,而為了保證實時性,系統(tǒng)通常會最小化任務(wù)數(shù)量,盡量減少一些不必要的功能,所以單操作系統(tǒng)難以同時兼具兩者[1]。雙操作系統(tǒng)架構(gòu)正好可以滿足這一要求。在雙操作系統(tǒng)架構(gòu)中,通用操作系統(tǒng)GPOS(General-Purpose Operating System)和實時操作系統(tǒng)RTOS(Real-Time Operating System)部署在同一嵌入式平臺,其中GPOS 提供復(fù)雜任務(wù)開發(fā)功能,滿足系統(tǒng)的功能需求,RTOS 提供精確的實時控制功能,滿足系統(tǒng)的實時性需求[2]。

      由于雙操作系統(tǒng)運(yùn)行于同一硬件平臺,如何合理地配置有限的外設(shè)資源是雙操作系統(tǒng)架構(gòu)面臨的重要問題。通過虛擬化技術(shù),雙操作系統(tǒng)可以實現(xiàn)外設(shè)資源共享,但是虛擬化軟件層會帶來額外的性能開銷,對于嵌入式設(shè)備來說,這種開銷是不容忽視的。而在非虛擬化條件下,操作系統(tǒng)實例互相隔離,獨占私有的外設(shè)資源,既可以充分發(fā)揮性能,又可以提升信息安全性[3]。華為海思Hi3559AV100 SOC的雙操作系統(tǒng)架構(gòu)采用非虛擬化方式,系統(tǒng)分別運(yùn)行于不同的CPU,外設(shè)資源按照功能需求分成2部分由雙操作系統(tǒng)分別單獨占有,不能共享使用。采用上述方式時,外設(shè)資源配置方案在操作系統(tǒng)源代碼中被靜態(tài)指定,系統(tǒng)部署之后便無法調(diào)整。搭載了該雙操作系統(tǒng)架構(gòu)的嵌入式設(shè)備在運(yùn)行時,如果某端系統(tǒng)發(fā)生了故障,其上運(yùn)行的與外設(shè)交互的任務(wù)便無法繼續(xù),從而影響到整個系統(tǒng)的正常運(yùn)行,輕則造成設(shè)備功能失效、失控或損壞,重則影響用戶的健康安全。

      本文基于上述問題提出一種外設(shè)資源在雙操作系統(tǒng)運(yùn)行期間動態(tài)遷移的解決方案。在某端系統(tǒng)出現(xiàn)故障之后,把配置到該端的外設(shè)資源遷移到另一端系統(tǒng),啟動相應(yīng)的用戶處理程序,控制外設(shè)繼續(xù)工作,最大限度地保證用戶和設(shè)備的安全,避免損失。最后在EVM3559A嵌入式開發(fā)平臺上對所提方案的可行性和可靠性進(jìn)行實驗驗證。

      2 Hi3559AV100雙操作系統(tǒng)架構(gòu)簡介

      2.1 Hi3559AV100 SOC簡介

      Hi3559AV100是華為海思面向智能網(wǎng)絡(luò)監(jiān)控攝像頭、3D/VR攝像頭、視頻會議終端、智能工業(yè)機(jī)器人、智能無人機(jī)、實時護(hù)理系統(tǒng)終端等領(lǐng)域設(shè)計的專業(yè)8K ultra HD mobile camera SOC,它提供了8K30/4K120廣播級圖像質(zhì)量的數(shù)字視頻錄制,支持4K sensor輸入,H.265編碼輸出或影視級的raw數(shù)據(jù)輸出,多路全景硬件拼接,并集成了高性能圖像信號處理器ISP(Image Signal Processor),為用戶提供了卓越的圖像處理能力;提供高效且豐富的計算資源,集成了1個由雙核A53和雙核A73組成的四核CPU、1個單核A53、1個M7、1個GPU、1個四核數(shù)字信號處理器DSP(Digital Signal Processor)和2個神經(jīng)網(wǎng)絡(luò)推理引擎NNIE(Neural Network Inference Engine),可根據(jù)應(yīng)用場景制定合適的業(yè)務(wù)部署方案;采用先進(jìn)的12 nm低功耗工藝和小型化封裝,在縮小產(chǎn)品體積的同時減少功耗[4];支持單操作系統(tǒng)和多操作系統(tǒng)(最多4個)部署方案,以滿足不同的業(yè)務(wù)需求。

      2.2 雙操作系統(tǒng)架構(gòu)

      Hi3559AV100提供Linux+LiteOS的雙操作系統(tǒng)部署方案,Linux作為GPOS運(yùn)行非實時任務(wù),部署在雙核A53和雙核A73組成的四核CPU上,LiteOS作為RTOS運(yùn)行實時任務(wù),部署在單核A53上,雙操作系統(tǒng)之間共享內(nèi)存,并通過共用系統(tǒng)總線訪問外設(shè)資源。Linux作為主流嵌入式通用操作系統(tǒng),其使用廣泛,性能高效,運(yùn)行穩(wěn)定,功能強(qiáng)大,對硬件平臺適配性好,對外圍設(shè)備兼容性強(qiáng),由于其開源特性,可根據(jù)具體需求進(jìn)行裁剪,還可根據(jù)特殊需求實現(xiàn)定制化。LiteOS是華為針對物聯(lián)網(wǎng)領(lǐng)域推出的輕量級物聯(lián)網(wǎng)實時操作系統(tǒng),具備輕量級(最小內(nèi)核尺寸僅為6 KB)、高實時、高穩(wěn)定性、低功耗、互聯(lián)互通、組件豐富和快速開發(fā)等關(guān)鍵能力[5]。Hi3559AV100雙操作系統(tǒng)架構(gòu)如圖1所示。

      Figure 1 Hi3559AV100 dual operating systems architecture圖1 Hi3559AV100雙操作系統(tǒng)架構(gòu)

      3 外設(shè)資源動態(tài)遷移

      外設(shè)資源動態(tài)遷移的實現(xiàn)基于外設(shè)中斷與CPU核的動態(tài)綁定,即改變外設(shè)中斷的響應(yīng)CPU,由該CPU上部署的操作系統(tǒng)進(jìn)行處理。

      3.1 Hi3559AV100外設(shè)中斷處理流程

      在Hi3559AV100中,外設(shè)的中斷由通用中斷控制器GIC(Generic Interrupt Controller)負(fù)責(zé)管理,GIC是聯(lián)系外設(shè)中斷和CPU的橋梁,也是各CPU之間中斷互聯(lián)的通道。GIC共支持3種中斷類型[6]:

      (1)軟中斷SGI(Software-Generated Interrupt):SGI為軟件可以觸發(fā)的中斷,統(tǒng)一編號為0~15,用于各個CPU核之間的通信;

      (2)私有外設(shè)中斷PPI(Private Peripheral Interrupt):PPI為每個CPU核的私有外設(shè)中斷,統(tǒng)一編號為 16~31。例如,每個CPU核的Local Timer產(chǎn)生的中斷就是通過 PPI 發(fā)送給CPU核的;

      (3)外設(shè)中斷SPI(Shared Peripheral Interrupt):SPI 是外部設(shè)備產(chǎn)生的中斷,所有CPU核共用,統(tǒng)一編號為32~1 019,如Global Timer、UART和GPIO產(chǎn)生的中斷。

      由于本文研究內(nèi)容只與SPI相關(guān),所以忽略SGI和PPI。Hi3559AV100使用的是GIC-400,最多支持8個CPU接口,其與外設(shè)、CPU連接情況如圖2所示。

      Figure 2 GIC connection with peripherals and CPU圖2 GIC與外設(shè)、CPU的連接

      由圖2可知,CPU核與GIC之間有2條連接線,分別是快速中斷請求線FIQ(Fast Interrupt Request)與中斷請求線IRQ(Interrupt ReQuest),F(xiàn)IQ用于安全模式,IRQ用于非安全模式[6]。當(dāng)外設(shè)中斷發(fā)送至GIC時,GIC會把收集來的中斷緩存,然后從中選擇優(yōu)先級最高的中斷請求發(fā)送至該外設(shè)中斷綁定的CPU,CPU接收到外設(shè)中斷信號后,讀GIC相應(yīng)的寄存器得到中斷號,然后開始處理中斷。

      3.2 GIC通用中斷控制器工作原理

      GIC內(nèi)部由2個部件組成:分發(fā)器(Distribut- or)和 CPU 接口(CPU Interface)。

      分發(fā)器的主要作用是檢測各個中斷源的狀態(tài),控制各個中斷源的行為,分發(fā)各個中斷源產(chǎn)生的中斷事件到設(shè)定的CPU接口上。雖然分發(fā)器可以管理多個中斷源,但是它總是把優(yōu)先級最高的中斷請求送往CPU接口。分發(fā)器對中斷的控制包括[6]:

      (1)中斷使能或禁用控制。分發(fā)器對中斷的控制分成2個級別,一個級別是對全局中斷的控制,一旦禁能了全局中斷,那么任何中斷源產(chǎn)生的中斷事件都不會被傳遞到CPU接口;另外一個級別是針對各個中斷源進(jìn)行控制,禁用某一個中斷源會導(dǎo)致該中斷事件不會分發(fā)到CPU接口,但不影響其他中斷源產(chǎn)生的中斷事件的分發(fā)。

      (2)將當(dāng)前優(yōu)先級最高的中斷事件分發(fā)到預(yù)先綁定的CPU接口。

      (3)優(yōu)先級控制。

      (4)中斷屬性設(shè)定,例如是電平觸發(fā)還是邊沿觸發(fā)。

      CPU接口是GIC與CPU核之間的連接接口,它的主要作用有[6]:

      (1)使能或者禁能CPU接口向連接的CPU核提交中斷事件。

      (2)應(yīng)答中斷,改變中斷的狀態(tài)。CPU核會向CPU接口應(yīng)答中斷,中斷一旦被應(yīng)答,分發(fā)器就會把該中斷的狀態(tài)從等待狀態(tài)修改成活躍狀態(tài)。

      (3)接收中斷處理完畢的通知。

      (4)設(shè)定優(yōu)先級掩碼。通過優(yōu)先級掩碼可以屏蔽掉一些優(yōu)先級比較低的中斷,這些中斷不會通知到CPU核。

      (5)設(shè)定中斷搶占的策略。

      (6)在多個中斷事件同時到來的時候,選擇一個優(yōu)先級最高的中斷發(fā)送到CPU接口。

      由分發(fā)器和CPU接口的功能可知,中斷分發(fā)到哪個CPU是分發(fā)器根據(jù)預(yù)先綁定的CPU接口決定的,而外設(shè)中斷與CPU接口的綁定是通過向GIC分發(fā)器部件的中斷分發(fā)目的寄存器GICD_ITARGETSRn寫CPU接口掩碼實現(xiàn)的[6]。在分發(fā)器分發(fā)中斷事件時,首先根據(jù)GICD_ITARGETSRn寄存器找到該中斷綁定的CPU接口掩碼,然后根據(jù)掩碼把中斷分發(fā)到相應(yīng)的接口。GIC分發(fā)器的初始化是在LiteOS啟動過程中完成的,其初始化代碼[7]如下所示:

      #define WRITE_UINT32(Val,Addr)(*((volatile UINT32 *)((UINT32)(Addr)))=(Val))

      void platform_gic_dist_init(void *base,UINT32irq_start){

      //256 interrupts at most

      UINT32max_irq=256;

      /*irq_map:An array filled with CPU mask,indicates which CPU the IRQ is sent to*/

      UINT32 *irq_dist=(UINT32 *)irq_map;

      //write CPU mask to GIC related register

      for(i=32;i

      WRITE_UINT32(*irq_dist,base+ARM_GIC_DIST_TARGET+i);

      irq_dist++;

      }

      }

      由代碼可以看出,GIC設(shè)置為最多支持256個中斷;irq_map定義為數(shù)組,數(shù)組元素為外設(shè)中斷綁定的CPU接口的掩碼(8 bit,無符號字符類型),數(shù)組元素的序號與某個外設(shè)中斷一一對應(yīng),例如數(shù)組序號8對應(yīng)UART2的中斷,irq_map[8]的值表示UART2的中斷綁定的CPU接口的掩碼;從偏移量32開始(0~15為軟中斷,16~31為私有外設(shè)中斷),外設(shè)中斷綁定的CPU接口的掩碼被寫到了GIC分發(fā)器部件的GICD_ITARGETSRn寄存器(地址為base+ARM_GIC_DIST_TARGET)中,且一次循環(huán)寫4個掩碼值。

      CPU接口的掩碼及其與CPU核的連接關(guān)系如表1所示。

      Table 1 Mask of the CPU interface and its connection to the CPU core

      irq_map數(shù)組[7]定義如下所示:

      #define TO_A53MP0 1<<0x00

      #define TO_A53MP1 1<<0x01

      #define TO_A73MP0 1<<0x02

      #define TO_A73MP1 1<<0x03

      #define TO_A53UP_ 1<<0x04

      const UCHARirq_map[256-32]={

      /*UART0,UART1,UART2*/

      TO_A53MP0,TO_A53UP_,TO_A53MP0,

      /*SPI0*/

      TO_A53MP0

      }

      在源代碼中先為CPU核掩碼作宏定義。由于Linux運(yùn)行在雙核A53和雙核A73組成的四核CPU上,LiteOS運(yùn)行在單核A53上,所以當(dāng)irq_map數(shù)組元素值為TO_A53MP0、TO_A53MP1、TO_A53MP2或者TO_A53MP3時表示對應(yīng)的中斷由Linux負(fù)責(zé)處理,數(shù)組元素為TO_A53UP_時表示對應(yīng)的中斷由LiteOS負(fù)責(zé)處理。

      由GIC的工作原理可知,如果外設(shè)中斷在系統(tǒng)運(yùn)行期間可以動態(tài)綁定到不同的CPU接口,就可以改變接收該中斷CPU核,從而實現(xiàn)外設(shè)資源在系統(tǒng)間動態(tài)遷移的目的。而外設(shè)中斷與CPU接口的綁定關(guān)系是由GIC分發(fā)器的GICD_ITARGETSRn寄存器中存放的CPU接口掩碼確定的[8],所以可以通過修改此寄存器中相應(yīng)地址的值來改變外設(shè)中斷綁定的CPU接口。

      3.3 具體實現(xiàn)

      以外設(shè)UART2為例,把外設(shè)資源動態(tài)遷移實現(xiàn)思路分為3步:

      Step1確定GIC中GICD_ITARGETSRn寄存器的地址;

      Step2根據(jù)UART2中斷在irq_map數(shù)組中對應(yīng)的序號和Step 1中找到的地址,確定存放UART2中斷綁定的CPU接口的掩碼地址;

      Step3把Step 2確定的地址中的值修改為要綁定的CPU接口的掩碼。

      由于LiteOS未使用虛擬地址機(jī)制,所以可通過物理地址直接訪問GICD_ITARGETSRn寄存器的內(nèi)容。通過閱讀LiteOS系統(tǒng)源碼得到系統(tǒng)基地址為0x1F101000,GICD_ITARGETSRn地址偏移量為0x800,所以Step 1中GICD_ITARGETSRn寄存器的地址為0x1F101800。由于UART2中斷在irq_map數(shù)組中對應(yīng)的序號為8,所以存放UART2中斷綁定的CPU接口的掩碼地址為0x1F101800+32+8,此地址處的默認(rèn)值為0x10,即CPU接口4的掩碼,然后將該地址處的值修改為雙核A53或者雙核A73的核所連接的CPU接口的掩碼,即可實現(xiàn)UART2從LiteOS到Linux的動態(tài)遷移。LiteOS應(yīng)用程序中實現(xiàn)該功能的代碼如下(以遷移到雙核A53 的核0為例)所示:

      #define BASE 0x1F101000

      #define GICD_ITARGETSRn 0x800

      #define WRITE_UCHAR(Val,Addr) (*((volatile UCHAR*)((UINT32)(Addr)))=(Val))

      static voiduart2_tomp(){

      WRITE_UCHAR(BASE+

      GICD_ITARGETSRn+40,TO_A53MP0);

      }

      Linux使用了虛擬地址機(jī)制,所以在Linux中訪問寄存器要先把它的物理地址轉(zhuǎn)換成相應(yīng)的虛擬地址。Linux提供了物理內(nèi)存的鏡像設(shè)備文件/dev/mem,用于訪問物理內(nèi)存,由于ARM架構(gòu)采用I/O端口與物理內(nèi)存統(tǒng)一編址方式,所以可以通過訪問內(nèi)存地址的方式訪問I/O設(shè)備。Linux應(yīng)用程序中實現(xiàn)該功能的代碼如下所示:

      #define BASE 0x1F101000

      #define GICD_ITARGETSRn 0x800

      static voiduart2_tomp(){

      intfd=open(“/dev/mem”,O_RDWR|O_SYNC);

      void *virt_base=mmap(NULL,1000,

      PROT_READ|PROT_WRITE,MAP_SHARED,fd,BASE);

      *((UCHAR*)( BASE+GICD_ITARGETSRn+40))=TO_A53MP0;

      }

      4 實驗驗證

      本文通過實驗驗證本文所提方案是否可行,遷移過程是否可靠。實驗采用的硬件平臺是廣州英碼信息科技有限公司生產(chǎn)的搭載了Hi3559AV100 SOC的EVM3559A嵌入式開發(fā)板,該開發(fā)板主要硬件配置信息如表2所示。

      Table 2 Main hardware configuration information on EVM3559A

      4.1 測試程序設(shè)計

      測試程序分2部分,分別運(yùn)行于LiteOS和Linux中,模擬單核A53故障或者LiteOS 宕機(jī)導(dǎo)致其上運(yùn)行的任務(wù)無法繼續(xù)執(zhí)行時,外設(shè)資源動態(tài)遷移到Linux中。通過HeartBeat原理[9]實現(xiàn)Linux對LiteOS的故障檢測,當(dāng)Linux端測試程序在指定時間內(nèi)未收到LiteOS端測試程序定時通過處理器間通信IPCM(Internal Processor Communication Message)發(fā)送的心跳信息時,便認(rèn)為LiteOS發(fā)生了故障,啟動外設(shè)資源遷移程序及相應(yīng)的用戶處理程序,進(jìn)行非實時降級處理,繼續(xù)控制外設(shè)運(yùn)行。

      在本實驗中以外設(shè)UART2為測試設(shè)備。LiteOS端測試程序每隔1 s向Linux發(fā)送心跳信息,在程序運(yùn)行20 s后停止發(fā)送,Linux端測試程序等待心跳信息超時時間設(shè)置為2 s。為了方便觀察實驗結(jié)果,兩端測試程序在接收到UART2數(shù)據(jù)后輸出至調(diào)試窗口。測試程序總體流程如圖3所示。

      Figure 3 Overall flow chart of the test program圖3 測試程序總體流程

      4.2 實驗環(huán)境搭建

      在2臺電腦上分別安裝USB轉(zhuǎn)串口驅(qū)動,其中1臺作為測試電腦,安裝由C#編寫的串口數(shù)據(jù)發(fā)送程序,該程序每隔1 s向串口發(fā)送“‘This is a test statement numbered’+消息序號”的測試數(shù)據(jù),其中消息序號從0開始,依次遞增1,另一臺作為調(diào)試電腦,安裝串口調(diào)試工具。測試電腦通過USB轉(zhuǎn)串口線連接到EVM3559A的UART2接口,調(diào)試電腦通過USB線連接至EVM3559A的micro USB調(diào)試串口。實驗環(huán)境連接情況如圖4所示。

      Figure 4 Connection of experimental environment圖4 實驗環(huán)境連接情況

      4.3 實驗過程及結(jié)果

      測試程序均部署為開機(jī)自啟,后臺運(yùn)行。EVM3559A上電后,雙操作系統(tǒng)啟動,測試程序自動運(yùn)行,UART2中斷默認(rèn)由LiteOS負(fù)責(zé)處理。

      此時LiteOS端測試程序等待接收UART2數(shù)據(jù),并定期向Linux發(fā)送心跳消息。打開測試電腦上的串口數(shù)據(jù)發(fā)送程序,開始發(fā)送測試數(shù)據(jù),程序運(yùn)行情況如圖5所示。

      Figure 5 Running of the serial data sending program圖5 串口數(shù)據(jù)發(fā)送程序運(yùn)行情況

      LiteOS端測試程序開始接收到UART2數(shù)據(jù),并把數(shù)據(jù)打印輸出至調(diào)試窗口,接收情況如圖6所示。

      Figure 6 Test program receiving UART2 data in LiteOS 圖6 LiteOS端測試程序接收UART2數(shù)據(jù)

      LiteOS端測試程序運(yùn)行20 s之后,停止發(fā)送心跳信息,2 s后Linux端測試程序等待接收心跳信息超時,啟動UART2遷移程序,開始接收UART2串口數(shù)據(jù),并打印輸出至調(diào)試窗口。接收情況如圖7所示。

      Figure 7 Test program receiving UART2 data in Linux 圖7 Linux端測試程序接收UART2數(shù)據(jù)

      由運(yùn)行結(jié)果可知,Linux端測試程序可以接收到UART2數(shù)據(jù),實現(xiàn)了UART2在雙操作系統(tǒng)運(yùn)行期間的動態(tài)遷移,滿足可行性要求。此外,通過改變串口數(shù)據(jù)傳輸參數(shù)和傳輸頻率進(jìn)行了多次實驗,實驗結(jié)果表明,在遷移前后,2端測試程序接收到的串口測試數(shù)據(jù)的序號是連續(xù)的,未發(fā)生數(shù)據(jù)丟失,具有高可靠性。

      5 結(jié)束語

      雙操作系統(tǒng)架構(gòu)是嵌入式系統(tǒng)的發(fā)展趨勢,如何在系統(tǒng)間配置外設(shè)資源是該架構(gòu)面臨的重要問題。本文基于華為海思Hi3559AV100 SOC雙操作系統(tǒng)架構(gòu),研究其外設(shè)資源在系統(tǒng)間的配置原理,分析此種外設(shè)配置方式在應(yīng)用中存在的問題,提出一種利用外設(shè)中斷動態(tài)綁定CPU核的方式來實現(xiàn)外設(shè)資源在系統(tǒng)運(yùn)行期間動態(tài)遷移的解決方案,并利用EVM3559A嵌入式開發(fā)平臺對該方案的可行性和可靠性進(jìn)行了實驗驗證。 此外,該解決方案還可應(yīng)用于外設(shè)資源的靈活部署、節(jié)能省耗、負(fù)載動態(tài)平衡等場景。

      猜你喜歡
      測試程序掩碼外設(shè)
      低面積復(fù)雜度AES低熵掩碼方案的研究
      基于Castle型機(jī)械手的三溫量產(chǎn)測試平臺實現(xiàn)
      基于布爾異或掩碼轉(zhuǎn)算術(shù)加法掩碼的安全設(shè)計*
      手機(jī)APP交互界面人因適合性測試程序的設(shè)計與實現(xiàn)
      中心主導(dǎo)制訂的《VHF/UHF頻率范圍內(nèi)測向系統(tǒng)測向靈敏度的測試程序》等兩項國際標(biāo)準(zhǔn)在ITU官網(wǎng)正式發(fā)布
      電氣自動化控制設(shè)備可靠性測試探討
      基于掩碼的區(qū)域增長相位解纏方法
      基于掩碼的AES算法抗二階DPA攻擊方法研究
      Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線
      貼身呵護(hù) 必不可少的PSP外設(shè)
      万宁市| 康马县| 新宾| 榆中县| 信阳市| 宽甸| 苍溪县| 神木县| 环江| 定西市| 游戏| 津市市| 米脂县| 九龙县| 平远县| 千阳县| 会东县| 当雄县| 蒙山县| 石棉县| 界首市| 湖南省| 阜平县| 启东市| 澳门| 靖安县| 合山市| 安乡县| 盐边县| 赣榆县| 吉首市| 青州市| 东乡族自治县| 富平县| 庆元县| 应城市| 崇仁县| 郁南县| 扎兰屯市| 天水市| 清原|