在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于RTOS的基本移植鴻蒙OS項(xiàng)目

電子發(fā)燒友論壇 ? 來(lái)源:電子發(fā)燒友論壇 ? 作者:電子發(fā)燒友論壇 ? 2021-12-01 17:07 ? 次閱讀

移植準(zhǔn)備:

軟件平臺(tái):MounRiver Studio( MRS);

硬件平臺(tái): CH32V307開發(fā)板;

源碼獲取:https://gitee.com/openharmony/kernel_liteos_m

步驟一:在MRS中新建一個(gè)CH32V307的工程,將源碼直接拖到工程中,就添加進(jìn)來(lái)了,然后去添加頭文件路徑即可

18faeb7c-5285-11ec-b2e9-dac502259ad0.png

源碼中包含比較全面,我們可以選擇不需要的部分將其排除在編譯之外,操作方法為右鍵目錄或文件,點(diǎn)擊Include/Exclude From Build菜單項(xiàng)恢復(fù)編譯,同樣的方法再選一遍即可。

下面說(shuō)些移植操作系統(tǒng)的注意事項(xiàng):

ARM上移植實(shí)時(shí)操作系統(tǒng)大家可能比較熟悉,對(duì)于RISC-V內(nèi)核的MCU,可能相對(duì)比較陌生。下面結(jié)合WCH的CH32V103和CH32V307兩款芯片來(lái)詳細(xì)說(shuō)下針對(duì)RISC-V平臺(tái),移植實(shí)時(shí)操作系統(tǒng)的注意點(diǎn)。

在移植前,有必要對(duì)RISC-V的一些基本知識(shí)點(diǎn)有一定的了解,這里對(duì)RISC-V的概況,發(fā)展,指令集,特權(quán)模式等不作詳述,僅結(jié)合WCH的RISC-V內(nèi)核的MCU,簡(jiǎn)單介紹我們移植實(shí)時(shí)操作系統(tǒng)有可能遇到的關(guān)鍵點(diǎn)做一下描述。

這里之所以選取V103和V307兩款芯片,主要其極具代表性:

首先,直觀上其外設(shè)的使用方法和我們之前熟悉的F103,F(xiàn)107等是兼容的,這樣降低了我們使用和移植時(shí)的難度,基于WCH提供的外設(shè)庫(kù),我們以前上層的代碼甚至于不用修改可直接使用。

其次,V103是WCH RISC-V內(nèi)核家族中的V3內(nèi)核,V307為V4內(nèi)核,V3內(nèi)核支持RV32IMAC指令集,即除支持RISC-V基本的32位整數(shù)指令集外,還支持硬件乘除法,原子指令,壓縮指令。V4在V3的基礎(chǔ)上增加了單精度硬件浮點(diǎn),并且其性能也比V3高。

除上述之外,雖然兩者的中斷控制器(PFIC)相較于現(xiàn)行的PLIC均不同,均不是統(tǒng)一入口,而是采用中斷向量表尋址的方式,但是V3的中斷向量表處存放是一條指令,而V4的向量表既可以存放指令,也可以存放中斷處理函數(shù)的地址。兩者均支持中斷嵌套和硬件壓棧,區(qū)別在于V3最大嵌套兩級(jí),V4最大可達(dá)八級(jí),同時(shí)V3的硬件壓棧深度兩級(jí),V4的硬件壓棧深度為三級(jí)。這里需要注意的是,移植實(shí)時(shí)操作系統(tǒng)時(shí)需要關(guān)閉硬件壓棧,在切換任務(wù)時(shí)所有寄存器,我們希望是由我們自己控制其壓棧和出棧的內(nèi)容。

