劉彥龍
摘要:想要實現對嵌入式系統驅動程序代碼的獨立加載和升級,就要在了解嵌入式軟件開發特點的基礎上,通過使用獨立加載等技術,完成相關的升級任務。該技術顛覆了以往對于多個嵌入式文件合成的傳統模式。該技術的應用原理主要是將軟件模塊進行分離,通過硬件引擎掃描設備對硬件進行全面掃描,在通過程序加載器構建相對應的驅動程序鏈表以及設備鏈表,最后通過每個軟件模塊的位置信息,將其分別加載到不同的應用程序和驅動程序之中,以此來完成加載合成任務。該技術的研究與應用為各軟件的獨立應用和開發提供了十分便捷的條件,也為軟件模塊的動態擴展增加了優勢,最大限度的降低了協作嵌入式軟件時人力與物力的投入。
關鍵詞:嵌入式;獨立加載;驅動程序;獨立升級
以往在進行嵌入式系統軟件的開發時,一般是將多個不同的模塊進行編譯以及合成,變成一個目標文件、操作系統目標或者應用程序目標文件,該方法的目的就是為了將文件進行固化。這種做法的優點是簡單便捷易操作。但是計算機系統的全面發展,嵌入式系統作為整體的一個分支,也變得越來越復雜,傳統的方法在如今龐大的軟件規模之下顯得越來越力不從心。另外,現在的嵌入式系統大多數都不是由同一個單位進行研制,而是由多個單位共同協作完成,因此當對一個軟件模塊進行修改時,我們無法確定該處修改是否會對其他軟件模塊以及整個系統產生影響,在最后的調試與檢測階段就會投入更大的精力,嚴重影響進度。
如果將傳統的手段進行顛覆,將各個模塊都作為獨立的個體,分別對其進行編譯和加載,這將大大保護了各個模塊的開發安全性和可靠性。通過研究,在VxWorks5.5操作系統下,驅動模塊與應用程序代碼的分離以及獨立加載可以成為現實。該方法的出現為嵌入式軟件的開發以及提高開發研制效率提供了有效的途徑。
一、模塊分離
想要真正實現不同的驅動模塊與程序代碼的獨立加載,前提是不同的模塊之間可以被單獨分離出來,自成一體,并且將各個模塊編譯成相對獨立的有效文件。以往使用的方法是目標機直接將驅動程序庫,并將程序庫連接到應用程序里,同時在主機上編譯出目標文件,最后再在目標機上執行該目標文件。該方法叫做緊耦合式目標文件方式。
為了實現將各個軟件模塊分離和獨立,我們需要將以往的緊耦合式目標文件方式變成松耦合式目標文件方式。將緊變成松就是為了能夠保證各個驅動程序從各個不同的應用程序中分離開,繼而各自生成不同的目標文件。在該項任務完成后,我們需要將不同的目標文件保存在目標機中對應的位置,并且對現有文件進行優化和完善,為其以后的加載以及運行提供有效的選項以及運行參數。
二、獨立加載方案
在整個獨立加載方案中,最為核心以及關鍵的內容是設備管理器。當硬件自動掃描引擎檢測到硬件設備時,就會馬上將該設備信息通知給程序加載器。程序加載器會按照接收到的信息在整個設備信息庫中進行搜索,當找到想匹配的配置文件后,就可以根據配置文件的位置進而獲得存放驅動程序目標文件的具體位置,這樣就可以實現自動加載。整個任務的執行過程就是硬件設備被逐個掃描的過程,當所有設備的驅動程序都按照對應的配置文件找到目標文件的存儲位置并且完成獨立加載后,該項任務完成。
三、軟件實現
(一)硬件自動掃描
首先,將系統啟動,操作系統被賦予執行控制權。首先,操作系統要在制定的目錄中搜索并完成設備管理器的加載,以便其能夠執行接下來的任務。在一般操作中,有兩類設備可能需要設備管理器掃描加載:其一是PCI設備,其二是非PCI設備。對于PCI設備,如果設備管理器能夠根據PCI的總線號以及設備號等查找到該設備,那么就可以將其調價到設備鏈表之中;對于非PCI設備,則需要給設備管理器預設非PCI設備信息,然后才能對該設備進行查找以及添加設備鏈表的工作。
設備鏈表中的所有設備,都可以通過設備鏈表進行依次查找,并且對查找到的設備進行驅動,真正實現獨立加載以及驅動的目的。
(二)驅動加載
驅動描述文件和驅動目標碼是所有驅動程序都需要的兩個文件。驅動目標碼指的就是驅動程序中的可執行代碼。當系統獲取設備信息以后,可以開始分析程序的描述文件,并且根據根據想跟文件以及加載驅動程序碼對相應的執行相應的入口函數。
驅動描述文件可以等同為一個格式化的文本文件。文件中包含許多與設備相關的重要信息,例如支持操作系統、文件格式、驅動版本號等等的信息。不同的設備命名格式也不一樣。例如PCI設備的安裝文件的命名方式就比非PCI設備的要繁瑣一些,在具體的操作中要注意檢查和區分。
四、結束語
對于嵌入式軟件模塊獨立加載的整個課題來說,驅動程序與應用程序代碼的分離以及獨立加載只是該課題中的一個特例,但該方法也能用在多個應用程序模塊的分離以及獨立加載,有舉一反三的效果。該技術的實現,大大改進了傳統加載模式的弊端,將硬件的升級以及部分的改進都變成一件簡單的事情,大大緩解了相關從業人員的從業壓力,并且更是為軟件模塊的獨立升級提供了便捷的方法。對于軟件模塊的開發與研制更是起到了不可小覷的積極推動作用。
目前為止,嵌入式設備驅動程序獨立加載技術在許多產品中都由廣泛的應用,這也大大驗證了該方法的有效性和實用性,相信該方法在未來將完全取代傳統方法,成為一次新的顛覆。
參考文獻:
[1]Wind River 公司Workbench Online Help(SystemWorkbench 3.2 在線幫助)[M].Wind River 公司,2010.
[2]張楊,于銀濤.Vxworks 內核、設備驅動與BSP 開發詳解[M].第2 版.北京:人民郵電出版社,2011.
[3]VxWorks 啟動解析B/OL].[2009-09-21].http://blog.csdn.net/bianhonglei/archive/2009/09/21/4576534.aspx.
[4]VxWorks 動態加載.out 文件[EB/OL].[2010-04-09].http://blog.sina.com.cn/s/blog_4e6f376d0100huhr.html
[5]孔祥營,張寶山,俞烈彬. VxWorks 驅動及分布式編程[M].北京: 中國電力出版社,2007.
[6]VxWorks 系統中映像及其加載過程[EB/OL].[2006-07-26] .http://denven.blog.hexun.com/4813569_d.html.
[7]用函數jump 表解決模塊加載順序問題[EB/OL]. [2007-01-03].http://blogold.chinaunix.net/u/20871/showart_223263.html.