国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于UEFI的數(shù)據(jù)傳輸工具的研究與實(shí)現(xiàn)

2020-08-06 15:01朱勇洪
計(jì)算機(jī)時(shí)代 2020年7期
關(guān)鍵詞:數(shù)據(jù)傳輸串口

朱勇洪

摘要:由于UEFI框架下沒(méi)有提供數(shù)據(jù)傳輸?shù)哪K,使得測(cè)試或者調(diào)試開(kāi)發(fā)時(shí)需要經(jīng)常對(duì)數(shù)據(jù)文件進(jìn)行人工拷貝,導(dǎo)致了實(shí)現(xiàn)測(cè)試自動(dòng)化或遠(yuǎn)程調(diào)試的不便。采用Socket數(shù)據(jù)傳輸方式設(shè)計(jì)并實(shí)現(xiàn)了UEFI下數(shù)據(jù)傳輸?shù)墓ぞ?,通過(guò)使用串口線來(lái)連接Host端和UEFI端,實(shí)現(xiàn)UEFI下的Application和Hostt端協(xié)同工作來(lái)達(dá)到Host端和uEFI端通信的目的,從而使得從Host端編譯出來(lái)的文件可以直接傳輸?shù)経EFI端的設(shè)備中去,減少人工操作方便實(shí)現(xiàn)測(cè)試自動(dòng)化。最后本文通過(guò)Intel 945G Express Chioset平臺(tái)來(lái)驗(yàn)證工具的正確性。

關(guān)鍵詞:UEFI;數(shù)據(jù)傳輸;Application;串口;Socket

中圖分類號(hào):TP311.56 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-8228(2020)07-26-04

0引言

數(shù)據(jù)傳輸,顧名思義,就是要將數(shù)據(jù)從一個(gè)地方傳送到另一個(gè)地方的通信過(guò)程。目前,UEFI框架下并沒(méi)有提供數(shù)據(jù)傳輸?shù)墓ぞ?,?dǎo)致開(kāi)發(fā)人員、測(cè)試人員將UEFIBIOS文件編譯出來(lái)之后,需要手動(dòng)拷貝該文件到UEFI主板設(shè)備中,大量的人工操作導(dǎo)致了實(shí)現(xiàn)自動(dòng)化測(cè)試或者遠(yuǎn)程調(diào)試的不便?;谶@樣的實(shí)用背景,本文通過(guò)采用Socket的數(shù)據(jù)傳輸方式,實(shí)現(xiàn)UEFI端的Application協(xié)同Host端進(jìn)行工作,達(dá)到Host端和UEFI端之間的通信的功能,從而可以輕松的將文件在兩端互傳,避免了手動(dòng)操作,為遠(yuǎn)程調(diào)試和測(cè)試自動(dòng)化提供基礎(chǔ)。

1UEFl Application簡(jiǎn)介

UEFI的Application指系統(tǒng)的核心應(yīng)用和調(diào)用程序,如BIOS的設(shè)置、一些應(yīng)用程式以及配置管理等等,它與UEFI庫(kù)函數(shù)結(jié)合在一起,可以提供基本控制臺(tái)I/O,基本磁盤(pán)I/O,內(nèi)存管理以及字符串操作的功能。它是不依賴于系統(tǒng)軟硬件的跨平臺(tái)擴(kuò)展Firmware,以.eft文件形式存在,它在執(zhí)行完成后會(huì)返回控制權(quán),不會(huì)駐留在系統(tǒng)內(nèi)存中,因而能夠方便地移植到各個(gè)不同的平臺(tái)上(例如,IA32、IA64、Intel-64、Apple*,Duet模擬器等等)。UEFI Application的編程模型主要分為兩大類,一類是基于EFI模型的,它的代碼比較小,因?yàn)樗鼉H僅需要使用EFI的數(shù)據(jù)結(jié)構(gòu);另一類是基于便攜式模型開(kāi)發(fā)的,與前一類相比較,它是一種更容易導(dǎo)入ANSI/POSIX編程模型的程序,并且它擁有常用的c語(yǔ)言的Library和c語(yǔ)言編程接口程序。

