溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么遠(yuǎn)程調(diào)試在Linux車機(jī)中的應(yīng)用

發(fā)布時(shí)間:2021-10-22 11:24:22 來(lái)源:億速云 閱讀:136 作者:柒染 欄目:互聯(lián)網(wǎng)科技

本篇文章為大家展示了怎么遠(yuǎn)程調(diào)試在Linux車機(jī)中的應(yīng)用,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

導(dǎo)讀

在軟件開(kāi)發(fā)過(guò)程中,調(diào)試是必不可少的環(huán)節(jié),嵌入式操作系統(tǒng)的調(diào)試與桌面操作系統(tǒng)的調(diào)試相比有很大差別,嵌入式系統(tǒng)的可視化調(diào)試能力比桌面操作系統(tǒng)要弱一點(diǎn)。對(duì)于導(dǎo)航這種業(yè)務(wù)場(chǎng)景比較復(fù)雜的程序開(kāi)發(fā),可視化調(diào)試環(huán)境能讓我們業(yè)務(wù)場(chǎng)景開(kāi)發(fā)事半功倍,也能快速定位導(dǎo)航業(yè)務(wù)與車機(jī)中其他模塊交互出現(xiàn)的問(wèn)題,提高開(kāi)發(fā)過(guò)程中的調(diào)試效率。

遠(yuǎn)程調(diào)試是真機(jī)調(diào)試中最便捷的一種,開(kāi)發(fā)者只需借用在PC端強(qiáng)大的調(diào)試器就能完成業(yè)務(wù)場(chǎng)景的調(diào)試。

背景

Thrift是一種接口描述語(yǔ)言和二進(jìn)制通訊協(xié)議,它被用來(lái)定義和創(chuàng)建跨語(yǔ)言的服務(wù),是一種RPC(遠(yuǎn)程過(guò)程調(diào)用)通信框架,由Facebook為“大規(guī)模跨語(yǔ)言服務(wù)開(kāi)發(fā)”。在車機(jī)系統(tǒng)中,各模塊之間也可以使用Thrift通信框架進(jìn)行通信。導(dǎo)航作為一個(gè)單獨(dú)的為進(jìn)程提供服務(wù)的模塊,只提供導(dǎo)航相關(guān)的業(yè)務(wù)以及地圖渲染的能力,導(dǎo)航的HMI界面是車機(jī)系統(tǒng)中統(tǒng)一的操作界面,系統(tǒng)HMI界面與導(dǎo)航之間的交互接口則是通過(guò)已經(jīng)定義好的接口描述語(yǔ)言(IDL),使用自動(dòng)化工具生成本地可調(diào)用的接口,然后使用Thrift框架傳輸完成系統(tǒng)HMI與導(dǎo)航之間的通信。

 怎么遠(yuǎn)程調(diào)試在Linux車機(jī)中的應(yīng)用

調(diào)試手段

為了開(kāi)發(fā)過(guò)程中調(diào)試方便,我們?cè)赑C上做了一套模擬器,能在PC上進(jìn)行地圖渲染。還實(shí)現(xiàn)了一套在PC上使用的系統(tǒng)HMI模擬命令發(fā)送工具,模擬工具是作為客戶端連接導(dǎo)航提供的服務(wù),這樣能在PC端模擬發(fā)送命令,幫助導(dǎo)航簡(jiǎn)單業(yè)務(wù)的開(kāi)發(fā),但這種方式存在著以下弊端

  • 模擬命令工具,只能模擬簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,有多個(gè)交互的場(chǎng)景無(wú)法模擬。

  • 無(wú)法操作地圖HMI,也看不到HMI界面顯示以及過(guò)程中的反饋。

  • 無(wú)法滾動(dòng)地圖,后面接了Win32上面的鼠標(biāo)事件,能用鼠標(biāo)實(shí)現(xiàn)滾動(dòng),但這種方式與車機(jī)中滾動(dòng)流程不一致。 

  • PC端無(wú)法使用車機(jī)中的設(shè)備,如導(dǎo)航過(guò)程中沒(méi)有導(dǎo)航音,無(wú)法使用USB等。 

  • PC端拿不到車機(jī)中的數(shù)據(jù),比如車身數(shù)據(jù)、GPS信號(hào)等。

調(diào)試方案優(yōu)化

針對(duì)當(dāng)前調(diào)試手段存在的以上問(wèn)題。我們對(duì)調(diào)試方案進(jìn)行了優(yōu)化,我們可以借助車機(jī)中系統(tǒng)HMI來(lái)與導(dǎo)航進(jìn)行交互。實(shí)現(xiàn)了使用車機(jī)環(huán)境中的信號(hào)對(duì)PC端導(dǎo)航業(yè)務(wù)場(chǎng)景進(jìn)行調(diào)試。主要有以下幾點(diǎn)功能:

1.PC端模擬器接收車機(jī)發(fā)來(lái)的信號(hào)

在該項(xiàng)目中,導(dǎo)航的相關(guān)業(yè)務(wù)都是作為服務(wù)端向車機(jī)中其他模塊提供服務(wù),在車機(jī)系統(tǒng)中,系統(tǒng)HMI連接導(dǎo)航服務(wù)的地址是固定的,我們?cè)谲嚈C(jī)中開(kāi)發(fā)了一個(gè)代理--Sandwich,主要作用是啟動(dòng)導(dǎo)航服務(wù),這個(gè)導(dǎo)航服務(wù)并不實(shí)現(xiàn)真正的導(dǎo)航業(yè)務(wù),而是啟動(dòng)了一個(gè)空服務(wù),讓車機(jī)中其他模塊能成功建立連接,同時(shí)Sandwich作為客戶端連接PC端模擬器提供的導(dǎo)航服務(wù),PC端的導(dǎo)航服務(wù)真正實(shí)現(xiàn)導(dǎo)航業(yè)務(wù),Sandwich負(fù)責(zé)接收車機(jī)發(fā)送過(guò)來(lái)的業(yè)務(wù)請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給PC端模擬器,這樣PC端模擬器就能接收到車機(jī)中的信號(hào),收到的業(yè)務(wù)請(qǐng)求并做處理再將處理結(jié)果通過(guò)Thrift反饋到車機(jī)端。

