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

        ?

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

        2022-01-24 02:16:16崔振禮
        計算機工程與科學 2022年1期
        關鍵詞:測試程序掩碼外設

        崔振禮,羅 宇

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

        1 引言

        隨著大規(guī)模集成電路的發(fā)展,嵌入式設備的性能越來越強,功能越來越豐富,應用場景也越來越復雜,在以智能制造和物聯(lián)網(wǎng)為主題的“工業(yè)4.0”概念被提出后,各應用領域?qū)η度胧讲僮飨到y(tǒng)的要求也越來越高。復雜的應用場景要求嵌入式操作系統(tǒng)在具有豐富功能性的同時支持實時性,但是在單操作系統(tǒng)中,豐富的功能性會不可避免地導致較多的運行任務和復雜的調(diào)度算法,難以達到實時性要求,而為了保證實時性,系統(tǒng)通常會最小化任務數(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ā)功能,滿足系統(tǒng)的功能需求,RTOS 提供精確的實時控制功能,滿足系統(tǒng)的實時性需求[2]。

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

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

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

        2.1 Hi3559AV100 SOC簡介

        Hi3559AV100是華為海思面向智能網(wǎng)絡監(jiān)控攝像頭、3D/VR攝像頭、視頻會議終端、智能工業(yè)機器人、智能無人機、實時護理系統(tǒng)終端等領域設計的專業(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)絡推理引擎NNIE(Neural Network Inference Engine),可根據(jù)應用場景制定合適的業(yè)務部署方案;采用先進的12 nm低功耗工藝和小型化封裝,在縮小產(chǎn)品體積的同時減少功耗[4];支持單操作系統(tǒng)和多操作系統(tǒng)(最多4個)部署方案,以滿足不同的業(yè)務需求。

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

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

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

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

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

        3.1 Hi3559AV100外設中斷處理流程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        由分發(fā)器和CPU接口的功能可知,中斷分發(fā)到哪個CPU是分發(fā)器根據(jù)預先綁定的CPU接口決定的,而外設中斷與CPU接口的綁定是通過向GIC分發(fā)器部件的中斷分發(fā)目的寄存器GICD_ITARGETSRn寫CPU接口掩碼實現(xiàn)的[6]。在分發(fā)器分發(fā)中斷事件時,首先根據(jù)GICD_ITARGETSRn寄存器找到該中斷綁定的CPU接口掩碼,然后根據(jù)掩碼把中斷分發(fā)到相應的接口。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設置為最多支持256個中斷;irq_map定義為數(shù)組,數(shù)組元素為外設中斷綁定的CPU接口的掩碼(8 bit,無符號字符類型),數(shù)組元素的序號與某個外設中斷一一對應,例如數(shù)組序號8對應UART2的中斷,irq_map[8]的值表示UART2的中斷綁定的CPU接口的掩碼;從偏移量32開始(0~15為軟中斷,16~31為私有外設中斷),外設中斷綁定的CPU接口的掩碼被寫到了GIC分發(fā)器部件的GICD_ITARGETSRn寄存器(地址為base+ARM_GIC_DIST_TARGET)中,且一次循環(huán)寫4個掩碼值。

        CPU接口的掩碼及其與CPU核的連接關系如表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運行在雙核A53和雙核A73組成的四核CPU上,LiteOS運行在單核A53上,所以當irq_map數(shù)組元素值為TO_A53MP0、TO_A53MP1、TO_A53MP2或者TO_A53MP3時表示對應的中斷由Linux負責處理,數(shù)組元素為TO_A53UP_時表示對應的中斷由LiteOS負責處理。

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

        3.3 具體實現(xiàn)

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

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

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

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

        由于LiteOS未使用虛擬地址機制,所以可通過物理地址直接訪問GICD_ITARGETSRn寄存器的內(nèi)容。通過閱讀LiteOS系統(tǒng)源碼得到系統(tǒng)基地址為0x1F101000,GICD_ITARGETSRn地址偏移量為0x800,所以Step 1中GICD_ITARGETSRn寄存器的地址為0x1F101800。由于UART2中斷在irq_map數(shù)組中對應的序號為8,所以存放UART2中斷綁定的CPU接口的掩碼地址為0x1F101800+32+8,此地址處的默認值為0x10,即CPU接口4的掩碼,然后將該地址處的值修改為雙核A53或者雙核A73的核所連接的CPU接口的掩碼,即可實現(xiàn)UART2從LiteOS到Linux的動態(tài)遷移。LiteOS應用程序中實現(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使用了虛擬地址機制,所以在Linux中訪問寄存器要先把它的物理地址轉(zhuǎn)換成相應的虛擬地址。Linux提供了物理內(nèi)存的鏡像設備文件/dev/mem,用于訪問物理內(nèi)存,由于ARM架構(gòu)采用I/O端口與物理內(nèi)存統(tǒng)一編址方式,所以可以通過訪問內(nèi)存地址的方式訪問I/O設備。Linux應用程序中實現(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 測試程序設計

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

        在本實驗中以外設UART2為測試設備。LiteOS端測試程序每隔1 s向Linux發(fā)送心跳信息,在程序運行20 s后停止發(fā)送,Linux端測試程序等待心跳信息超時時間設置為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é)果

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

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

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

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

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

        LiteOS端測試程序運行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ù)

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

        5 結(jié)束語

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

        猜你喜歡
        測試程序掩碼外設
        低面積復雜度AES低熵掩碼方案的研究
        通信學報(2019年5期)2019-06-11 03:05:56
        基于Castle型機械手的三溫量產(chǎn)測試平臺實現(xiàn)
        基于布爾異或掩碼轉(zhuǎn)算術(shù)加法掩碼的安全設計*
        手機APP交互界面人因適合性測試程序的設計與實現(xiàn)
        中心主導制訂的《VHF/UHF頻率范圍內(nèi)測向系統(tǒng)測向靈敏度的測試程序》等兩項國際標準在ITU官網(wǎng)正式發(fā)布
        電氣自動化控制設備可靠性測試探討
        基于掩碼的區(qū)域增長相位解纏方法
        基于掩碼的AES算法抗二階DPA攻擊方法研究
        Microchip推出具備雙ADC外設的全新器件,擴展其低成本8位PIC?單片機產(chǎn)品線
        貼身呵護 必不可少的PSP外設
        麻豆成人久久精品二区三区免费| 黄色a级国产免费大片| 少妇又骚又多水的视频| 99久久精品一区二区国产| 日本一区二区三区亚洲| 少妇连续高潮爽到抽搐| 久久精品国产成人午夜福利| 极品少妇被黑人白浆直流| 国产成a人亚洲精品无码樱花| 亚洲中国精品精华液| 4hu四虎永久免费地址ww416| 午夜性无码专区| 亚洲成av人片在线观看无码 | 亚洲乱码少妇中文字幕| 久久久www成人免费无遮挡大片| 亚洲欧美另类精品久久久| 第十色丰满无码| 网红极品女神精品视频在线| 一级黄片草逼免费视频| 日韩不卡一区二区三区色图| 国产精品亚洲一级av第二区| 日本精品一区二区三区福利视频| 91超精品碰国产在线观看| 国产av无码专区亚洲精品| 黄桃av无码免费一区二区三区| 少妇性俱乐部纵欲狂欢电影| 又粗又硬又黄又爽的免费视频| 无套内射无矿码免费看黄| 又色又污又爽又黄的网站| 欧美亚洲国产人妖系列视| 涩涩国产在线不卡无码| 91九色国产在线观看| 国产一区二区熟女精品免费| 加勒比精品视频在线播放| 国产成人精品2021| 少妇被猛男粗大的猛进出| 无码国产激情在线观看| 久久一日本道色综合久久大香| 亚洲女同成av人片在线观看| 蜜桃av福利精品小视频| 成人av资源在线播放|