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

        ?

        支持MIPS 架構(gòu)的輕量型開源鴻蒙系統(tǒng)移植

        2023-12-16 10:28:58王一泠安軍社
        計算機工程 2023年12期
        關鍵詞:輕量龍芯內(nèi)核

        王一泠,吳 琦,安軍社

        (1.中國科學院國家空間科學中心 復雜航天系統(tǒng)電子信息技術重點實驗室,北京 100190;2.中國科學院大學 計算機科學與技術學院,北京 100049)

        0 概述

        航天型號嵌入式軟件固化在航天星載計算機中,與硬件關系密切,協(xié)同完成特定功能[1]??臻g環(huán)境的復雜性導致航天器軟硬件故障發(fā)生的可能性隨著系統(tǒng)的復雜程度激增[2],同時航天載荷需要不間斷地采集處理空間實時數(shù)據(jù)并對海量歷史數(shù)據(jù)進行查詢[3],當軟件任務啟動后,就不能直接對航天器嵌入式設備進行維護[4]。

        為了提高系統(tǒng)可靠性,除了常規(guī)應用星載系統(tǒng)備份冗余等機制[2]外,空間數(shù)據(jù)系統(tǒng)咨詢委員會(the Consultative Committee for Space Data Systems,CCSDS)高級在軌系統(tǒng)標準定義的分布式架構(gòu)也具有一定參考意義[5]。將這種分布式架構(gòu)應用在星載計算機系統(tǒng)上,使得星載地球敏感器、磁強計、太陽敏感器、星敏感器、熱控傳感器等通過導線與接插件連接低成本且具備OS 的輕型航天計算終端,再通過終端與具有處理海量數(shù)據(jù)和復雜任務能力的高性能中心計算機通信。當終端設備出現(xiàn)不可恢復的故障時,因其無需對數(shù)據(jù)進行保存,所以不會對星載數(shù)據(jù)中心計算機產(chǎn)生影響,在有效降低成本的同時也提高了系統(tǒng)整體可靠性。作為系統(tǒng)典型節(jié)點之一的航天器控制終端[5]是一種類瘦終端[6-8]的宇航級終端,具有小體積、低功耗、輕量型的特點,并具備OS、CPU 及運算處理能力,能夠提供I/O 設備接口以及與服務器端的網(wǎng)絡通信等功能,適用于以數(shù)據(jù)、服務器為中心的分布式計算模式,且因終端具備OS,能夠通過統(tǒng)一的接口實現(xiàn)軟硬件解耦,從固化在硬件的定制化嵌入式軟件轉(zhuǎn)向針對航天應用需求、快速迭代升級的軟件[9],并具有多任務處理能力和通過配置適應多協(xié)議環(huán)境的能力。鑒于這些優(yōu)勢,航空航天領域的類瘦終端分布式架構(gòu)應用具有廣闊前景,但目前宇航級終端處理器上輕量且自主可控的操作系統(tǒng)缺失成為這種分布式架構(gòu)在國內(nèi)航天領域部署應用的瓶頸。

        對國外的軟硬件平臺長期依賴,致使系統(tǒng)和數(shù)據(jù)不自主可控的問題日益顯現(xiàn)[10],發(fā)展自主CPU 與操作系統(tǒng),構(gòu)建自主可控的信息技術體系,成為航天裝備發(fā)展的目標[11]。美國風河公司推出的VxWorks嵌入式實時操作系統(tǒng)(Real-Time Operation System,RTOS)具有高實時性、低功耗、高性能、可裁剪等特點[12-14],被廣泛應用于國內(nèi)航天型號任務。OpenHarmony 作為國產(chǎn)操作系統(tǒng)支持多內(nèi)核,可在小型資源受限的設備上選擇以LiteOS-M 為內(nèi)核的輕量型實時子系統(tǒng),具有實時性高、可靠性高、裁剪體積小的特點[15-17],且具有豐富的功能組件,相較于VxWorks 可被裁剪得更小以適配資源更為受限的控制終端。2022 年,深圳軟通動力信息技術股份有限公司[18]實現(xiàn)了龍芯自研指令集LoongArch 架構(gòu)的龍芯2K1000LA 處理器與開源鴻蒙系統(tǒng)的兼容適配,但其適配的是基于OpenHarmony 多內(nèi)核之一的Linux 內(nèi)核,而非輕量型實時內(nèi)核LiteOS-M。在目前OpenHarmony LiteOS-M 內(nèi)核實時系統(tǒng)僅支持ARM、RISC-V 等架構(gòu)的情況下,對于該公司專為航天空間應用研制的LS1J 與LS1C 等高可靠性、低功耗、輕量型熱控處理器芯片,因采用的是龍芯CPU 原指令系統(tǒng)MIPS 架構(gòu)[19],尚未被開源鴻蒙系統(tǒng)支持。

        本文對開源鴻蒙輕量型LiteOS-M 內(nèi)核與MIPS體系結(jié)構(gòu)進行介紹與分析,針對我國航空航天領域類瘦終端的輕量型實時操作系統(tǒng)的缺失與信息技術體系不完全自主可控的問題,提出支持MIPS 架構(gòu)的OpenHarmony 輕量實時系統(tǒng)移植方案,并在MIPS 架構(gòu)宇航級控制終端龍芯LS1J 與LS1C 硬件平臺上驗證系統(tǒng)適配的可行性。

        1 相關技術

        1.1 OpenHarmony 多內(nèi)核技術

        OpenHarmony 采用多內(nèi)核設計,利用內(nèi)核抽象層(Kernel Abstraction Layer,KAL)屏蔽多內(nèi)核差異,對系統(tǒng)上層提供基礎的內(nèi)核能力,包括進程/線程管理、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡管理和外設管理等。

        OpenHarmony 支持輕量實時系統(tǒng)、小型系統(tǒng)和標準系統(tǒng)3 種系統(tǒng)類型,可針對不同應用場景與硬件資源選用合適的系統(tǒng)內(nèi)核。輕量實時子系統(tǒng)LiteOS-M 內(nèi)核面向MCU 類處理器,適用于ARM Cortex-M 平臺,是開源鴻蒙面向IoT 領域資源極小設備的實時系統(tǒng),應用在傳感器終端及穿戴類設備上。小型系統(tǒng)LiteOS-A 內(nèi)核適用于ARM Cortext-A平臺,是支持MMU 的非實時系統(tǒng),要求應用設備最小內(nèi)存達到1 MB 以上,應用于智能家居領域的IP Camera、路由器等終端。標準系統(tǒng)Linux 內(nèi)核是基于安卓開放源代碼項目(Android Open Source Project,AOSP)進行改良的分時操作系統(tǒng),要求應用設備最小內(nèi)存達到128 MB 以上,可以提供增強的交互能力及硬件資源合成能力,應用于高端冰箱顯示屏、平板等智能終端。

        由于星載小型化控制終端資源十分受限且對實時性要求較高,因此選用開源鴻蒙以LiteOS-M 為內(nèi)核的輕量實時子系統(tǒng)完成MIPS 架構(gòu)適配。

        LiteOS-M 是開源鴻蒙輕量型操作系統(tǒng)內(nèi)核,自下而上由硬件抽象層(Hardware Abstraction Layer,HAL)、內(nèi)核功能層、增強組件層和標準應用接口層組成。LiteOS-M 內(nèi)核架構(gòu)[15]如圖1 所示。

        圖1 LiteOS-M 內(nèi)核架構(gòu)Fig.1 LiteOS-M kernel architecture

        1)HAL。HAL 屏蔽了硬件平臺的差異,給上層提供硬件無關的統(tǒng)一操控接口,實現(xiàn)系統(tǒng)與芯片的解耦,具有可移植性。系統(tǒng)移植主要是HAL 移植,包括體系結(jié)構(gòu)抽象層、變體抽象層與平臺抽象層。體系結(jié)構(gòu)抽象層即針對不同處理器的不同體系結(jié)構(gòu),如ARM、MIPS 系列等,對中斷異常及上下文切換進行差異屏蔽;變體抽象層指該類處理器所具有的特殊性,包括Cache、MMU、FPU 等;平臺抽象層指對當前系統(tǒng)的硬件平臺進行抽象,包括平臺啟動、芯片配置、外設I/O 寄存器訪問以及中斷控制等[20]。實現(xiàn)該層的函數(shù)可根據(jù)實際的功能需求調(diào)用板級支持包(Board Support Package,BSP)中的函數(shù)。

        2)基礎內(nèi)核?;A內(nèi)核提供任務管理、內(nèi)存管理、時間管理、中斷控制、進程間通信(Inter-Process Communication,IPC)等功能。移植工作的基本任務是適配系統(tǒng)內(nèi)核與硬件相關部分的功能,保障系統(tǒng)內(nèi)核基礎功能的完整性。

        3)內(nèi)核功能增強組件層。配置組件啟用相應功能,LiteOS-M 內(nèi)核可配置包括文件系統(tǒng)、網(wǎng)絡與調(diào)測工具等組件。另外,可依據(jù)移植平臺應用場景配置低功耗框架組件來降低功耗,配置Trace 回溯組件與ExcHook 組件輔助開發(fā)工作。

        4)KAL。內(nèi)核抽象層向上層應用層提供CMSIS、POSIX 標準接口支持,對內(nèi)核提供功能抽象封裝,屏蔽多內(nèi)核差異。

        1.2 MIPS 架構(gòu)

        1.2.1 MIPS 與龍芯

        MIPS 作為最早的商業(yè)精簡指令集計算機(Reduced Instruction Set Computer,RISC)設計架構(gòu)芯片之一,其機制是盡量利用軟件避免流水線中的數(shù)據(jù)相關問題,與復雜指令系統(tǒng)計算結(jié)構(gòu)相比設計周期更短[21]。

        中國科學院計算技術研究所購買了MIPS 指令授權,自主研發(fā)了低功耗、低成本和完全自主知識產(chǎn)權的龍芯系列CPU,主要應用于嵌入式防火墻、嵌入式網(wǎng)關等低端嵌入式領域以及航空航天等特殊應用環(huán) 境。2020 年,龍芯團 隊[22-23]獨立研 制LoongArch龍架構(gòu)。MIPS 與LoongArch 架構(gòu)都是基于RISC 設計的處理器架構(gòu),但在指令集、寄存器約定、存儲器地址映射、中斷及異常、指令集擴展與執(zhí)行效率等方面存在較大差異。目前,支持LoongArch 的龍芯3A500 處理器芯片已經(jīng)成功量產(chǎn),但在航空航天領域,仍舊大量使用龍芯處理器原兼容指令系統(tǒng)MIPS架構(gòu)的成熟產(chǎn)品。

        1.2.2 MIPS 架構(gòu)寄存器

        MIPS 架構(gòu)處理器通常具有通用寄存器、特殊寄存器、CP0 協(xié)處理器3 種寄存器類型。在通用寄存器中,a0~a3 一般用來保存函數(shù)形參,s0~s7 保存靜態(tài)數(shù)據(jù),t0~t9 保存臨時數(shù)據(jù)。R28(GP)保存全局指針用于MIPS 小數(shù)據(jù)區(qū)變量的訪問[24]。R29(SP)作為堆棧指針寄存器,指向系統(tǒng)主堆?;蛉蝿諚?。R31(RA)保存函數(shù)返回地址。特殊寄存器HI/LO 用于存儲整數(shù)乘除和累加計算操作的中間結(jié)果。PC 寄存器對程序員透明不可用,當發(fā)生精確異常時將當前地址記錄在實際的寄存器EPC 中。MIPS 架構(gòu)CP0 協(xié)處理器提供的重要系統(tǒng)控制寄存器名稱與功能如表1 所示。

        表1 MIPS 架構(gòu)CP0 協(xié)處理器重要寄存器及其功能Table 1 Important registers and their functions of MIPS architecture CP0 coprocessor

        1.3 關鍵技術分析

        系統(tǒng)移植適配工作主要是針對HAL、基礎內(nèi)核硬件相關部分的移植。開源鴻蒙不支持龍芯處理器的MIPS 架構(gòu),而MIPS 架構(gòu)與LiteOS-M 內(nèi)核支持的ARM、RISC-V 架構(gòu)之間又具有較大差異,因此對于新的體系結(jié)構(gòu),硬件抽象層的建立具有一定難度。架構(gòu)移植工作需要根據(jù)LiteOS-M 內(nèi)核功能、工程構(gòu)建、MIPS 架構(gòu)與龍芯硬件平臺的特點,設計包括引導程序啟動加載、系統(tǒng)任務管理、上下文切換、啟動任務調(diào)度、異常與中斷處理、系統(tǒng)時鐘6 個關鍵執(zhí)行環(huán)節(jié)。除此之外,移植工作還需完成和硬件處理器存儲資源適配的內(nèi)核裁剪、架構(gòu)工具鏈搭建與BSP開發(fā)等工作。

        2 系統(tǒng)MIPS 架構(gòu)移植設計方案

        下面對加載程序引導、任務管理、上下文切換、任務調(diào)度啟動、異常與中斷處理、系統(tǒng)時鐘6 個移植關鍵環(huán)節(jié)給出設計方案與實現(xiàn)流程。

        2.1 加載程序引導

        BootLoader 引導代碼是操作系統(tǒng)運行前執(zhí)行的一段匯編啟動程序,幫助系統(tǒng)完成啟動前的軟硬件初始化,為最終引導操作系統(tǒng)提供合適的環(huán)境。移植引導代碼首先需要指定硬件FLASH 偏移位置的異常入口并初始化啟動時異常處理向量,確保在啟動出錯時正確調(diào)用異常處理程序,同時設置主堆棧(SP)、全局指針寄存器(GP)保證能夠訪問到主堆棧與MIPS 架構(gòu)特有的.sdata 小數(shù)據(jù)區(qū)。接著初始化通用寄存器與CP0 協(xié)處理器,完成必要的硬件初始化后,再將.data 段從FLASH 中搬運到SRAM 并清空未初始化的全局變量.bss 段。最后跳轉(zhuǎn)至系統(tǒng)初始化入口。引導程序設計流程如圖2 所示。

        圖2 引導程序設計流程Fig.2 Design process of guided program

        2.2 任務管理

        任務管理功能是航天嵌入式實時操作系統(tǒng)的關鍵組成部分,是整個系統(tǒng)安全、可靠、高效運行的基礎。任務管理包括任務的創(chuàng)建、刪除、延時、狀態(tài)控制與轉(zhuǎn)換、優(yōu)先級配置等功能。OpenHarmony 輕量實時系統(tǒng)中每個任務都是執(zhí)行程序的一個實例,都有唯一的TaskID 與LosTaskCB 任務控制塊描述符與之對應。LosTaskCB 結(jié)構(gòu)體標識了任務在生命周期內(nèi)的運行情況。由于航天任務通常具有嚴格的實時性要求,在多任務并發(fā)且單核的情況下,內(nèi)核采用優(yōu)先級搶占式調(diào)度機制引起任務上下文發(fā)生切換,避免任務因為等待或者競爭資源而出現(xiàn)延遲或丟失的情況。

        在OpenHarmony 實時系統(tǒng)LiteOS-M 內(nèi)核中,任務共有32 個優(yōu)先級(0~31),優(yōu)先級數(shù)值越低對應優(yōu)先級別越高,高優(yōu)先級的任務可以搶占低優(yōu)先級任務當前占有的CPU。在發(fā)生任務調(diào)度時,優(yōu)先執(zhí)行任務就緒隊列中最高優(yōu)先級的任務。任務就緒隊列可以方便地支持任務基于優(yōu)先級進行調(diào)度。如圖3所示,LiteOS-M 內(nèi)核就緒隊列由一個雙向循環(huán)鏈表數(shù)組管理,每個數(shù)組元素都是一個LOS_DL_LIST 雙向循環(huán)鏈表,通過任務描述符LosTaskCB 中的pendList 成員相互掛接,從而能夠快速定位同一優(yōu)先級的任務。g_losPriorityQueueList 任務就緒隊列數(shù)組長度對應了系統(tǒng)優(yōu)先級個數(shù)。

        圖3 任務優(yōu)先級就緒隊列與優(yōu)先級位圖Fig.3 Task priority ready queue and priority bitmap

        g_priQueueBitmap 優(yōu)先級位圖標識了任務就緒隊列中已掛載的就緒任務所在的優(yōu)先級。當時間片到期發(fā)生任務調(diào)度時,遍歷位圖的32 位能快速找到就緒隊列中最高優(yōu)先級所在的雙向循環(huán)鏈表,從而高效地定位就緒隊列中最高優(yōu)先級的任務。優(yōu)先級位圖比特位與任務優(yōu)先級的關系如式(1)所示:

        其中:PPRIORITYNUM在系統(tǒng)中默認被設定為31。比特值為0 標識對應優(yōu)先級下無就緒任務,比特值為1 反之。通過執(zhí)行CLZ 指令計算位圖最高符號位與第1 個1 之間的0 的個數(shù),當?shù)玫轿粓D比特值標識為30 時,計算得到任務優(yōu)先級為1。之后,從g_losPriorityQueueList 數(shù)組下標為1 的雙向循環(huán)隊列位置找到隊頭任務的LosTaskCB,即為時間片到期后發(fā)生調(diào)度的切入任務的任務描述符。

        在MIPS 架構(gòu)移植過程中,在上下文切換、啟動調(diào)度時將切入首任務作為系統(tǒng)調(diào)度的關鍵環(huán)節(jié),下文展開說明兩者在實時內(nèi)核MIPS 架構(gòu)移植過程中的適配設計與重要HAL 接口實現(xiàn)。

        2.3 上下文切換

        任務切換過程主要包括獲取就緒隊列中最高優(yōu)先級任務、保存切出任務上下文、恢復切入任務上下文等動作。任務上下文是任務在運行過程中使用的寄存器等資源,在任務切換時需要保存與恢復任務對應的上下文來保障系統(tǒng)的正常運行。依據(jù)MIPS架構(gòu)并對照任務現(xiàn)場的保存與恢復過程,嚴格遵守O32 ABI 規(guī)范并兼顧硬件上下文保存與恢復效率,設計如下代碼駐存在任務棧棧底的上下文TaskContext結(jié)構(gòu)體中:

        在任務運行中發(fā)生函數(shù)調(diào)用時的局部變量、形參、任務上下文等重要信息都需要存放在任務棧中。LiteOS-M 任務棧為滿遞減棧,分為主堆棧和任務棧兩種類型[25]。主堆棧在引導程序文件中設置,在內(nèi)存中預留出主堆棧占用空間,并將主堆棧起始地址stack 加載至SP 寄存器中。任務棧大小是在用戶創(chuàng)建任務時配置并在運行過程中由動態(tài)內(nèi)存分配函數(shù)LOS_MemAllocAlign 分配,之后調(diào)用HAL 提供的接口HalTskStackInit 函數(shù)實現(xiàn)初始化。該函數(shù)接口需結(jié)合MIPS 架構(gòu)設計與實現(xiàn),MIPS 架構(gòu)下HAL 任務棧初始化設計示意圖如圖4 所示。初始化任務棧,首先需要將棧大小空間內(nèi)存中的內(nèi)容初始化為OS_TASK_STACK_INIT(即0xCACACACA)、棧頂初始化為溢出標識OS_TASK_MAGIC_WORD(即0xCCCCCCCC)。之后在任務棧底分配任務上下文的內(nèi)存空間,用于當前任務上下文的保存。

        圖4 MIPS 架構(gòu)下任務棧初始化設計Fig.4 Design of task stack initialization under MIPS architecture

        HAL 任務棧初始化還需指定初始值賦給任務棧中上下文保存的寄存器域。依據(jù)MIPS 架構(gòu)寄存器功能約定,HAL 任務棧各個寄存器域的初始值設置如表2 所示。

        表2 HAL 任務棧上下文初始值設置Table 2 Setting of initial values of HAL task stack context

        在MIPS 架構(gòu)下:任務棧初始化SP 域值為任務棧上下文的地址context,指向駐存在當前棧底的任務上下文結(jié)構(gòu)體TaskContext;函數(shù)調(diào)用參數(shù)寄存器a0 域保存初始值為任務唯一標識號taskID;GP 初始值設定直接讀取鏈接時設置好的GP 寄存器值;RA域初始值設置為HAL 任務退出函數(shù)HalSysExit;FP域保存棧幀指針偏移為0x0。除上述寄存器外,其他通用寄存器初始值不重要,因此統(tǒng)一設置為??臻g默認值。初始化CP0 協(xié)處理器狀態(tài)寄存器status 值為ST0_IE|ST0_CU0|ST0_IM,意圖在初始時使能中斷、協(xié)處理器,并允許任何中斷源活動時產(chǎn)生異常。任務棧上下文中cause 寄存器域通過讀取當下真實的cause 寄存器值完成初始化。初始化EPC 寄存器域為任務入口函數(shù)OsTaskEntry,是實現(xiàn)首任務切入的前提。

        LosTaskCB 中stackPointer 指針成員變量指向其任務棧的任務上下文,stackTop 成員變量標識任務棧棧頂。g_losTask 是任務調(diào)度中關鍵的全局變量,標識內(nèi)核相關進程信息,其中runTask 指針成員和newTask 指針成員分別指向當前運行任務的任務描述符和即將發(fā)生調(diào)度切入任務的任務描述符。通過各自任務描述符找到任務棧指針和棧頂。這些數(shù)據(jù)結(jié)構(gòu)與任務棧之間的關系如圖5 所示,因此內(nèi)核可以方便地進行任務切換。

        圖5 上下文切換時任務棧數(shù)據(jù)結(jié)構(gòu)關系Fig.5 Data structure relation of task stack during context switching

        在任務運行過程中,不論是處于事件讀寫、互斥鎖、信號量等資源阻塞的情況下主動發(fā)生調(diào)度,還是時間片到期觸發(fā)被動調(diào)度或是中斷處理結(jié)束檢查全局調(diào)度標識為真值時,都會引發(fā)上下文切換。

        先保存當前任務上下文,再將指針runTask 指向切入任務硬件上下文,使得切入任務得以順利執(zhí)行。實現(xiàn)與上下文結(jié)構(gòu)體相關的HalTaskContextSwitch匯編函數(shù),通過將runTask 指向的任務描述符切換成newTask 指向的任務描述符完成任務切換。任務切換詳細設計流程如圖6 所示。

        圖6 任務切換設計流程Fig.6 Design process of task switching

        2.4 任務調(diào)度啟動

        系統(tǒng)執(zhí)行LOS_Start 函數(shù)開啟調(diào)度,獲取當前系統(tǒng)優(yōu)先級最高的就緒任務作為首任務,對該任務只需恢復其任務上下文。

        首任務切入是通過調(diào)用HAL 接口HalStartToRun實現(xiàn)。在ARM 架構(gòu)下,HalTskStackInit 函數(shù)使用任務入口地址OsTaskEntry 初始化PC 寄存器,因此執(zhí)行HalStartToRun 時會恢復任務上下文,即依據(jù)初始設定的上下文保存值一一對應恢復至寄存器中,依據(jù)PC 直接實現(xiàn)首任務的切入。但在MIPS 架構(gòu)PC寄存器對程序員透明的情況下,不能通過對PC 賦值進行地址跳轉(zhuǎn),因此無法采用這種方式。

        鑒于上述情況,需結(jié)合MIPS 架構(gòu)設計一種首任務切入方式。EPC 作為能夠?qū)崿F(xiàn)地址跳轉(zhuǎn)的協(xié)處理器寄存器,通常用來保存MIPS 架構(gòu)中發(fā)生精確異常的地址。EPC 寄存器常見的應用情形是:在中斷或異常處理函數(shù)執(zhí)行后,MIPS 架構(gòu)通常應用ERET 指令從協(xié)處理器EPC 寄存器中取出重新執(zhí)行指令地址,從該地址處繼續(xù)取指執(zhí)行。另外,在用戶程序需要使用內(nèi)核提供的服務時會發(fā)生系統(tǒng)調(diào)用,也由ERET 指令實現(xiàn)從內(nèi)核態(tài)到用戶態(tài)的切換。因此在設計任務切入時,將任務入口OsTaskEntry 在任務棧初始化時賦值給上下文中的EPC 寄存器域,在調(diào)用HAL 接口HalStartToRun 恢復上下文時采用ERET指令實現(xiàn)地址跳轉(zhuǎn)與處理器狀態(tài)切換,從而起到類似于ARM 架構(gòu)下的跳轉(zhuǎn)至PC 執(zhí)行一樣的作用,使得設定的任務函數(shù)能夠執(zhí)行。

        HalStartToRun 函數(shù)將切入任務描述符LosTaskCB中的棧指針成員變量stackPointer 加載到SP 寄存器中并恢復任務上下文。最后通過MIPS 的eret 指令實現(xiàn)將EPC 中保存值作為當前程序執(zhí)行地址,即可通過硬件切入首任務執(zhí)行入口。另外,還需將任務描述符LosTaskCB 中描述任務狀態(tài)信息的成員變量taskStatus 修改為運行狀態(tài)。MIPS 架構(gòu)下HAL 開啟調(diào)度并切入首任務的HalStartToRun 核心匯編代碼具體如下:

        2.5 異常與中斷處理

        異常處理是CPU 根據(jù)內(nèi)部或外部的異常事件從正常執(zhí)行的程序轉(zhuǎn)入處理特定的異常服務程序。MIPS 架構(gòu)將中斷歸為異常的一種。

        結(jié)合MIPS 架構(gòu)與LiteOS-M 內(nèi)核,設計一種異常與中斷處理方法。當異常發(fā)生時,首先跳轉(zhuǎn)至固定地址的異常入口general_excption 函數(shù),該函數(shù)取出協(xié)處理器Cause寄存器中的ExcCode域判斷異常類型,并計算偏移量從而跳轉(zhuǎn)入異常向量表中對應的異常處理函數(shù)。MIPS 架構(gòu)下異常向量表Exception_handler 如圖7 所示。

        圖7 MIPS 架構(gòu)下異常向量表設計Fig.7 Design of exception vector table under MIPS architecture

        ExCode 域值為0 標識中斷發(fā)生。對于中斷的處理,內(nèi)核提供了g_hwiForm 與g_hwiHandlerForm兩個函數(shù)指針數(shù)組來管理。首先,經(jīng)過上述異常處理步驟后執(zhí)行中斷處理程序HalInterrupt 函數(shù),保存被打斷任務的上下文到堆棧中。接著,根據(jù)MIPS 架構(gòu)CP0 協(xié)處理器status 寄存器與cause 寄存器掩碼CR.IPMASK 與SR.IPMASK 對中斷類型進行判定獲得中斷號,依據(jù)中斷號從g_hwiForm 中取出對處理例程前后附加定制化處理操作的函數(shù)。然后,通過hwiHandlerForm 函數(shù)跳轉(zhuǎn)至用戶通過LOS_HwiCreate函數(shù)注冊的中斷服務。最后,完成中斷處理后恢復現(xiàn)場并返回。

        異常與中斷的移植工作主要包括異常向量表與中斷向量表初始化、異常入口處理函數(shù)實現(xiàn)、異常與中斷服務函數(shù)實現(xiàn),并針對上文提到的系統(tǒng)異常與中斷HAL 接口函數(shù)進行MIPS 架構(gòu)下的設計與實現(xiàn)。

        2.6 系統(tǒng)時鐘

        系統(tǒng)systick 時鐘在target_config.h 文件中配置為1 ms。通過實現(xiàn)內(nèi)核抽象層HalTickStart 函數(shù)完成時鐘的初始化,包括時鐘配置、時鐘中斷掛接等。由表1 可知,協(xié)處理器的Count 與Compare 寄存器配合使用,實現(xiàn)一個處理器內(nèi)部高精度定時器及定時中斷。Compare 寄存器存放的值在寫入后保持不變,與自增的Count 寄存器進行比較,兩者相等則觸發(fā)計時器中斷。在時鐘中斷處理函數(shù)中,執(zhí)行系統(tǒng)全局時鐘計數(shù)的自增、清中斷以及判斷定時任務是否到期主動發(fā)生調(diào)度的操作。通過軟件寫Compare寄存器實現(xiàn)清除CPU 定時器中斷的操作。除此之外,系統(tǒng)時鐘部分的移植工作還需實現(xiàn)Cycle 與Tick之間的轉(zhuǎn)換、微秒與毫秒之間的轉(zhuǎn)換等輔助函數(shù)。

        3 系統(tǒng)編譯與部署

        3.1 硬件平臺

        實驗選取MIPS 架構(gòu)星載控制終端LS1J 與LS1C 作為硬件平臺。LS1J 主頻10 MHz,具有32 KB NOR FLASH,8 KB SRAM,集成了中斷控制器、定時器、串口控制器、SPI 控制器、AD/DA 等功能模塊。LS1C 相較LS1J 資源豐富,能夠?qū)崿F(xiàn)較為復雜的數(shù)據(jù)處理,主頻最高可達240 MHz,具有128 MB FLASH,64 MB SDRAM,包含硬件浮點處理單元,提供豐富的外設接口及片上模塊。LS1J 與LS1C 硬件環(huán)境搭建分別如圖8 與圖9 所示。

        圖8 LS1J 實驗環(huán)境Fig.8 LS1J experimental environment

        圖9 LS1C 實驗環(huán)境Fig.9 LS1C experimental environment

        3.2 移植操作

        如表3 所示,架構(gòu)移植工作增加的源碼主要在arch 和device 目錄下,其 中MIPS 架構(gòu)的HAL 實現(xiàn)代碼位于arch 目錄。硬件平臺相關BSP 部署在device 目錄下,且在device 目錄下創(chuàng)建IPC 模塊、時鐘模塊、硬中斷模塊等系統(tǒng)模塊的資源配置文件target_config.h,并創(chuàng)建Makefile 文件定義編譯鏈接規(guī)則。最后新增APP 工程目錄,調(diào)用內(nèi)核API 接口實現(xiàn)測試用例的設計。

        表3 關鍵移植操作Table 3 Key porting operations

        3.3 編譯環(huán)節(jié)

        編譯工作在Ubuntu 20.04 下進行,使用龍芯提供的mips-mti-elf-gcc 交叉編譯平臺。

        受限于LS1J 片上極小的存儲資源,對系統(tǒng)進行函數(shù)級裁剪并且在編譯過程中調(diào)整編譯選項實現(xiàn)空間優(yōu)化。在編譯時,使用-ffunction-sections 選項將每個函數(shù)放在單獨的section 中,并使用-mno-abicalls選項避免輸出.abicalls、.cpload 等偽指令。鏈接ld 選項使用--gc-section 不鏈接未使用函數(shù)生成的section,從而滿足硬件空間對映像大小的約束。編譯出的LS1J 系統(tǒng)映像各段占用的FLASH 空間情況如表4 所示,滿足硬件空間約束。

        表4 LS1J 系統(tǒng)映像各段占用的FLASH 空間Table 4 FLASH space occupied by each section of the LS1J system image 單位:Byte

        LS1C 因存儲資源較大,為便于調(diào)試可選擇支持?;厮萁M件,其編譯情況如圖10 所示。

        圖10 LS1C 編譯情況Fig.10 LS1C compilation status

        將生成的可執(zhí)行鏡像通過龍芯提供的GDB 與EJTAG 等工具分別對應下載到兩種開發(fā)板中進行調(diào)試,在系統(tǒng)啟動后,通過串口在上位機putty 工具中輸出系統(tǒng)打印信息。

        4 驗證與測試

        經(jīng)過實際應用后發(fā)現(xiàn)LS1J 硬件較為特殊,不支持異常與中斷入口動態(tài)跳轉(zhuǎn),致使中斷發(fā)生后不能跳轉(zhuǎn)至系統(tǒng)用戶通過內(nèi)核系統(tǒng)函數(shù)注冊的中斷服務,只能將處理代碼在引導程序中使用匯編指令固化在FLASH 中硬件指定的偏移位置。下面針對龍芯MIPS 架構(gòu)更具普適性的LS1C 處理器的移植結(jié)果進行測試與驗證,對系統(tǒng)運行功能、實時性能進行分析與說明。

        4.1 系統(tǒng)運行

        LOS_KernelInit 函數(shù)實現(xiàn)系統(tǒng)啟動后內(nèi)核基礎模塊的初始化,其中包括內(nèi)存、中斷、時鐘、任務、IPC和IDLE 任務創(chuàng)建等,還可通過配置組件實現(xiàn)?;厮?、任務監(jiān)控等模塊的初始化。為了驗證系統(tǒng)的基礎功能運行的正確性,自定義main 函數(shù)設計測試用例如下:

        1)創(chuàng)建任務優(yōu)先級為6 的任務Task 1,任務體循環(huán)執(zhí)行打印輸出TaskSampleEntry1,并調(diào)用LOS_TaskDelay 主動阻塞延時0.5 s。

        2)創(chuàng)建任務優(yōu)先級為7 的任務Task 2,任務循環(huán)執(zhí)行打印輸出TaskSampleEntry2,并調(diào)用LOS_TaskDelay 主動阻塞延時2 s。

        測試用例運行結(jié)果如圖11 所示,驗證系統(tǒng)的基礎功能運行符合預期。由于OpenHarmony LiteOS-M內(nèi)核優(yōu)先級數(shù)值越低代表優(yōu)先級越高,Task 1 優(yōu)先級為6,小于Task 2 的任務優(yōu)先級7,因此Task 1 會比Task 2 更先搶占CPU。測試用例設計Task 1 時延為0.5 s,Task 2 時延為2 s,因此在Task 2 長時延 中,Task 2 會放棄搶占CPU,發(fā)生任務調(diào)度執(zhí)行Task 1,因此Task 1 執(zhí)行次數(shù)較Task 2 更多。

        圖11 測試用例運行結(jié)果Fig.11 Test case running result

        4.2 實時性能

        任務切換時間和中斷響應時間是影響操作系統(tǒng)性能的最重要因素,也是RTOS 實時性能的重要指標。利用高精度系統(tǒng)時鐘,分別在測量指標相關執(zhí)行節(jié)點的入口和出口處標記時間戳,時間戳之差即被測操作所需時間[2627]。

        上下文切換時間被定義為系統(tǒng)在兩個相互獨立且相同優(yōu)先級的就緒任務之間切換所需要的時間[28],反映了任務切換的速度。這段時間主要包括保存當前被切出任務上下文所需的時間、OS 調(diào)度選擇新任務的時間以及恢復即將切入新任務上下文所需時間3 個部分,故任務的切換時間取決于系統(tǒng)任務調(diào)度策略和上下文結(jié)構(gòu)體大小。

        航天輕量型實時終端的具體配置和運行任務數(shù)目依據(jù)不同的任務需求存在差異,輕量型星載龍芯1系列終端執(zhí)行的任務通常包括接收和處理遙測數(shù)據(jù)、向航天器發(fā)送指令、數(shù)據(jù)壓縮與加密傳輸、姿態(tài)控制以及異常監(jiān)控等任務。如圖12 所示,任務切換時延檢驗采用交替懸置與恢復任務的測試方法[29],主要測試步驟如下:

        圖12 任務上下文切換時間示意圖Fig.12 Schematic diagram of task context switching time

        1)創(chuàng)建5 個相等的優(yōu)先級任務,標記其中任意2 個任務為Task 1 和Task 2。

        2)任務在無限循環(huán)中執(zhí)行,記錄執(zhí)行Task 1 最后一條指令的時間T1,Task 2 第一條指令的時間T2,時間戳的差值T2-T1即為上下文切換的時間。

        重復100 次實驗的測試數(shù)據(jù)如圖13 所示,計算得到系統(tǒng)任務切換時間的均值為0.229 μs、標準差為0.003 5 μs、最大值為0.234 μs。

        圖13 任務切換時間Fig.13 Task switching time

        中斷響應時間是從系統(tǒng)收到中斷信號到進入中斷處理程序的時間。中斷響應實時性能檢驗采用PWM 硬件定時器作為外部時鐘源定時產(chǎn)生1 000 μs中斷信號,并且屏蔽系統(tǒng)其他中斷。主要測試步驟如下:

        1)創(chuàng)建一個任務。任務起始時間戳記錄為T1,計時器中斷設置在1 ms 之后。

        2)計時器中斷開始執(zhí)行中斷服務例程第一條指令的時間戳記錄為T2。

        3)重復上述步驟,中斷響應時延為T2-T1-1 ms。

        重復100 次獨立測試,計算得到系統(tǒng)中斷響應時延均值為4.73 μs、標準差 為0.61 μs、最大值 為6.01 μs。實驗結(jié)果如圖14 所示。

        圖14 中斷響應時延Fig.14 Interrupt response delay

        在同等實驗條件下,在VxWorks 實時操作系統(tǒng)中重復上述實時性能測試,對比兩者任務切換與中斷響應時延的均值,結(jié)果如表5 所示。

        表5 實時性能測試結(jié)果對比Table 5 Comparison of real-time performance test results 單位:μs

        由上述實驗結(jié)果可得,兩者實時性能指標的均值相近,OpenHarmony 以LiteOS-M 為內(nèi)核的輕量型系統(tǒng)實現(xiàn)MIPS 架構(gòu)移植后能夠滿足航天實時性應用需求。

        5 結(jié)束語

        本文對輕量型開源鴻蒙操作系統(tǒng)的LiteOS-M內(nèi)核與MIPS 架構(gòu)進行介紹與分析,詳細闡述了MIPS 架構(gòu)相關的寄存器、上下文切換、啟動引導、中斷異常及時鐘的核心部分移植方法,并選擇作為航天控制終端的MIPS 架構(gòu)龍芯處理器硬件平臺完成了系統(tǒng)功能與性能測試,為國內(nèi)航空航天領域類瘦終端的星載計算機分布式架構(gòu)的部署與應用提供了解決方案,對構(gòu)建星載計算機可靠與安全且自主可控的信息技術體系具有一定參考意義。后續(xù)將針對更多型號的MIPS 架構(gòu)航天控制終端進行系統(tǒng)移植,并對具體硬件平臺集成的外設接口進行符合架構(gòu)的驅(qū)動開發(fā),以支持更多的外部設備。

        猜你喜歡
        輕量龍芯內(nèi)核
        并繼竿之我見(四)
        ——輕量竿只有新手才用?
        垂釣(2023年1期)2023-03-03 05:06:20
        基于國產(chǎn)化龍芯的動環(huán)數(shù)據(jù)采集系統(tǒng)
        萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
        強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        輕量新能源汽車應用開關磁阻電機系統(tǒng)匹配的研究
        時代人物(2019年29期)2019-11-25 01:35:30
        基于嵌入式Linux內(nèi)核的自恢復設計
        Linux內(nèi)核mmap保護機制研究
        我對輕量型并繼竿的看法
        垂釣(2018年6期)2018-09-10 08:22:02
        “龍芯之父”胡偉武
        華人時刊(2016年13期)2016-04-05 05:50:06
        龍芯發(fā)布新一代處理器產(chǎn)品
        少妇人妻在线无码天堂视频网| 亚洲一区二区三区成人在线| 亚洲乱码中文字幕第一页| 日本一区二区三区视频网站| 一区二区三区人妻无码| 日韩高清毛片| 一区二区三区在线观看视频免费| 亚洲一区二区日韩专区| 亚洲精品久久久久久久不卡四虎| 狠狠色狠狠色综合| 久久中文字幕av第二页| 亚洲国产精品成人av网| 无人视频在线观看免费播放影院| 国产高清无码在线| 国产麻豆一区二区三区在线播放 | 午夜视频国产在线观看| 少妇人妻陈艳和黑人教练| 手机看片福利盒子久久青| 中文字幕久区久久中文字幕| 精品久久av一区二区| 中文字幕无码日韩专区免费| 97中文字幕在线观看| 国产一区二区三区在线av| 无码专区亚洲综合另类| 亚洲av免费不卡在线观看| 天下第二社区在线视频| 97国产免费全部免费观看| 国产亚洲精品视频在线| 日本伊人精品一区二区三区| 黑人玩弄人妻中文在线| 国内精品视频成人一区二区| 二区三区日本高清视频| 国产精品无码制服丝袜| 国产日韩精品中文字无码| 日韩精品一区二区三区毛片| 午夜精品一区二区三区视频免费看| 亚洲精品国产第一综合色吧| 毛片24种姿势无遮无拦 | 午夜少妇高潮免费视频| 欧美xxxxx高潮喷水麻豆| 亚洲国产成人久久一区www|