本發(fā)明涉及一種調(diào)試方法和裝置,特別是一種高效的嵌入式系統(tǒng)交叉調(diào)試方法和裝置。
背景技術(shù):
嵌入式系統(tǒng)交叉調(diào)試方法一般分為兩種,一種是基于JTAG的片上調(diào)試方法,一種是基于調(diào)試代理的遠(yuǎn)程調(diào)試方法。
請參閱圖1,其為基于JTAG的片上調(diào)試方法的連接框圖。JTAG是一種國際標(biāo)準(zhǔn)芯片測試協(xié)議,目前大多數(shù)CPU體系都支持JTAG?;贘TAG的片上調(diào)試方法最突出的代表就是JLink調(diào)試器,其定義了一個(gè)軟件調(diào)試層面的RDI接口標(biāo)準(zhǔn),然后JLink調(diào)試器將調(diào)試環(huán)境軟件(IAR、KEIL等)發(fā)出的RDI接口轉(zhuǎn)化為JTAG命令,對芯片進(jìn)行調(diào)試。該方法多適用于嵌入式系統(tǒng)底層驅(qū)動調(diào)試、裸系統(tǒng)調(diào)試和單應(yīng)用調(diào)試。
請參閱圖2,其為基于調(diào)試代理的遠(yuǎn)程調(diào)試方法的連接框圖?;谡{(diào)試代理的遠(yuǎn)程調(diào)試方法是在目標(biāo)機(jī)上運(yùn)行一個(gè)調(diào)試代理程序,與宿主機(jī)的調(diào)試器進(jìn)行通信交互,一起配合完成調(diào)試的任務(wù)。該方法主要使用軟件陷入來模擬斷點(diǎn)以接管CPU來完成調(diào)試,GDB遠(yuǎn)程調(diào)試是主要代表。一般地,基于調(diào)試代理的遠(yuǎn)程調(diào)試方法有兩種方式。一種是gdbserver,其能在目標(biāo)機(jī)的系統(tǒng)上獨(dú)立運(yùn)行,用于調(diào)試有操作系統(tǒng)的應(yīng)用程序;另一種是stub,其和嵌入式系統(tǒng)程序一起鏈接運(yùn)行,一般用于調(diào)試系統(tǒng)程序。其中,Gdbserver比較容易,但需要操作系統(tǒng)支持;stub調(diào)試比較難,需要針對具體的芯片體系進(jìn)行移植。兩者的工作原理是相似的,GDB調(diào)試基于串口協(xié)議或者TCP/IP協(xié)議。由于調(diào)試代理、串口驅(qū)動或者TCP/IP驅(qū)動需要占用大量的內(nèi)存空間,因此該方法一般用于內(nèi)存資源比較豐富的嵌入式系統(tǒng)的調(diào)試。
嵌入式系統(tǒng)一般分資源寬裕型系統(tǒng)和資源緊缺型系統(tǒng),前者CPU處理能力強(qiáng)、內(nèi)存資源豐富(一般在M字節(jié)級以上),如能支持Linux內(nèi)核運(yùn)行的嵌入式系統(tǒng),而其一般都是選用基于調(diào)試代理的遠(yuǎn)程調(diào)試方法來進(jìn)行開發(fā);而后者的CPU處理能力一般、內(nèi)存資源有限(一般在100K字節(jié)以下),多見于單片機(jī)控制器類成本敏感的消費(fèi)類電子系統(tǒng),系統(tǒng)程序難以和stub程序一起在內(nèi)存中運(yùn)行,因此難以選擇基于調(diào)試代理的遠(yuǎn)程調(diào)試方法來進(jìn)行開發(fā),而是選擇基于JTAG的片上調(diào)試方法或者直接串口打印的方式來進(jìn)行調(diào)試。但是,在資源緊缺型嵌入式系統(tǒng)上,針對帶操作系統(tǒng)(如基于UCOS內(nèi)核、FreeRTOS內(nèi)核)的應(yīng)用程序進(jìn)行調(diào)試,基于JTAG的片上調(diào)試方法也是難以勝任的。特別是對將應(yīng)用程序存入外存(這也是極大地節(jié)省內(nèi)存成本的常用手段),在需要運(yùn)行時(shí)才進(jìn)行加載的嵌入式系統(tǒng),基于JTAG的片上調(diào)試方法的效率是比較低的。例如以下場景:
一般帶嵌入式操作系統(tǒng)的電子產(chǎn)品往往都具有多個(gè)應(yīng)用,例如一些帶LCD屏的音頻播放器,它除了有音樂應(yīng)用,也有圖片應(yīng)用、FM應(yīng)用、電子書應(yīng)用等等,同時(shí)還可以充當(dāng)一個(gè)U盤進(jìn)行文件拷貝。該系統(tǒng)同時(shí)可能運(yùn)行一到兩個(gè)應(yīng)用,例如聽音樂看電子書,而其他應(yīng)用則不能同時(shí)運(yùn)行。這些應(yīng)用程序和操作系統(tǒng)、UI資源文件、配置文件都是存在于外存(如nand flash或者nor flash)的固件區(qū),對使用用戶不可見;而音樂文件、電子書等則是存在于外存的用戶區(qū),對使用用戶可見。從中可看成,各個(gè)應(yīng)用程序是分時(shí)復(fù)用寶貴的內(nèi)存資源。由于成本敏感,內(nèi)存資源的大小是經(jīng)過精心設(shè)計(jì)的。對于單個(gè)應(yīng)用程序,也會將代碼分為常駐內(nèi)存類型和可切換類型。例如,對性能影響比較大的解碼部分代碼就需要常駐內(nèi)存,而選擇文件相關(guān)的代碼則可以在需要時(shí)才加載到內(nèi)存。同時(shí),還可能固化一部分內(nèi)核的代碼以節(jié)省內(nèi)存。這樣,就能做到以100K左右的內(nèi)存來支撐整個(gè)系統(tǒng)的運(yùn)行。這類系統(tǒng)最大的特點(diǎn)就是:應(yīng)用程序在非運(yùn)行狀態(tài)時(shí)存儲在外存中,在應(yīng)用運(yùn)行時(shí)才會被操作系統(tǒng)加載到內(nèi)存中,同時(shí)對可切換類型的代碼進(jìn)行調(diào)度切換。
如果要調(diào)試這種帶操作系統(tǒng)類型的應(yīng)用程序,由于內(nèi)存的原因,是不可能選擇基于調(diào)試代理的遠(yuǎn)程調(diào)試方法的;而在選擇基于JTAG的片上調(diào)試方法時(shí)則會遇到以下問題:
由于沒有STUB在目標(biāo)機(jī)運(yùn)行,所以基于JTAG的片上調(diào)試方法只能通過JTAG協(xié)議接口來對內(nèi)存進(jìn)行讀寫。而上述應(yīng)用程序包括常駐代碼和可切換類型代碼,在未運(yùn)行時(shí)需要存儲到外存中,在需要的時(shí)候才能由定制的操作系統(tǒng)加載到內(nèi)存中。很明顯,JTAG接口無法將代碼寫到外存中去。因此,需要通過其他的手段將固件(包括操作系統(tǒng)、所有的應(yīng)用程序、UI資源文件、配置文件)燒寫到固件區(qū),才能使用基于JTAG的片上調(diào)試方法進(jìn)行調(diào)試。即基于JTAG的片上調(diào)試方法不能滿足這類系統(tǒng)的寫外存需求,只能先通過其他方式寫外存之后,再使用JTAG進(jìn)行調(diào)試(讀內(nèi)存、設(shè)置斷點(diǎn)等)。
請同時(shí)參閱圖3,其為現(xiàn)有技術(shù)中調(diào)試帶操作系統(tǒng)類型的應(yīng)用程序的流程圖。因此,調(diào)試這種帶操作系統(tǒng)類型的應(yīng)用程序一般的流程如下:
(1)調(diào)試過程中遇到問題,停止調(diào)試,修改程序,編譯鏈接該應(yīng)用程序。
(2)打包固件,將操作系統(tǒng)、所有的應(yīng)用程序、UI資源文件、配置文件等打包成一個(gè)固件。
(3)燒寫固件,一般使用USB量產(chǎn)工具,或者直接的外存燒寫工具。
(4)啟動系統(tǒng),并運(yùn)行到該程序,進(jìn)入調(diào)試狀態(tài)。
然而,現(xiàn)有技術(shù)的這種調(diào)試方式最大的問題就是效率很低。因?yàn)槊看涡薷某绦?,都要重新打包整個(gè)固件,一般要耗費(fèi)10分鐘,甚至更長;同時(shí),還要重新燒寫整個(gè)固件,燒寫前還要先擦除外存,這里也要耗費(fèi)不少時(shí)間。另外,由于燒寫固件和JTAG調(diào)試是兩套不同的工具,來回切換也需要消耗不少時(shí)間。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供了一種能夠高效地進(jìn)行調(diào)試的嵌入式系統(tǒng)交叉調(diào)試方法和裝置。
本發(fā)明通過以下的方案實(shí)現(xiàn):一種嵌入式系統(tǒng)交叉調(diào)試方法,包括以下步驟:
步驟S1:上電啟動,加載并運(yùn)行操作系統(tǒng);
步驟S2:判斷是否有接收到進(jìn)入“更新程序”的觸發(fā)命令,若是,則進(jìn)入步驟S3;
步驟S3:操作系統(tǒng)加載程序更新模塊及外存對應(yīng)的驅(qū)動程序,并運(yùn)行該模塊程序,接管CPU控制權(quán);
步驟S4:利用JTAG下載修改后的應(yīng)用程序到內(nèi)存;
步驟S5:利用JTAG寫入應(yīng)用程序名稱、寫入內(nèi)存的起始地址、應(yīng)用程序大小三個(gè)信息到預(yù)定內(nèi)存地址;
步驟S6:當(dāng)程序更新模塊監(jiān)控到所述預(yù)定內(nèi)存發(fā)生變化后,解析該預(yù)定內(nèi)存中的內(nèi)容,將之前寫入到內(nèi)存中的應(yīng)用程序(步驟S4)寫入到外存的固件區(qū);
步驟S7:在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中添加一條指向新增應(yīng)用程序的目錄記錄。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括步驟S8:通過LED燈提示更新結(jié)束,并執(zhí)行系統(tǒng)重啟。
作為本發(fā)明的進(jìn)一步改進(jìn),在步驟S2中,當(dāng)判斷沒有接收到進(jìn)入“更新程序”的觸發(fā)命令時(shí),執(zhí)行以下步驟:
步驟S9:進(jìn)入正常加載狀態(tài),從外存固件區(qū)文件系統(tǒng)的目錄項(xiàng)末尾開始往前檢索對應(yīng)的應(yīng)用目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng);
步驟S10:根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序,并開始運(yùn)行該應(yīng)用程序;
步驟S11:再次啟動JTAG調(diào)試,進(jìn)入正常的調(diào)試狀態(tài)。
本發(fā)明還提供了一種嵌入式系統(tǒng)交叉調(diào)試裝置,包括:
啟動模塊,用于加載并啟動操作系統(tǒng);
判斷加載模塊,用于判斷是否有接收到進(jìn)入“更新程序”的觸發(fā)命令;如果收到,則進(jìn)入程序更新狀態(tài),由操作系統(tǒng)加載程序更新模塊并運(yùn)行;如果沒收到,則進(jìn)入正常的應(yīng)用加載狀態(tài)。
程序更新模塊,對預(yù)訂內(nèi)存塊的內(nèi)容進(jìn)行監(jiān)控。若監(jiān)控到所述預(yù)定內(nèi)存發(fā)生變化后,解析該預(yù)定內(nèi)存中的內(nèi)容,將之前通過JTAG寫入到內(nèi)存中的應(yīng)用程序?qū)懙酵獯娴墓碳^(qū);
目錄新增模塊,用于在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中添加一條指向新增應(yīng)用程序的目錄記錄。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括提醒模塊,用于通過控制LED燈提示更新結(jié)束,并執(zhí)行系統(tǒng)重啟。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括:
檢索模塊,用于進(jìn)入正常加載狀態(tài)時(shí),從外存系統(tǒng)固件區(qū)文件系統(tǒng)的目錄項(xiàng)末尾開始往前檢索對應(yīng)的應(yīng)用目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng);
加載模塊,用于根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序,并開始運(yùn)行該應(yīng)用程序;
調(diào)試模塊,用于啟動JTAG調(diào)試,進(jìn)入正常的調(diào)試狀態(tài)。
相比于現(xiàn)有技術(shù),本發(fā)明是通過對操作系統(tǒng)進(jìn)行局部修改,新增一個(gè)“更新程序”狀態(tài),將寫入到內(nèi)存的應(yīng)用程序通過驅(qū)動程序?qū)懭氲酵獯娴南到y(tǒng)固件區(qū),并在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中新增一條指向該應(yīng)用程序的目錄項(xiàng)。這時(shí),系統(tǒng)固件區(qū)將存在該應(yīng)用程序的兩個(gè)版本,一個(gè)是舊版本,一個(gè)是新版本;同時(shí)系統(tǒng)固件區(qū)的文件目錄項(xiàng)也存在兩條記錄,分別指向舊版本和新版本的應(yīng)用程序。但是新版本應(yīng)用程序?qū)?yīng)的目錄項(xiàng)位于文件系統(tǒng)目錄項(xiàng)的末尾,而舊版本應(yīng)用程序?qū)?yīng)的目錄項(xiàng)則位于文件系統(tǒng)目錄項(xiàng)的前面。因此,在系統(tǒng)重啟后的正常狀態(tài)下,操作系統(tǒng)將從文件系統(tǒng)目錄項(xiàng)的末尾開始向前檢索對應(yīng)的目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng)。接著,操作系統(tǒng)根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序并運(yùn)行。此時(shí),再次啟動JTAG調(diào)試即可進(jìn)入正常的調(diào)試狀態(tài),而調(diào)試的目標(biāo)是更新后的應(yīng)用程序。
相比于現(xiàn)有技術(shù),本發(fā)明不需要重新打包整個(gè)固件、不需要擦除和燒寫整個(gè)固件、不需要切換調(diào)試工具和燒寫工具,僅僅是利用JTAG調(diào)試工具下載修改后的應(yīng)用程序,并重啟系統(tǒng)。整個(gè)過程將調(diào)試效率大大提高。
為了更好地理解和實(shí)施,下面結(jié)合附圖詳細(xì)說明本發(fā)明。
附圖說明
圖1是基于JTAG的片上調(diào)試方法的連接框圖。
圖2是基于調(diào)試代理的遠(yuǎn)程調(diào)試方法的連接框圖。
圖3是現(xiàn)有技術(shù)中調(diào)試帶操作系統(tǒng)類型的應(yīng)用程序的流程圖。
圖4是本發(fā)明的嵌入式系統(tǒng)交叉調(diào)試方法的步驟流程圖。
圖5是本發(fā)明的嵌入式系統(tǒng)交叉調(diào)試裝置的模塊框圖。
具體實(shí)施方式
為了解決現(xiàn)有技術(shù)中在修改應(yīng)用程序時(shí),需要重新打包整個(gè)固件并進(jìn)行固件擦除燒寫,才能再次進(jìn)行調(diào)試,所耗時(shí)間過長的缺陷,本發(fā)明提供了一種能夠更高效地完成應(yīng)用程序的更新,以便節(jié)約調(diào)試時(shí)間的調(diào)試方法和裝置。具體通過以下的實(shí)施例進(jìn)行介紹。
在本發(fā)明中,通過對操作系統(tǒng)進(jìn)行局部修改,新增了一個(gè)“更新程序”的狀態(tài),將寫入到預(yù)定內(nèi)存的應(yīng)用程序通過驅(qū)動程序?qū)懭氲酵獯娴南到y(tǒng)固件區(qū),并在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中新增一條對應(yīng)該應(yīng)用程序的目錄項(xiàng)記錄。這樣在系統(tǒng)重啟后的正常狀態(tài)下,操作系統(tǒng)將可以加載到新的應(yīng)用程序并運(yùn)行。以下介紹調(diào)試的過程。
請參閱圖4,其為本發(fā)明的嵌入式系統(tǒng)交叉調(diào)試方法的步驟流程圖。
本發(fā)明提供了一種嵌入式系統(tǒng)交叉調(diào)試方法,包括以下步驟:
步驟S1:上電啟動,加載并運(yùn)行操作系統(tǒng)。
步驟S2:判斷是否有接收到進(jìn)入“更新程序”的觸發(fā)命令,若是,則進(jìn)入步驟S3;當(dāng)判斷沒有接收到進(jìn)入“更新程序”的觸發(fā)命令時(shí),執(zhí)行步驟S9。
在本步驟中,可以通過在操作系統(tǒng)啟動過程中增加一個(gè)按鍵檢測,當(dāng)檢測到按下時(shí),系統(tǒng)將進(jìn)入“更新程序”狀態(tài)。如果按鍵沒有按下,即代表進(jìn)入正常的程序加載運(yùn)行狀態(tài)。而作為其他變形方式,也可以通過其他形式實(shí)現(xiàn)進(jìn)入“更新程序”狀態(tài)。
步驟S3:操作系統(tǒng)加載程序更新模塊程序和外存對應(yīng)的驅(qū)動程序,并運(yùn)行該模塊程序接管CPU控制權(quán)。
在本步驟中,當(dāng)系統(tǒng)將進(jìn)入“更新程序”狀態(tài)時(shí),可以在啟動JTAG調(diào)試接管控制權(quán)后,通過JTAG將應(yīng)用程序(bin格式)下載到指定的內(nèi)存,需確保該該內(nèi)存區(qū)域不被其他模塊占用。
步驟S4:利用JTAG下載修改后的應(yīng)用程序到內(nèi)存。
步驟S5:利用JTAG寫入應(yīng)用程序名稱、寫入內(nèi)存的起始地址、應(yīng)用程序大小三個(gè)信息到預(yù)定內(nèi)存地址。
在本步驟中,用戶需要通過JTAG調(diào)試命令寫入應(yīng)用程序名稱、應(yīng)用程序下載到內(nèi)存中的地址、應(yīng)用程序的長度三個(gè)信息寫到與程序更新模塊商定好的內(nèi)存塊。
步驟S6:當(dāng)程序更新模塊監(jiān)控到所述預(yù)定內(nèi)存發(fā)生變化后,解析該預(yù)定內(nèi)存中的內(nèi)容,將之前寫入到內(nèi)存中的應(yīng)用程序?qū)懭氲酵獯娴南到y(tǒng)固件區(qū)。
在本步驟中,更新程序會一直監(jiān)控這塊預(yù)定內(nèi)存,當(dāng)更新程序模塊監(jiān)控到這塊內(nèi)存發(fā)生變化后,會解析這塊內(nèi)存的內(nèi)容,將應(yīng)用程序從內(nèi)存寫入到固件區(qū)。
步驟S7:在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中添加一條指向新增應(yīng)用程序的目錄項(xiàng)記錄。
在本步驟中,當(dāng)將新的應(yīng)用程序?qū)懭氲焦碳^(qū)后,需要在固件區(qū)的文件系統(tǒng)目錄項(xiàng)中添加一條記錄指向新的應(yīng)用程序。由于外存一般是flash,不能直接修改舊的目錄項(xiàng),所以要在有效目錄項(xiàng)的最后增加一條記錄。
步驟S8:通過LED燈提示更新結(jié)束,并執(zhí)行系統(tǒng)重啟。
在本步驟中,當(dāng)程序更新的過程完成后可以通過LED指示燈來通知用戶,代表更新程序完成,可以重啟并再次調(diào)試。而作為其他的變形方式,也可以通過其他形式進(jìn)行提醒。
步驟S9:進(jìn)入正常加載狀態(tài),從外存的系統(tǒng)固件區(qū)文件系統(tǒng)目錄項(xiàng)的末尾開始往前檢索對應(yīng)的應(yīng)用目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng)。
在本步驟中,當(dāng)在啟動過程中,如按鍵沒有按下,操作系統(tǒng)會進(jìn)入正常的應(yīng)用加載運(yùn)行狀態(tài)。當(dāng)要加載某個(gè)應(yīng)用時(shí),先從固件區(qū)文件系統(tǒng)目錄項(xiàng)的末尾開始往前檢索對應(yīng)的應(yīng)用目錄項(xiàng)。最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng)。
步驟S10:根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序,并開始運(yùn)行該應(yīng)用程序。
步驟S11:啟動JTAG調(diào)試,進(jìn)入正常的調(diào)試狀態(tài)。
請同時(shí)參閱圖5,其為本發(fā)明的嵌入式系統(tǒng)交叉調(diào)試裝置的模塊框圖。另外,結(jié)合本發(fā)明的系統(tǒng)調(diào)試方法,本發(fā)明還提供了一種用于實(shí)現(xiàn)上述方法的嵌入式系統(tǒng)交叉調(diào)試裝置,包括:啟動模塊1、判斷加載模塊2、程序更新模塊3、目錄新增模塊4、提醒模塊5、檢索模塊6、加載模塊7和調(diào)試模塊8。
首先,通過所述啟動模塊1,啟動并加載運(yùn)行操作系統(tǒng)。
接著,通過所述判斷加載模塊2,判斷是否有接收到進(jìn)入“更新程序”的觸發(fā)命令。若有接收到觸發(fā)命令,進(jìn)入“更新程序狀態(tài)”,操作系統(tǒng)加載程序更新模塊及外存對應(yīng)的驅(qū)動程序,并運(yùn)行該模塊程序,接管CPU控制權(quán)。
然后,所述程序更新模塊3,對預(yù)定內(nèi)存進(jìn)行監(jiān)控。當(dāng)監(jiān)控到所述預(yù)定內(nèi)存發(fā)生變化后,解析該預(yù)定內(nèi)存中的內(nèi)容,將該預(yù)定內(nèi)存中的應(yīng)用程序?qū)懭氲酵獯娴南到y(tǒng)固件區(qū)。
接著,通過所述目錄新增模塊4,在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)添加一條指向新增應(yīng)用程序的目錄項(xiàng)記錄。
最后,通過提醒模塊5,用于通過控制LED燈提示更新結(jié)束,并執(zhí)行系統(tǒng)重啟。
如果所述判斷加載模塊沒有收到觸發(fā)命令時(shí),則進(jìn)入正常的應(yīng)用加載狀態(tài)時(shí),執(zhí)行以下的處理流程:
通過檢索模塊6,從外存的系統(tǒng)固件區(qū)文件系統(tǒng)目錄項(xiàng)的末尾開始往前檢索對應(yīng)的應(yīng)用目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng)。
再由所述加載模塊7,根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序,并開始運(yùn)行該應(yīng)用程序。
最后,啟動JTAG調(diào)試,進(jìn)入正常的調(diào)試狀態(tài)。
綜上所述,相比于現(xiàn)有技術(shù),本發(fā)明是通過對操作系統(tǒng)進(jìn)行局部修改,新增一個(gè)“更新程序”狀態(tài),將寫入到內(nèi)存的應(yīng)用程序通過驅(qū)動程序?qū)懭氲酵獯娴南到y(tǒng)固件區(qū),并在系統(tǒng)固件區(qū)的文件系統(tǒng)目錄項(xiàng)中新增一條指向該應(yīng)用程序的目錄項(xiàng)。這時(shí),系統(tǒng)固件區(qū)將存在該應(yīng)用程序的兩個(gè)版本,一個(gè)是舊版本,一個(gè)是新版本;同時(shí)系統(tǒng)固件區(qū)的文件目錄項(xiàng)也存在兩條記錄,分別指向舊版本和新版本的應(yīng)用程序。但是新版本應(yīng)用程序?qū)?yīng)的目錄項(xiàng)位于文件系統(tǒng)目錄項(xiàng)的末尾,而舊版本應(yīng)用程序?qū)?yīng)的目錄項(xiàng)則位于文件系統(tǒng)目錄項(xiàng)的前面。因此,在系統(tǒng)重啟后的正常狀態(tài)下,操作系統(tǒng)將從文件系統(tǒng)目錄項(xiàng)的末尾開始向前檢索對應(yīng)的目錄項(xiàng),最先檢索到的目錄項(xiàng)即是最新的應(yīng)用程序?qū)?yīng)的目錄項(xiàng)。接著,操作系統(tǒng)根據(jù)最新目錄項(xiàng)加載最新的應(yīng)用程序并運(yùn)行。此時(shí),再次啟動JTAG調(diào)試即可進(jìn)入正常的調(diào)試狀態(tài),而調(diào)試的目標(biāo)是更新后的應(yīng)用程序。
相比于現(xiàn)有技術(shù),本發(fā)明不需要重新打包整個(gè)固件、不需要擦除和燒寫整個(gè)固件、不需要切換調(diào)試工具和燒寫工具,僅僅是利用JTAG調(diào)試工具下載修改后的應(yīng)用程序,并重啟系統(tǒng)。整個(gè)過程將調(diào)試效率大大提高。
本發(fā)明并不局限于上述實(shí)施方式,如果對本發(fā)明的各種改動或變形不脫離本發(fā)明的精神和范圍,倘若這些改動和變形屬于本發(fā)明的權(quán)利要求和等同技術(shù)范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變形。