RISC-V寄存器如下圖所示,其中x0-x31為整形寄存器,f0-f31為浮點(diǎn)寄存器(V3沒(méi)有浮點(diǎn)寄存器)。所有帶caller的寄存器,當(dāng)發(fā)生中斷時(shí)需要保存,值得注意的是,WCH的硬件壓棧保存的寄存器僅僅保存整數(shù)的16個(gè)caller saved 寄存器。正常一個(gè)中斷函數(shù)的寄存器保存我們不用關(guān)心,編譯器會(huì)幫我們做的很好。但是當(dāng)我們從一個(gè)匯編入口進(jìn)中斷函數(shù)的時(shí)候這些過(guò)程就不得不由我們自己來(lái)實(shí)現(xiàn)。寄存器中幾個(gè)相對(duì)特殊的x0恒為0,x1是返回地址寄存器ra,函數(shù)調(diào)用時(shí)用來(lái)存放返回地址,x2為堆棧指針sp,x3為gp全局指針,用來(lái)尋址全局變量。對(duì)于一個(gè)正常運(yùn)行的程序,除了x0,gp兩個(gè)初始值固定的外,其余的均會(huì)是不確定的,所有在進(jìn)行上下文保護(hù)時(shí),均需要保存。用到硬件浮點(diǎn)的時(shí)候,更是要保存32個(gè)浮點(diǎn)寄存器。

1927392a-5285-11ec-b2e9-dac502259ad0.png

除了上述的寄存器,移植還要關(guān)心的是幾個(gè)csr寄存器mstatus,mepc。正常情況下大部分csr只能在機(jī)器模式下操作(WCH的v3和v4內(nèi)核支持機(jī)器模式和用戶模式)。mstatus中,MIE為中斷使能,當(dāng)進(jìn)中斷時(shí)MPIE更新為MIE,返回時(shí)MIE更新為MPIE。MPP用于保存進(jìn)中斷之前的特權(quán)模式,如果我們?cè)O(shè)置其為MPP=0b11,那么將一直處于機(jī)器模式,其mret返回后還是處于機(jī)器模式。mepc是機(jī)器模式下異常程序指針,其只會(huì)在發(fā)生異常是被更新(中斷也是一類異常),進(jìn)異常時(shí)我們可以從另外兩個(gè)csr寄存器mcause來(lái)看引起異常原因通過(guò)mtval查看引起異常時(shí)的值。當(dāng)從異常返回時(shí)mepc的值被更新給pc。我們正是通過(guò)進(jìn)中斷修改mepc來(lái)實(shí)現(xiàn)任務(wù)的切換的,后面會(huì)詳細(xì)說(shuō)明這個(gè)過(guò)程。

實(shí)時(shí)操作系統(tǒng)大家應(yīng)該不陌生,常見(jiàn)的uCOSFreeRTOSRT-Thread,LiteOS-M等等,其基本的思路都是一樣的,需要一個(gè)定時(shí)器用于系統(tǒng)時(shí)間片的實(shí)現(xiàn),一個(gè)中斷用于任務(wù)切換。想要其能夠在一個(gè)MCU上成功的跑起來(lái),需要弄清除一下幾個(gè)事情:

(1)進(jìn)中斷需要保存哪些內(nèi)容。

從之前的描述中,應(yīng)該知道,對(duì)于risc-v內(nèi)核來(lái)說(shuō)其進(jìn)中斷壓棧的是caller saved的寄存器。從下圖一可以看出,進(jìn)Systick中斷函數(shù),先進(jìn)行寄存器保存,退出中斷時(shí)進(jìn)行寄存器恢復(fù),如果開啟硬件浮點(diǎn),同時(shí)還會(huì)對(duì)浮點(diǎn)寄存器進(jìn)行保存和恢復(fù)。這個(gè)過(guò)程是編譯器幫我們實(shí)現(xiàn),有一點(diǎn)需要注意的是我們移植的代碼里面進(jìn)中斷后獲取了中斷的堆棧“csrrw sp,mscratch,sp”,返回時(shí)恢復(fù)了線程的堆棧指針“csrrw sp,mscratch,sp”中斷堆棧指針初始值是在任務(wù)開始時(shí)存入mscratch寄存器的,如果采用C形式中斷函數(shù),中斷堆棧的獲取會(huì)在壓棧操作之后,中斷壓入的堆棧是當(dāng)前運(yùn)行任務(wù)的任務(wù)堆棧區(qū)域,如果想要中斷函數(shù)壓棧時(shí)壓入的自己的堆棧區(qū)域,可以使用匯編入口,進(jìn)中斷后先修改sp,然后壓棧,再調(diào)用中斷處理函數(shù),如圖二所示。

