VELT的全稱是Visual EmbedLinuxTools,它是一個(gè)與visual gdb類似的visual studio插件,用以輔助完成Linux開發(fā)。利用這個(gè)插件,將可以在visual studio的IDE中進(jìn)行Linux應(yīng)用程序的開發(fā)(包括編譯和調(diào)試),也可以進(jìn)行uboot和linux內(nèi)核的編譯,并根據(jù)編譯時(shí)的錯(cuò)誤信息正確定位到源碼。
VELT做為輔助工具小結(jié):
由于vs2013的龐大,在很多配置不高的機(jī)器上很難流暢運(yùn)行。
由于VELT穩(wěn)定性不高,實(shí)際并沒有發(fā)現(xiàn)開發(fā)效率上的明顯提升。
由于交換芯片在初始化之前所有網(wǎng)絡(luò)接口是不通的,VELT的調(diào)試功能實(shí)際無法使用。
VELT無法處理團(tuán)隊(duì)協(xié)作的問題,由于每個(gè)人的開發(fā)環(huán)境配置不同,導(dǎo)致每個(gè)人必須維護(hù)一個(gè)項(xiàng)目文件。
基本功能:
1、支持x86 Linux,hi3516,hi3520,MinGW這幾個(gè)平臺(tái)。
2、完成UBOOT的編譯,并根據(jù)編譯的錯(cuò)誤信息自動(dòng)定位到相應(yīng)的文件位置。
3、完成LINUX內(nèi)核的編譯,并根據(jù)編譯的錯(cuò)誤信息自動(dòng)定位到相應(yīng)的文件位置。
4、完成LINUX內(nèi)核的配置。
5、不使用Makefile進(jìn)行Linux應(yīng)用程序的編譯。
6、使用SSH連接目標(biāo)機(jī)器并用gdb進(jìn)行應(yīng)用程序的調(diào)試。
7、使用Telnet連接目標(biāo)機(jī)器并用gdb進(jìn)行應(yīng)用程序的調(diào)試。
VELT安裝:
下面開始安裝VELT插件:
1、解開VELT的壓縮包,放到某個(gè)目錄下,如我的目錄是:
F:\projects\src\gdb2012\EmbedLinux
此目錄應(yīng)當(dāng)避免空格與中文文件名!
2、在環(huán)境變量中添加一個(gè)叫EMBEDLINUX_ROOT的環(huán)境變量:
注意路徑結(jié)尾的反斜杠。
3、安裝release目錄下的EmbedLinux.Installer-0.1.1.vsix:
安裝完成后應(yīng)當(dāng)可以在vs的幫助信息中看到這個(gè)插件:
也可以在工具->擴(kuò)展和更新中看到:
4、將msbuild目錄下的所有文件復(fù)制到:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
這是關(guān)鍵的一步,否則將無法添加新的平臺(tái)。!
至此安裝完成。
VELT的基本原理
VELT本身并不包含任何編譯工具,它所做的工作僅僅是把VS2013這個(gè)前端和不同的GNU編譯器連接起來而已,真正的編譯與調(diào)試仍然由交叉編譯工具完成!
在進(jìn)行代碼編譯的時(shí)候,VELT采用的是遠(yuǎn)程編譯的方法,當(dāng)VS進(jìn)行編譯操作的時(shí)候,VELT使用SSH登錄到Linux主機(jī)系統(tǒng)中進(jìn)行編譯,再分析編譯過程中產(chǎn)生的信息,將之轉(zhuǎn)換為vs能夠識(shí)別的信息,這樣VS就可以在IDE中正確定位錯(cuò)誤發(fā)生的文件!在這種方式中,Make或者gcc生成的錯(cuò)誤信息由于編譯方式的不同產(chǎn)生的錯(cuò)誤信息是有差異的,為了處理這種差異,VELT將這個(gè)過程用python來完成。這樣在不同的項(xiàng)目中只需要對(duì)python腳本做少量修改就可以了,這個(gè)腳本將做為用戶項(xiàng)目的一部分。這種方式獲得的另一個(gè)好處是大大降低VS擴(kuò)展的代碼,從而降低了對(duì)VS穩(wěn)定性的影響。
VELT依賴于Linux的samba或者虛擬機(jī)的共享目錄功能來實(shí)現(xiàn)項(xiàng)目文件的共享,不支持用scp將文件上傳到Linux后進(jìn)行編譯。
在調(diào)試這一塊,VELT目前僅能支持Linux下console應(yīng)用程序的調(diào)試,且只能使用gdb,不支持gdbserver,其調(diào)試引擎的結(jié)構(gòu)為:
如上圖所示,VELT在WINDOWS端運(yùn)行了兩個(gè)輔助程序。一個(gè)是RemoteConsole,這個(gè)程序的主要作用是顯示遠(yuǎn)端程序的輸出,并接受用戶輸入傳送給遠(yuǎn)端。另一個(gè)是python解釋器,這個(gè)解釋器用于完成SSH/TELNET/COM連接,并負(fù)責(zé)調(diào)用遠(yuǎn)端Linux上的gdb。這兩個(gè)應(yīng)用程序僅當(dāng)啟動(dòng)調(diào)試的時(shí)候才運(yùn)行,平常并不使用它。
當(dāng)啟動(dòng)項(xiàng)目調(diào)試時(shí),VC調(diào)試引擎將加載RemoteConsole.exe,由于這是一個(gè)WINDOWS的本地程序,所以VS可以正常加載。當(dāng)VC引擎啟動(dòng)時(shí),VELT擴(kuò)展將接收到此事件,并調(diào)用自己的調(diào)試引擎,在這個(gè)調(diào)試引擎中,它將通過網(wǎng)絡(luò)連接RemoteConsole,以控制GDB的運(yùn)行并接收gdb的事件,將之反映到IDE中。
開發(fā)環(huán)境
下面是一個(gè)典型的嵌入式開發(fā)環(huán)境配置:
主機(jī)開發(fā)環(huán)境:
系統(tǒng):WIN8 64位
開發(fā)工具:vs2013 + velt-0.1.1
虛擬機(jī):Vmware workstation-11.0。
編譯主機(jī)開發(fā)環(huán)境:
虛擬機(jī)的系統(tǒng)用于交叉編譯和嵌入式開發(fā)中各種服務(wù)的提供。
操作系統(tǒng):RHEL-6.3,此虛擬機(jī)僅用于開發(fā),不考慮其安全性的配置。
開發(fā)工具:gcc、不同平臺(tái)下的交叉編譯工具鏈。
系統(tǒng)服務(wù):開啟tftp、samba、ftp、ssh
目標(biāo)機(jī):想使用的平臺(tái),如海思、TI、ADI等平臺(tái),或者虛擬機(jī)的Linux。
連接方式:telnet / ssh / com
調(diào)試方式:gdb / gdbserver
目錄共享
首先將windows目錄通過vmware的共享目錄功能共享給Linux,如f:\work,在Linux下看到的目錄就是/mnt/hgfs/share/work。
其次將Linux下的目錄通過samba服務(wù)共享給windows,如/work,映射到windows下的z:\,這里需要注意的是samba的帳號(hào)和我們后面用SSH登錄的帳號(hào)應(yīng)當(dāng)一致,避免由于權(quán)限問題造成不必要的干擾。
當(dāng)進(jìn)行uboot和linux內(nèi)核的開發(fā)時(shí),代碼只能放在linux的虛擬硬盤中,而不能放在windows系統(tǒng)中,因?yàn)樗鼈冃枰褂梅?hào)鏈接,也需要區(qū)分大小寫。
而在進(jìn)行普通應(yīng)用程序開發(fā)時(shí),如果沒有使用符號(hào)鏈接,只需要將代碼放在windows目錄下,這樣可以加快vs的代碼分析速度。
安裝IronPython / PTVS
由于在VELT中需要使用Python,為了方便在vs2013中對(duì)python文件進(jìn)行編輯,建議安裝IronPython和PTVS擴(kuò)展。
Sdf文件位置
由于VS2013瀏覽信息放在SDF文件中,而項(xiàng)目文件可能放在虛擬機(jī)的共享目錄中,因此需要更改SDF文件的路徑,務(wù)必保證它位于windows直接管理的硬盤上,否則在編譯大項(xiàng)目時(shí)將導(dǎo)致運(yùn)行速度緩慢。
以上介紹主要來自:http://blog.csdn.net/lights_joy