UEFI Application的執(zhí)行流程分為三個(gè)部分,首先它必須經(jīng)過(guò)UEFI Loader來(lái)進(jìn)行加載,然后進(jìn)入到Application的入口函數(shù)處,最后通過(guò)Exit()退出應(yīng)用并返回Application的UEFI Component。

2基于UEFl的數(shù)據(jù)傳輸工具的研發(fā)

數(shù)據(jù)傳輸?shù)姆绞揭话阌幸韵聨追N:最簡(jiǎn)單交互的socket方式,適合大數(shù)據(jù)量交互的邱/文件共享服務(wù)器方式,數(shù)據(jù)庫(kù)共享數(shù)據(jù)方式以及Message數(shù)據(jù)傳輸方式。本文采用socket方式,因?yàn)樵摲绞酵ㄓ眯员容^強(qiáng),且易于編程實(shí)現(xiàn),通過(guò)傳輸層協(xié)議容易加密傳輸?shù)臄?shù)據(jù),使得安全性更高,同時(shí)UEFI下需要傳輸?shù)奈募亢苄?,?shù)據(jù)交互量少,也比較適用該方式。

2.1設(shè)計(jì)架構(gòu)分析

通過(guò)使用串口線纜來(lái)連接Host端和UEFI端,Host端使用Windows 10 Enterprise系統(tǒng),通過(guò)標(biāo)準(zhǔn)的c++語(yǔ)言開(kāi)發(fā)程序,UEFI端使用支持UEFI啟動(dòng)的主板,使用c語(yǔ)言編寫(xiě)并通過(guò)編譯產(chǎn)生一個(gè)備數(shù)據(jù)傳輸功能的UEFI Application的應(yīng)用程序,此處所使用的c語(yǔ)言在庫(kù)函數(shù)、框架結(jié)構(gòu)、調(diào)用的服務(wù)類型等方面需參照Platform Initialization Spec。

Host端主要由以下四個(gè)部分組成:基本信息部分、串口控制部分、線程控制部分、文件傳輸部分。

(1)基本信息部分:通過(guò)運(yùn)行ReadSetuplnfo()函數(shù)來(lái)讀取串口的相關(guān)配置信息,主要包括串口的名稱、波特率和串口的流控信息,并將這些信息存入到指定的數(shù)據(jù)結(jié)構(gòu)中。

(2)串口控制部分:創(chuàng)建一個(gè)CSerial類來(lái)負(fù)責(zé)串口的初始化并獲得句柄進(jìn)行串口的讀寫(xiě)操作。在該類中封裝了初始化串口和控制串口運(yùn)行過(guò)程中需要使用的一些變量以及讀寫(xiě)串口時(shí)需要的相關(guān)函數(shù)。

(3)線程控制部分:設(shè)計(jì)主線程、讀線程和寫(xiě)線程。主線程主要負(fù)責(zé)創(chuàng)建讀寫(xiě)線程,后續(xù)將不再進(jìn)行其他操作,可留作后續(xù)開(kāi)發(fā)的拓展使用。在使用串口進(jìn)行數(shù)據(jù)的讀寫(xiě)傳輸時(shí),讀線程負(fù)責(zé)讀取UEFI端通過(guò)串口線纜發(fā)送過(guò)來(lái)的信息,并將這些信息顯示在屏幕上;寫(xiě)線程則負(fù)責(zé)將用戶輸入的信息(例如,需要傳輸?shù)奈募┩ㄟ^(guò)串口線纜發(fā)送到UEFI端。

(4)文件傳輸部分:包括從Host端發(fā)送單個(gè)文件到UEFI端和從UEFI端接收單個(gè)文件兩部分,這個(gè)過(guò)程需要UEFI端的Application配合使用。

UEFI端是一個(gè)基于UEFI的Application應(yīng)用程序,參考EDKIIINFSpec、DSCSpec、DECspec提供該程序所需要的模塊文件(.inf)及c文件,平臺(tái)描述文件(.dsc)和平臺(tái)聲明文件(.dec),其功能是為了配合Host端的文件傳輸部分,其中UEFI端主要實(shí)現(xiàn)了從Host端接收單個(gè)文件和發(fā)送單個(gè)文件到Host端這兩個(gè)部分的功能。

