• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      信息創(chuàng)新環(huán)境下的嵌入式軟件交叉調(diào)試技術(shù)

      2022-04-25 08:36:10丁呂繁陳瑋彤王俊翔楊曦
      電子元器件與信息技術(shù) 2022年2期
      關(guān)鍵詞:宿主機(jī)嵌入式軟件斷點(diǎn)

      丁呂繁,陳瑋彤,王俊翔,楊曦

      (1.四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610041;2.成都創(chuàng)騰軟件有限公司,四川 成都 610095)

      0 引言

      為突破國外組織、機(jī)構(gòu)對(duì)操作系統(tǒng)配套軟件集成開發(fā)環(huán)境的壟斷,彌補(bǔ)國內(nèi)研發(fā)的操作系統(tǒng)軟件生態(tài)不成熟、國內(nèi)研發(fā)的操作系統(tǒng)對(duì)國產(chǎn)處理器支持不充分的問題,本項(xiàng)目實(shí)現(xiàn)了一個(gè)基于OSGi規(guī)范的嵌入式軟件開發(fā)環(huán)境平臺(tái)。該嵌入式軟件開發(fā)環(huán)境支持銀河麒麟操作系統(tǒng),可以運(yùn)行在國產(chǎn)飛騰處理器上,實(shí)現(xiàn)了對(duì)嵌入式軟件開發(fā)過程的信息創(chuàng)新,在自主運(yùn)行環(huán)境上突破代碼編輯、管理、編譯、項(xiàng)目管理、過程控制、項(xiàng)目發(fā)布、代碼調(diào)試、覆蓋率分析、性能優(yōu)化等關(guān)鍵技術(shù)。

      嵌入式軟件因其實(shí)用性和靈活性,在近年來越來越受到人們的歡迎[1],而嵌入式平臺(tái)的軟件開發(fā)與桌面軟件開發(fā)有很大的不同,其一般需要使用交叉編譯和交叉調(diào)試環(huán)境,這意味著需要在宿主機(jī)上實(shí)現(xiàn)代碼的編譯,而代碼的運(yùn)行則是在目標(biāo)機(jī)上,這使得編譯和調(diào)試的過程更加復(fù)雜[2]。在一個(gè)軟件的開發(fā)周期中,軟件調(diào)試需要的時(shí)間往往占總開發(fā)時(shí)間的一半以上,一個(gè)好的調(diào)試環(huán)境可以極大地加快軟件的開發(fā)速度[3]。

      雖然目前已有少量針對(duì)國內(nèi)研發(fā)的操作系統(tǒng)的交叉調(diào)試軟件[4],但是總體來看,國內(nèi)研發(fā)的操作系統(tǒng)下的交叉調(diào)試軟件還是不足。針對(duì)目前在適配國內(nèi)研發(fā)的操作系統(tǒng)中嵌入式軟件開發(fā)工具的缺失,開發(fā)了一個(gè)適用于國產(chǎn)銀河麒麟操作系統(tǒng)的嵌入式軟件開發(fā)環(huán)境。在本文中,主要描述了嵌入式開發(fā)環(huán)境的調(diào)試部分,詳細(xì)介紹了實(shí)現(xiàn)調(diào)試功能的各個(gè)組件及其功能,說明了調(diào)試流程的運(yùn)行原理,最后給出了調(diào)試過程的圖形化界面。

      1 Eclipse平臺(tái)

      1.1 Eclipse基礎(chǔ)框架

      Eclipse項(xiàng)目是一個(gè)由多個(gè)軟件公司參與研究和推廣的通用集成開發(fā)環(huán)境,是一個(gè)開放源代碼的、使用Java開發(fā)的可擴(kuò)展開發(fā)平臺(tái),其核心是動(dòng)態(tài)發(fā)現(xiàn)插件(Plugin)的體系結(jié)構(gòu)[5]。Eclipse采用以O(shè)SGi規(guī)范為基礎(chǔ)實(shí)現(xiàn)的一個(gè)微內(nèi)核,該微內(nèi)核負(fù)責(zé)處理基本環(huán)境的后臺(tái)工作,其余工作由按規(guī)范開發(fā)的插件完成。

      Eclipse由多個(gè)子系統(tǒng)構(gòu)成,包括平臺(tái)運(yùn)行庫(Platform Runtime)、工作區(qū)(workspace)、工作臺(tái)(workbench)、圖形API(SWT/JFace)、Java開發(fā)環(huán)境插件(JDT)、插件開發(fā)環(huán)境(PDE)等核心部分[6]。圖1為Eclipse的體系結(jié)構(gòu)。

      圖1 Eclipse 體系結(jié)構(gòu)

      通過集成來自不同供應(yīng)商的插件,Eclipse可以不斷擴(kuò)展,實(shí)現(xiàn)各種不同的功能。各個(gè)工具建造者通過構(gòu)建符合Eclipse要求的插件來擴(kuò)展Eclipse的功能[7]。

      Eclipse目前已經(jīng)成為編寫嵌入式軟件集成開發(fā)環(huán)境的主流平臺(tái),包含了嵌入式軟件開發(fā)調(diào)試過程中的各種工具,如源代碼編輯、項(xiàng)目構(gòu)建、交叉運(yùn)行、交叉調(diào)試、交叉測試等。

      1.2 Eclipse插件技術(shù)

      Eclipse平臺(tái)的子系統(tǒng)都依靠插件的形式實(shí)現(xiàn),插件是一種按照指定應(yīng)用程序接口規(guī)范編寫的程序。插件技術(shù)使得系統(tǒng)結(jié)構(gòu)清晰明了,提高了可維護(hù)性和移植性,便于調(diào)整系統(tǒng)功能,每個(gè)插件之間的連接關(guān)系是通過聲明擴(kuò)展點(diǎn)和擴(kuò)展其它插件聲明的擴(kuò)展點(diǎn)來實(shí)現(xiàn)的[8]。

      當(dāng)Eclipse啟動(dòng)時(shí),平臺(tái)運(yùn)行庫(Platform Runtime)將掃描Plugins目錄下所有插件,然后將插件逐個(gè)添加到注冊(cè)表中,但此時(shí)并不會(huì)激活系統(tǒng)注冊(cè)表中的插件,而是僅僅加載各個(gè)插件的配置文件中的信息,只有當(dāng)用戶在使用過程中真正需要某個(gè)插件時(shí),平臺(tái)才會(huì)將該插件的執(zhí)行文件調(diào)入內(nèi)存并激活使用。這種機(jī)制可以有效避免內(nèi)存浪費(fèi),當(dāng)該插件不再使用時(shí),系統(tǒng)將適時(shí)將其清除出內(nèi)存。

      擴(kuò)展點(diǎn)在Eclipse中作為一個(gè)松耦合的功能模塊被廣泛使用。在開發(fā)插件時(shí),開發(fā)人員需要在插件清單中聲明所開發(fā)插件的擴(kuò)展點(diǎn),提供接口和相關(guān)類的最小集合供他人使用。當(dāng)其它插件需要使用到該插件時(shí),需要聲明該擴(kuò)展點(diǎn)的擴(kuò)展項(xiàng),實(shí)現(xiàn)其接口,并引用提供的類或基于提供的類進(jìn)行創(chuàng)建。

      1.3 GDB調(diào)試器

      GBD是GNU開源組織發(fā)布的跨平臺(tái)源碼級(jí)調(diào)試工具,可以用于C/C++等程序的跟蹤調(diào)試。在嵌入式系統(tǒng)開發(fā)中,開發(fā)人員能夠使用GDB以遠(yuǎn)程調(diào)試的方式控制目標(biāo)機(jī)上的程序,實(shí)現(xiàn)單步運(yùn)行、設(shè)置斷點(diǎn)、查看內(nèi)存信息、和目標(biāo)平臺(tái)交換信息等功能。GDB可以和目標(biāo)機(jī)進(jìn)行高效的交互,其在遠(yuǎn)程調(diào)試的動(dòng)態(tài)性和實(shí)時(shí)性等方面也有明顯優(yōu)勢[9]。

      使用GDB調(diào)試器連接目標(biāo)機(jī)時(shí),可以使用通信端口或者TCP/IP的方式進(jìn)行通信。在進(jìn)行主從通信時(shí),需要在目標(biāo)機(jī)上維持一個(gè)進(jìn)程,稱之為目標(biāo)機(jī)代理,其作用是執(zhí)行從宿主機(jī)調(diào)試器發(fā)送過來的調(diào)試命令,并及時(shí)向宿主機(jī)調(diào)試器反饋目標(biāo)機(jī)的狀態(tài)信息和異常事件。宿主機(jī)調(diào)試器與目標(biāo)機(jī)代理之間的通信遵循“GDB遠(yuǎn)程串行協(xié)議”,簡稱“GDB RSP協(xié)議”[10]。

      2 基于Equinox OSGi框架的交叉調(diào)試環(huán)境的實(shí)現(xiàn)

      2.1 交叉調(diào)試結(jié)構(gòu)

      本嵌入式軟件開發(fā)環(huán)境的交叉調(diào)試功能由三個(gè)模塊構(gòu)成,分別為“目標(biāo)機(jī)管理”、“調(diào)試環(huán)境”、“控制臺(tái)”,調(diào)試模塊結(jié)構(gòu)如圖2所示。在我們實(shí)現(xiàn)的信息創(chuàng)新集成開發(fā)環(huán)境中,宿主機(jī)搭載了使用國產(chǎn)飛騰處理器的銀河麒麟操作系統(tǒng),目標(biāo)機(jī)搭載了使用國產(chǎn)龍芯處理器的嵌入式操作系統(tǒng)。

      圖2 調(diào)試模塊結(jié)構(gòu)

      2.1.1 目標(biāo)機(jī)管理

      “目標(biāo)機(jī)管理”模塊是宿主機(jī)調(diào)試類工具和目標(biāo)機(jī)服務(wù)器進(jìn)行通信的中心,由“遠(yuǎn)程系統(tǒng)管理插件”和“目標(biāo)機(jī)服務(wù)器”構(gòu)成?!斑h(yuǎn)程系統(tǒng)管理插件”提供目標(biāo)機(jī)連接的創(chuàng)建、刪除、連接、斷開等功能,“目標(biāo)機(jī)服務(wù)器”用于實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)之間數(shù)據(jù)的路由和交換功能,可通過網(wǎng)絡(luò)方式為遠(yuǎn)程宿主機(jī)提供調(diào)試服務(wù)。

      其提供以下功能:①目標(biāo)機(jī)連接管理,提供圖形化的用戶界面對(duì)目標(biāo)機(jī)連接進(jìn)行管理;②支持物理通信連接復(fù)用,可在單一物理連接上實(shí)現(xiàn)多個(gè)邏輯連接;③多目標(biāo)機(jī)連接,支持一臺(tái)宿主機(jī)同時(shí)連接多臺(tái)目標(biāo)機(jī);④目標(biāo)機(jī)共享,支持遠(yuǎn)程宿主機(jī)利用本地宿主機(jī)作為跳板,連接目標(biāo)機(jī)。

      2.1.2 調(diào)試環(huán)境

      調(diào)試環(huán)境提供從宿主機(jī)下載執(zhí)行程序到目標(biāo)機(jī)的功能以及在宿主機(jī)上控制目標(biāo)機(jī)上代碼運(yùn)行的功能。在宿主機(jī)的源代碼上設(shè)置斷點(diǎn),通過調(diào)試環(huán)境可以控制目標(biāo)機(jī)運(yùn)行到斷點(diǎn)處暫停,并且查看和修改目標(biāo)機(jī)當(dāng)前運(yùn)行狀態(tài)的上下文,如內(nèi)存數(shù)據(jù)、寄存器當(dāng)前值。

      調(diào)試環(huán)境提供基本的調(diào)試功能,包括:運(yùn)行控制、斷點(diǎn)管理、符號(hào)表管理、信息查詢、數(shù)據(jù)修改。為用戶提供了三種斷點(diǎn):行斷點(diǎn)、表達(dá)式斷點(diǎn)、數(shù)據(jù)斷點(diǎn)。其中,行斷點(diǎn)和表達(dá)式斷點(diǎn)都可以由軟件斷點(diǎn)和硬件斷點(diǎn)兩種方式實(shí)現(xiàn),而數(shù)據(jù)斷點(diǎn)只能由硬件斷點(diǎn)方式實(shí)現(xiàn)。

      調(diào)試環(huán)境提供“系統(tǒng)級(jí)調(diào)試”和“分區(qū)級(jí)調(diào)試”兩種調(diào)試方式?!跋到y(tǒng)級(jí)調(diào)試”在斷點(diǎn)或異常的處理過程中會(huì)使得整個(gè)系統(tǒng)暫停,等待用戶的下一步命令,其調(diào)試的對(duì)象是整個(gè)目標(biāo)機(jī)系統(tǒng);“分區(qū)級(jí)調(diào)試”在斷點(diǎn)或異常的處理過程中,只停止被調(diào)試的分區(qū),其余分區(qū)照常運(yùn)行,被調(diào)試的對(duì)象是用戶指定的分區(qū)。

      2.1.3 控制臺(tái)

      控制臺(tái)向開發(fā)者提供命令行操作的功能,包括“宿主機(jī)控制臺(tái)”和“目標(biāo)機(jī)控制臺(tái)”。其中“宿主機(jī)控制臺(tái)”提供一個(gè)菜單可以直接啟動(dòng)宿主機(jī)開發(fā)環(huán)境提供的命令行窗口,“目標(biāo)機(jī)控制臺(tái)”接收開發(fā)者在控制臺(tái)輸入的命令,使用GDB調(diào)試器將命令發(fā)送給目標(biāo)機(jī)并反饋結(jié)果。

      2.2 交叉調(diào)試流程

      與其它平臺(tái)的交叉調(diào)試流程類似[11],我們的交叉調(diào)試工具在進(jìn)行調(diào)試時(shí),大致分為三個(gè)步驟。

      第一步,宿主機(jī)與目標(biāo)機(jī)之間的連接,初始化二者的交叉調(diào)試環(huán)境,包括啟動(dòng)宿主機(jī)端的遠(yuǎn)程調(diào)試器和目標(biāo)機(jī)端的代理服務(wù)器等操作。

      第二步,“調(diào)試環(huán)境”組件利用“目標(biāo)機(jī)管理”組件,發(fā)送一系列內(nèi)存讀寫的指令,將需要運(yùn)行的程序鏡像下載到目標(biāo)機(jī)的內(nèi)存上。并且根據(jù)用戶在調(diào)試頁面的操作,將斷點(diǎn)信息傳輸?shù)侥繕?biāo)機(jī),在適當(dāng)位置設(shè)置斷點(diǎn),方便用戶進(jìn)行遠(yuǎn)程調(diào)試。

      第三步,開始運(yùn)行程序,在遇到用戶設(shè)置的斷點(diǎn)之前,程序?qū)⒄?zhí)行。當(dāng)程序運(yùn)行遇到斷點(diǎn)時(shí),程序的控制權(quán)將從目標(biāo)機(jī)處理器轉(zhuǎn)移到目標(biāo)機(jī)的代理服務(wù)器上,而此時(shí)代理服務(wù)器將通過“目標(biāo)機(jī)管理”組件向宿主機(jī)報(bào)告遇到斷點(diǎn),并發(fā)送斷點(diǎn)的上下文信息,方便宿主機(jī)上的用戶判斷下一步的操作,此時(shí)目標(biāo)機(jī)服務(wù)器將一直等待宿主機(jī)的回復(fù),不會(huì)有下一步操作。宿主機(jī)在得知目標(biāo)機(jī)運(yùn)行遇到斷點(diǎn)之后,便可以如本機(jī)調(diào)試一樣,查看和修改斷點(diǎn)時(shí)刻的寄存器信息、內(nèi)存信息等上下文信息。

      2.3 應(yīng)用實(shí)例

      建目標(biāo)機(jī)連接時(shí),由于目標(biāo)機(jī)使用的處理器為國產(chǎn)龍芯處理器,其體系結(jié)構(gòu)為mips,因此設(shè)置體系結(jié)構(gòu)為mips,連接類型為UDP,在連接參數(shù)中有目標(biāo)機(jī)服務(wù)器的調(diào)試端口IP地址,設(shè)置超時(shí)時(shí)間為5000ms。若發(fā)生連接超時(shí),可以重啟IDE再嘗試連接。連接頁面如圖3所示。

      圖3 連接目標(biāo)機(jī)

      右鍵項(xiàng)目名,選擇調(diào)試,等待一段時(shí)間后,選擇分區(qū)加載。若遇到分區(qū)映像已存在,則選擇覆蓋。選擇界面如圖4所示。

      圖4 選擇加載分區(qū)

      在點(diǎn)擊加載之后,就可以進(jìn)入調(diào)試狀態(tài),在下圖中main.c中雙擊設(shè)置斷點(diǎn),點(diǎn)擊上方工具欄的繼續(xù)按鈕,開始調(diào)試程序,程序會(huì)在斷點(diǎn)處暫停,查看目標(biāo)機(jī)的狀態(tài)信息。調(diào)試界面如圖5所示。

      圖5 調(diào)試界面

      在交叉調(diào)試的過程中,會(huì)使用到多個(gè)調(diào)試按鈕,分別為繼續(xù)、暫掛、終止、斷開連接、單步跳入、單步跳過、單步返回。

      3 結(jié)語

      本文介紹了在國產(chǎn)銀河操作系統(tǒng)下,嵌入式軟件開發(fā)環(huán)境中的調(diào)試功能和實(shí)現(xiàn)技術(shù)。首先對(duì)Eclipse框架和相應(yīng)的插件機(jī)制進(jìn)行了說明,在此基礎(chǔ)上詳細(xì)描述了調(diào)試功能的相關(guān)組件及結(jié)構(gòu),對(duì)具體的調(diào)試流程進(jìn)行了解釋,并且給出了在實(shí)際調(diào)試過程中的用戶界面。通過使用該嵌入式軟件開發(fā)環(huán)境,開發(fā)人員可以較為方便地在銀河麒麟操作系統(tǒng)上開發(fā)針對(duì)龍芯等mips架構(gòu)嵌入式開發(fā)板的軟件,提高了在銀河麒麟操作系統(tǒng)上進(jìn)行嵌入式開發(fā)的效率,豐富了國內(nèi)研發(fā)的操作系統(tǒng)的軟件開發(fā)生態(tài)。

      猜你喜歡
      宿主機(jī)嵌入式軟件斷點(diǎn)
      一類無限可能問題的解法
      實(shí)時(shí)嵌入式軟件的測試技術(shù)
      電子測試(2018年10期)2018-06-26 05:54:08
      虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
      全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      嵌入式計(jì)算機(jī)軟件測試關(guān)鍵技術(shù)的思考
      主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
      嵌入式計(jì)算機(jī)軟件測試關(guān)鍵技術(shù)研究
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
      航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
      在不連接網(wǎng)線的情況下Windows與VM之間如何ping通
      溆浦县| 博兴县| 临朐县| 张家口市| 长沙县| 昌吉市| 晋州市| 西华县| 莎车县| 穆棱市| 福鼎市| 龙陵县| 泊头市| 贵阳市| 临颍县| 南平市| 田东县| 台北县| 馆陶县| 怀远县| 万盛区| 喀喇| 蒲城县| 镇沅| 乌拉特中旗| 咸宁市| 莆田市| 虹口区| 苏尼特右旗| 巴林左旗| 张家港市| 鄂伦春自治旗| 吴堡县| 贞丰县| 江西省| 永嘉县| 亳州市| 宜州市| 永城市| 额济纳旗| 涿鹿县|