195e9816-5285-11ec-b2e9-dac502259ad0.png

圖1

19911e30-5285-11ec-b2e9-dac502259ad0.png

圖2

(2)任務(wù)棧需要保存哪些內(nèi)容。

前文說(shuō)過(guò)對(duì)于一個(gè)正常運(yùn)行的程序,切換任務(wù)前,除了x0恒0,x3 gp指針外,其余的寄存器均需要保存,每個(gè)RTOS中都會(huì)定義一個(gè)上下文保存相關(guān)的結(jié)構(gòu)體,這里我們以華為鴻蒙LiteOS_M為例,看一下這個(gè)結(jié)構(gòu)體:

19bcc38c-5285-11ec-b2e9-dac502259ad0.png

圖3在創(chuàng)建任務(wù)的時(shí)候均會(huì)為一個(gè)任務(wù)分配一個(gè)id和堆棧大小并對(duì)這個(gè)堆棧做初始化:

19e7012e-5285-11ec-b2e9-dac502259ad0.png

圖4

1a148090-5285-11ec-b2e9-dac502259ad0.png

圖5任務(wù)創(chuàng)建好了后會(huì)關(guān)聯(lián)一個(gè)根據(jù)任務(wù)id關(guān)聯(lián)一個(gè)任務(wù)控制塊taskCB,總的任務(wù)個(gè)數(shù)是在頭文件中配置的(target_config.h)總的任務(wù)塊的初始化也是在LOS_KernelInit被初始化。

1a3da60a-5285-11ec-b2e9-dac502259ad0.png

圖6從上面可以看出來(lái),task---》taskCB---》sp指針---》memory這樣的路線,而這片memory開始位置用于上下文保存。

這樣的方式在其他RTOS中也可以看到,例如RT-Thread中用于上下文保存的結(jié)構(gòu)體rt_hw_stack_frame,和taskCB類似的結(jié)構(gòu)體rt_thread等。

1a5ddab0-5285-11ec-b2e9-dac502259ad0.png

圖7

1a96f0de-5285-11ec-b2e9-dac502259ad0.png

圖8

(3)如何開啟任務(wù)調(diào)度。

前面看了每個(gè)任務(wù)上下文保存位置,注意到堆棧初始化的時(shí)候把任務(wù)的入口地址給了context-》epc。同時(shí)LiteOS_M源碼中定義了一個(gè)LosTask類型的全局變量g_losTask,其內(nèi)部只有兩個(gè)任務(wù)控制塊指針,一個(gè)指向當(dāng)前運(yùn)行的任務(wù),一個(gè)指向新任務(wù),即要切換至的任務(wù)。

1abe904e-5285-11ec-b2e9-dac502259ad0.png

圖9當(dāng)做好一系列初始化后,LiteOS會(huì)調(diào)用HalStartSchedule來(lái)初始化系統(tǒng)節(jié)拍定時(shí)器,并注冊(cè)系統(tǒng)定時(shí)器的中斷處理函數(shù),然后開始轉(zhuǎn)向執(zhí)行第一個(gè)任務(wù),如下圖所示:

1ad415b8-5285-11ec-b2e9-dac502259ad0.png

圖10其中OsSchedStart函數(shù)從任務(wù)列表中獲取第一個(gè)任務(wù),并賦值給g_losTask里面的runTask和newTask。然后調(diào)用HalStartToRun轉(zhuǎn)向執(zhí)行runTask所指示的任務(wù)。HalStartToRun是一段匯編代碼,下面就具體看其如何切換至runTask,具體如下圖的注釋:

1afc5d3e-5285-11ec-b2e9-dac502259ad0.png

圖11這樣mret之后就轉(zhuǎn)向去執(zhí)行第一個(gè)任務(wù),并且不會(huì)再有返回,因?yàn)槊總€(gè)任務(wù)本身會(huì)是個(gè)循環(huán),這里也就能理解其源碼注釋 never return的含義。

1b282f2c-5285-11ec-b2e9-dac502259ad0.png