2.2數(shù)據(jù)傳輸實(shí)現(xiàn)過(guò)程分析

對(duì)于數(shù)據(jù)的傳輸,其實(shí)現(xiàn)過(guò)程主要包括四個(gè)部分:Host端發(fā)送單個(gè)文件,Host端接收單個(gè)文件,UEFI端發(fā)送單個(gè)文件以及UEFI端接收單個(gè)文件。以Host端發(fā)送單個(gè)文件為例,其過(guò)程主要包括①讀取用戶輸入的文件名,并將文件打開(kāi);②將讀取到的文件名轉(zhuǎn)換成傳輸至UEFI端的路徑、文件名組合;③計(jì)算該文件名的長(zhǎng)度以及文件的長(zhǎng)度;④調(diào)用TestSpeed H to_T()函數(shù)來(lái)測(cè)試Host端向UEFI端傳輸數(shù)據(jù)的速度;⑤按照上一步獲得的數(shù)據(jù)來(lái)設(shè)置傳輸包的長(zhǎng)度以及包的傳輸時(shí)間間隔;⑥按照包封裝的形式發(fā)送包含文件名、文件名長(zhǎng)度、文件長(zhǎng)度的數(shù)據(jù)包至UEFI端;⑦按照包封裝的形式發(fā)送文件內(nèi)容至UEFI端;⑧釋放所使用的相關(guān)資源,從Host端到UEFI端的數(shù)據(jù)傳輸?shù)酱私Y(jié)束。在該過(guò)程中,主函數(shù)TransferHostFile()首先調(diào)用SafeSendData()函數(shù)來(lái)發(fā)送包含文件名、文件名長(zhǎng)度、文件長(zhǎng)度的數(shù)據(jù)包至UEFI端,然后再次調(diào)用SafeSendData()函數(shù)來(lái)發(fā)送文件內(nèi)容至UEFI端。而SafeSendData()函數(shù)則會(huì)將所得到的所有數(shù)據(jù)分裝成數(shù)據(jù)包的形式,然后將數(shù)據(jù)包進(jìn)行Md5 CheckSum的計(jì)算來(lái)檢驗(yàn)在傳輸過(guò)程中數(shù)據(jù)包的正確性。圖1顯示了Host端傳輸文件至UEFI端的流程。

在UEFI端的Application其實(shí)現(xiàn)過(guò)程需要將其代碼添加到UEFI的源代碼結(jié)構(gòu)中進(jìn)行編譯,首先需要建立一個(gè)存放該Application源代碼的子目錄和一個(gè)與Application源代碼相關(guān)的.inf文件,對(duì)于Application的源文件,可以放在工作目錄的任何地方,而該文件的存放路徑則需要在所開(kāi)發(fā)模塊的.inf文件中指出。一個(gè)模塊的.inf文件主要是為了定義單個(gè)項(xiàng)目所需要的所有信息,包括了一些源文件,庫(kù)或者庫(kù)類,以及一些編譯相關(guān)的組件等,用它來(lái)產(chǎn)生的二進(jìn)制文件要么是原始的二進(jìn)制文件,要么是具有PE32/PE32+/COFF格式的可以在UEFIShell環(huán)境下執(zhí)行的文件。

3數(shù)據(jù)傳輸工具的測(cè)試檢驗(yàn)

該檢驗(yàn)過(guò)程分別以Windows 10 Enterprise系統(tǒng)和Intel 945G Express Chipset平臺(tái)作為實(shí)驗(yàn)檢測(cè)的Host端和UEFI端,通過(guò)串口連接兩端,同時(shí)在UEFI端配備有外圍設(shè)備u盤(pán)。將Intel 945G Express Chipset平臺(tái)啟動(dòng)到UEFI Shell的模式下,運(yùn)行處于Host端的程序,在彈出的運(yùn)行窗口中運(yùn)行處于UEFI端u盤(pán)中的UEFI Application-FDTTargetWithShell.efi,此時(shí)便可以進(jìn)行Host端和UEFI端的相互通信功能,進(jìn)行單個(gè)文件的收發(fā)功能。

