丁建成
摘要:在正常的軟件開發(fā)過程中,當一款軟件產(chǎn)品完成開發(fā)并交付客戶,并不等于此項工程就完結(jié)了,負責(zé)軟件開發(fā)的人員還需要處理自己公司開發(fā)出的軟件在使用上存在的缺陷和問題?;赩xWorks操作系統(tǒng)開發(fā)出來的軟件,是支持熱補丁技術(shù)的,這種技術(shù)能在不影響系統(tǒng)運行的基礎(chǔ)上自行完成軟件的修復(fù)。所以,想要在不重啟系統(tǒng)的情況下很好地處理解決軟件在使用時暴露出的各種問題,就必須要對熱補丁的技術(shù)進行深入的分析和研究。因此,以此為基礎(chǔ),結(jié)合一些工作中的實際情況,對VxWorks操作系統(tǒng)的特性及熱補丁系統(tǒng)及其制作過程中涉及的相關(guān)技術(shù)進行了分析研究。
關(guān)鍵詞:VxWorks操作系統(tǒng);特性;熱補丁;制作;技術(shù)
VxWorks系統(tǒng)是一種實時嵌入式的操作系統(tǒng),它能夠給研發(fā)人員提供一些實時高效的中斷管理、通信、任務(wù)調(diào)度等功能。VxWorks是經(jīng)過了深入的實驗和驗證的,現(xiàn)已廣泛地運用在航空、航天、醫(yī)療、通信等多個關(guān)鍵的行業(yè)和領(lǐng)域。
一款軟件產(chǎn)品完成開發(fā)并交付客戶,并不等于此項工程就完結(jié)了,負責(zé)軟件開發(fā)的人員還需要處理自己公司開發(fā)出的軟件在使用上存在的缺陷和問題。對于用VxWorks操作系統(tǒng)開發(fā)出來的軟件,可以使用熱補丁技術(shù)在不影響系統(tǒng)運行的基礎(chǔ)上自行完成軟件的修復(fù),這樣能有效提高軟件的可靠度和安全性,讓軟件的使用壽命進一步延長,同時也能讓軟件維護工作的質(zhì)量再提升,有效地減小軟件的開發(fā)成本。
1VxWorks系統(tǒng)的特點
1.1任務(wù)管理
VxWorks的任務(wù)就是操作系統(tǒng)中代碼運行的一個映像,VxWorks操作系統(tǒng)的模塊要進行運行,通常都是用任務(wù)的方式對其進行調(diào)度,讓其運行;當然,要想動態(tài)啟動或者停止某一項指定的具體任務(wù)時,就可以考慮采用操作系統(tǒng)提供的對應(yīng)的功能函數(shù)。
1.2符號表管理
VxWorks系統(tǒng)在軟件的編譯過程中,有一個匯總符號表的功能,它能將所有的外部和全局變量名和函數(shù)名編譯到一個全局符號表之中。在啟動軟件系統(tǒng)以后,通過調(diào)用操作系統(tǒng)中提供的查詢符號地址的API函數(shù),用函數(shù)名或者變量名等索引到對應(yīng)符號的地址,這樣就提供了動態(tài)修改函數(shù)的技術(shù)基礎(chǔ)。
1.3模塊動態(tài)加載
這款操作系統(tǒng)能把模塊軟件編譯成ELF格式的可以執(zhí)行文件,在加載此文件時可以不需要停止系統(tǒng)的運行。
上面提到的三種功能是VxWorks系統(tǒng)所特有的,有了這三種功能的支持,就可以用熱補丁的方法來修補存在于軟件模塊中的各種問題和缺陷。鑒于后面所做的最新版本的熱補丁是重新實現(xiàn)舊版本下的功能,并對其原有的缺陷和錯誤進行了修改,也就是VxWorks操作系統(tǒng)中運行的軟件產(chǎn)品所制作熱補丁的繼承性質(zhì),所以,在制作熱補丁時必須要特別注意不要遺漏原有的功能。
2熱補丁包制作流程圖
在制作熱補丁時,如果使用的是持續(xù)集成的技術(shù),就能以更高的效率和更好的質(zhì)量來完成熱補丁包的制作。本篇文章所使用的軟件配置管理工具是ClearCase以及持續(xù)集成引擎Jenkins來制作熱補丁包。制作流程如下圖:
3熱補丁代碼的編寫和靜態(tài)檢查
3.1熱補丁代碼編寫
在對熱補丁進行制作之前,需要軟件開發(fā)工程師通過產(chǎn)品的配置管理工程師對熱補丁的軟件代碼基線進行反復(fù)確認,還要對目前加載在軟件基線上的熱補丁包的版本進行確認。開發(fā)設(shè)計人員需要從版本庫里下載需要用到的軟件基線代碼和補丁包的代碼文件,從而進行新版本熱補丁代碼的編寫。在補丁的開發(fā)編寫上,要明確定位存在問題及缺陷的函數(shù),然后才能修補或改進相關(guān)的函數(shù)源代碼,從而對功能代碼進行修改。
對于普通的軟件和補丁軟件的開發(fā),還是有一定的區(qū)別;所以,軟件開發(fā)工程師在進行軟件開發(fā)時,以下的方面是需要注意的地方:
第一,對于補丁在開發(fā)時涉及的代碼方面的問題和缺陷,需要定位到產(chǎn)生問題和缺陷的函數(shù)源代碼后再進行修改,在對對應(yīng)的功能代碼進行修改時,切忌對*h文件中的內(nèi)容進行修改。
第二,在處理有缺陷的源代碼時,要對需要修改的函數(shù)進行保留,可以直接將無關(guān)的函數(shù)刪除或注銷。因為最終我們將通過工具提取熱補丁這部分的目標代碼,其它部分是不被包含到補丁里的。
第三,若是要修改*c文件,必須要插入一個能返回補丁版本號的函數(shù),它所對應(yīng)的返回值應(yīng)該是補丁的版本號。
3.2ClearCase版本庫的代碼更新
持續(xù)集成工具Jenkins需要在版本庫鎖庫之后完成源代碼更新。Jenkins工具執(zhí)行代碼更新時,需要編寫代碼更新的批處理腳本code-update.bat,把代碼更新的腳本配置在任務(wù)中。
3.3代碼靜態(tài)檢查
在開發(fā)工程師將源代碼修改完成之后,還需要使用持續(xù)集成工具Jenkins調(diào)用靜態(tài)的代碼檢查工具Coverity Prevent和PC-Lint對代碼進行常規(guī)的代碼質(zhì)量檢查,以保證熱補丁文件中代碼的質(zhì)量。一般來說,最常用于檢查C、C++源代碼的工具就是PC-Lint,而另一種代碼檢查工具Coverity Prevent則是檢測和解決c、c++、Java和c#等源代碼中存在嚴重問題和缺陷的一種比較先進的自動化檢測工具。除此之外,還必須要檢查補丁源代碼中是否存在strcpy等危險函數(shù)來保證熱補丁的安全性。若在檢測時發(fā)現(xiàn)源代碼中有任何異常,都要第一時間反饋給開發(fā)工程師,通知其對源代碼進行修復(fù)處理,直到發(fā)現(xiàn)的問題被全部解決掉。
4熱補丁的制作過程
函數(shù)熱補丁、模塊熱補丁、熱補丁包是熱補丁的三個層級。一般來說,開發(fā)制作熱補丁是以持續(xù)集成的熱補丁開發(fā)為基礎(chǔ)的。
4.1模塊熱補丁目錄結(jié)構(gòu)
在制作熱補丁的模塊時,要創(chuàng)建一個“產(chǎn)品名一版本號_BASE\VXWORKS\模塊名”這樣的文件夾,用來存儲熱補丁文件和其他相關(guān)的文件。下面是以UPF模塊(User Port Function,用戶端口功能)為例做出的文件夾目錄結(jié)構(gòu)。
4.2模塊熱補丁文件制作過程
用UPF模塊來舉個例子,簡述一下制作模塊的熱補丁文件的流程。
1)將所有涉及的數(shù)據(jù)、文件集成到Jenkins工具里,編寫編譯熱補丁文件。
在制作的最初,要建立一個:“產(chǎn)品名一版本號Patch—Build”這樣組合的構(gòu)建工程。將編譯的任務(wù)配置到Jenkins的任務(wù)管理的界面上,這樣能自動完成編譯熱補丁源程序代碼的任務(wù)。在配置時,要按模塊進行分類,在任務(wù)欄上選取“com-pile”任務(wù)。下圖是具體的配置表。
*.ini配置文件、Makefile文件、補丁編譯腳本和ANT腳本等這些由持續(xù)集成工程師編寫的,需要按計劃開啟相應(yīng)的程序來幫助補丁源代碼編譯工作。同時,還需要把編譯后生成的*.obi文件歸納到UPF.obj的目錄下面。
2)制作模塊熱補丁文件
在完成對模塊熱補丁文件的編寫工作后,還需要及時的制作好模塊UPF熱補丁文件和補丁中間文件。
首先,要按照。.obj文件的數(shù)量,在UPF\obi文件夾中生成從HP0001到HPOOOX的子目錄。在制作熱補丁的中間文件時,要使用Tornado下的makepatch.exe工具來幫助完成制作,還要通過obj的補丁文件來生成與其對應(yīng)的符號表信息、熱補丁以及制作熱補丁文件過程日志等文件,并存放在各自對應(yīng)的文件夾中。下表是HP0001文件夾為例所要存放的文件。
其次,模塊熱補丁文件的生成需要依靠熱補丁中間文件,所以,要編寫并處理好腳本。因為繼承性是模塊熱補丁文件的特有性質(zhì),最新的版本肯定會包含上一個版本的所有功能和接口,所以對于不是第一次編譯的熱補丁文件,就必須要結(jié)合舊版本和最新版本的熱補丁中間文件來生成最新版的模塊熱補丁文件。UPF patch.pat是模塊UPF文件的熱補丁文件,這要保存到UPF.release文件夾里。
4.3熱補丁包打包
在將所有模塊的熱補丁文件完成制作以后,需要把這些模塊的熱補丁文件進行打包。因為最新版本的熱補丁版本包會將舊版的版本包進行收編,然后再編譯形成新的熱補丁文件,這也就是熱補丁版本包的繼承性質(zhì)。與此同時,還要不斷更新熱補丁的版本號。
1)創(chuàng)建熱補丁包文件夾。
在完成熱補丁文件的制作以后,還要創(chuàng)建一個專門存放熱補丁包的文件夾,把所有模塊的熱補丁文件*.pat復(fù)制到熱補丁包文件夾里邊的bin/new目錄下。如果有模塊的熱補丁文件是已經(jīng)更新過的,那就復(fù)制最新版的;如果沒有更新過,那就復(fù)制原來的模塊文件,再把其他相關(guān)的文件復(fù)制到制定的目錄里。
2)熱補丁包打包。
通常情況下,要修改打包配置文件autorun.ini,要依次填寫本次版本號、基線版本號、源文件目錄和目的文件目錄等這些信息。運行打包工具packer.exe完成熱補丁版本包打包。在對熱補丁包完成制作后,要把補丁版本包的文件名稱改為:產(chǎn)品名版本號壓縮為loadfiles.rar。
5結(jié)束語
隨著科學(xué)技術(shù)的飛速發(fā)展,嵌入式的系統(tǒng)及其對應(yīng)的升級軟件也暴露出了一些缺陷和問題,而熱補丁技術(shù)為這些缺陷和問題的修復(fù)提供了方法和技術(shù)。長時間的工作實踐證明,熱補丁技術(shù)在不影響嵌入式系統(tǒng)正常運行的情況下,能對系統(tǒng)產(chǎn)生的問題和漏洞進行及時有效的修復(fù);在VxWorks系統(tǒng)下的軟件使用熱補丁技術(shù),能將軟件的可靠性和安全性有效的提升,而且還能將軟件開發(fā)的成本降到最低。本文中提到的使用持續(xù)性集成技術(shù)來開發(fā)熱補丁包的想法及所有論證,都能充分的說明此項技術(shù)在軟件開發(fā)效率和軟件熱補丁質(zhì)量的提升方面有很強的優(yōu)勢,它不但能將工程師在系統(tǒng)開發(fā)時遺留的軟件源代碼的缺陷和問題進行及時的反饋,還能幫助工程師及時修補源代碼的缺陷,更能給項目的管理提供很好的保證。