遠端除錯在Linux車機中的應用
導讀
在軟體開發過程中,除錯是必不可少的環節,嵌入式作業系統的除錯與桌面作業系統的除錯相比有很大差別,嵌入式系統的視覺化除錯能力比桌面作業系統要弱一點。對於導航這種業務場景比較複雜的程式開發,視覺化除錯環境能讓我們業務場景開發事半功倍,也能快速定位導航業務與車機中其他模組互動出現的問題,提高開發過程中的除錯效率。
遠端除錯是真機除錯中最便捷的一種,開發者只需借用在PC端強大的偵錯程式就能完成業務場景的除錯。
背景
Thrift是一種介面描述語言和二進位制通訊協議,它被用來定義和建立跨語言的服務,是一種RPC(遠端過程呼叫)通訊框架,由Facebook為“大規模跨語言服務開發”。在車機系統中,各模組之間也可以使用Thrift通訊框架進行通訊。導航作為一個單獨的為程式提供服務的模組,只提供導航相關的業務以及地圖渲染的能力,導航的HMI介面是車機系統中統一的操作介面,系統HMI介面與導航之間的互動介面則是透過已經定義好的介面描述語言(IDL),使用自動化工具生成本地可呼叫的介面,然後使用Thrift框架傳輸完成系統HMI與導航之間的通訊。
除錯手段
為了開發過程中除錯方便,我們在PC上做了一套模擬器,能在PC上進行地圖渲染。還實現了一套在PC上使用的系統HMI模擬命令傳送工具,模擬工具是作為客戶端連線導航提供的服務,這樣能在PC端模擬傳送命令,幫助導航簡單業務的開發,但這種方式存在著以下 弊端:
-
模擬命令工具,只能模擬簡單的業務場景,有多個互動的場景無法模擬。
-
無法操作地圖HMI,也看不到HMI介面顯示以及過程中的反饋。
-
無法滾動地圖,後面接了Win32上面的滑鼠事件,能用滑鼠實現滾動,但這種方式與車機中滾動流程不一致。
-
PC端無法使用車機中的裝置,如導航過程中沒有導航音,無法使用USB等。
-
PC端拿不到車機中的資料,比如車身資料、GPS訊號等。
除錯方案最佳化
針對當前除錯手段存在的以上問題。我們對除錯方案進行了最佳化,我們可以藉助車機中系統HMI來與導航進行互動。實現了使用車機環境中的訊號對PC端導航業務場景進行除錯。主要有以下幾點功能:
1.PC端模擬器接收車機發來的訊號
在該專案中,導航的相關業務都是作為服務端向車機中其他模組提供服務,在車機系統中,系統HMI連線導航服務的地址是固定的,我們在車機中開發了一個代理--Sandwich,主要作用是啟動導航服務,這個導航服務並不實現真正的導航業務,而是啟動了一個空服務,讓車機中其他模組能成功建立連線,同時Sandwich作為客戶端連線PC端模擬器提供的導航服務,PC端的導航服務真正實現導航業務,Sandwich負責接收車機傳送過來的業務請求,並將請求轉發給PC端模擬器,這樣PC端模擬器就能接收到車機中的訊號,收到的業務請求並做處理再將處理結果透過Thrift反饋到車機端。
這個流程我們打通了車機中訊號傳送到PC端模擬器,並可以將處理完的資料反饋給車機端。
2.PC端模擬器向車機傳送訊號
導航也需要連線車機中其他模組提供的服務,如,獲取車身資料、獲取GPS定位訊號,將導航語音資料傳送到車機語音播放模組等。
PC端模擬器需要作為客戶端來連線車機中的服務,真正連線的是車機中Sandwich提供的服務,Sandwich作為客戶端連線車機中其他模組的服務,比如Sandwich連線Sound模組,GPS模組,CarData模組等。PC端模擬器需要使用車機裝置播放導航音,需要將播放內容傳送給Sandwich,Sandwich收到播放內容後,再傳送給車機中的Sound模組,導航音就能播放了。PC端連線車機中其他模組的工作原理也是一樣。
3. 將PC端模擬器中顯示的地圖投射到車機端顯示
實現了以上兩步,一個使用車機訊號除錯PC端導航程式的環境基本完成了。已經能實現車機訊號與PC進行雙向接收,但是此時導航的渲染能力還是停留在PC端,車機中還只是顯示了一個系統HMI介面,無法看到導航地圖展現的效果,這樣就會帶來一個問題,一些需要強依賴地圖的操作可能就無法精準操作,比如點選地圖上某個POI等。此時需要將PC端的展現同步到車機側。
要實現這一目的,一般我們有兩種方法:
-
車機與PC同步渲染
車機中的導航正常執行,當導航接收到系統模組業務請求時,先是車機導航進行處理,處理完畢後將訊號轉發到PC端處理,這種方案兩端導航業務邏輯並行執行,複雜的業務場景下,兩端會同時跟車機進行互動,此時可能會產生互斥,會有兩端邏輯不同步的場景,達不到預期效果。
-
將車機中渲染的資料投射到車機端
在這裡我們可以將PC上程式每渲染一幀地圖則將結果傳到車機端,由車機端Sandwich負責接收,當Sandwich接收到一幀地影像素資料後,負責將此幀資料渲染到車機螢幕上,此時車機中呈現的效果跟PC端一致。在該專案中我們採用了這一方案,這種方案中,真正的導航業務邏輯是來自PC端,車機中只是一個轉發過程,所以不會存在第一種方案中的問題。
但在某些特定的環境下,導航描畫會很頻繁,傳送給車機的資料也會很多,頻繁的資料傳送可能會帶來一定的效能開銷,表現上可能會出現延遲。這裡可以使用降低影像質量來減少影像資料,例如,可以使用16位或者8位BMP來傳輸,還可以壓縮傳輸,這樣1920*720解析度影像傳輸大小能控制在30-50k左右。
小結
基於車機系統中Thrift通訊框架,實現的這套遠端除錯方案,實質是在車機中使用Sandwich程式接管車機系統中與導航有互動的全部介面處理,透過RPC通訊轉發,實現了使用真實車機訊號除錯導航的目的。有了這套除錯環境,我們甚至可以直接在真車上邊路測邊除錯,跟以前的路測拿Log回來分析、重現相比,整個除錯過程,簡單,便捷,直觀。大大提高了開發效率。
基於RPC通訊的特性,我們還可以對除錯方案再進一步最佳化,可以加入多客戶端除錯功能,使用同一臺車機環境,不同的模組負責人可以同時進行復雜業務場景的聯合除錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69941357/viewspace-2715447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何遠端除錯部署在CloudFoundry平臺上的nodejs應用除錯CloudNodeJS
- 使用 Eclipse 遠端除錯 Java 應用程式Eclipse除錯Java
- 用WinDBG遠端除錯程式除錯
- 使用 Eclipse 遠端除錯 Java 應用程式(mark)Eclipse除錯Java
- VisualStudio 如何 SSH 遠端除錯 Linux 的 dotnet 應用的啟動除錯Linux
- 通過Windows Visual Studio遠端除錯WSL2中的.NET Core Linux應用程式Windows除錯Linux
- Pycharm遠端除錯PyCharm除錯
- 前端遠端除錯前端除錯
- chrome 遠端除錯Chrome除錯
- 在海思晶片上使用GDB遠端除錯晶片除錯
- chrome以及safari遠端除錯手機webviewChrome除錯WebView
- IDA遠端除錯 在記憶體中dump Dex檔案除錯記憶體
- PHPSTROM遠端除錯PHP除錯
- pycharm 遠端除錯配置PyCharm除錯
- Spark 1.5.0 遠端除錯Spark除錯
- Mobile Web 除錯指南(2):遠端除錯Web除錯
- Linux soft lockup時遠端除錯的可能性Linux除錯
- Idea進行java應用的遠端除錯Remote debuggingIdeaJava除錯REM
- Windbg在應用層除錯漏洞時的應用除錯
- 一個安卓手機遠端真機除錯平臺安卓除錯
- 用 IBM Lotus Expeditor 進行遠端除錯IBM除錯
- vnc遠端安裝,在Linux中vnc遠端安裝的教程VNCLinux
- vscode配置遠端linux系統除錯VSCodeLinux除錯
- Dapr 遠端除錯之 Nocalhost除錯
- pycharm 遠端除錯之二PyCharm除錯
- 遠端除錯 Azure Web App除錯WebAPP
- 本地除錯遠端服務除錯
- 基於 Scrcpy 的遠端除錯方案除錯
- 在Pycharm上使用遠端伺服器進行除錯PyCharm伺服器除錯
- windows上通過IDA遠端除錯linux程式Windows除錯Linux
- gdb除錯命令小結_與多檔案除錯_遠端除錯除錯
- 利用 Chrome 開發者工具遠端除錯 Android 中的原生 WebViewChrome除錯AndroidWebView
- WebStorm遠端除錯Node.jsWebORM除錯Node.js
- vs搭建遠端除錯環境除錯
- IDEA、ECLIPSE遠端除錯IdeaEclipse除錯
- VS 遠端除錯 Azure Web App除錯WebAPP
- java Remote Debug(遠端除錯)JavaREM除錯
- debug技巧之遠端除錯除錯