陳瑋彤,黃天一,丁呂繁,楊 曦
(1.四川大學計算機學院,成都 610041;2.成都創騰軟件有限公司,成都 610095)
自主可控是保障網絡安全、信息安全的前提,只有提高關鍵核心技術的創新能力,關鍵零部件、各類核心軟件實現安全可控,我國數字經濟發展才能不受制于人。中興、華為斷供事件作為敲響中國軟硬件發展的“警鐘”,使得國家充分認識到了自主可控的重要性。在各行業自主研發的大趨勢下,國產CPU、操作系統等技術已經趨于成熟,國產CPU 公司包括龍芯、飛騰等,國產操作系統如銀河麒麟等,都在不斷發展以提高核心競爭力,增強自主可控能力。
本論文研究的課題旨在實現一個支持國產嵌入式、桌面、服務器操作系統的自主可控的軟件集成開發環境平臺。課題的需求包括滿足在飛騰計算機平臺、銀河麒麟操作系統上的運行要求,從而解決國產處理器生態不成熟、操作系統對國產處理器支持薄弱等問題,打破國外組織、機構對操作系統配套軟件集成開發環境的壟斷。
本課題的集成開發環境由滿足工業嵌入式應用軟件開發、滿足工業桌面操作系統應用和滿足工業服務器操作系統應用開發的一組功能模塊和第三方軟件組成:
針對工業嵌入式軟件開發的特點,集成開發環境集成了多種交叉工具鏈運行環境、多種交叉工具鏈,實現了上位機與目標機之間的通信代理,向開發人員提供了項目管理、代碼管理、代碼編輯、交叉編譯器參數設置、編譯器調用、交叉調試參數設置、目標機端程序調試、文件下載、二進制固化等圖形化操作界面,以開發面向多硬件平臺、工業嵌入式操作系統的靜態庫、動態庫以及應用程序。
針對工業桌面操作系統、工業服務器操作系統應用開發的特點,集成開發環境支持了多種編程語言,集成了多種第三方軟件開發SDK、多種單元測試框架、性能分析工具、調試環境、運行環境、部署環境以及過程控制平臺等,以便支持開發人員進行窗體應用開發、后臺應用開發、Web 應用開發,開展項目管理、需求分配、任務管理等活動。
依據統一、開放、靈活的架構思路,課題設計了集成開發環境。如圖1所示,組成集成開發環境的軟件模塊和應用遵循OSGi 模塊化規范、以Equinox平臺為運行時環境、以Eclipse開發工具為插件開發環境。

圖1 集成開發環境組成
Eclipse 作為一種通用的工具平臺,它將各個功能模塊連接起來,提供標準的接口,接收各個模塊的請求并且控制程序的運行。整個Eclipse 平臺建立在插件機制之上,除了一些平臺運行時的內核,Eclipse 平臺所有的功能都由插件實現。由于課題實現的工業嵌入式軟件開發環境和工業服務器操作系統軟件開發環境都是基于Eclipse 實現的,因此本小節主要介紹Eclipse的運行機制和體系結構。
1.2.1 工作機制
Eclipse 平臺的主要任務是為開發者提供各種編程工具集成的機制和規則,這些機制通過應用程序接口(API)、類和方法表現出來。本質上,Eclipse 是一組松散綁定、但互相連接的代碼塊。搞清楚這些代碼塊之間的相互調用和連接方法,也就理解了Eclipse結構的基本原理。Eclipse 平臺的結構如圖2 所示,它的組件包括平臺運行庫(platform runtime)、工作臺(workbench)、工作區(workspace)、團隊組件(team)、調試(debug)和幫助(help)。

圖2 Eclispe體系結構圖
1.2.2 Eclipse插件機制
模塊化的設計讓Eclipse 自身被分解為不同的功能塊,這些功能塊能更容易地被重用于創建超出原始開發人員設想的應用程序,就像不同版本的Eclipse 分別為特定的功能而設計。Eclipse 附帶了標準的插件集,包括Java 開發工具JDK,還包括插件開發環境PDE。
希望被其他插件擴展的插件都會聲明一個擴展點,擴展點機制使得Eclipse平臺架構具有更好的靈活性,擴展是Eclipse平臺上提供各種功能的來源,插件利用擴展點向Eclipse新添功能。可用的插件在事先確定后,進行插件間信息交換,無需激活它們,平臺就可以為每個插件提供豐富的關于它運行的上下文的相關信息。
SWT具有本地JNI調用機制,使得程序具有很快的響應速度;輕量級的API 使得開發人員調用簡單、易于上手,因此課題選用SWT/JFace圖形化界面開發框架作為集成開發環境的統一界面開發框架。
JFace 用來在SWT庫頂部提供常見的應用程序用戶界面功能。JFACE 采用MVC 的模式對SWT 進行了封裝,增加了對復雜界面組件的支持,并且極大地豐富了SWT 的組件功能。它提供一些類和接口,以處理與使用SWT 來對動態用戶界面編程相關聯的許多常見任務。
本論文實現的嵌入式軟件開發環境由兩大部分構成,分別為主機端支撐環境和圖形化操作系統,主要結構如圖3。其中主機端支撐環境為交叉工具鏈提供了運行環境、為集成開發環境提供了與目標機端的通信代理、為集成開發環境提供了交叉調試工具。圖形化操作環境則由一組與嵌入式軟件開發密切相關的軟件模塊組成。

