### 1? 什么是Visual EmbedLinux Tools
Visual EmbedLinux Tools簡稱為VELT,它是一個visual studio插件,用以輔助完成Linux開發。利用這個插件,將可以在visualstudio的IDE中進行Linux應用程序的開發(包括編譯和調試),也可以進行uboot和linux內核的編譯和調試,并根據編譯時的錯誤信息正確定位到源碼。目前的版本是0.2.1,支持vs2012, vs2013,vs2015三個版本。此插件下載地址([http://download.csdn.net/detail/lights_joy/9280851](http://download.csdn.net/detail/lights_joy/9280851))。下面是它的基本功能:
1.
支持x86 Linux,海思hi3516/hi3520,MinGW,Marvell/xCAT, AM335x這幾個平臺,提供向導生成項目模板。
1.
完成UBOOT的編譯,并根據編譯的錯誤信息自動定位到相應的文件位置。
1.
完成LINUX內核的編譯,并根據編譯的錯誤信息自動定位到相應的文件位置。
1.
在VS下利用串口進行內核的簡單調試。
1.
在VS下完成Linux內核的配置。
1.
不使用Makefile進行Linux應用程序的開發。
1.
使用Makefile進行Linux應用程序的開發。
1.
可支持Linux下的應用程序、動態庫、靜態庫、Console/GUI等應用的開發與調試。
1.
使用SSH連接目標機器并用gdb進行應用程序的調試。
1.
使用Telnet連接目標機器并用gdb進行應用程序的調試。
1.
在VS中集成終端軟件(PuttyX.ocx),支持SSH/Telnet/Com。
1.
對于x86 Linux內核,可以直接用Qemu進行調試。?
### 2 IntelliSense的基本原理
VELT沒有自己的代碼分析工具,但由于它使用的工程是VC++工程,因此VC可以完成代碼分析和智能提示,VisualAssist X這樣的插件也可以正常工作!
### 3? 編譯的基本原理
VELT本身并不包含任何編譯工具,它所做的工作僅僅是把VS這個前端和不同的GNU編譯器連接起來而已,真正的編譯與調試仍然由交叉編譯工具完成,因此在VS下進行Linux開發的前提是Linux下的交叉編譯環境能夠正常工作!
在進行代碼編譯的時候,VELT采用的是遠程編譯的方法,當VS進行編譯操作的時候,VELT使用SSH登錄到Linux主機系統中進行編譯,再分析編譯過程中產生的信息,將之轉換為vs能夠識別的信息,這樣VS就可以在IDE中正確定位錯誤發生的文件!為了達到此目的,需要保證vs也能夠正常訪問代碼文件。VELT依賴于Linux的samba或者虛擬機的共享目錄功能來實現項目文件的共享,不支持用scp將文件上傳到Linux后進行編譯。

如上圖所示:
vs的編譯過程是由MSBUILD來控制的,VELT重載了MsBuild下的編譯任務,如果開發的是Linux程序,VELT將調用putty通過SSH遠程連接到Linux開發機上,再調用開發機上的gcc編譯器進行編譯,如果開發的是MinGW程序,VELT將通過cmd.exe調用MinGW gcc進行編譯。
在編譯過程中,VELT將接收putty.exe或者cmd.exe上的輸出信息進行分析,將這些信息轉換為VS可以識別的錯誤和警告信息輸出到VS的輸出信息欄中。
在velt中需要配置編譯器參數:

### 4? 應用程序調試的基本原理
在Linux應用程序調試這一塊,VELT不但能支持Linux下console應用程序的調試,在Windows上安裝了XServer后也能進行gui應用程序的調試,但只能使用gdb,不支持gdbserver,其調試引擎的結構為:

如上圖所示,VELT在WINDOWS端運行了幾個輔助程序。
首先是RemoteConsole,這個程序的主要作用是顯示遠端程序的輸出,并接受用戶輸入傳送給遠端,此程序包含在EmbedLinux的安裝包中。
其次是putty,這個程序用于完成SSH/TELNET/COM連接,并負責調用遠端Linux上的gdb。,此程序包含在EmbedLinux的安裝包中。
如果要在vs下調試Linux下的GUI程序,還需要安裝Xming這個windows下的x server,此程序不在EmbedLinux的安裝包中,需要自己到mingw.org下載并安裝。如果不需要調試GUI程序當然也可以不理會它。
當按下Ctrl-F5不調試運行時,VELT的結構就變成了這樣:

此時VC調試引擎將直接調用RemoteConsole,RemoteConsole再根據需要調用putty連接Linux機器并調用目標程序,如果調試的是windows下的程序,RemoteConsole將通過cmd.exe調用本地的TargetApp。
### 5? 開發環境
下面是一個典型的嵌入式開發環境配置:
主機開發環境:
系統:WIN8 64位
開發工具:vs2013 + velt-0.1.7
虛擬機:Vmware workstation-11.0。
編譯主機開發環境:
虛擬機的系統用于交叉編譯和嵌入式開發中各種服務的提供。
操作系統:RHEL-6.3,此虛擬機僅用于開發,不考慮其安全性的配置。
開發工具:gcc、不同平臺下的交叉編譯工具鏈。
系統服務:開啟tftp、samba、ftp、ssh
目標機:想使用的平臺,如海思、TI、ADI等平臺,或者虛擬機的Linux。
連接方式:telnet / ssh / com
調試方式:gdb / gdbserver
### 6? 目錄共享
首先將windows目錄通過vmware的共享目錄功能共享給Linux,如f:\work,在Linux下看到的目錄就是/mnt/hgfs/share/work。
其次將Linux下的目錄通過samba服務共享給windows,如/work,映射到windows下的z:\,這里需要注意的是samba的帳號和我們后面用SSH登錄的帳號應當一致,避免由于權限問題造成不必要的干擾。
當進行uboot和linux內核的開發時,代碼只能放在linux的虛擬硬盤中,而不能放在windows系統中,因為它們需要使用符號鏈接,也需要區分大小寫。
而在進行普通應用程序開發時,如果沒有使用符號鏈接,只需要將代碼放在windows目錄下,這樣可以加快vs的代碼分析速度。
將這兩個配置寫入到Velt的全局參數中:

這樣以后新建項目的時候就可以直接使用了。
### 7? Sdf文件位置
由于VS將瀏覽信息放在SDF文件中,而項目文件可能放在虛擬機的共享目錄中,因此需要更改SDF文件的路徑,務必保證它位于windows直接管理的硬盤上,否則在編譯大項目時將導致運行速度緩慢。

### 8? VELT安裝
下面開始安裝VELT插件:
1.
在開始安裝前首先卸載舊版本的插件。
2.
運行VeltSetup-0.1.9.exe,一路往下安裝就可以了。安裝完成后應當可以在vs的幫助信息中看到這個插件:
3、打開VS的新建項目窗口,可以看到新添加的EmbedLinux平臺:
至此安裝完成!

### 9? Velt卸載
Velt的卸載可以通過控件面板的卸載功能完成。