国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法

      文檔序號(hào):6556228閱讀:131來(lái)源:國(guó)知局

      專利名稱::一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法
      技術(shù)領(lǐng)域
      :本發(fā)明屬于計(jì)算機(jī)操作系統(tǒng)
      技術(shù)領(lǐng)域
      ,特別是提供一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)的方法。
      背景技術(shù)
      :隨著嵌入式技術(shù)的快速發(fā)展和廣泛應(yīng)用,嵌入式技術(shù)已與人們的日常生活緊密結(jié)合,不論是民用還是軍工產(chǎn)品都對(duì)嵌入式應(yīng)用提出越來(lái)越高的要求,主要包括實(shí)時(shí)性、高可靠性、高可用性等關(guān)鍵特性,其表現(xiàn)為提供給用戶不間斷的服務(wù)。驅(qū)動(dòng)程序在嵌入式系統(tǒng)中占有至關(guān)重要的地位,在嵌入式系統(tǒng)中,一般是沒(méi)有虛擬內(nèi)存管理的,設(shè)備驅(qū)動(dòng)程序直接使用的是物理內(nèi)存。研究表明,驅(qū)動(dòng)程序失效是導(dǎo)致系統(tǒng)失效的主要原因,如果驅(qū)動(dòng)程序出現(xiàn)錯(cuò)誤,系統(tǒng)必須中斷該驅(qū)動(dòng)程序的運(yùn)行,若驅(qū)動(dòng)程序不是以可加載模塊的形式存在,或者雖然是以可加載模塊的形式存在,但出錯(cuò)時(shí)仍然有相關(guān)任務(wù)在使用該驅(qū)動(dòng)程序,這樣是無(wú)法卸載驅(qū)動(dòng)程序的,錯(cuò)誤也就得不到修正,唯有中斷整個(gè)系統(tǒng)的運(yùn)行,系統(tǒng)中所有的任務(wù)都被停止,等待把錯(cuò)誤修正之后,再重新啟動(dòng)系統(tǒng)。然而,在很多對(duì)高可用性要求較高的領(lǐng)域,如電信級(jí)應(yīng)用,要求程序不間斷地運(yùn)行,更加不能容忍因升級(jí)驅(qū)動(dòng)程序而使整個(gè)系統(tǒng)中斷運(yùn)行,因此,必須采用一種驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)的方法。而現(xiàn)有的驅(qū)動(dòng)程序升級(jí)技術(shù)中,一種技術(shù)是針對(duì)操作系統(tǒng)核心支持可安裝模塊功能,可安裝模塊是經(jīng)過(guò)編譯但尚未連接的目標(biāo)文件,這種技術(shù)可以在系統(tǒng)運(yùn)行時(shí)動(dòng)態(tài)地加載模塊到內(nèi)核中,內(nèi)核提供一些函數(shù)入口、全局變量等符號(hào),可安裝模塊可以在程序中調(diào)用這些內(nèi)核函數(shù)和訪問(wèn)這些全局變量,當(dāng)內(nèi)核需要升級(jí)驅(qū)動(dòng)程序時(shí),必須先卸載這個(gè)驅(qū)動(dòng)程序,中斷所有任務(wù)對(duì)該設(shè)備的訪問(wèn),一旦驅(qū)動(dòng)程序被卸載,若有任務(wù)要訪問(wèn)相應(yīng)的設(shè)備必然失敗,待新的驅(qū)動(dòng)程序模塊被加載后,相應(yīng)的設(shè)備才處于可用狀態(tài),這種驅(qū)動(dòng)程序升級(jí)技術(shù)需停止系統(tǒng)對(duì)設(shè)備的訪問(wèn),可能造成任務(wù)運(yùn)行失效,而且在業(yè)務(wù)密集的環(huán)境下,設(shè)備驅(qū)動(dòng)程序一直有任務(wù)在訪問(wèn),可能無(wú)法卸載設(shè)備驅(qū)動(dòng)模塊,給升級(jí)帶來(lái)了困難。另一種驅(qū)動(dòng)程序升級(jí)技術(shù)是針對(duì)操作系統(tǒng)核心不支持可安裝模塊的功能,這在嵌入式系統(tǒng)中比較常見(jiàn),操作系統(tǒng)核心和驅(qū)動(dòng)程序是個(gè)運(yùn)行整體,驅(qū)動(dòng)程序不是以模塊的形式存在,在這種情況下,如果目標(biāo)系統(tǒng)出現(xiàn)問(wèn)題,要升級(jí)驅(qū)動(dòng)程序,需重新編譯操作系統(tǒng)以及驅(qū)動(dòng)程序源碼,編譯完成后生成新的可執(zhí)行映象,然后,停止目標(biāo)系統(tǒng)的運(yùn)行,將新的系統(tǒng)映象下載到目標(biāo)機(jī)上,再重新啟動(dòng)目標(biāo)系統(tǒng),這種驅(qū)動(dòng)程序升級(jí)的方法使目標(biāo)系統(tǒng)中斷時(shí)間較長(zhǎng),而且是完全停止了目標(biāo)系統(tǒng)的所有任務(wù)的運(yùn)行,嚴(yán)重影響了業(yè)務(wù)的正常處理。在嵌入式系統(tǒng)中,傳統(tǒng)的驅(qū)動(dòng)程序升級(jí)技術(shù)都必須停止驅(qū)動(dòng)模塊的運(yùn)行或目標(biāo)系統(tǒng)的運(yùn)行才可以進(jìn)行升級(jí)工作,這樣是不能滿足高可用的應(yīng)用需求的。
      發(fā)明內(nèi)容本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)的方法,能夠在不卸載驅(qū)動(dòng)程序的條件下,對(duì)驅(qū)動(dòng)程序進(jìn)行動(dòng)態(tài)升級(jí),以降低系統(tǒng)的宕機(jī)時(shí)間,提高系統(tǒng)的可靠性,使之能夠高效、穩(wěn)定地運(yùn)行于嵌入式平臺(tái),滿足高可用的應(yīng)用環(huán)境需求。為了實(shí)現(xiàn)上述發(fā)明目的,采用的技術(shù)方案如下一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,包括如下步驟(1)在核心代碼中為每一個(gè)驅(qū)動(dòng)程序增設(shè)驅(qū)動(dòng)程序入口處任務(wù)控制程序,所述任務(wù)控制程序設(shè)置有一個(gè)全局變量driver_upgrading_flag,通過(guò)其取值為TRUE或FALSE來(lái)表明當(dāng)前驅(qū)動(dòng)程序是否正在執(zhí)行動(dòng)態(tài)升級(jí)過(guò)程,并初始化為FALSE;(2)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為TRUE,從而將訪問(wèn)該驅(qū)動(dòng)程序的任務(wù)掛起,并插入到等待隊(duì)列waitq_driver_upgrading中;(3)將升級(jí)文件編譯并加載到內(nèi)核地址空間;(4)在驅(qū)動(dòng)程序的函數(shù)入口處引入升級(jí)文件的地址處寫入跳轉(zhuǎn)指令,跳轉(zhuǎn)地址為升級(jí)文件的函數(shù)入口地址;(5)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為FALSE,將訪問(wèn)該驅(qū)動(dòng)程序而被掛起的任務(wù)喚醒,恢復(fù)運(yùn)行。驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)的關(guān)鍵是對(duì)訪問(wèn)驅(qū)動(dòng)程序的任務(wù)進(jìn)行控制,本發(fā)明通過(guò)設(shè)置全局標(biāo)志變量driver_upgrading_flag來(lái)通知任務(wù)驅(qū)動(dòng)程序是否處于升級(jí)狀態(tài),從而將任務(wù)掛起或讓其訪問(wèn)驅(qū)動(dòng)程序。如步驟(1)所述任務(wù)控制程序當(dāng)系統(tǒng)任務(wù)調(diào)用驅(qū)動(dòng)程序時(shí),判斷升級(jí)標(biāo)志driver_upgrading_flag的取值,如果為FALSE,表明驅(qū)動(dòng)程序處于可用狀態(tài),則讓系統(tǒng)任務(wù)調(diào)用驅(qū)動(dòng)程序,如果為TURE,則表明驅(qū)動(dòng)程序處于升級(jí)狀態(tài),不可以調(diào)用驅(qū)動(dòng)程序相關(guān)方法,通過(guò)操作系統(tǒng)的任務(wù)控制機(jī)制將系統(tǒng)任務(wù)掛起到等待隊(duì)列waitq_driver_upgrading中。步驟(3)中,升級(jí)文件包括編寫的新的驅(qū)動(dòng)程序接口函數(shù)。驅(qū)動(dòng)程序的接口方法是由系統(tǒng)操作方法跳轉(zhuǎn)表(operatingtable)統(tǒng)一定義的,每個(gè)具體的驅(qū)動(dòng)程序?qū)嵗龑?shí)現(xiàn)相應(yīng)的操作方法,如串口驅(qū)動(dòng)write方法對(duì)應(yīng)的是serial_write驅(qū)動(dòng)接口函數(shù)。所述步驟(3)只允許特權(quán)用戶操作。加載升級(jí)文件到內(nèi)核地址空間,需編寫特權(quán)內(nèi)存映射方法,考慮系統(tǒng)的安全性,只有特權(quán)用戶才可以調(diào)用該方法。加載升級(jí)文件過(guò)程中,進(jìn)行代碼的連接解析,與操作系統(tǒng)核心形成一個(gè)可執(zhí)行的整體。步驟(3)的升級(jí)文件加載過(guò)程通過(guò)升級(jí)文件代碼的連接解析,與操作系統(tǒng)核心形成一個(gè)可執(zhí)行的整體。所述步驟(4)還通過(guò)編譯操作系統(tǒng)源代碼生成可執(zhí)行映像,以提取驅(qū)動(dòng)程序函數(shù)名與入口地址對(duì)照表。步驟(4)主要進(jìn)行的更改驅(qū)動(dòng)程序接口函數(shù)的地址,需編寫特殊的系統(tǒng)調(diào)用函數(shù),由動(dòng)態(tài)升級(jí)工具軟件調(diào)用系統(tǒng)方法,解析寫入的函數(shù)地址以及跳轉(zhuǎn)的地址。本發(fā)明所設(shè)計(jì)的驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其功能特點(diǎn)可以細(xì)分為如下幾個(gè)方面a、動(dòng)態(tài)加載利用升級(jí)工具可以動(dòng)態(tài)地將新的代碼應(yīng)用于正在運(yùn)行的程序內(nèi)存區(qū)域中,從而無(wú)需重新啟動(dòng)系統(tǒng)進(jìn)行裝載程序的二進(jìn)制文件即可完成驅(qū)動(dòng)程序的升級(jí)。b、增加函數(shù)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)技術(shù)可以在不停止系統(tǒng)的情況下,為驅(qū)動(dòng)程序增加新的接口函數(shù)。c、替換函數(shù)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)技術(shù)可以在不停止系統(tǒng)的情況下,替換運(yùn)行中的驅(qū)動(dòng)程序接口函數(shù),從而實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序的動(dòng)態(tài)維護(hù)與更新。d、Bug定位驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)技術(shù)可以定位系統(tǒng)的Bug信息,在系統(tǒng)運(yùn)行過(guò)程中出現(xiàn)Bug時(shí),可以采用動(dòng)態(tài)升級(jí)的方式給系統(tǒng)加入一些收集信息的代碼,對(duì)驅(qū)動(dòng)程序的內(nèi)部狀態(tài)及實(shí)時(shí)數(shù)據(jù)進(jìn)行分析診斷。本發(fā)明通過(guò)將升級(jí)文件動(dòng)態(tài)加載在內(nèi)核的地址空間,并在驅(qū)動(dòng)程序的入口處通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)至升級(jí)文件的入口地址,實(shí)現(xiàn)了驅(qū)動(dòng)程序的動(dòng)態(tài)升級(jí),不用卸載原驅(qū)動(dòng)程序,也無(wú)需停止操作系統(tǒng)的運(yùn)行;同時(shí),通過(guò)為每一個(gè)驅(qū)動(dòng)程序增設(shè)驅(qū)動(dòng)程序入口處任務(wù)控制程序,通過(guò)任務(wù)控制程序在任務(wù)訪問(wèn)驅(qū)動(dòng)程序時(shí),判斷驅(qū)動(dòng)程序是否正處于升級(jí)過(guò)程,如果處于升級(jí)過(guò)程,則改變?nèi)蝿?wù)的進(jìn)程狀態(tài),將其掛起到等待對(duì)列中,待升級(jí)完成后再喚醒運(yùn)行,否則則直接訪問(wèn)驅(qū)動(dòng)程序,避免了由于驅(qū)動(dòng)程序在升級(jí)過(guò)程中任務(wù)的不斷訪問(wèn)所造成的混亂。圖1為驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)總體架構(gòu)邏輯示意圖;圖2為驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)任務(wù)控制流程示意圖;圖3為驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)實(shí)現(xiàn)的完整流程示意圖;圖4為驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)執(zhí)行流程示意圖。具體實(shí)施例方式下面結(jié)合附圖,對(duì)本發(fā)明的具體實(shí)施做進(jìn)一步的詳細(xì)描述。附圖1展示了驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)總體架構(gòu),該圖顯示了為了實(shí)現(xiàn)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)對(duì)內(nèi)核及驅(qū)動(dòng)程序所做的改動(dòng)。其主要是在處于底層硬件和用戶應(yīng)用程序之間的內(nèi)核層做出改動(dòng),具體包括模塊11為驅(qū)動(dòng)升級(jí)封裝,其相當(dāng)于任務(wù)控制程序,設(shè)置在操作系統(tǒng)提供給應(yīng)用程序統(tǒng)一驅(qū)動(dòng)程序訪問(wèn)的接口和具體的驅(qū)動(dòng)程序接口函數(shù)之間,對(duì)驅(qū)動(dòng)程序進(jìn)行升級(jí)封裝,封裝程序主要包括判斷升級(jí)標(biāo)志的值、任務(wù)運(yùn)行狀態(tài)的控制、動(dòng)態(tài)升級(jí)等待隊(duì)列的操作等。要訪問(wèn)驅(qū)動(dòng)程序的任務(wù)必須通過(guò)驅(qū)動(dòng)升級(jí)封裝的程序之后,才可以訪問(wèn)具體的驅(qū)動(dòng)程序入口函數(shù)。模塊12為驅(qū)動(dòng)動(dòng)態(tài)升級(jí)核心支持模塊,由于驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)是要靠升級(jí)工具來(lái)對(duì)核心的地址空間進(jìn)行操作,所以必須提供相應(yīng)的特殊系統(tǒng)函數(shù)來(lái)完成這些處理,驅(qū)動(dòng)動(dòng)態(tài)升級(jí)核心支持模塊主要包括du_task_ctl、du_mem_map、du_set_flag、du_remove_waitq系統(tǒng)接口函數(shù)。其中,du_task_ctl用于對(duì)任務(wù)的狀態(tài)進(jìn)行控制,如將訪問(wèn)處于升級(jí)過(guò)程的驅(qū)動(dòng)程序的任務(wù)掛起,du_mem_map用于映射升級(jí)文件,du_set_flag是用于設(shè)置驅(qū)動(dòng)程序升級(jí)標(biāo)志,du_remove_waitq提供給升級(jí)工具在升級(jí)完畢時(shí)調(diào)用,將等待隊(duì)列上的任務(wù)去除,掛到就緒隊(duì)列上。附圖2展示了驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)任務(wù)控制流程,在驅(qū)動(dòng)程序升級(jí)過(guò)程中,可能有其它任務(wù)要訪問(wèn)驅(qū)動(dòng)程序,如果不加控制,勢(shì)必導(dǎo)致任務(wù)失效,甚至導(dǎo)致整個(gè)系統(tǒng)崩潰,為了確保驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)時(shí)系統(tǒng)的安全性,本發(fā)明通過(guò)任務(wù)控制機(jī)制來(lái)達(dá)到這個(gè)目的,任務(wù)的控制過(guò)程具體如下步驟21、截獲將要訪問(wèn)驅(qū)動(dòng)程序的任務(wù),獲取任務(wù)控制塊或任務(wù)的ID號(hào);步驟22、判斷驅(qū)動(dòng)動(dòng)態(tài)升級(jí)標(biāo)志driver_upgrading_flag,如果為真,執(zhí)行步驟23,否則,執(zhí)行步驟24;步驟23、驅(qū)動(dòng)程序正在升級(jí),將當(dāng)前任務(wù)掛入waitq_driver_upgrading等待隊(duì)列,掛入的過(guò)程包括任務(wù)狀態(tài)的設(shè)置、隊(duì)列鏈表指針的修改等;步驟24、驅(qū)動(dòng)程序不處于升級(jí)過(guò)程中,即driver_upgrading_flag的值為假,可以訪問(wèn)相應(yīng)的驅(qū)動(dòng)程序入口函數(shù)。附圖3展示了驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)實(shí)現(xiàn)的完整流程,也是本發(fā)明的整體實(shí)施過(guò)程,具體如下步驟31、基于附圖1所述的總體架構(gòu)中所描述的內(nèi)容,實(shí)現(xiàn)驅(qū)動(dòng)封裝程序,如設(shè)置全局變量driver_upgrading_flag,并初始化為FALSE,并判斷升級(jí)標(biāo)志的值、任務(wù)運(yùn)行狀態(tài)的控制、動(dòng)態(tài)升級(jí)等待隊(duì)列的操作等;步驟32、本步驟主要實(shí)現(xiàn)驅(qū)動(dòng)動(dòng)態(tài)升級(jí)核心支持模塊12中所描述的驅(qū)動(dòng)升級(jí)核心支持函數(shù),包括du_task_ctl、du_mem_map、du_set_flag、du_remove_waitq系統(tǒng)接口函數(shù);步驟33、驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)是管理員在系統(tǒng)運(yùn)行時(shí)進(jìn)行的,本步驟主要實(shí)現(xiàn)驅(qū)動(dòng)升級(jí)工具軟件,工具軟件的實(shí)現(xiàn)依賴于核心支持模塊,工具軟件以用戶任務(wù)運(yùn)行,負(fù)責(zé)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)的全部工作,關(guān)于驅(qū)動(dòng)升級(jí)工具軟件的業(yè)務(wù)邏輯與執(zhí)行流程如附圖4所示;步驟34、在完成步驟31、32后,接下來(lái)就要編譯、鏈接目標(biāo)操作系統(tǒng),并下載至目標(biāo)機(jī)上運(yùn)行;步驟35、如果需要升級(jí)目標(biāo)系統(tǒng)驅(qū)動(dòng)程序,就執(zhí)行步驟36,否則,系統(tǒng)繼續(xù)運(yùn)行;步驟36、當(dāng)需要升級(jí)驅(qū)動(dòng)程序時(shí),假設(shè)我們要升級(jí)串口驅(qū)動(dòng),對(duì)串口驅(qū)動(dòng)的serial_write方法進(jìn)行了修改,那么,我們需編寫新的串口驅(qū)動(dòng)程序?qū)憯?shù)據(jù)函數(shù)serial_write_new,并放在serial_upgrading.c文件中。然后對(duì)serial_upgrading.c進(jìn)行編譯,生成目標(biāo)機(jī)的二進(jìn)制文件serial_upgrading.o;步驟37、升級(jí)文件準(zhǔn)備好之后,就可以執(zhí)行步驟33中所實(shí)現(xiàn)的升級(jí)工具軟件進(jìn)行驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)操作,升級(jí)工具軟件的執(zhí)行流程如附圖4所述;步驟38、在驅(qū)動(dòng)程序升級(jí)過(guò)程中,即升級(jí)工具執(zhí)行過(guò)程中,沒(méi)有錯(cuò)誤信息,則表明升級(jí)成功,若有錯(cuò)誤信息,轉(zhuǎn)至步驟39;步驟39、驅(qū)動(dòng)程序升級(jí)過(guò)程產(chǎn)生錯(cuò)誤,跳至錯(cuò)誤處理代碼,釋放因驅(qū)動(dòng)程序升級(jí)而對(duì)內(nèi)核資源、任務(wù)等的控制,升級(jí)工具退出,并打印升級(jí)不成功信息。附圖4展示了驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)工具的執(zhí)行實(shí)施流程,下面將詳細(xì)描述升級(jí)工具的執(zhí)行過(guò)程,即升級(jí)工具對(duì)系統(tǒng)函數(shù)的調(diào)用以及對(duì)升級(jí)文件的處理等等,具體如下步驟41、調(diào)用步驟32所提供的du_set_flag系統(tǒng)函數(shù),設(shè)置driver_upgrading_flag為TRUE,當(dāng)任務(wù)要訪問(wèn)串口驅(qū)動(dòng)時(shí),發(fā)現(xiàn)該標(biāo)志被設(shè)置為真,任務(wù)便被掛起,掛起的隊(duì)列為waitq_driver_upgrading,在驅(qū)動(dòng)程序升級(jí)期間,所有要訪問(wèn)驅(qū)動(dòng)的任務(wù)都將被掛在waitq_drier_upgrading任務(wù)等待隊(duì)列上,這同時(shí)也保證了任務(wù)不會(huì)因?yàn)闊o(wú)法訪問(wèn)驅(qū)動(dòng)程序而導(dǎo)致失效;步驟42、在本步驟中,需調(diào)用du_mem_map系統(tǒng)函數(shù),加載升級(jí)文件serial_upgrading.o到內(nèi)存地址空間中,同時(shí)進(jìn)行解析、連接,與操作系統(tǒng)內(nèi)核形成一個(gè)可執(zhí)行整體,如果映射不成功,將導(dǎo)致升級(jí)失敗,直接跳至步驟44,升級(jí)工具會(huì)返回錯(cuò)誤并退出;步驟43、如果步驟42成功完成,接下來(lái)就是如何使新的驅(qū)動(dòng)程序函數(shù)起作用,通過(guò)步驟03中所保存的目標(biāo)修改函數(shù)serial_write的地址信息,我們?cè)谠摰刂诽帉懭胝{(diào)轉(zhuǎn)指令JMP,JMP調(diào)轉(zhuǎn)的目標(biāo)地址是serial_write_new,也就是在步驟06中編寫的新的串口驅(qū)動(dòng)寫數(shù)據(jù)函數(shù);步驟44、調(diào)用du_set_flag系統(tǒng)函數(shù),設(shè)置driver_upgrading_flag為FALSE,通知任務(wù)驅(qū)動(dòng)程序升級(jí)完畢,可以訪問(wèn)驅(qū)動(dòng)程序的接口函數(shù)。此時(shí),若有任務(wù)要訪問(wèn)驅(qū)動(dòng)程序函數(shù)將不會(huì)被掛起;步驟45、在升級(jí)程序完成之前,升級(jí)工具需調(diào)用du_remove_waitq系統(tǒng)函數(shù),將掛在waitq_driver_upgrading等待隊(duì)列的任務(wù)喚醒,即將任務(wù)從阻塞狀態(tài)設(shè)為非阻塞狀態(tài),并從waitq_driver_upgrading隊(duì)列上移除,等待系統(tǒng)調(diào)度執(zhí)行。至此,驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)工具執(zhí)行完成。權(quán)利要求1.一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于包括如下步驟(1)在核心代碼中為每一個(gè)驅(qū)動(dòng)程序增設(shè)驅(qū)動(dòng)程序入口處任務(wù)控制程序,所述任務(wù)控制程序設(shè)置有一個(gè)全局變量driver_upgrading_flag,通過(guò)其取值為TRUE或FALSE來(lái)表明當(dāng)前驅(qū)動(dòng)程序是否正在執(zhí)行動(dòng)態(tài)升級(jí)過(guò)程,并初始化為FALSE;(2)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為TRUE,從而將訪問(wèn)該驅(qū)動(dòng)程序的任務(wù)掛起,并插入到等待隊(duì)列waitq_driver_upgrading中;(3)將升級(jí)文件編譯并加載到內(nèi)核地址空間;(4)在驅(qū)動(dòng)程序的函數(shù)入口處引入升級(jí)文件的地址處寫入跳轉(zhuǎn)指令,跳轉(zhuǎn)地址為升級(jí)文件的函數(shù)入口地址;(5)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為FALSE,將訪問(wèn)該驅(qū)動(dòng)程序而被掛起的任務(wù)喚醒,恢復(fù)運(yùn)行。2.根據(jù)權(quán)利要求1所述的嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于步驟(1)所述任務(wù)控制程序當(dāng)系統(tǒng)任務(wù)調(diào)用驅(qū)動(dòng)程序時(shí),判斷升級(jí)標(biāo)志driver_upgrading_flag的取值,如果為FALSE,則讓系統(tǒng)任務(wù)調(diào)用驅(qū)動(dòng)程序,如果為TURE,則將系統(tǒng)任務(wù)掛起到等待隊(duì)列waitq_driver_upgrading中。3.根據(jù)權(quán)利要求1或2所述的嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于在步驟(3)中,升級(jí)文件包括編寫的新的驅(qū)動(dòng)程序接口函數(shù)。4.根據(jù)權(quán)利要求3所述的嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于所述步驟(3)只允許特權(quán)用戶操作。5.根據(jù)權(quán)利要求4所述的嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于步驟(3)的升級(jí)文件加載過(guò)程通過(guò)升級(jí)文件代碼的連接解析,與操作系統(tǒng)核心形成一個(gè)可執(zhí)行的整體。6.根據(jù)權(quán)利要求5所述的嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,其特征在于所述步驟(4)還通過(guò)編譯操作系統(tǒng)源代碼生成可執(zhí)行映像,以提取驅(qū)動(dòng)程序函數(shù)名與入口地址對(duì)照表。全文摘要本發(fā)明提供一種嵌入式操作系統(tǒng)驅(qū)動(dòng)程序動(dòng)態(tài)升級(jí)方法,包括如下步驟(1)在核心代碼中為每一個(gè)驅(qū)動(dòng)程序增設(shè)驅(qū)動(dòng)程序入口處任務(wù)控制程序,所述任務(wù)控制程序設(shè)置有一個(gè)全局變量driver_upgrading_flag,通過(guò)其取值為TRUE或FALSE來(lái)表明當(dāng)前驅(qū)動(dòng)程序是否正在執(zhí)行動(dòng)態(tài)升級(jí)過(guò)程,并初始化為FALSE;(2)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為TRUE,從而將訪問(wèn)該驅(qū)動(dòng)程序的任務(wù)掛起,并插入到等待隊(duì)列waitq_driver_upgrading中;(3)將升級(jí)文件編譯并加載到內(nèi)核地址空間;(4)在驅(qū)動(dòng)程序的函數(shù)入口處引入升級(jí)文件的地址處寫入跳轉(zhuǎn)指令,跳轉(zhuǎn)地址為升級(jí)文件的函數(shù)入口地址;(5)設(shè)置升級(jí)標(biāo)志driver_upgrading_flag的取值為FALSE,將訪問(wèn)該驅(qū)動(dòng)程序而被掛起的任務(wù)喚醒,恢復(fù)運(yùn)行。文檔編號(hào)G06F9/46GK1912833SQ20061003735公開(kāi)日2007年2月14日申請(qǐng)日期2006年8月29日優(yōu)先權(quán)日2006年8月29日發(fā)明者劉發(fā)貴,侯勇申請(qǐng)人:華南理工大學(xué)
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1