圖12其他操作系統(tǒng)中也有類似的操作,例如RT-Thread中有個(gè)rt_hw_context_switch_to函數(shù),其也是匯編代碼實(shí)現(xiàn),它是一個(gè)帶參數(shù)的函數(shù),其傳入的參數(shù)為(&to_thread-》sp),如下圖:

1b4fcd48-5285-11ec-b2e9-dac502259ad0.png

圖13從名字就可以看出,傳遞的參數(shù)為啟動(dòng)執(zhí)行的第一個(gè)線程的控制塊的堆棧指針sp的值,后面賦值mepc,mstatus,其他寄存器等等都是和LiteOS_M一致的。

(4)如何進(jìn)行任務(wù)切換。

了解了如何切換至第一個(gè)任務(wù),那么如何實(shí)現(xiàn)不同任務(wù)之間的切換呢,在這之前我們應(yīng)該都有了解,RTOS是根據(jù)任務(wù)的優(yōu)先級(jí)和時(shí)間片進(jìn)行輪轉(zhuǎn)的,每個(gè)任務(wù)執(zhí)行一段時(shí)間,然后切換至下一個(gè)任務(wù)執(zhí)行。每次切換前我們需要把當(dāng)前任務(wù)的運(yùn)行狀態(tài)進(jìn)行保存,然后切換至新任務(wù),對(duì)其運(yùn)行狀態(tài)進(jìn)行恢復(fù),如此循環(huán)反復(fù),實(shí)現(xiàn)任務(wù)調(diào)度。時(shí)間片實(shí)現(xiàn)使用的是內(nèi)核的SysTick定時(shí)器,LiteOS_M是在los_timer.c中實(shí)現(xiàn)的,這個(gè)只需要根據(jù)實(shí)際硬件的進(jìn)行初始化就行。其他操作系統(tǒng)也是類似,像RT-Thread源碼中我們根據(jù)硬件完成board.c。對(duì)于任務(wù)切換,我們利用內(nèi)核的軟中斷,只要使能該中斷,并且當(dāng)需要切換任務(wù)時(shí),把中斷控制器的對(duì)應(yīng)的pendset位置1,即可觸發(fā)該中斷進(jìn)行任務(wù)切換。下圖是liteOS_M切換過(guò)程:

1b739ac0-5285-11ec-b2e9-dac502259ad0.png

圖14

1b9e9180-5285-11ec-b2e9-dac502259ad0.png

圖15

其他操作系統(tǒng)也是大同小異,具體的區(qū)別僅僅是在切換新任務(wù)時(shí),新任務(wù)如何獲取的問(wèn)題,上圖可以看到LiteOS_M是通過(guò)g_losTask來(lái)管理,RT-Thread中定義了from_thread,to_thread,顧名思義從一個(gè)線程切換至另外一個(gè)線程。

弄清楚以上的問(wèn)題,對(duì)于某一個(gè)RTOS的基本移植來(lái)說(shuō)應(yīng)該就比較明了。

最后移植好的鴻蒙os,RT-Thread等實(shí)時(shí)操作系統(tǒng)的代碼均已在MRS上線,可以直接創(chuàng)建,開發(fā)相關(guān)應(yīng)用

1bca47e4-5285-11ec-b2e9-dac502259ad0.png

原文標(biāo)題:RISC-V MCU開發(fā)實(shí)戰(zhàn) (三):移植鴻蒙OS項(xiàng)目

文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:pj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6859

    瀏覽量

    123501
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1300

    瀏覽量

    40264
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    4475

原文標(biāo)題:RISC-V MCU開發(fā)實(shí)戰(zhàn) (三):移植鴻蒙OS項(xiàng)目