在Host端執(zhí)行數(shù)據(jù)傳輸工具,首先會(huì)獲得串口相關(guān)信息,然后進(jìn))kUEFI端的Shell環(huán)境,由此可進(jìn)入處于UEFI端的外圍設(shè)備u盤(pán)中,在運(yùn)行了u盤(pán)中的FDTTargetWithShell.eft這個(gè)Application之后便可以在Host端和UEFI端進(jìn)行數(shù)據(jù)傳輸了。此時(shí)狀態(tài)如圖3。

數(shù)據(jù)傳輸工具提供了單個(gè)文件的收發(fā)功能,可以通過(guò)輸入操作數(shù)1、2分別進(jìn)行選擇。圖4給出了選擇單個(gè)文件從Host端發(fā)送到UEFI端的過(guò)程,圖5給出了文件成功傳輸時(shí)的狀態(tài)。最后通過(guò)檢查u盤(pán)中的文件來(lái)確認(rèn)文件已經(jīng)從Host端傳輸?shù)経EFI端,同時(shí)對(duì)接收到的文件與Host端的發(fā)送的文件進(jìn)行比較,來(lái)確認(rèn)數(shù)據(jù)在傳輸過(guò)程中的完整性。

在選擇輸入操作功能2的情況下,實(shí)現(xiàn)了從UEFI端發(fā)送單個(gè)文件到Host端的功能。圖6給出了選擇單個(gè)文件從UEFI端發(fā)送到Host端的過(guò)程,而圖7則給出了雙端通信過(guò)程中文件傳輸成功時(shí)的狀態(tài)。

4結(jié)束語(yǔ)

本文采用Socket數(shù)據(jù)傳輸?shù)姆绞皆O(shè)計(jì)了UEFI下的數(shù)據(jù)傳輸工具進(jìn)行UEFI端和Host端的單個(gè)文件的傳輸功能,可以方便開(kāi)發(fā)人員進(jìn)行遠(yuǎn)程調(diào)試的工作,也可以方便測(cè)試人員使用該工具實(shí)現(xiàn)測(cè)試自動(dòng)化。下一步可以嘗試對(duì)數(shù)據(jù)傳輸?shù)膱D形化界面的設(shè)計(jì)與實(shí)現(xiàn),嘗試支持豐富的窗口創(chuàng)建、控件的支持和顯示顏色特效的添加。目前圖形化界面僅僅負(fù)責(zé)對(duì)配置選項(xiàng)進(jìn)行簡(jiǎn)單的控制,當(dāng)然選用的圖形化界面語(yǔ)言范圍可以再進(jìn)一步擴(kuò)展,不僅僅局限于UEFI BIOS系統(tǒng)當(dāng)前支持的VFR語(yǔ)言。

猜你喜歡
數(shù)據(jù)傳輸串口
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
基于Ad Hoc的微震監(jiān)測(cè)數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)
基于ZigBee 的井下探測(cè)小助手設(shè)計(jì)
GPRS DTU的應(yīng)用經(jīng)驗(yàn)淺析
數(shù)字電源內(nèi)部數(shù)據(jù)傳輸?shù)拇谕ㄐ欧椒▽?shí)現(xiàn)
USB接口的多串口數(shù)據(jù)并行接收方法探索
串口技術(shù)的實(shí)物調(diào)試和虛擬仿真聯(lián)合教學(xué)模式
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線通信
基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
萝北县| 澄迈县| 门头沟区| 奉贤区| 临潭县| 汶川县| 遂川县| 永清县| 保康县| 蒲江县| 吴桥县| 湖北省| 张掖市| 太仆寺旗| 永新县| 荣成市| 临颍县| 庆云县| 长沙县| 穆棱市| 瓦房店市| 鄂托克前旗| 永和县| 渭南市| 玉山县| 香河县| 岳阳县| 海城市| 日土县| 通榆县| 临高县| 鄂托克旗| 海晏县| 彩票| 拜泉县| 漳州市| 阳东县| 普定县| 新泰市| 潜山县| 翁牛特旗|