專利名稱:一種固件的加載方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式Linux領(lǐng)域,特別涉及一種固件的加載方法及裝置。
背景技術(shù):
嵌入式系統(tǒng)是:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)于系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)??梢赃@樣認(rèn)為,嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),作為裝置或設(shè)備的一部分。通常,嵌入式系統(tǒng)是一個(gè)控制程序存儲(chǔ)在非易失性隨機(jī)訪問(wèn)存儲(chǔ)器NVRAM中的嵌入式處理器控制板,NVRAM可以是閃存flash、EROM或EPR0M,后續(xù)文檔以flash為例進(jìn)行說(shuō)明。事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如通信系統(tǒng)、手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng)。所有嵌入式系統(tǒng)都面臨更新的固件重新加載的需求,固件(Firmware)就是寫(xiě)入flash中的程序,通俗的理解就是“固化的軟件”,在客戶端對(duì)固件更新完成后只能夠通過(guò)重啟整個(gè)嵌入式操作系統(tǒng)來(lái)完成對(duì)更新固件的加載,而單一的系統(tǒng)重啟方式有加載時(shí)間比較長(zhǎng)等缺點(diǎn),固件的加載不夠靈活。由此可見(jiàn)現(xiàn)有技術(shù)中存在如下問(wèn)題:固件的加載不夠靈活。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)中存在的,固件的加載不夠靈活的問(wèn)題,提供一種固件的加載方法及裝置。本發(fā)明實(shí)施例提供一種固件的加載方法,包括:客戶端進(jìn)行固件更新;客戶端根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。進(jìn)一步,客戶端進(jìn)行固件更新具體為:客戶端進(jìn)行固件下載;客戶端將下載的固件寫(xiě)入內(nèi)存空間,更新非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件,寫(xiě)入固件的內(nèi)存空間為通過(guò)用戶程序?qū)⒐碳诜且资噪S機(jī)訪問(wèn)存儲(chǔ)器中的地址空間映射到內(nèi)存中的地址空間。進(jìn)一步,客戶端進(jìn)行固件下載具體為:客戶端接收服務(wù)器下發(fā)的固件更新命令后,延時(shí)下載固件。進(jìn)一步,客戶端進(jìn)行固件下載,并設(shè)置與下載固件對(duì)應(yīng)的更新標(biāo)志位;還包括:非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件更新完成后或固件下載失敗后,客戶端取消對(duì)應(yīng)的更新標(biāo)志位,并據(jù)此加載該更新標(biāo)志位對(duì)應(yīng)的固件。進(jìn)一步,還包括:
客戶端接收服務(wù)器發(fā)送的加載命令,加載命令中包括加載類型指示信息。進(jìn)一步,還包括:客戶端根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,其中,若固件的加載類型指示信息為系統(tǒng)重新加載,更新的固件為系統(tǒng)程序文件,則客戶端選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,若固件的加載類型指示信息為應(yīng)用程序重新加載,更新的固件為應(yīng)用程序文件,則客戶端不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載,若固件的加載類型指示信息為數(shù)據(jù)文件重新加載,更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,則客戶端不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。進(jìn)一步,客戶端接收服務(wù)器發(fā)送的加載命令具體為:當(dāng)更新的固件為應(yīng)用程序文件時(shí),客戶端接收服務(wù)器發(fā)送的加載命令中,包括更新的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)信息;通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載具體為:客戶端判斷加載命令中的進(jìn)程標(biāo)識(shí)信息是否為,之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程標(biāo)識(shí)信息,若是,則客戶端釋放為具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程分配的資源,并終止具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程,重新啟動(dòng)更新的應(yīng)用程序進(jìn)行加載,否則,加載失敗。本發(fā)明實(shí)施例還提供一種固件的加載裝置,包括:更新模塊,用于進(jìn)行固件更新;加載模塊,用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。進(jìn)一步,更新模塊,還用于進(jìn)行固件下載,將下載的固件寫(xiě)入內(nèi)存空間,更新非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件,寫(xiě)入固件的內(nèi)存空間為通過(guò)用戶程序?qū)⒐碳诜且资噪S機(jī)訪問(wèn)存儲(chǔ)器中的地址空間映射到內(nèi)存中的地址空間。進(jìn)一步,更新模塊,還用于接收服務(wù)器下發(fā)的固件更新命令后,延時(shí)下載固件。進(jìn)一步,下載模塊,還用于進(jìn)行固件下載,并設(shè)置與下載固件對(duì)應(yīng)的更新標(biāo)志位;加載模塊,還用于非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件更新完成后或固件下載失敗后,取消對(duì)應(yīng)的更新標(biāo)志位,并據(jù)此加載該更新標(biāo)志位對(duì)應(yīng)的固件。進(jìn)一步,還包括:接收模塊,用于接收服務(wù)器發(fā)送的加載命令,加載命令中包括加載類型指示信息。進(jìn)一步,加載模塊,還用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,其中,若固件的加載類型指示信息為系統(tǒng)重新加載,更新的固件為系統(tǒng)程序文件,則選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,若固件的加載類型指示信息為應(yīng)用程序重新加載,更新的固件為應(yīng)用程序文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載,若固件的加載類型指示信息為數(shù)據(jù)文件重新加載,更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。進(jìn)一步,接收模塊,還用于當(dāng)更新的固件為應(yīng)用程序文件時(shí),接收服務(wù)器發(fā)送的加載命令中,包括更新的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)信息;
加載模塊,還用于判斷加載命令中的進(jìn)程標(biāo)識(shí)信息是否為,之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程標(biāo)識(shí)信息,若是,則釋放為具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程分配的資源,并終止具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程,重新啟動(dòng)更新的應(yīng)用程序進(jìn)行加載,否則,加載失敗。由于根據(jù)固件的加載類型指示信息選擇加載的方式,使得固件的加載變得較為靈活。
圖1表示本發(fā)明實(shí)施例提供的方法流程圖;圖2表示本發(fā)明實(shí)施例提供的裝置結(jié)構(gòu)圖。
具體實(shí)施例方式下面結(jié)合實(shí)施例和附圖對(duì)本發(fā)明進(jìn)行說(shuō)明,為了解決現(xiàn)有技術(shù)中的,固件的加載不夠靈活的問(wèn)題,本發(fā)明實(shí)施例提供一種固件的加載方法及裝置。本發(fā)明實(shí)施例提供一種固件的加載方法,如圖1所示,包括如下步驟:步驟101、客戶端進(jìn)行固件更新。步驟102、客戶端根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。前述的步驟就是固件升級(jí)的步驟,整個(gè)升級(jí)過(guò)程分為兩個(gè)階段:固件更新過(guò)程和固件加載過(guò)程。更新過(guò)程是指客戶端將更新固件下載到本地寫(xiě)入對(duì)應(yīng)存儲(chǔ)空間的過(guò)程。加載過(guò)程是指在更新結(jié)束后對(duì)更新后的固件加載的過(guò)程。這兩個(gè)過(guò)程分別是客戶端收到服務(wù)器的更新命令和加載命令來(lái)觸發(fā)的。服務(wù)器與客戶端建立tcp連接,服務(wù)器向客戶端下發(fā)固件更新命令,客戶端識(shí)別固件更新命令后,采取相應(yīng)的更新動(dòng)作完成更新,更新完成后根據(jù)服務(wù)器下發(fā)的固件加載命令按要求加載固件。整個(gè)過(guò)程的具體描述如下:客戶端上電啟動(dòng),用于固件更新加載的應(yīng)用程序?qū)崟r(shí)讀取配置文件獲得需要監(jiān)視的程序列表,即獲取哪些應(yīng)用程序正在運(yùn)行。通過(guò)該列表可以明確哪些應(yīng)用程序是有可能被更新或者重新加載的。程序列表中對(duì)于每個(gè)應(yīng)用程序的描述包含如下信息:應(yīng)用程序名稱,應(yīng)用程序的標(biāo)識(shí)號(hào),列表中應(yīng)用程序所使用的與用于更新加載的應(yīng)用程序的通信端口。以下是對(duì)程序列表信息中字段的解釋:程序名稱是用來(lái)查詢進(jìn)程ID所需要的,比如應(yīng)用程序名稱為a.0ut,如果a.0ut已經(jīng)運(yùn)行,通過(guò)與已經(jīng)運(yùn)行的進(jìn)程的名稱做比較就可以獲得該進(jìn)程的ID。舉例完成。應(yīng)用程序的標(biāo)識(shí)號(hào)是預(yù)先定義的用來(lái)標(biāo)識(shí)不同程序的數(shù)字,比如I代表a.0ut,2代表b.0ut,本編號(hào)只是客戶端與服務(wù)器之間用來(lái)唯一標(biāo)識(shí)一個(gè)程序,編號(hào)數(shù)字的大小和啟動(dòng)順序無(wú)關(guān),本編號(hào)會(huì)在服務(wù)器發(fā)送的加載應(yīng)用程序的命令中攜帶,用來(lái)指定客戶端需要重新加載的應(yīng)用程序。通信端口是嵌入式系統(tǒng)中其他應(yīng)用程序監(jiān)聽(tīng)的,與用于固件更新加載的應(yīng)用程序通信的端口,本端口是為了使用于固件更新加載的應(yīng)用程序可以主動(dòng)向其他應(yīng)用程序發(fā)送消息的,比如配置文件重新加載就是通過(guò)本端口發(fā)送給對(duì)應(yīng)應(yīng)用程序的。客戶端獲得程序列表中程序名稱對(duì)應(yīng)的處于運(yùn)行狀態(tài)的應(yīng)用程序的進(jìn)程ID即進(jìn)程標(biāo)識(shí)信息。將該進(jìn)程ID作為應(yīng)用程序信息的一部分保存下來(lái),通過(guò)進(jìn)程ID可以獲知該進(jìn)程的相關(guān)信息,在權(quán)限允許的情況下,后續(xù)的步驟可以終止該進(jìn)程運(yùn)行,為重新加載應(yīng)用程序做準(zhǔn)備。服務(wù)器與客戶端建立tcp連接后服務(wù)器可下發(fā)更新命令,包括對(duì)什么進(jìn)行更新,本實(shí)施例中的固件包括:系統(tǒng)程序文件、應(yīng)用程序文件和應(yīng)用程序調(diào)用的數(shù)據(jù)文件(為了描述簡(jiǎn)便后續(xù)文檔簡(jiǎn)稱數(shù)據(jù)文件),以及更新的固件在服務(wù)器上對(duì)應(yīng)的文件名稱另外還有延時(shí)區(qū)間字段,發(fā)送完更新命令后,服務(wù)器發(fā)送加載命令,加載命令主要包括加載延時(shí)時(shí)間字段和加載類型指示信息,加載類型指示信息用于指示客戶端加載固件采用的加載方式,加載方式包括重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。當(dāng)然加載固件采用的加載方式,也可以由客戶端來(lái)確定。更新命令中的延時(shí)區(qū)間字段是服務(wù)器提供給客戶端參與計(jì)算延時(shí)的字段,延時(shí)區(qū)間字段數(shù)值N的取值范圍可以根據(jù)客戶端數(shù)量進(jìn)行調(diào)整,假設(shè)客戶端總數(shù)為X,N大于等于X/2小于等于X已經(jīng)可以明顯分散客戶端的更新發(fā)起時(shí)間,本系統(tǒng)將X/2作為N的取值。加載命令報(bào)文中包含加載的延時(shí)時(shí)間,需要加載的動(dòng)作類型,動(dòng)作類型包括系統(tǒng)重新加載,應(yīng)用程序重新加載,數(shù)據(jù)文件重新加載,如果是應(yīng)用程序重新加載指令則報(bào)文中還包括要重新加載的應(yīng)用程序的標(biāo)識(shí)號(hào),應(yīng)用程序的標(biāo)識(shí)號(hào)是預(yù)先定義的客戶端與服務(wù)器之間用來(lái)標(biāo)識(shí)不同程序的數(shù)字,比如I代表a.0ut, 2代表b.0ut,本編號(hào)與客戶端讀取的配置文件中程序標(biāo)識(shí)號(hào)的定義相同,舉例完畢。本程序標(biāo)識(shí)號(hào)指定了需要重新加載的應(yīng)用程序??蛻舳私邮崭旅詈螅鶕?jù)命令設(shè)置對(duì)應(yīng)的更新標(biāo)志位,同時(shí)根據(jù)更新命令中延時(shí)區(qū)間字段的數(shù)值N設(shè)置一個(gè)隨機(jī)延時(shí)時(shí)間(單位秒),之后使用下載協(xié)議將待更新的固件延時(shí)下載到本地,用戶程序?qū)⑾鄳?yīng)的非易失性隨機(jī)訪問(wèn)存儲(chǔ)器NVRAM地址空間映射到內(nèi)存的地址空間,如4FFF-6FFF。同時(shí)通過(guò)自身提供的讀寫(xiě)驅(qū)動(dòng),將下載到本地的固件寫(xiě)入內(nèi)存空間4FFF-6FFF,由于用戶程序?qū)VRAM地址空間映射到內(nèi)存的地址空間,向內(nèi)存空間寫(xiě)入數(shù)據(jù)就相當(dāng)于向NVRAM地址空間寫(xiě)入數(shù)據(jù),據(jù)此完成對(duì)固件的更新,并取消更新標(biāo)志位??蛻舳巳绻诮邮盏礁旅詈笠步邮盏搅思虞d命令,則在更新標(biāo)志位被清除并且超過(guò)了加載命令中規(guī)定的延時(shí)時(shí)間后,加載固件的動(dòng)作才能夠執(zhí)行。加載動(dòng)作的執(zhí)行只受到加載命令中延時(shí)時(shí)間和與其對(duì)應(yīng)的更新標(biāo)志位的影響。當(dāng)然固件下載失敗后,客戶端也會(huì)取消對(duì)應(yīng)的更新標(biāo)志位,加載時(shí)則是加載未更新的固件,不論何種情況,客戶端都是根據(jù)更新標(biāo)志位被取消,加載該更新標(biāo)志位對(duì)應(yīng)的固件。具體而言,客戶端會(huì)為一個(gè)有效更新命令設(shè)置相應(yīng)的標(biāo)志位,這個(gè)標(biāo)志位因?yàn)楣碳牟煌煌?,更新過(guò)程結(jié)束后才會(huì)清除對(duì)應(yīng)標(biāo)志位,更新結(jié)束的含義包括兩個(gè)方面:一是客戶端從服務(wù)器下載更新固件成功后更新本地固件?;蛘呖蛻舳藦姆?wù)器下載更新固件失敗不進(jìn)行本地固件更新。因此如果存在網(wǎng)絡(luò)異常導(dǎo)致下載更新失敗,本地固件沒(méi)有更新。更新失敗并不會(huì)終止加載動(dòng)作的執(zhí)行,只是加載的是未更新的固件。更新過(guò)程中隨機(jī)延時(shí)時(shí)間的算法如下,該時(shí)間等于以客戶端ip地址4字節(jié)合成一個(gè)整數(shù)(比如192.168.0.10對(duì)應(yīng)的16進(jìn)制整數(shù)是0xc0a8000a)作為種子生成的隨機(jī)數(shù)對(duì)延時(shí)區(qū)間N取余后的余數(shù)大小,因此每個(gè)客戶端因?yàn)閕p地址的不同而設(shè)置為不同的延時(shí),延時(shí)時(shí)間的范圍是O到N秒之間,這可以有效的將客戶端分散到延時(shí)區(qū)間中去獲取更新固件,降低對(duì)網(wǎng)絡(luò)和服務(wù)器的壓力。加載命令中的延時(shí)時(shí)間是指定加載動(dòng)作在加載命令發(fā)出后間隔多久執(zhí)行的延時(shí)時(shí)間,現(xiàn)在假設(shè)服務(wù)器連續(xù)發(fā)出了更新命令和加載命令,加載命令中的延時(shí)時(shí)間如果大于更新過(guò)程需要的總時(shí)間(包括隨機(jī)延時(shí)時(shí)間),則就相當(dāng)于指定了加載動(dòng)作發(fā)生的準(zhǔn)確時(shí)間。如果加載命令中的延時(shí)時(shí)間小于更新過(guò)程需要的總時(shí)間,則在延時(shí)時(shí)間到期后開(kāi)始檢查對(duì)應(yīng)更新標(biāo)志位,檢查動(dòng)作15秒一次,如果標(biāo)志位顯示更新過(guò)程結(jié)束則加載動(dòng)作啟動(dòng),開(kāi)始加載固件。此時(shí)加載動(dòng)作的發(fā)生時(shí)間是有偏差的,大于了指定的延時(shí)時(shí)間,偏差的原因是受到更新標(biāo)志位的影響,在更新進(jìn)行中是不能執(zhí)行加載動(dòng)作的。同時(shí)標(biāo)志位必須是對(duì)應(yīng)的,比如:標(biāo)識(shí)a.0ut在更新的標(biāo)志位只會(huì)影響加載a.0ut的動(dòng)作發(fā)生而不會(huì)影響b.0ut的加載動(dòng)作。客戶端可以連續(xù)接收多個(gè)更新命令和加載命令,更新命令按照命令被接收的順序依次執(zhí)行,而加載命令的執(zhí)行順序和命令被接收順序無(wú)關(guān),加載動(dòng)作的執(zhí)行只受到加載命令中延時(shí)時(shí)間和與其對(duì)應(yīng)的更新標(biāo)志位的影響??蛻舳烁鶕?jù)服務(wù)器發(fā)送的加載命令的延時(shí)時(shí)間和加載類型指示信息來(lái)采取動(dòng)作,加載類型指示信息用于指示加載動(dòng)作的作用方式,包括三種主要的類型:系統(tǒng)重新加載,應(yīng)用程序重新加載,數(shù)據(jù)文件重新加載。第一種類型是最常見(jiàn)的方式,更新的固件為系統(tǒng)程序文件,選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,即通過(guò)bootloader引導(dǎo)啟動(dòng)。第二種類型是更新的固件為應(yīng)用程序文件,不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載。第三種類型是更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。其中重新加載應(yīng)用程序以后客戶端會(huì)重新獲取該應(yīng)用程序的進(jìn)程ID。具體而言,客戶端在執(zhí)行應(yīng)用程序重新加載的動(dòng)作時(shí),會(huì)根據(jù)加載命令中攜帶的應(yīng)用程序ID,在之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程ID中進(jìn)行查找,如果無(wú)法得到有效的進(jìn)程ID,則說(shuō)明該應(yīng)用程序沒(méi)有處于運(yùn)行狀態(tài),因此固件加載動(dòng)作都會(huì)執(zhí)行失敗。如果獲得了有效進(jìn)程ID,首先發(fā)送信號(hào)I要求該進(jìn)程釋放資源,該資源是指該應(yīng)用程序運(yùn)行時(shí)主動(dòng)分配的全部資源,然后向該進(jìn)程發(fā)送信號(hào)2終止其運(yùn)行,然后啟動(dòng)更新后的該應(yīng)用程序,從而完成更新的應(yīng)用程序加載。信號(hào)I是客戶端與該程序約定好的用來(lái)釋放資源的信號(hào),本實(shí)施例使用的是SIGUSR1,信號(hào)2是終止該程序運(yùn)行的信號(hào),本實(shí)施例使用的是SIGKILL。信號(hào)I的使用是有必要的,因?yàn)椴糠仲Y源是操作系統(tǒng)程序無(wú)法釋放的,這會(huì)導(dǎo)致應(yīng)用程序加載不正常,比如在使用arm雙核處理器時(shí),應(yīng)用程序中分配的dsp資源是無(wú)法由內(nèi)核釋放的,需要應(yīng)用程序本身進(jìn)行釋放,舉例完成。客戶端在執(zhí)行數(shù)據(jù)文件重新加載時(shí),會(huì)根據(jù)數(shù)據(jù)文件的不同找到讀取它的應(yīng)用程序,從而獲得通信端口的信息,通過(guò)向該端口發(fā)送消息通知對(duì)應(yīng)程序讀取更新后的數(shù)據(jù)文件,從而完成數(shù)據(jù)文件加載。其中不同數(shù)據(jù)文件與應(yīng)用程序的對(duì)應(yīng)關(guān)系是已經(jīng)約定的,不會(huì)改變。這兩種額外的加載方式需要的時(shí)間要遠(yuǎn)遠(yuǎn)小于嵌入式操作系統(tǒng)重新加載需要的時(shí)間。本實(shí)施例方案的優(yōu)點(diǎn)是:將傳統(tǒng)的軟件升級(jí)分成兩個(gè)獨(dú)立的過(guò)程,分別是更新過(guò)程和加載過(guò)程,更新過(guò)程中的隨機(jī)延時(shí)設(shè)置能夠有效分散客戶端的更新數(shù)據(jù)動(dòng)作,從而減輕對(duì)服務(wù)器的壓力,另外由于根據(jù)固件的加載類型指示信息選擇加載的方式,使得固件的加載變得較為靈活。而是提供了重新加載應(yīng)用程序和重新加載數(shù)據(jù)文件的方式,因此大大縮短了加載應(yīng)用程序和數(shù)據(jù)文件過(guò)程需要的時(shí)間。此外由于加載命令可在發(fā)送更新命令后任意時(shí)刻發(fā)送,加載命令之間是不相關(guān)的,服務(wù)器端可以連續(xù)的發(fā)送多個(gè)更新命令和加載命令,嵌入式系統(tǒng)客戶端完成對(duì)應(yīng)更新后按照服務(wù)器指定時(shí)間和方式加載對(duì)應(yīng)更新數(shù)據(jù),增加了靈活性。本發(fā)明實(shí)施例還提供一種固件的更新裝置,如圖2所示,包括:
更新模塊201,用于進(jìn)行固件更新;加載模塊202,用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。進(jìn)一步,更新模塊201,還用于進(jìn)行固件下載,將下載的固件寫(xiě)入內(nèi)存空間,更新非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件,寫(xiě)入固件的內(nèi)存空間為通過(guò)用戶程序?qū)⒐碳诜且资噪S機(jī)訪問(wèn)存儲(chǔ)器中的地址空間映射到內(nèi)存中的地址空間。進(jìn)一步,更新模塊201,還用于接收服務(wù)器下發(fā)的固件更新命令后,延時(shí)下載固件。進(jìn)一步,下載模塊203,還用于進(jìn)行固件下載,并設(shè)置與下載固件對(duì)應(yīng)的更新標(biāo)志位;加載模塊202,還用于非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件更新完成后或固件下載失敗后,取消對(duì)應(yīng)的更新標(biāo)志位,并據(jù)此加載該更新標(biāo)志位對(duì)應(yīng)的固件。進(jìn)一步,還包括:接收模塊204,用于接收服務(wù)器發(fā)送的加載命令,加載命令中包括加載類型指示信
肩、O進(jìn)一步,加載模塊202,還用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,其中,若固件的加載類型指示信息為系統(tǒng)重新加載,更新的固件為系統(tǒng)程序文件,則選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,若固件的加載類型指示信息為應(yīng)用程序重新加載,更新的固件為應(yīng)用程序文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載,若固件的加載類型指示信息為數(shù)據(jù)文件重新加載,更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。進(jìn)一步,接收模塊204,還用于當(dāng)更新的固件為應(yīng)用程序文件時(shí),接收服務(wù)器發(fā)送的加載命令中,包括更新的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)信息;加載模塊202,還用于判斷加載命令中的進(jìn)程標(biāo)識(shí)信息是否為,之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程標(biāo)識(shí)信息,若是,則釋放為具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程分配的資源,并終止具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程,重新啟動(dòng)更新的應(yīng)用程序進(jìn)行加載,否則,加載失敗。最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而這些修改或者等同替換亦不能使修改后的技術(shù)方案脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種固件的加載方法,其特征在于,包括: 客戶端進(jìn)行固件更新; 客戶端根據(jù) 固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,客戶端進(jìn)行固件更新具體為: 客戶端進(jìn)行固件下載; 客戶端將下載的固件寫(xiě)入內(nèi)存空間,更新非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件,寫(xiě)入固件的內(nèi)存空間為通過(guò)用戶程序?qū)⒐碳诜且资噪S機(jī)訪問(wèn)存儲(chǔ)器中的地址空間映射到內(nèi)存中的地址空間。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,客戶端進(jìn)行固件下載具體為: 客戶端接收服務(wù)器下發(fā)的固件更新命令后,延時(shí)下載固件。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,客戶端進(jìn)行固件下載,并設(shè)置與下載固件對(duì)應(yīng)的更新標(biāo)志位; 還包括: 非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件更新完成后或固件下載失敗后,客戶端取消對(duì)應(yīng)的更新標(biāo)志位,并據(jù)此加載該更新標(biāo)志位對(duì)應(yīng)的固件。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 客戶端接收服務(wù)器發(fā)送的加載命令,加載命令中包括加載類型指示信息。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括: 客戶端根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,其中,若固件的加載類型指示信息為系統(tǒng)重新加載,更新的固件為系統(tǒng)程序文件,則客戶端選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,若固件的加載類型指示信息為應(yīng)用程序重新加載,更新的固件為應(yīng)用程序文件,則客戶端不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載,若固件的加載類型指示信息為數(shù)據(jù)文件重新加載,更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,則客戶端不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,客戶端接收服務(wù)器發(fā)送的加載命令具體為: 當(dāng)更新的固件為應(yīng)用程序文件時(shí),客戶端接收服務(wù)器發(fā)送的加載命令中,包括更新的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)信息; 通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載具體為: 客戶端判斷加載命令中的進(jìn)程標(biāo)識(shí)信息是否為,之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程標(biāo)識(shí)信息,若是,則客戶端釋放為具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程分配的資源,并終止具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程,重新啟動(dòng)更新的應(yīng)用程序進(jìn)行加載,否則,加載失敗。
8.一種固件的加載裝置,其特征在于,包括: 更新模塊,用于進(jìn)行固件更新; 加載模塊,用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,更新模塊,還用于進(jìn)行固件下載,將下載的固件寫(xiě)入內(nèi)存空間,更新非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件,寫(xiě)入固件的內(nèi)存空間為通過(guò)用戶程序?qū)⒐碳诜且资噪S機(jī)訪問(wèn)存儲(chǔ)器中的地址空間映射到內(nèi)存中的地址空間。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,更新模塊,還用于接收服務(wù)器下發(fā)的固件更新命令后,延時(shí)下載固件。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,下載模塊,還用于進(jìn)行固件下載,并設(shè)置與下載固件對(duì)應(yīng)的更新標(biāo)志位; 加載模塊,還用于非易失性隨機(jī)訪問(wèn)存儲(chǔ)器中的固件更新完成后或固件下載失敗后,取消對(duì)應(yīng)的更新標(biāo)志位,并據(jù)此加載該更新標(biāo)志位對(duì)應(yīng)的固件。
12.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括: 接收模塊,用于接收服務(wù)器發(fā)送的加載命令,加載命令中包括加載類型指示信息。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,加載模塊,還用于根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,其中,若固件的加載類型指示信息為系統(tǒng)重新加載,更新的固件為系統(tǒng)程序文件,則選擇重新啟動(dòng)嵌入式操作系統(tǒng)的方式進(jìn)行加載,若固件的加載類型指示信息為應(yīng)用程序重新加載,更新的固件為應(yīng)用程序文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通過(guò)重新啟動(dòng)該更新的應(yīng)用程序的方式進(jìn)行加載,若固件的加載類型指示信息為數(shù)據(jù)文件重新加載,更新的固件為應(yīng)用程序調(diào)用的數(shù)據(jù)文件,則不重新啟動(dòng)嵌入式操作系統(tǒng),通知相關(guān)應(yīng)用程序重新讀取該數(shù)據(jù)文件進(jìn)行加載。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,接收模塊,還用于當(dāng)更新的固件為應(yīng)用程序文件時(shí),接收服務(wù)器發(fā)送的加載命令中,包括更新的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)信息; 加載模塊,還用于判斷加載命令中的進(jìn)程標(biāo)識(shí)信息是否為,之前獲取的正在運(yùn)行的應(yīng)用程序的進(jìn)程標(biāo)識(shí)信息,若是,則釋放為具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程分配的資源,并終止具有該進(jìn)程標(biāo)識(shí)信息的進(jìn)程,重新啟動(dòng)更新的應(yīng)用程序進(jìn)行加載,否則,加載失敗。
全文摘要
本發(fā)明提供一種固件的加載方法及裝置,涉及嵌入式Linux領(lǐng)域,以解決現(xiàn)有技術(shù)中存在的,固件的加載不夠靈活的問(wèn)題,該方法,包括客戶端進(jìn)行固件更新,根據(jù)固件的加載類型指示信息,選擇對(duì)應(yīng)的加載方式,對(duì)更新的固件進(jìn)行加載,加載方式包括,重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,和不重新啟動(dòng)嵌入式操作系統(tǒng)對(duì)更新的固件進(jìn)行加載,由于根據(jù)固件的加載類型指示信息選擇加載的方式,使得固件的加載變得較為靈活。
文檔編號(hào)G06F9/445GK103106083SQ20111035417
公開(kāi)日2013年5月15日 申請(qǐng)日期2011年11月9日 優(yōu)先權(quán)日2011年11月9日
發(fā)明者周斐, 張?chǎng)? 喬美生, 趙巍, 王文, 魏金光, 張強(qiáng) 申請(qǐng)人:北京市三希電子科技開(kāi)發(fā)公司