羅一涵,陳朔鷹,趙建峰,喬楊
(北京理工大學 計算機學院,北京 100081)
基于龍芯3A處理器的DeltaOS嵌入式系統移植
羅一涵,陳朔鷹,趙建峰,喬楊
(北京理工大學計算機學院,北京100081)
嵌入式系統移植是嵌入式開發(fā)中經常遇到的問題。本文以龍芯3A處理器為載體,根據其通用異常處理機制和硬件資源配置,完成系統的啟動,并對串口驅動進行開發(fā)與配置,成功將實時嵌入式道系統(DeltaOS)移植到龍芯3A平臺上,為應用程序和驅動程序的開發(fā)提供了必要的基礎。
龍芯3A;異常處理;實時嵌入式系統;驅動程序
道系統(Delta OS)是目前中國依靠自己技術和力量自主研發(fā)的實時操作系統之一,提供實時和嵌入式多任務的內核,任務響應快速、準確,不隨任務負載大小改變,絕大部分代碼由C語言編寫,具有很好的移植性。目前,道系統已成功地應用于消費電子產品、通信產品、工業(yè)及軍用電子產品中。
龍芯系列處理器是中國科學院計算所自主研發(fā)的國產處理器系列,龍芯3A是其新一代的64位多核高性能通用處理器,處理器采用RISC架構,兼容MIPS指令,原生四核設計,內含兩條HT PHY超傳輸總線,主頻1 GHz,晶體管數目4.25億個,單顆龍芯3A的最大功耗為15 W[1]。
本文闡述了龍芯3A平臺異常處理和中斷機制和系統啟動流程,并完成了硬件設備驅動程序的開發(fā)。
1.1 基于道系統的開發(fā)模型
道操作系統主要由三部分組成:板級支持包(BSP)、系統內核以及應用組件模塊,其組成如圖1所示。
圖1 道系統組成
其中板級支持包(BSP)的下面就是支持操作系統的硬件平臺。板級支持包的作用是使嵌入式操作系統在各種不同的硬件環(huán)境下都能較好的工作,通過特定的上層接口與操作系統內核進行交互,向操作系統提供底層的硬件信息,并根據操作系統的要求完成對硬件的直接操作。這一層次的獨立性決定了該嵌入式操作系統的可移植性。由于這一層屏蔽了底層硬件的多樣性,操作系統內核不再直接面對具體的硬件環(huán)境。
BSP的作用主要包含兩部分:
①初始化。包括對系統資源的初始化,對目標板硬件初始化(包括初始化各種控制器內存資源和硬件設備),以及對CPU相關的初始化(主要初始化內部寄存器、關閉中斷等)。
②硬件設備驅動。對硬件設備初始化和管理設備是驅動程序的主要作用,這里的驅動有時鐘驅動、串口驅動、網絡驅動和總線驅動等。
1.2 BSP開發(fā)流程
BSP的開發(fā)過程分為以下幾個步驟。
①建立道系統集成開發(fā)環(huán)境Lambda Tools。Lambda Tools提供基本的編碼、調試、固化的集成開發(fā)環(huán)境。
②新建BSP項目,道系統集成開發(fā)環(huán)境已經集成了BSP項目,實現了BSP操作所需的框架,因此該項目可降低開發(fā)BSP的難度,提高研發(fā)效率。由于開發(fā)一個全新的BSP耗時耗力,因而通常會選擇一個BSP模板,在此基礎上僅對需要修改的部分進行修改,這樣可以大大縮短開發(fā)周期。
③配置系統引導程序,本次移植使用龍芯系列專用工具PMON進行系統引導。
④配置DeltaOS的BSP。在BSP模板基礎上完成Boot的運行,實現最基本的初始化。同時根據硬件特性修改相應文件,確保系統啟動和基本驅動的正常運行,最終生成映像文件。
⑤測試與驗證。通過對各個模塊的測試實驗,驗證移植是否成功。
2.1 龍芯3A異常處理及中斷機制
異常是硬件或軟件影響處理器正常執(zhí)行循序的方式,是實現多任務和硬件驅動的基礎。龍芯3A處理器的通用異常處理又分為32種異常,比如:中斷、TLB修改、地址錯誤等。當觸發(fā)通用異常時,異常處理函數讀取Cause寄存器ExcCode域的值,如果為0,則判斷異常為中斷產生,龍芯CPU核通過Cause寄存器接收中斷。Cause寄存器中有8個獨立的中斷位IP0~IP7,IP0和IP1表示軟件中斷,IP2~IP5表示外部中斷,IP6表示核間中斷,IP7表示時鐘中斷[2]。異常處理示意圖如圖2所示。
當觸發(fā)通用異常處理時,進入exc Norm Vec()函數,此處需要完成龍芯對3A通用異常處理的工作。首先獲取Cause寄存器Excode域的值,然后根據Excode域的值判斷屬于哪種異常。若Excode域的值為0,則跳轉到中斷處理;若Excode為其他值,則跳轉到異常處理。把exc-Norm Vec()函數代碼拷貝到地址0x180,此地址是龍芯通用異常入口地址[3]。以下是exc Norm Vec()中關鍵代碼:
圖2 異常處理示意圖
當異常為中斷時,進入中斷處理函數Handle_int(), Handle_int()函數會依次保存中斷現場,關閉中斷,調用plat _irq_dispatch()判斷中斷的類型,不同類型的中斷執(zhí)行不同do _IRQ()函數,當中斷處理完成后,進入ret_from_irq()函數從中斷返回[4]。中斷路由示意圖如圖3所示。
龍芯3A處理器中集成了4個處理器核,32位中斷源可以通過軟件配置選擇期望中斷的目標處理器核。在hwconf.c文件中,有三個數組描述了具體設備的中斷要素,mipsSbIntCtlrInputs數組設定設備選用的引腳,mipsSbIntCtlr XBar數組設定設備使用相應核的哪個中斷引腳,mipsSbIntCtlr CpuRoute數組設定設備中斷路由到哪個核上。在此次移植過程中,默認將中斷路由到CORE0上。圖3的配置模塊配置的就是這些中斷路由到哪個CPU核的哪個IP位,這里IP位和實際的Cause寄存器偏移為2,比如路由到CORE0的IP0,實際上是CORE0的Cause寄存器的IP2[3]。
圖3 中斷路由示意圖
2.2 DeltaOS啟動流程
對于系統移植,熟悉系統的啟動流程是非常重要的。在龍芯3A平臺移植過程中,使用龍芯平臺系列專用工具PMON做初始化引導。PMON主要包括硬件初始化、操作系統引導和硬件測試、程序調式等功能。它提供多種加載操作系統的方式,可以從優(yōu)盤、光盤、tftp服務器和硬盤等媒介加載;它提供對內存、串口、顯示、網絡、硬盤等的基礎測試工具。在移植過程中,PMON的作用是完成硬件初始化,包括設置時鐘和堆棧以及分配存儲空間等,同時把二進制的DeltaOS系統映像文件加載到內存,之后程序跳轉到操作系統所加載的位置,開始啟動過程。
圖4為DeltaOS系統的啟動流程:首先是sys Alib.s中的入口函數sysInit()。sysInit()函數是系統啟動后第一個執(zhí)行的函數,由匯編語言編寫,主要的工作包括初始化CPU,設置堆棧,禁止CPU的中斷等,然后跳轉到prj-Config.c中的usrInit()函數。
以下是根據硬件平臺修改完成的關鍵代碼:
圖4 DeltaOS啟動流程
usrInit()函數是操作系統啟動時執(zhí)行的第一個C函數,任務是對系統進行最小初始化,包括對內核數據結構進行初始化,硬件初始化,根據不同的CPU構架,usrInit()函數可能對cache進行初始化,中斷處理程序的初始化,中斷處理程序的掛接等。其中幾個重要的函數式:exc VecInit()初始化所有缺省中斷向量,sys HwInit()初始化目標板中的相關硬件,usrkernelInit()配置系統內核,其中主要是配置操作系統的必要組件,通常不需要修改。kernelInit()初始化并啟動內核,其中sys Hw Init()主要負責目標機硬件部分的初始化工作,此時的初始化發(fā)生在系統內核啟動之前,中斷屏蔽,把硬件設備初始化到靜止狀態(tài),屬于對設備的初級初始化。
然后進入usr Root()函數,它的任務是初始化內存池、系統時鐘、I/O系統和網絡、標準輸入輸出錯等。其中, usr Root()調用的sys HwInit2()函數在系統內核啟動之后進行,主要負責將中斷服務程序連接到相應的中斷向量,并完成中斷使能,屬于對設備的高級初始化。
在修改完BSP板級支持包后,通過Lambda Tools生成DeltaOS的映像文件,再通過網絡或串口的方式傳入目標機,使用PMON完成對操作系統的引導。
2.3 配置驅動程序
在移植過程中,除了完成CPU和系統初始化外,另一個重要的工作是完成對設備驅動的配置和開發(fā),首先介紹一下配置和管理驅動程序的設備驅動構架VxBus,然后以配置串口驅動為例進行說明。
VxBus是一套設備驅動程序,它將各種不同功能設備集成到一個統一的程序中,采用模塊化設計思想降低驅動對BSP的依賴度,提供了對設備驅動的管理,使驅動的配置和使用更加靈活和方便。驅動配置流程如圖5所示。
圖5 驅動配置流程
圖5是VxBus構架下硬件驅動程序的配置流程,主要分為三個階段:硬件發(fā)現階段、硬件驅動注冊階段、驅動初始化階段(驅動初始化又分為兩個階段)。硬件發(fā)現階段硬件初始化函數sys HwInit()調用hardWareInter FaceInit()函數來初始化硬件內存分配機制;在驅動注冊階段,hardWareInter FaceInit()調用hard WareInter FaceBus-Init()函數,hard WareInter FaceBusInit()函數再調用Vxb-DevRegister()函數完成驅動注冊和激活;然后進入驅動初始化階段,初始化第一階段發(fā)生在內核初始化之前,初始化第二階段發(fā)生在內核初始化后。
本文以串口驅動為例,介紹在VxBus構架下配置的過程。為了使系統認識要添加的硬件設備,首先要向系統中添加設備信息。hwconf.c文件是VxBus構架下負責配置驅動的文件,文件中列出了所有添加過的硬件設備,包括其資源信息。添加的信息用兩個數據結構來表示:一個是hcf Resource,另一個是hcf Device。前者是描述硬件的信息,后者是一個設備列表,包括設備名、設備號等。
在向hwconf.c添加設備信息時,首先在config.h中添加包含串口組件的信息:
INCLUDE_SERIAL表示包含串口組件;NUM_TTY表示串口數量;CONSOLE_BAUD_RATE表示串口波特率;CONSOLE_TTY表示控制終端使用的通道號,一般定義為0[5]。
然后向hwconf.c中加入描述串口的兩個數據結構:
添加完設備信息后,系統已可以識別硬件設備,通過ns16550Dev Register()函數完成設備注冊及激活[6]。
在完成設備注冊激活后,開始設備驅動初始化過程,第一階段的初始化函數在sys HwInit()中進行,此時內核還未初始化。需要完成的工作有關閉中斷、串口寄存器的配置和設置串口通信參數,這里設置串口波特率為115 200,數據位設置為8位,停止位為1位,無校驗,無流控。以下是部分代碼:
第二階段初始化在sys HwInit2()中進行,此時內核已完成初始化,此時的工作是完成中斷服務程序與中斷向量的連接。通過intConnect()函數來實現。
以上為串口驅動在VxBus構架下添加的過程,對于其他硬件設備驅動可按相同的方法添加。
本文以龍芯3A-RS780E開發(fā)板為硬件平臺,介紹對道操作系統移植所需的BSP的設計和實現。針對不同的CPU和主板,BSP的實現也不相同,需要根據硬件版的具體功能進行設計,但基本方法類似,本文對開發(fā)其他類型目標板具有一定參考價值。
[1]北京龍芯中科技術服務有限公司.LS3A-RS780開發(fā)板使用手冊,2010.
[2]中國科學院計算技術研究所,龍芯中科技術有限公司.龍芯3A處理器用戶手冊,2014.
[3]MIPS.MIPS Architecture For Programmers Volume III: The MIPS32 and micro MIPS32 Privileged Resource Architecture,Revision0.95,2001.
[4]殷杰波.基于龍芯3A處理器的嵌入式操作系統BSP設計技術[J].測控技術,2014,33(7):121-123.
[5]楊曄,安軍社.Vx Works在龍芯處理器上的移植與實現[J].微計算機信息,2010,26(35):31-33.
[6]譚亮,李一平,任申真.基于VxBus模式的多串口卡驅動程序的設計[J].測控技術,2011,30(7):73-75.
羅一涵、趙建峰、喬楊(碩士研究生),主要研究方向為嵌入式系統與應用;陳朔鷹(副教授),研究方向為計算機操作系統、嵌入式系統應用。
69觀察法可有效提高光伏電池充電效率,并提供穩(wěn)定的輸出電壓,保證了光伏照明系統能夠高效穩(wěn)定地工作,達到了設計的預期。系統的電池容量檢測模塊中的過放保護保證了在電量過低或蓄電池端電壓過低時可以對蓄電池提供有效保護。針對在溫度變化劇烈的狀況下,獨立光伏公用照明系統加入了溫度補償功能,保證系統在復雜溫度情況下都能正常工作。
[1]李春玲,石季英,武艷輝,等.模糊控制的擾動觀察法在光伏MPPT中的應用[J].電氣傳動,2013,43(2):62-64.
[2]董婧.基于MPPT的光伏系統充電控制器的研究[D].西安:西安工業(yè)大學,2014.
[3]鄭詩程,劉偉,葛蘆生.具有TM PPT功能的太陽能光伏充電系統研究[J].電子測量與儀器學報,2008,22(3):11-15.
[4]李明楊.獨立光伏發(fā)電系統的控制策略及其應用研究基于MPPT[D].長沙:中南大學,2010.
[5]曹旭陽.獨立光伏路燈系統MPPT控制器設計[D].青島:中國海洋大學,2007.
[6]楊自娟.基于模糊控制的太陽能MPPT充電控制器的研究與實現[D].廣州:華南理工大學電力學院,2010.
[7]黃瑞,孫黎霞.基于占空比模糊控制的光伏發(fā)電系統MPPT技術[J].電子設計工程2013,21(7):101-104.
[8]王海龍,王維俊,張國平,等.基于STM32F103芯片的光伏充電控制器設計[J].微電機,2013,46(3):54-57.
[9]歐陽名三.獨立光伏系統中蓄電池管理的研究[D].安徽:合肥工業(yè)大學,2004.
[10]王立志,宋偉,汪徳洋,等.STM32的風光互補發(fā)電蓄電池充放電保護研究[J].單片機與嵌入式系統應用,2016,16 (2):21-23.
溫宗周(副教授)、費騰蛟(碩士研究生):主要研究方向為嵌入式系統應用與開發(fā);段俊瑞(教授),主要研究方向為汽車電子的開發(fā)與應用。
Transplant of DeltaOS Embedded System Based on Loongson3A
Luo Yihan,Chen Shuoying,Zhao Jianfeng,Qiao Yang
(School of Computer Science&Technology,Beijing Institute of Technology,Beijing 100081,China)
In the development of embedded system application,the transplantation is a frequently encountered problem.In the paper,taking the Loogson3A processor as the carrier,according to its exception handing mechanism and configuration of hardware resources,the design completes the startup of system,develops and configurates the driver of serial port.The embedded real-time system DeltaOS is transplanted on the Loogson3A successfully,which provides the necessary foundation for the application and other driver development.
Loogson3A;exception handing;embedded real-time system;driver
TP316
A
(責任編輯:楊迪娜2016-06-06)
(責任編輯:楊迪娜2016-05-09)