文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙Flutter實(shí)戰(zhàn):14-現(xiàn)有Flutter 項(xiàng)目支持鴻蒙 II

    引言 在之前的文章鴻蒙Flutter實(shí)戰(zhàn):09-現(xiàn)有Flutter項(xiàng)目支持鴻蒙中,介紹了如何改造項(xiàng)目,適配鴻蒙平臺(tái)。 文中講述了整體的理念和
    發(fā)表于 12-26 14:59

    鴻蒙Flutter實(shí)戰(zhàn):09-現(xiàn)有Flutter項(xiàng)目支持鴻蒙

    # 鴻蒙Flutter實(shí)戰(zhàn):現(xiàn)有Flutter項(xiàng)目支持鴻蒙 ## 背景 原來(lái)使用Flutter開發(fā)的項(xiàng)目,需要適配鴻蒙。 ## 環(huán)境搭
    發(fā)表于 10-23 16:36

    深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

    Zephyr是一個(gè)針對(duì)資源受限設(shè)備優(yōu)化的小型、可縮放、多體系架構(gòu)實(shí)時(shí)操作系統(tǒng)(RTOS)。Zephyr由Linux基金會(huì)維護(hù)[1],是一個(gè)以構(gòu)建業(yè)界最佳的RTOS為目標(biāo)的開源合作項(xiàng)目。近年來(lái)
    的頭像 發(fā)表于 10-22 16:47 ?631次閱讀
    深入解析Zephyr <b class='flag-5'>RTOS</b>的技術(shù)細(xì)節(jié)

    將應(yīng)用程序從NoOS SDK移植RTOS SDK遇到異常怎么解決?

    我正在將應(yīng)用程序從 NoOS SDK 移植RTOS SDK。但現(xiàn)在有問(wèn)題了。它得到了致命的異常 28。 問(wèn):context(stack) 通過(guò)espconn_regist_recvcb回調(diào)使用什么? os_timer_set
    發(fā)表于 07-11 07:56

    為什么RTOS SDK的Rom指針比非OS SDK少?

    我不使用 NON-OS SDK,因?yàn)槲腋矚g RTOS 版本。 令我驚訝的是,這些函數(shù)在 RTOS SDK 中不存在。 有人可以告訴我RTOS_SDK中的等效函數(shù)名稱嗎? 為
    發(fā)表于 07-10 07:53

    HDC2024華為發(fā)布鴻蒙原生智能:AI與OS深度融合,開啟全新的AI時(shí)代

    6月21日,華為開發(fā)者大會(huì)2024(HDC.2024)召開。 HarmonyOS NEXT將AI與OS深度融合,構(gòu)筑全新鴻蒙原生智能框架。大會(huì)現(xiàn)場(chǎng),華為常務(wù)董事、終端BG董事長(zhǎng)、智能汽車解決方案BU
    的頭像 發(fā)表于 06-24 09:28 ?654次閱讀
    HDC2024華為發(fā)布<b class='flag-5'>鴻蒙</b>原生智能:AI與<b class='flag-5'>OS</b>深度融合,開啟全新的AI時(shí)代

    移植exmapl,使用時(shí)cy_rtos被阻塞或死線程,為什么?

    我嘗試移植 exmaple(ble_hello_sensor, mfg_test)。 但是,所有項(xiàng)目都存在一些問(wèn)題。 當(dāng)我使用時(shí),可能 cy_rtos 被阻塞或死線程。 因此,我無(wú)法通過(guò) bt_firmware_downlaod
    發(fā)表于 05-22 07:53

    STM32F072怎么移植os

    STM32F072 怎么移植os
    發(fā)表于 05-17 08:22

    鴻蒙OS崛起,鴻蒙應(yīng)用開發(fā)工程師成市場(chǎng)新寵

    應(yīng)用的形態(tài)也在發(fā)生著翻天覆地的變化。作為全球領(lǐng)先的移動(dòng)操作系統(tǒng)和智能終端制造商,華為公司自主研發(fā)的鴻蒙OS應(yīng)運(yùn)而生,致力于構(gòu)建一個(gè)統(tǒng)一的分布式操作系統(tǒng),為各行各業(yè)的應(yīng)用開發(fā)帶來(lái)全新的可能性。 一、鴻蒙
    發(fā)表于 04-29 17:32

    鴻蒙OS實(shí)戰(zhàn):【module的使用】

    在開發(fā)HarmonyOS應(yīng)用時(shí),默認(rèn)創(chuàng)建的工程會(huì)有一個(gè)entry module,實(shí)際應(yīng)用場(chǎng)景為了代碼或者功能解耦,我們需要用到module來(lái)進(jìn)行隔離。根據(jù)鴻蒙3.0/3.1/4.0官方指導(dǎo),我們可以了解到關(guān)于module的類型,以及依賴關(guān)系,本篇文章將詳細(xì)為大家介紹一下m
    的頭像 發(fā)表于 03-26 18:07 ?834次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b>實(shí)戰(zhàn):【module的使用】

    鴻蒙開發(fā)實(shí)戰(zhàn):基于【Markwon】移植和開發(fā)

    項(xiàng)目是基于開源項(xiàng)目**Markwon**進(jìn)行適用harmonyos的移植和開發(fā)的。
    的頭像 發(fā)表于 03-25 16:27 ?851次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)實(shí)戰(zhàn):基于【Markwon】<b class='flag-5'>移植</b>和開發(fā)

    鴻蒙ArkUI【開發(fā)移植Carbon】

    項(xiàng)目是基于開源項(xiàng)目[Carbon]?進(jìn)行harmonyos化的移植和開發(fā)的。
    的頭像 發(fā)表于 03-25 15:41 ?539次閱讀
    <b class='flag-5'>鴻蒙</b>ArkUI【開發(fā)<b class='flag-5'>移植</b>Carbon】

    2024款鴻蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享

    鴻蒙的出現(xiàn),標(biāo)志著中國(guó)科技的崛起。HarmonyOS就是我們說(shuō)的華為鴻蒙系統(tǒng),截止到2023年8月4日已有超過(guò)7億臺(tái)設(shè)備搭載了鴻蒙OS系統(tǒng)。據(jù)多家媒體報(bào)道,2024年國(guó)內(nèi)有21所985
    發(fā)表于 02-28 10:29

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:Hi3861鴻蒙開發(fā)板及入門常見(jiàn)問(wèn)題解答

    華清遠(yuǎn)見(jiàn)20歲了~過(guò)去3年里,華清遠(yuǎn)見(jiàn)研發(fā)中心針對(duì)個(gè)人開發(fā)板業(yè)務(wù),打造了多款硬件+項(xiàng)目學(xué)習(xí)套件,涉及STM32單片機(jī)、嵌入式、物聯(lián)網(wǎng)、人工智能、鴻蒙、ESP32、阿里云IoT等多技術(shù)方向。 今天我們
    發(fā)表于 02-01 16:55

    鴻蒙OS和開源鴻蒙什么關(guān)系?

    內(nèi)核,其他功能都以模塊的形式存在。 ? ? 華為用的是鴻蒙OS 我們都知道,華為手機(jī)的鴻蒙OS是可以運(yùn)行安卓軟件的,是因?yàn)橄到y(tǒng)中有安卓兼容層,所以可以簡(jiǎn)單這么理解:
    的頭像 發(fā)表于 01-30 15:44 ?1189次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b>和開源<b class='flag-5'>鴻蒙</b>什么關(guān)系?
    主站蜘蛛池模板: 泰剧天堂| 国产伦精品一区二区三区在线观看| 女人扒开腿让男人桶到爽| 日本aaaaa毛片动漫| 在线观看h视频| 免费人成网ww777kkk手机| 亚洲综合涩| 黄网站视频观看免费| 亚洲人成电影| 手机在线电影你懂的| 欧美日韩看片| 四虎在线电影| 欧美一欧美一区二三区性| 四虎影视在线观看| 色wwwww| 18免费视频| 完整日本特级毛片| 欧美潘金莲一级风流片a级| 国内在线观看精品免费视频| 77788色淫免费网站视频| 免费午夜网站| 人人爽影院| 91视频毛片| 日韩久久精品视频| 国产综合图片| 手机在线看| 男人搡女人视频免费看| tom影院亚洲国产日本一区| 手机在线观看毛片| 国内精品视频在线| 天天操夜夜操狠狠操| 啪啪午夜免费| 淫性视频| 午夜黄色福利| 免费精品一区二区三区在线观看| 女人被免费网站视频在线| 成年男人永久免费看片| 免费观看黄a一级视频| 一本到卡二卡三卡四卡| 天天摸夜夜摸夜夜狠狠摸| 黄色毛片播放|