這個(gè)流程我們打通了車機(jī)中信號(hào)發(fā)送到PC端模擬器,并可以將處理完的數(shù)據(jù)反饋給車機(jī)端。

 怎么遠(yuǎn)程調(diào)試在Linux車機(jī)中的應(yīng)用

3. 將PC端模擬器中顯示的地圖投射到車機(jī)端顯示

實(shí)現(xiàn)了以上兩步,一個(gè)使用車機(jī)信號(hào)調(diào)試PC端導(dǎo)航程序的環(huán)境基本完成了。已經(jīng)能實(shí)現(xiàn)車機(jī)信號(hào)與PC進(jìn)行雙向接收,但是此時(shí)導(dǎo)航的渲染能力還是停留在PC端,車機(jī)中還只是顯示了一個(gè)系統(tǒng)HMI界面,無(wú)法看到導(dǎo)航地圖展現(xiàn)的效果,這樣就會(huì)帶來(lái)一個(gè)問(wèn)題,一些需要強(qiáng)依賴地圖的操作可能就無(wú)法精準(zhǔn)操作,比如點(diǎn)擊地圖上某個(gè)POI等。此時(shí)需要將PC端的展現(xiàn)同步到車機(jī)側(cè)。

要實(shí)現(xiàn)這一目的,一般我們有兩種方法:

  • 車機(jī)與PC同步渲染

車機(jī)中的導(dǎo)航正常運(yùn)行,當(dāng)導(dǎo)航接收到系統(tǒng)模塊業(yè)務(wù)請(qǐng)求時(shí),先是車機(jī)導(dǎo)航進(jìn)行處理,處理完畢后將信號(hào)轉(zhuǎn)發(fā)到PC端處理,這種方案兩端導(dǎo)航業(yè)務(wù)邏輯并行運(yùn)行,復(fù)雜的業(yè)務(wù)場(chǎng)景下,兩端會(huì)同時(shí)跟車機(jī)進(jìn)行交互,此時(shí)可能會(huì)產(chǎn)生互斥,會(huì)有兩端邏輯不同步的場(chǎng)景,達(dá)不到預(yù)期效果。

  • 將車機(jī)中渲染的數(shù)據(jù)投射到車機(jī)端

在這里我們可以將PC上程序每渲染一幀地圖則將結(jié)果傳到車機(jī)端,由車機(jī)端Sandwich負(fù)責(zé)接收,當(dāng)Sandwich接收到一幀地圖像素?cái)?shù)據(jù)后,負(fù)責(zé)將此幀數(shù)據(jù)渲染到車機(jī)屏幕上,此時(shí)車機(jī)中呈現(xiàn)的效果跟PC端一致。在該項(xiàng)目中我們采用了這一方案,這種方案中,真正的導(dǎo)航業(yè)務(wù)邏輯是來(lái)自PC端,車機(jī)中只是一個(gè)轉(zhuǎn)發(fā)過(guò)程,所以不會(huì)存在第一種方案中的問(wèn)題。

 

但在某些特定的環(huán)境下,導(dǎo)航描畫(huà)會(huì)很頻繁,發(fā)送給車機(jī)的數(shù)據(jù)也會(huì)很多,頻繁的數(shù)據(jù)發(fā)送可能會(huì)帶來(lái)一定的性能開(kāi)銷,表現(xiàn)上可能會(huì)出現(xiàn)延遲。這里可以使用降低圖像質(zhì)量來(lái)減少圖像數(shù)據(jù),例如,可以使用16位或者8位BMP來(lái)傳輸,還可以壓縮傳輸,這樣1920*720分辨率圖像傳輸大小能控制在30-50k左右。

小結(jié)

基于車機(jī)系統(tǒng)中Thrift通信框架,實(shí)現(xiàn)的這套遠(yuǎn)程調(diào)試方案,實(shí)質(zhì)是在車機(jī)中使用Sandwich程序接管車機(jī)系統(tǒng)中與導(dǎo)航有交互的全部接口處理,通過(guò)RPC通信轉(zhuǎn)發(fā),實(shí)現(xiàn)了使用真實(shí)車機(jī)信號(hào)調(diào)試導(dǎo)航的目的。有了這套調(diào)試環(huán)境,我們甚至可以直接在真車上邊路測(cè)邊調(diào)試,跟以前的路測(cè)拿Log回來(lái)分析、重現(xiàn)相比,整個(gè)調(diào)試過(guò)程,簡(jiǎn)單,便捷,直觀。大大提高了開(kāi)發(fā)效率。

基于RPC通信的特性,我們還可以對(duì)調(diào)試方案再進(jìn)一步優(yōu)化,可以加入多客戶端調(diào)試功能,使用同一臺(tái)車機(jī)環(huán)境,不同的模塊負(fù)責(zé)人可以同時(shí)進(jìn)行復(fù)雜業(yè)務(wù)場(chǎng)景的聯(lián)合調(diào)試。

上述內(nèi)容就是怎么遠(yuǎn)程調(diào)試在Linux車機(jī)中的應(yīng)用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI