陳瑋彤,黃天一,丁呂繁,楊 曦
(1.四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610041;2.成都創(chuàng)騰軟件有限公司,成都 610095)
自主可控是保障網(wǎng)絡(luò)安全、信息安全的前提,只有提高關(guān)鍵核心技術(shù)的創(chuàng)新能力,關(guān)鍵零部件、各類核心軟件實(shí)現(xiàn)安全可控,我國數(shù)字經(jīng)濟(jì)發(fā)展才能不受制于人。中興、華為斷供事件作為敲響中國軟硬件發(fā)展的“警鐘”,使得國家充分認(rèn)識(shí)到了自主可控的重要性。在各行業(yè)自主研發(fā)的大趨勢下,國產(chǎn)CPU、操作系統(tǒng)等技術(shù)已經(jīng)趨于成熟,國產(chǎn)CPU 公司包括龍芯、飛騰等,國產(chǎn)操作系統(tǒng)如銀河麒麟等,都在不斷發(fā)展以提高核心競爭力,增強(qiáng)自主可控能力。
本論文研究的課題旨在實(shí)現(xiàn)一個(gè)支持國產(chǎn)嵌入式、桌面、服務(wù)器操作系統(tǒng)的自主可控的軟件集成開發(fā)環(huán)境平臺(tái)。課題的需求包括滿足在飛騰計(jì)算機(jī)平臺(tái)、銀河麒麟操作系統(tǒng)上的運(yùn)行要求,從而解決國產(chǎn)處理器生態(tài)不成熟、操作系統(tǒng)對(duì)國產(chǎn)處理器支持薄弱等問題,打破國外組織、機(jī)構(gòu)對(duì)操作系統(tǒng)配套軟件集成開發(fā)環(huán)境的壟斷。
本課題的集成開發(fā)環(huán)境由滿足工業(yè)嵌入式應(yīng)用軟件開發(fā)、滿足工業(yè)桌面操作系統(tǒng)應(yīng)用和滿足工業(yè)服務(wù)器操作系統(tǒng)應(yīng)用開發(fā)的一組功能模塊和第三方軟件組成:
針對(duì)工業(yè)嵌入式軟件開發(fā)的特點(diǎn),集成開發(fā)環(huán)境集成了多種交叉工具鏈運(yùn)行環(huán)境、多種交叉工具鏈,實(shí)現(xiàn)了上位機(jī)與目標(biāo)機(jī)之間的通信代理,向開發(fā)人員提供了項(xiàng)目管理、代碼管理、代碼編輯、交叉編譯器參數(shù)設(shè)置、編譯器調(diào)用、交叉調(diào)試參數(shù)設(shè)置、目標(biāo)機(jī)端程序調(diào)試、文件下載、二進(jìn)制固化等圖形化操作界面,以開發(fā)面向多硬件平臺(tái)、工業(yè)嵌入式操作系統(tǒng)的靜態(tài)庫、動(dòng)態(tài)庫以及應(yīng)用程序。
針對(duì)工業(yè)桌面操作系統(tǒng)、工業(yè)服務(wù)器操作系統(tǒng)應(yīng)用開發(fā)的特點(diǎn),集成開發(fā)環(huán)境支持了多種編程語言,集成了多種第三方軟件開發(fā)SDK、多種單元測試框架、性能分析工具、調(diào)試環(huán)境、運(yùn)行環(huán)境、部署環(huán)境以及過程控制平臺(tái)等,以便支持開發(fā)人員進(jìn)行窗體應(yīng)用開發(fā)、后臺(tái)應(yīng)用開發(fā)、Web 應(yīng)用開發(fā),開展項(xiàng)目管理、需求分配、任務(wù)管理等活動(dòng)。
依據(jù)統(tǒng)一、開放、靈活的架構(gòu)思路,課題設(shè)計(jì)了集成開發(fā)環(huán)境。如圖1所示,組成集成開發(fā)環(huán)境的軟件模塊和應(yīng)用遵循OSGi 模塊化規(guī)范、以Equinox平臺(tái)為運(yùn)行時(shí)環(huán)境、以Eclipse開發(fā)工具為插件開發(fā)環(huán)境。
圖1 集成開發(fā)環(huán)境組成
Eclipse 作為一種通用的工具平臺(tái),它將各個(gè)功能模塊連接起來,提供標(biāo)準(zhǔn)的接口,接收各個(gè)模塊的請(qǐng)求并且控制程序的運(yùn)行。整個(gè)Eclipse 平臺(tái)建立在插件機(jī)制之上,除了一些平臺(tái)運(yùn)行時(shí)的內(nèi)核,Eclipse 平臺(tái)所有的功能都由插件實(shí)現(xiàn)。由于課題實(shí)現(xiàn)的工業(yè)嵌入式軟件開發(fā)環(huán)境和工業(yè)服務(wù)器操作系統(tǒng)軟件開發(fā)環(huán)境都是基于Eclipse 實(shí)現(xiàn)的,因此本小節(jié)主要介紹Eclipse的運(yùn)行機(jī)制和體系結(jié)構(gòu)。
1.2.1 工作機(jī)制
Eclipse 平臺(tái)的主要任務(wù)是為開發(fā)者提供各種編程工具集成的機(jī)制和規(guī)則,這些機(jī)制通過應(yīng)用程序接口(API)、類和方法表現(xiàn)出來。本質(zhì)上,Eclipse 是一組松散綁定、但互相連接的代碼塊。搞清楚這些代碼塊之間的相互調(diào)用和連接方法,也就理解了Eclipse結(jié)構(gòu)的基本原理。Eclipse 平臺(tái)的結(jié)構(gòu)如圖2 所示,它的組件包括平臺(tái)運(yùn)行庫(platform runtime)、工作臺(tái)(workbench)、工作區(qū)(workspace)、團(tuán)隊(duì)組件(team)、調(diào)試(debug)和幫助(help)。
圖2 Eclispe體系結(jié)構(gòu)圖
1.2.2 Eclipse插件機(jī)制
模塊化的設(shè)計(jì)讓Eclipse 自身被分解為不同的功能塊,這些功能塊能更容易地被重用于創(chuàng)建超出原始開發(fā)人員設(shè)想的應(yīng)用程序,就像不同版本的Eclipse 分別為特定的功能而設(shè)計(jì)。Eclipse 附帶了標(biāo)準(zhǔn)的插件集,包括Java 開發(fā)工具JDK,還包括插件開發(fā)環(huán)境PDE。
希望被其他插件擴(kuò)展的插件都會(huì)聲明一個(gè)擴(kuò)展點(diǎn),擴(kuò)展點(diǎn)機(jī)制使得Eclipse平臺(tái)架構(gòu)具有更好的靈活性,擴(kuò)展是Eclipse平臺(tái)上提供各種功能的來源,插件利用擴(kuò)展點(diǎn)向Eclipse新添功能??捎玫牟寮谑孪却_定后,進(jìn)行插件間信息交換,無需激活它們,平臺(tái)就可以為每個(gè)插件提供豐富的關(guān)于它運(yùn)行的上下文的相關(guān)信息。
SWT具有本地JNI調(diào)用機(jī)制,使得程序具有很快的響應(yīng)速度;輕量級(jí)的API 使得開發(fā)人員調(diào)用簡單、易于上手,因此課題選用SWT/JFace圖形化界面開發(fā)框架作為集成開發(fā)環(huán)境的統(tǒng)一界面開發(fā)框架。
JFace 用來在SWT庫頂部提供常見的應(yīng)用程序用戶界面功能。JFACE 采用MVC 的模式對(duì)SWT 進(jìn)行了封裝,增加了對(duì)復(fù)雜界面組件的支持,并且極大地豐富了SWT 的組件功能。它提供一些類和接口,以處理與使用SWT 來對(duì)動(dòng)態(tài)用戶界面編程相關(guān)聯(lián)的許多常見任務(wù)。
本論文實(shí)現(xiàn)的嵌入式軟件開發(fā)環(huán)境由兩大部分構(gòu)成,分別為主機(jī)端支撐環(huán)境和圖形化操作系統(tǒng),主要結(jié)構(gòu)如圖3。其中主機(jī)端支撐環(huán)境為交叉工具鏈提供了運(yùn)行環(huán)境、為集成開發(fā)環(huán)境提供了與目標(biāo)機(jī)端的通信代理、為集成開發(fā)環(huán)境提供了交叉調(diào)試工具。圖形化操作環(huán)境則由一組與嵌入式軟件開發(fā)密切相關(guān)的軟件模塊組成。
圖3 嵌入式軟件集成開發(fā)環(huán)境
2.1.1 嵌入式應(yīng)用軟件調(diào)試模塊
提供基于匯編的調(diào)試和基于源代碼的調(diào)試;提供任務(wù)棧顯示功能;提供匯編斷點(diǎn)、源代碼斷點(diǎn)管理功能;提供調(diào)試會(huì)話管理功能;提供被調(diào)試的應(yīng)用軟件的內(nèi)存查看、修改功能;提供變量值查看、修改功能;提供表達(dá)式添加、運(yùn)算功能;提供單步、運(yùn)行、掛起功能。
2.1.2 二進(jìn)制文件下載&運(yùn)行模塊
提供將主機(jī)端的二進(jìn)制文件下載到目標(biāo)機(jī)端的內(nèi)存或文件系統(tǒng)中的功能;提供從主機(jī)端執(zhí)行目標(biāo)機(jī)端指定文件的功能;提供運(yùn)行參數(shù)設(shè)置功能。
2.1.3 源代碼編譯模塊
源代碼編譯模塊根據(jù)開發(fā)人員在創(chuàng)建項(xiàng)目時(shí)所指定的編譯信息,調(diào)用主機(jī)端中相關(guān)的工具鏈對(duì)項(xiàng)目中的源代碼進(jìn)行預(yù)處理、編譯、匯編、鏈接生成可執(zhí)行文件或庫文件。在編譯過程中,系統(tǒng)會(huì)將工具鏈的輸出信息輸出到界面中進(jìn)行顯示,根據(jù)編譯錯(cuò)誤將錯(cuò)誤信息與源代碼進(jìn)行關(guān)聯(lián)并顯示錯(cuò)誤信息。
2.1.4 目標(biāo)機(jī)通信管理模塊
基于主機(jī)端與目標(biāo)機(jī)端的通信協(xié)議,建立主機(jī)端與目標(biāo)機(jī)端的通信通道,向上提供通信接口。
銀河麒麟操作系統(tǒng)下桌面應(yīng)用和服務(wù)器應(yīng)用的開發(fā)環(huán)境如圖4所示,其中部分軟件模塊的功能描述如下。
圖4 銀河麒麟應(yīng)用開發(fā)環(huán)境
2.2.1 項(xiàng)目創(chuàng)建向?qū)?/p>
為開發(fā)人員創(chuàng)建窗體應(yīng)用項(xiàng)目、Web 應(yīng)用項(xiàng)目、控制臺(tái)應(yīng)用項(xiàng)目等類型的項(xiàng)目提供引導(dǎo), 提供項(xiàng)目名稱輸入、項(xiàng)目類型選擇、項(xiàng)目模板選擇等操作界面。
2.2.2 項(xiàng)目管理
提供當(dāng)前工作空間中所有項(xiàng)目信息的展示功能;提供項(xiàng)目導(dǎo)入/導(dǎo)出功能;提供項(xiàng)目重命名功能;提供項(xiàng)目刪除功能;提供項(xiàng)目關(guān)閉/打開功能等。
2.2.3 源代碼編譯
根據(jù)項(xiàng)目類型以及開發(fā)人員在創(chuàng)建項(xiàng)目時(shí)所設(shè)置的信息,調(diào)用相應(yīng)的編譯器(如:Python編譯器、Java 編譯器、Qt編譯器)對(duì)源代碼進(jìn)行編譯。
2.2.4 目標(biāo)機(jī)管理
管理用于運(yùn)行、調(diào)試、安裝應(yīng)用的目標(biāo)機(jī),并向外提供通信接口供其它模塊調(diào)用。
在嵌入式軟件開發(fā)過程中,一個(gè)十分重要的部分是交叉編譯工具的構(gòu)建,課題基于銀河麒麟操作系統(tǒng),使用crosstool-NG 工具實(shí)現(xiàn)了針對(duì)mips架構(gòu)嵌入式開發(fā)板的交叉編譯工具鏈。
使用crosstool-NG 得到需要的交叉編譯工具鏈有以下幾個(gè)步驟:下載crosstool-NG 源碼、編譯crosstool-NG 源碼并安裝、配置需要的交叉工具鏈參數(shù)、編譯生成需要的交叉工具鏈。
其中,crosstool-NG 工具的源碼下載和安裝過程,與普通的Linux 環(huán)境下軟件的安裝過程類似,都需要下載源碼之后在本機(jī)進(jìn)行編譯安裝。
在使用安裝好的crosstool-NG 生成需要的交叉工具鏈之前,需要進(jìn)行的配置包括宿主機(jī)使用的CPU 架構(gòu)類型、目標(biāo)平臺(tái)的操作系統(tǒng)、使用的C 庫等。使用ct-ng list-samples 命令查看當(dāng)前已經(jīng)包含了哪些默認(rèn)的示例配置,部分結(jié)果如圖5所示。
圖5 使用ct-ng list-samples命令的部分結(jié)果
在所有的配置工作都完成之后,使用ct-ng build命令生成交叉工具鏈。
我們使用流行的Qt 框架實(shí)現(xiàn)桌面軟件集成開發(fā)環(huán)境,可以較為方便地進(jìn)行銀河麒麟操作系統(tǒng)下桌面軟件的開發(fā),開始界面如圖6所示。
圖6 使用Qt框架實(shí)現(xiàn)桌面軟件集成開發(fā)環(huán)境的開始界面
Qt 是一個(gè)跨平臺(tái)的C++開發(fā)庫,支持市面上大多數(shù)操作系統(tǒng),主要用于開發(fā)有圖形化界面的程序,同時(shí)也可以用于命令行程序和服務(wù)器端程序的開發(fā)。
Qt 開發(fā)庫基于現(xiàn)有的一些工具鏈制作,其使用的編譯器、鏈接器、調(diào)試器都是現(xiàn)成的,使用的工具包括GNU 工具集、MinGW、CMake等,Qt 官方的開發(fā)環(huán)境安裝包里也內(nèi)置了專門的開發(fā)工具。
Qt的類庫目錄如圖7所示。
圖7 Qt的類庫目錄
本課題開發(fā)的集成開發(fā)環(huán)境,基于OSGi 規(guī)范開發(fā),運(yùn)行于Equinox 環(huán)境,包括工業(yè)嵌入式軟件開發(fā)、工業(yè)桌面軟件開發(fā)、工業(yè)服務(wù)器應(yīng)用開發(fā)三個(gè)部分,集軟件設(shè)計(jì)、開發(fā)、調(diào)試與集成部署為一體,將開發(fā)平臺(tái)和運(yùn)行平臺(tái)有機(jī)地結(jié)合在一起。其中嵌入式軟件開發(fā)部分基于插件機(jī)制開發(fā),支持在銀河麒麟操作系統(tǒng)中開發(fā)國產(chǎn)龍芯、飛騰處理器的應(yīng)用;桌面軟件開發(fā)環(huán)境基于Qt 開發(fā),支持基于C/C++、Python、Java 的控制臺(tái)應(yīng)用開發(fā);服務(wù)器應(yīng)用開發(fā)環(huán)境基于插件機(jī)制開發(fā),支持Java、HTML、CSS、JavaScript 等語言的程序開發(fā)。通過使用開發(fā)集成環(huán)境,用戶可以高效地在銀河麒麟操作系統(tǒng)中進(jìn)行嵌入式軟件、桌面軟件、服務(wù)器軟件的開發(fā),課題豐富了銀河麒麟操作系統(tǒng)的軟件生態(tài)。