圖3 嵌入式軟件集成開發環境
2.1.1 嵌入式應用軟件調試模塊
提供基于匯編的調試和基于源代碼的調試;提供任務棧顯示功能;提供匯編斷點、源代碼斷點管理功能;提供調試會話管理功能;提供被調試的應用軟件的內存查看、修改功能;提供變量值查看、修改功能;提供表達式添加、運算功能;提供單步、運行、掛起功能。
2.1.2 二進制文件下載&運行模塊
提供將主機端的二進制文件下載到目標機端的內存或文件系統中的功能;提供從主機端執行目標機端指定文件的功能;提供運行參數設置功能。
2.1.3 源代碼編譯模塊
源代碼編譯模塊根據開發人員在創建項目時所指定的編譯信息,調用主機端中相關的工具鏈對項目中的源代碼進行預處理、編譯、匯編、鏈接生成可執行文件或庫文件。在編譯過程中,系統會將工具鏈的輸出信息輸出到界面中進行顯示,根據編譯錯誤將錯誤信息與源代碼進行關聯并顯示錯誤信息。
2.1.4 目標機通信管理模塊
基于主機端與目標機端的通信協議,建立主機端與目標機端的通信通道,向上提供通信接口。
銀河麒麟操作系統下桌面應用和服務器應用的開發環境如圖4所示,其中部分軟件模塊的功能描述如下。

圖4 銀河麒麟應用開發環境
2.2.1 項目創建向導
為開發人員創建窗體應用項目、Web 應用項目、控制臺應用項目等類型的項目提供引導, 提供項目名稱輸入、項目類型選擇、項目模板選擇等操作界面。
2.2.2 項目管理
提供當前工作空間中所有項目信息的展示功能;提供項目導入/導出功能;提供項目重命名功能;提供項目刪除功能;提供項目關閉/打開功能等。
2.2.3 源代碼編譯
根據項目類型以及開發人員在創建項目時所設置的信息,調用相應的編譯器(如:Python編譯器、Java 編譯器、Qt編譯器)對源代碼進行編譯。
2.2.4 目標機管理
管理用于運行、調試、安裝應用的目標機,并向外提供通信接口供其它模塊調用。
在嵌入式軟件開發過程中,一個十分重要的部分是交叉編譯工具的構建,課題基于銀河麒麟操作系統,使用crosstool-NG 工具實現了針對mips架構嵌入式開發板的交叉編譯工具鏈。
使用crosstool-NG 得到需要的交叉編譯工具鏈有以下幾個步驟:下載crosstool-NG 源碼、編譯crosstool-NG 源碼并安裝、配置需要的交叉工具鏈參數、編譯生成需要的交叉工具鏈。
其中,crosstool-NG 工具的源碼下載和安裝過程,與普通的Linux 環境下軟件的安裝過程類似,都需要下載源碼之后在本機進行編譯安裝。
在使用安裝好的crosstool-NG 生成需要的交叉工具鏈之前,需要進行的配置包括宿主機使用的CPU 架構類型、目標平臺的操作系統、使用的C 庫等。使用ct-ng list-samples 命令查看當前已經包含了哪些默認的示例配置,部分結果如圖5所示。

圖5 使用ct-ng list-samples命令的部分結果
在所有的配置工作都完成之后,使用ct-ng build命令生成交叉工具鏈。
我們使用流行的Qt 框架實現桌面軟件集成開發環境,可以較為方便地進行銀河麒麟操作系統下桌面軟件的開發,開始界面如圖6所示。

圖6 使用Qt框架實現桌面軟件集成開發環境的開始界面
Qt 是一個跨平臺的C++開發庫,支持市面上大多數操作系統,主要用于開發有圖形化界面的程序,同時也可以用于命令行程序和服務器端程序的開發。
Qt 開發庫基于現有的一些工具鏈制作,其使用的編譯器、鏈接器、調試器都是現成的,使用的工具包括GNU 工具集、MinGW、CMake等,Qt 官方的開發環境安裝包里也內置了專門的開發工具。
Qt的類庫目錄如圖7所示。

圖7 Qt的類庫目錄
本課題開發的集成開發環境,基于OSGi 規范開發,運行于Equinox 環境,包括工業嵌入式軟件開發、工業桌面軟件開發、工業服務器應用開發三個部分,集軟件設計、開發、調試與集成部署為一體,將開發平臺和運行平臺有機地結合在一起。其中嵌入式軟件開發部分基于插件機制開發,支持在銀河麒麟操作系統中開發國產龍芯、飛騰處理器的應用;桌面軟件開發環境基于Qt 開發,支持基于C/C++、Python、Java 的控制臺應用開發;服務器應用開發環境基于插件機制開發,支持Java、HTML、CSS、JavaScript 等語言的程序開發。通過使用開發集成環境,用戶可以高效地在銀河麒麟操作系統中進行嵌入式軟件、桌面軟件、服務器軟件的開發,課題豐富了銀河麒麟操作系統的軟件生態。