r>【附圖說(shuō)明】
[0047]圖1為主機(jī)端平板電腦A和客戶(hù)端平板電腦B的連接示意圖;
[0048]圖2為本發(fā)明提供的進(jìn)行固件升級(jí)的方法流程圖;
[0049]圖3為從平板電腦A下載程序到平板電腦B實(shí)現(xiàn)升級(jí)的示意圖;
[0050]圖4為實(shí)現(xiàn)平板電腦A上固件升級(jí)應(yīng)用程序的量產(chǎn)升級(jí)工具架構(gòu)圖;
[0051]圖5為Bulk傳輸?shù)拿罘庋b和收發(fā)處理示意圖;
[0052]圖6為本發(fā)明實(shí)施例提供的固件升級(jí)的主機(jī)端裝置結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0053]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明提供的固件升級(jí)的方法和主機(jī)端裝置及系統(tǒng)進(jìn)行更詳細(xì)地說(shuō)明。
[0054]因?yàn)槟壳暗钠桨咫娔X有相當(dāng)多是運(yùn)行Android系統(tǒng),因此如果能夠在Android系統(tǒng)下實(shí)現(xiàn)對(duì)平板電腦進(jìn)行固件升級(jí),則可以無(wú)需Windows系統(tǒng)的PC參與,直接利用主機(jī)端平板電腦A對(duì)客戶(hù)端平板電腦B進(jìn)行量產(chǎn)升級(jí)。
[0055]如圖1所示,運(yùn)行Android系統(tǒng)的平板電腦A做USB Host,平板電腦B作為USB設(shè)備客戶(hù)端等待燒寫(xiě)固件。
[0056]基于以上連接,如圖2所本發(fā)明實(shí)施例提供的裝載有Android系統(tǒng)的王機(jī)端對(duì)客戶(hù)端進(jìn)行固件升級(jí)的方法,包括以下步驟:
[0057]步驟201,主機(jī)端通過(guò)USB主機(jī)控制器驅(qū)動(dòng)操作USB主機(jī)控制器檢測(cè)本地USB接口是否有待升級(jí)的客戶(hù)端插入;
[0058]主機(jī)端平板電腦A連接USB OTG線,作為USB Host,包括有一個(gè)USB主機(jī)控制器。在Linux內(nèi)核中,也應(yīng)該具有此對(duì)應(yīng)的USB主機(jī)控制器的驅(qū)動(dòng),并向內(nèi)核的USB Core注冊(cè)該驅(qū)動(dòng),這一部分是Linux內(nèi)核的標(biāo)準(zhǔn)實(shí)現(xiàn)方式。準(zhǔn)備好用于升級(jí)的固件文件,這些固件文件包括需要寫(xiě)入到平板電腦上的固件數(shù)據(jù),并在主機(jī)端平板電腦A上運(yùn)行固件升級(jí)應(yīng)用程序(USB_Update_FirmWare應(yīng)用程序),通過(guò)USB主機(jī)控制器驅(qū)動(dòng)操作USB主機(jī)控制器檢測(cè)是否有待升級(jí)的客戶(hù)端平板電腦B插入。
[0059]對(duì)于客戶(hù)端平板電腦B,連接USB線,使客戶(hù)端平板電腦B上電啟動(dòng)后進(jìn)入U(xiǎn)SB待升級(jí)模式。
[0060]步驟202,若檢測(cè)到有待升級(jí)的客戶(hù)端插入,主機(jī)端通過(guò)固件升級(jí)應(yīng)用程序?qū)⒊跏蓟绦蚝凸碳?jí)程序下載到所述客戶(hù)端,所述初始化程序用于初始化客戶(hù)端內(nèi)存,所述固件升級(jí)程序被下載到初始化后的內(nèi)存中,用于解析并執(zhí)行從所述主機(jī)端接收的各種命令;
[0061]步驟203,主機(jī)端通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端發(fā)送固件燒寫(xiě)命令及固件數(shù)據(jù),由所述客戶(hù)端接收到固件燒寫(xiě)命令及固件數(shù)據(jù)后,通過(guò)所述客戶(hù)端上的固件升級(jí)程序根據(jù)固件燒寫(xiě)命令將固件數(shù)據(jù)寫(xiě)入存儲(chǔ)介質(zhì)。
[0062]本發(fā)明實(shí)施例提供的方法,通過(guò)在主機(jī)端上運(yùn)行固件升級(jí)應(yīng)用程序,實(shí)現(xiàn)待升級(jí)客戶(hù)端如平板電腦的檢測(cè),并將相應(yīng)的升級(jí)程序和升級(jí)所需的文件下載到平板電腦上,由于主機(jī)端可以向平板電腦發(fā)送相應(yīng)的命令,因此可以控制平板電腦進(jìn)行固件升級(jí),還可以控制待升級(jí)的平板電腦反饋各種信息。
[0063]優(yōu)選地,主機(jī)端通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端發(fā)送固件燒寫(xiě)命令及固件數(shù)據(jù)之后,還包括:
[0064]所述主機(jī)端通過(guò)固件升級(jí)應(yīng)用程序接收所述客戶(hù)端在燒寫(xiě)完成后返回的是否燒寫(xiě)成功的反饋信息,并將所述反饋信息進(jìn)行顯示。
[0065]本發(fā)明實(shí)施例中主機(jī)端平板電腦A運(yùn)行固件升級(jí)應(yīng)用程序時(shí),檢測(cè)到客戶(hù)端平板電腦B連接上,開(kāi)始把可執(zhí)行升級(jí)動(dòng)作的程序下載到客戶(hù)端B上運(yùn)行,其中,如圖3所示,可執(zhí)行升級(jí)動(dòng)作的程序包括update, bin和new_update.bin, update, bin用于初始化待升級(jí)平板電腦內(nèi)存,new_update.bin主要用于解析并執(zhí)行從主機(jī)端平板電腦A接收的各種命令,從而執(zhí)行升級(jí)動(dòng)作,還可以反饋各種信息。
[0066]具體地,可以通過(guò)如下過(guò)程實(shí)現(xiàn)將程序從主機(jī)端平板電腦A下載到客戶(hù)端平板電腦B:
[0067]步驟I,客戶(hù)端平板電腦B上電后執(zhí)行內(nèi)部ROM中的程序,進(jìn)入等待接收從主機(jī)端平板電腦A接收數(shù)據(jù)的狀態(tài);
[0068]步驟2,主機(jī)端平板電腦A通過(guò)通過(guò)USB主機(jī)控制器驅(qū)動(dòng)操作USB主機(jī)控制器檢測(cè)檢測(cè)到客戶(hù)端平板電腦B,將update, bin下載到客戶(hù)端平板電腦B的內(nèi)存,即內(nèi)部RAM中;
[0069]步驟3,主機(jī)端平板電腦A通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端平板電腦B發(fā)送命令,讓客戶(hù)端平板電腦B跳轉(zhuǎn)到update, bin執(zhí)行該程序;
[0070]步驟4,客戶(hù)端平板電腦B接收到命令后跳轉(zhuǎn)到RAM開(kāi)始執(zhí)行update, bin,完成DDR內(nèi)存的初始化,從而為后面的固件程序燒寫(xiě)作為準(zhǔn)備;
[0071]步驟5,主機(jī)端平板電腦A通過(guò)固件升級(jí)應(yīng)用程序?qū)ew_update.bin下載到客戶(hù)端平板電腦B完成初始化的DDR內(nèi)存中;
[0072]步驟6,主機(jī)端平板電腦A通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端平板電腦B發(fā)送命令,讓客戶(hù)端平板電腦B跳轉(zhuǎn)到new_update.bin執(zhí)行該程序;
[0073]步驟7,客戶(hù)端平板電腦B接收到命令后,轉(zhuǎn)到DDR執(zhí)行new_update.bin進(jìn)行初始化;
[0074]步驟8,客戶(hù)端平板電腦B執(zhí)行該程序的過(guò)程中,主機(jī)端平板電腦A通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端平板電腦B發(fā)送固件燒寫(xiě)命令;
[0075]步驟9,客戶(hù)端平板電腦B執(zhí)行該程序的過(guò)程中,主機(jī)端平板電腦A通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端平板電腦B發(fā)送固件數(shù)據(jù);
[0076]步驟10,客戶(hù)端平板電腦B通過(guò)執(zhí)行new_update.bin程序?qū)崿F(xiàn)對(duì)固件燒寫(xiě)命令的解析,并將固件數(shù)據(jù)寫(xiě)入相應(yīng)的存儲(chǔ)介質(zhì);
[0077]具體實(shí)施時(shí),可能多次通過(guò)多次發(fā)送固件燒寫(xiě)命令和固件數(shù)據(jù)完成固件程序的燒與O
[0078]步驟11,燒寫(xiě)完成后,客戶(hù)端平板電腦B向主機(jī)端平板電腦A反饋燒寫(xiě)完成信息。
[0079]進(jìn)一步優(yōu)選地,主機(jī)端通過(guò)固件升級(jí)應(yīng)用程序?qū)⒊跏蓟绦蚝凸碳?jí)程序下載到客戶(hù)端之后,通過(guò)固件升級(jí)應(yīng)用程序向客戶(hù)端發(fā)送固件燒寫(xiě)命令及固件數(shù)據(jù)之前,還包括:主機(jī)端平板電腦A還通過(guò)固件升級(jí)應(yīng)用程序向平板電腦發(fā)送檢測(cè)掃描命令,由客戶(hù)端平板電腦上B的固件升級(jí)程序根據(jù)檢測(cè)掃描命令掃描獲得硬件信息并反饋給主機(jī)端。如主機(jī)端平板電腦A可以控制客戶(hù)端平板電腦B檢測(cè)掃描內(nèi)存,存儲(chǔ)介質(zhì)等硬件信息,并實(shí)時(shí)反饋到主機(jī)端平板電腦A的升級(jí)應(yīng)用程序的界面上。硬件掃描正確后,主機(jī)端平板電腦A向客戶(hù)端平板電腦B向客戶(hù)端發(fā)送固件燒寫(xiě)命令及固件數(shù)據(jù)上,并最終寫(xiě)入到客戶(hù)端平板電腦B的存儲(chǔ)介質(zhì)。
[0080]當(dāng)然,主機(jī)端平板電腦A還可以向客戶(hù)端平板電腦B發(fā)送其它命令,由平板電腦B解析并執(zhí)行相應(yīng)的命令。
[0081 ] 由于主機(jī)端平板電腦A和客戶(hù)端平板電腦B可以進(jìn)行交互,因此在燒寫(xiě)完成后,主機(jī)端平板電腦A在升級(jí)應(yīng)用程序的界面上顯示成功信息,并視情況控制客戶(hù)端平板電腦B重新啟動(dòng),看固件是否能夠在客戶(hù)端平板電腦B上成功運(yùn)行;如果燒寫(xiě)失敗,主機(jī)端平板電腦A在升級(jí)應(yīng)用程序的界面上也顯示失敗信息,并提示生產(chǎn)人員是在哪個(gè)步驟失敗,具體的原因等信息。
[0082]本發(fā)明實(shí)施例中主機(jī)端平板電腦A具有做USB Host的功能,在硬件上需要有一個(gè)USB主機(jī)控制器。在軟件上需要在Android Java層、Linux用戶(hù)層、Linux內(nèi)核層開(kāi)發(fā)相應(yīng)的代碼,Android Java層主要實(shí)現(xiàn)和用戶(hù)UI界面的交互,Linux用戶(hù)層實(shí)現(xiàn)傳輸協(xié)議的封裝和解析,向下調(diào)用Linux內(nèi)核層傳輸相應(yīng)的命令,向上向Android Java層反饋信息,Linux內(nèi)核層向下通過(guò)主機(jī)控制器與客戶(hù)端平板電腦B通信,向上向Linux用戶(hù)層反饋信肩、O
[0083]如圖4所示,在平板電腦A上支持運(yùn)行固件升級(jí)應(yīng)用程序需要如下的架構(gòu):
[0084]I) Android Java 層
[0085]Android Java 層的 USB_Update_Firmware 應(yīng)用程序,是 Android 系統(tǒng)上的普通應(yīng)用程序,可以和本地庫(kù)等一起打包成APK文件在Android平臺(tái)上進(jìn)行安裝。
[0086]該應(yīng)用程序負(fù)責(zé)量產(chǎn)過(guò)程中和用戶(hù)進(jìn)行UI界面的交互,處理用戶(hù)的設(shè)置信息,以及把量產(chǎn)過(guò)程中的進(jìn)度信息,硬件掃描檢測(cè)信息等實(shí)時(shí)反饋到界面上。
[0087]優(yōu)選地,AndroidJava 層還包括 USB_UpdateServer,USBJJpdateServer 作為一個(gè)Server 進(jìn)程存在,并向 Android 系統(tǒng)注冊(cè) USBJJpdate 服務(wù)。Client 端(如 USB_Update_Firmware, apk)可向Android系統(tǒng)獲取此服務(wù),并調(diào)用相應(yīng)接口來(lái)完成固件燒寫(xiě)的工作。
[0088]USB_Update_Firmware應(yīng)用程序向下最終會(huì)調(diào)用已注冊(cè)的USBJJpdate服務(wù),以及USBJJpdateFirmware.so本地庫(kù)來(lái)實(shí)現(xiàn)用戶(hù)的量產(chǎn)需求。
[0089]USBJJpdateServer會(huì)對(duì)固件的量產(chǎn)工作進(jìn)行任務(wù)分解,并通過(guò)調(diào)用USB_Update_JN1.so中所提供的接口最終實(shí)現(xiàn)固件的燒寫(xiě)工作。
[0090]USBJJpdateServer不是必須的,如果需要考慮簡(jiǎn)化模塊層次,也可以考慮把工作全部下放到USBJJpdateFirmware.so的代碼中去實(shí)現(xiàn),上層應(yīng)用只調(diào)用JNI接口就好了。
[0