境搭建完整指南)
1. 先聊聊這套老環(huán)境VxWorks 6.8與Workbench 3.2先說結(jié)論VxWorks 6.8搭配Workbench 3.2是一套“年紀(jì)不小但生命力極強(qiáng)”的開發(fā)組合。VxWorks本身是風(fēng)河公司推出的實(shí)時(shí)操作系統(tǒng)在航空航天、工業(yè)控制、軌道交通、醫(yī)療器械、網(wǎng)絡(luò)設(shè)備這些對(duì)穩(wěn)定性要求極高的領(lǐng)域它已經(jīng)穩(wěn)定運(yùn)行了幾十年。而Workbench 3.2是配套的集成開發(fā)環(huán)境基于Eclipse內(nèi)核做了深度定制負(fù)責(zé)代碼編輯、交叉編譯、鏡像構(gòu)建、目標(biāo)機(jī)調(diào)試這一整條鏈路。很多剛接觸這個(gè)領(lǐng)域的朋友會(huì)覺得奇怪現(xiàn)在都什么年代了怎么還在學(xué)6.8這么老的版本答案很簡單就像很多工廠里還在用XP系統(tǒng)控制設(shè)備一樣嵌入式行業(yè)對(duì)“能用、穩(wěn)定、經(jīng)過驗(yàn)證”的追求遠(yuǎn)高于對(duì)“新版、花哨、功能多”的追求。VxWorks 6.8在內(nèi)核穩(wěn)定性、BSP支持范圍、編譯工具鏈成熟度上都經(jīng)過了十幾年的生產(chǎn)驗(yàn)證國內(nèi)大量存量設(shè)備、科研項(xiàng)目、教學(xué)實(shí)驗(yàn)平臺(tái)都跑在這套環(huán)境上。你去翻很多大學(xué)的嵌入式實(shí)時(shí)操作系統(tǒng)課程、研究所的項(xiàng)目文檔用的還是vxworks6.8和workbench3.2這對(duì)組合。這篇文章要解決的事情很直接從零開始把VxWorks 6.8和Workbench 3.2的開發(fā)環(huán)境完整搭起來跑通一個(gè)最簡單的“下載-運(yùn)行-打印”閉環(huán)然后用工程實(shí)踐的方式理解VxWorks的核心開發(fā)流程。適合誰看剛被老師或領(lǐng)導(dǎo)安排“你去把VxWorks環(huán)境裝一下”的新人準(zhǔn)備做畢業(yè)設(shè)計(jì)的學(xué)生以及想從應(yīng)用開發(fā)轉(zhuǎn)到嵌入式底層開發(fā)的工程師。就算你以前完全沒碰過Eclipse沒寫過RTOS應(yīng)用按照下面的步驟走也能把環(huán)境跑起來。2. 環(huán)境搭建前先把這些事想清楚2.1 安裝包與許可證繞不開的第一道坎和普通軟件的“下一步下一步”不同VxWorks的安裝包和許可是兩個(gè)獨(dú)立的東西。安裝包本身是一張DVD鏡像文件名一般類似Wind River VxWorks 6.8之類的ISO里面包含Workbench IDE、交叉編譯工具鏈、BSP源碼、文檔和示例工程。你需要事先準(zhǔn)備好虛擬光驅(qū)軟件或者解壓工具推薦直接用WinMount或者PowerISO掛載ISO比解壓更省事因?yàn)榘惭b程序?qū)獗P路徑的識(shí)別更穩(wěn)定。許可證這塊要特別說清楚因?yàn)轭^一回裝的人十個(gè)有八個(gè)卡在這里。VxWorks 6.8的許可模式是“許可證服務(wù)器 客戶端”。也就是說你需要在一臺(tái)機(jī)器上運(yùn)行Wind River License Server服務(wù)把獲得的.lic許可證文件加載進(jìn)去然后Workbench啟動(dòng)時(shí)會(huì)自動(dòng)去這個(gè)服務(wù)器校驗(yàn)。安裝包里面帶不帶許可證文件取決于你從什么渠道拿到的光盤。如果是商業(yè)采購風(fēng)河會(huì)給你正式的許可文件和注冊碼如果是教學(xué)試用一般會(huì)提供帶有效期的評(píng)估許可。網(wǎng)上有各種關(guān)于“注冊機(jī)”“破解”的說法我強(qiáng)烈不建議走這條路——這套環(huán)境的安裝本來就夠磨人了許可問題搞得不干凈后面編譯調(diào)試還會(huì)出各種莫名其妙的幺蛾子。2.2 宿主機(jī)選擇為什么我勸你用Windows 7虛擬機(jī)VxWorks 6.8年代的Workbench 3.2官方支持的操作系統(tǒng)是Windows XP、Windows Vista、Windows 7。雖然它在Windows 10/11上也能裝但你會(huì)發(fā)現(xiàn)一堆兼容性問題菜單顯示錯(cuò)位、Target Server連接不穩(wěn)定、調(diào)試時(shí)斷時(shí)續(xù)甚至Eclipse界面直接白屏。所以我給所有新人的第一個(gè)建議是不要在你的主力Windows 10/11上直接裝老老實(shí)實(shí)開一個(gè)Windows 7 SP1的虛擬機(jī)x64版本。VMware Workstation或者VirtualBox都行虛擬機(jī)配置給2核CPU、4GB內(nèi)存、60GB硬盤就足夠。Windows 7虛擬機(jī)里安裝Workbench 3.2運(yùn)行效率、連接穩(wěn)定性、調(diào)試體驗(yàn)比在Windows 10/11上強(qiáng)太多。我這幾年幫人排查環(huán)境問題相當(dāng)一部分“連不上目標(biāo)機(jī)”“編譯崩潰”的案例最后發(fā)現(xiàn)都是宿主機(jī)版本不匹配導(dǎo)致的。如果你實(shí)在不想用虛擬機(jī)那至少要做到兩點(diǎn)安裝路徑不要有中文和空格推薦C:\WindRiver安裝完成后把Workbench的快捷方式屬性里“兼容模式”設(shè)為Windows 7并以管理員身份運(yùn)行。實(shí)測下來能減少大部分崩潰問題。2.3 安裝路徑與目錄規(guī)劃不然后面有你受的Workbench 3.2基于Eclipse 3.x內(nèi)核對(duì)路徑的“潔癖”很重。路徑一旦包含中文、空格、特殊符號(hào)編譯時(shí)會(huì)直接報(bào)一堆找不到頭文件的錯(cuò)誤排查起來極其痛苦。我見過有人把WindRiver裝在D:\我的軟件\Wind River下面結(jié)果Boot Loader工程一編譯就是幾百個(gè)錯(cuò)誤改路徑重裝才解決。規(guī)劃建議是主安裝目錄C:\WindRiver工作空間C:\WindRiver\workspace許可證服務(wù)器安裝目錄C:\WindRiver\license安裝程序默認(rèn)會(huì)帶上但單獨(dú)建目錄便于管理另外注意Windows 7下C:\Program Files這類目錄有UAC權(quán)限問題Workbench寫文件時(shí)可能被攔截所以寧可用根目錄下的自定義目錄省得后面各種“Permission denied”。安裝時(shí)如果殺毒軟件在運(yùn)行也建議暫時(shí)退出VxWorks安裝包里有大量底層工具和驅(qū)動(dòng)容易被誤報(bào)。3. Workbench 3.2安裝實(shí)操一步步來別跳步3.1 主程序安裝選組件時(shí)別亂勾掛載ISO后運(yùn)行安裝程序界面是典型的老式InstallAnywhere風(fēng)格。前面幾步就是同意協(xié)議、填用戶名組織名沒有太多講究。真正需要注意的是組件選擇界面。Workbench 3.2的安裝組件按功能劃分比如Workbench IDE必選就是Eclipse殼VxWorks 6.8 Target Support必選包含目標(biāo)機(jī)運(yùn)行庫和BSPGNU編譯器工具鏈必選交叉編譯靠它Diab編譯器可選風(fēng)河自家的編譯器商業(yè)許可另收費(fèi)Documentation建議選上離線幫助文檔查起來方便Simulator必選VxSim仿真器就在這里你要是拿不準(zhǔn)全選也沒問題就是多占幾個(gè)GB的磁盤空間。安裝過程大約20到40分鐘取決于機(jī)器性能。中途不要切出去干別的老安裝程序比較敏感最小化都會(huì)偶爾出錯(cuò)。3.2 許可證服務(wù)器配置這個(gè)坑我一定要單獨(dú)拉出來講安裝接近尾聲的時(shí)候安裝程序會(huì)問你“是否安裝Wind River License Server”。第一次裝的人很容易忽略這一步或者出于“我只要開發(fā)環(huán)境”的心態(tài)直接跳過。然后等打開Workbench時(shí)發(fā)現(xiàn)新建工程、編譯下載全都灰著不能用提示License錯(cuò)誤。正確的做法是在安裝向?qū)Ю锕催x安裝License Server。安裝完成后從開始菜單找到Wind River License Server的管理工具界面類似一個(gè)簡單的服務(wù)管理器。在這里你需要加載.lic許可證文件指定一個(gè)端口號(hào)默認(rèn)27000然后啟動(dòng)服務(wù)。要注意的是License Server運(yùn)行后會(huì)在系統(tǒng)服務(wù)里生成一個(gè)WRLicenseServer服務(wù)。如果你重啟了虛擬機(jī)必須確認(rèn)這個(gè)服務(wù)處于運(yùn)行狀態(tài)再啟動(dòng)Workbench。很多時(shí)候“Workbench打不開”“新建工程是灰的”都是這個(gè)服務(wù)沒啟動(dòng)。提示如果Workbench提示連接License Server失敗先用瀏覽器訪問http://localhost:27000看服務(wù)是否響應(yīng)不行就去Windows服務(wù)管理里手動(dòng)啟動(dòng)WRLicenseServer。3.3 首次啟動(dòng)Workbenchworkspace與界面認(rèn)知安裝完成并配上許可證后啟動(dòng)Workbench。第一次啟動(dòng)會(huì)彈窗讓你選擇workspace目錄這個(gè)目錄存的是你的工程文件和配置文件推薦放在C:\WindRiver\workspace勾選“Use this as the default and do not ask again”。進(jìn)入主界面后你會(huì)看到非常典型的Eclipse布局左上Project Explorer、右側(cè)代碼編輯區(qū)、下方Console和Problems、左側(cè)Outline。如果你以前用過Eclipse開發(fā)Java或C/C上手沒有任何難度如果沒用過也不要緊記住三個(gè)關(guān)鍵位置Project Explorer看工程文件結(jié)構(gòu)所有源碼、配置、構(gòu)建文件都在這里Console編譯輸出、運(yùn)行輸出、Target Shell交互都靠它Problems編譯錯(cuò)誤警告列表雙擊可以直接跳到對(duì)應(yīng)代碼Workbench默認(rèn)的透視Perspective是“VxWorks開發(fā)”相關(guān)布局不用改默認(rèn)就很順手。如果你發(fā)現(xiàn)界面上有很多帶“Target”字樣的視圖別慌那是連接目標(biāo)機(jī)用的調(diào)試視圖后面跑VxSim時(shí)會(huì)用到。3.4 老Eclipse的內(nèi)存優(yōu)化不調(diào)真的會(huì)卡Workbench 3.2底層的Eclipse版本比較老默認(rèn)內(nèi)存配置很低工程一多就卡得讓人崩潰。安裝目錄下有個(gè)workbench.ini文件用記事本打開找到-Xmx開頭的行默認(rèn)可能是-Xmx256m直接改成-Xmx1024m有條件改到-Xmx2048m。同時(shí)確保-Xms設(shè)為128m避免啟動(dòng)時(shí)反復(fù)分配內(nèi)存。改完之后重啟Workbench你會(huì)發(fā)現(xiàn)編譯大工程時(shí)的流暢度提升一個(gè)檔次。這個(gè)操作很多人不知道屬于典型的“老環(huán)境使用心得”實(shí)測下來效果非常明顯。4. 創(chuàng)建VxSim工程先把BSP和鏡像跑起來4.1 從Boot Loader工程開始理解BSPVxWorks的啟動(dòng)流程大致是Boot ROM引導(dǎo)→加載VxWorks鏡像→啟動(dòng)內(nèi)核→運(yùn)行應(yīng)用。在真實(shí)板卡上Boot ROM放在Flash里在開發(fā)階段我們用VxSim仿真器來代替這套流程。在Workbench里創(chuàng)建工程要先新建一個(gè)“VxWorks Boot Loader”工程。操作路徑是File → New → Project在類型列表里找到VxWorks相關(guān)的分類選擇Boot Loader工程。工程向?qū)?huì)讓你選BSPVxWinSim或者VxSim for x86選對(duì)應(yīng)x86的仿真BSP即可。BSP是VxWorks里一個(gè)非常高頻率出現(xiàn)的詞全稱Board Support Package板級(jí)支持包。它把CPU初始化、中斷控制器、定時(shí)器、串口、網(wǎng)卡這些硬件相關(guān)的東西都封裝了起來對(duì)上提供統(tǒng)一的接口。理解BSP基本上就理解了“VxWorks怎么適配一塊新板子”這件事。在仿真環(huán)境里VxSim就充當(dāng)了“虛擬板子”的角色。Boot Loader工程創(chuàng)建后直接右鍵Build。編譯過程會(huì)調(diào)用GNU交叉編譯工具鏈生成bootrom相關(guān)的鏡像文件。第一次編譯會(huì)比較慢需要幾分鐘之后增量編譯就快了。編譯完成后在工程輸出目錄能看到bootrom_uncmp這樣的文件這就是Boot Loader鏡像。4.2 編譯VxWorks鏡像工程不是每個(gè)工程都能直接跑光有Boot Loader還不夠我們需要一個(gè)VxWorks操作系統(tǒng)鏡像。在Workbench里這個(gè)工程類型叫“VxWorks Image Project”。創(chuàng)建它的時(shí)候同樣要選擇BSP還是VxSim for x86然后會(huì)生成一個(gè)包含VxWorks內(nèi)核配置的工程。這個(gè)地方我要特別講一下“工程依賴”的概念。我們最終運(yùn)行的應(yīng)用要下載到目標(biāo)機(jī)上而目標(biāo)機(jī)上跑的是VxWorks鏡像。所以應(yīng)用工程可下載內(nèi)核模塊DKM必須關(guān)聯(lián)到一個(gè)VxWorks鏡像工程編譯時(shí)才能拿到正確的頭文件和符號(hào)信息。Workbench里通過“Project References”來配置這個(gè)關(guān)聯(lián)后面創(chuàng)建DKM工程的時(shí)候要注意勾選。VxWorks鏡像工程創(chuàng)建完成后右鍵Build編譯產(chǎn)物是vxWorks這個(gè)文件。它是整個(gè)操作系統(tǒng)的二進(jìn)制鏡像包含了內(nèi)核、驅(qū)動(dòng)、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等所有組件。編譯VxWorks鏡像還有一個(gè)隱藏的配置環(huán)節(jié)在工程屬性的“Build Properties”里可以裁剪組件——比如去掉不需要的網(wǎng)絡(luò)功能、文件系統(tǒng)或者添加調(diào)試組件。這玩意兒就是VxWorks最強(qiáng)大的地方之一模塊化裁剪想讓操作系統(tǒng)多小就能多小。新手階段不用動(dòng)這些配置默認(rèn)就行。4.3 啟動(dòng)VxSim目標(biāo)機(jī)從“沒有”到“在線”編譯好鏡像后啟動(dòng)VxSim。在Workbench工具欄上有一個(gè)“Target”相關(guān)的下拉菜單選擇“Launch VxSim”或者類似選項(xiàng)。VxSim會(huì)在你的Windows上啟動(dòng)一個(gè)獨(dú)立的仿真進(jìn)程模擬一個(gè)跑著VxWorks的x86目標(biāo)機(jī)。啟動(dòng)VxSim后它會(huì)在后臺(tái)等待Target Server連接。Target Server是Workbench和目標(biāo)機(jī)之間的一座橋負(fù)責(zé)下載鏡像、轉(zhuǎn)發(fā)調(diào)試命令、傳遞標(biāo)準(zhǔn)輸入輸出。首次連接Workbench會(huì)引導(dǎo)你創(chuàng)建一個(gè)Target Server配置關(guān)鍵參數(shù)是選擇目標(biāo)機(jī)類型VxSim和通信方式默認(rèn)WDB。配置完成后點(diǎn)擊連接過幾秒Target視圖里就會(huì)顯示目標(biāo)機(jī)在線。這時(shí)候你在Workbench的Console里應(yīng)該能看到VxSim的啟動(dòng)日志類似VxWorks版本號(hào)、內(nèi)存大小、BSP名稱之類的信息??吹竭@行日志說明你的VxWorks系統(tǒng)已經(jīng)真正跑起來了。提示VxSim運(yùn)行后不要手動(dòng)關(guān)閉它的窗口否則Target Server會(huì)立刻斷連。我見過太多人連上后亂點(diǎn)把VxSim窗口關(guān)了然后跑來問“為什么Target Server時(shí)斷時(shí)續(xù)”。5. 跑通第一個(gè)DKM工程下載、運(yùn)行、調(diào)試一條龍5.1 什么是DKM可下載內(nèi)核模塊DKMDownloadable Kernel Module是VxWorks 6.8里最常用的應(yīng)用開發(fā)方式。它和普通Linux用戶態(tài)程序不同DKM是運(yùn)行在內(nèi)核態(tài)的模塊擁有內(nèi)核的訪問權(quán)限編譯產(chǎn)物是.out文件通過Target Server下載到目標(biāo)機(jī)的內(nèi)存中直接執(zhí)行。為什么開發(fā)應(yīng)用要用DKM而不是直接編進(jìn)VxWorks鏡像因?yàn)榈?。鏡像是一次編譯整體燒錄的改一行代碼要重新編整個(gè)操作系統(tǒng)而DKM是動(dòng)態(tài)加載的改完代碼重新編譯下載到目標(biāo)機(jī)就能跑開發(fā)效率高得多。你在VxWorks上寫設(shè)備驅(qū)動(dòng)、寫業(yè)務(wù)邏輯、寫控制算法絕大多數(shù)時(shí)候都在寫DKM。5.2 寫一個(gè)最小任務(wù)示例從zero到打印創(chuàng)建DKM工程File → New → Project選擇“VxWorks Downloadable Kernel Module”工程類型。向?qū)?huì)要求關(guān)聯(lián)一個(gè)VxWorks鏡像工程就是剛才編好的那個(gè)一定要勾上。然后新建一個(gè)C源文件比如demo.c寫一個(gè)最簡單的任務(wù)#include vxWorks.h #include stdio.h #include taskLib.h static void demoTask(void) { int count 0; while (1) { printf(VxWorks demo running, count %d\n, count); taskDelay(sysClkRateGet()); /* 延遲1秒 */ } } void demoStart(void) { taskSpawn(demo, 100, VX_FP_TASK, 20000, (FUNCPTR)demoTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); }這段代碼干了什么事taskSpawn是VxWorks創(chuàng)建任務(wù)的核心API參數(shù)分別是任務(wù)名、優(yōu)先級(jí)數(shù)值越小優(yōu)先級(jí)越高100是普通優(yōu)先級(jí)、任務(wù)選項(xiàng)、棧大小20000字節(jié)、函數(shù)入口以及最多10個(gè)參數(shù)。taskDelay讓任務(wù)暫停指定個(gè)數(shù)的系統(tǒng)時(shí)鐘周期sysClkRateGet()返回系統(tǒng)時(shí)鐘頻率即每秒多少個(gè)tick所以這里是延遲1秒。新手寫VxWorks代碼最常犯的錯(cuò)有兩個(gè)一是棧開太小任務(wù)里一用printf這種吃棧的函數(shù)就棧溢出另一個(gè)是忘記用taskSpawn直接在初始化里寫while(1)死循環(huán)把整個(gè)系統(tǒng)卡死。記住VxWorks是RTOS所有業(yè)務(wù)邏輯都應(yīng)該放在獨(dú)立任務(wù)里跑而不是在啟動(dòng)函數(shù)里死等。5.3 編譯、下載、運(yùn)行、調(diào)試寫好后右鍵工程Build編譯生成.out文件。然后在Target連接狀態(tài)正常的前提下右鍵demo.out選擇“Download to Target”把模塊下載到目標(biāo)機(jī)內(nèi)存。下載完成后打開Workbench的Target Shell或者Console視圖輸入demoStart啟動(dòng)任務(wù)。這里要注意DKM下載之后只是把代碼放到了目標(biāo)機(jī)內(nèi)存里并不會(huì)自動(dòng)執(zhí)行。你需要手動(dòng)調(diào)用入口函數(shù)。Workbench的Target Shell里可以直接敲C函數(shù)名來調(diào)用就像在終端里執(zhí)行命令一樣。按下回車的一瞬間Console里會(huì)持續(xù)刷出VxWorks demo running, count 0之類的輸出??吹竭@個(gè)恭喜你整套VxWorks 6.8 Workbench 3.2環(huán)境從搭建到開發(fā)的全鏈路已經(jīng)徹底跑通了。調(diào)試的話Workbench支持源碼級(jí)調(diào)試。在代碼里打斷點(diǎn)右鍵demo.out選擇“Debug As”而不是“Download”它會(huì)進(jìn)入調(diào)試模式和Eclipse調(diào)試Java的體驗(yàn)幾乎一樣可以單步、看變量、看調(diào)用棧。VxWorks 6.8的WDB調(diào)試代理支持內(nèi)核態(tài)調(diào)試這對(duì)寫驅(qū)動(dòng)的人來說簡直是救命的工具。6. 常見問題與排查技巧實(shí)錄6.1 安裝與許可問題速查現(xiàn)象常見原因解決思路Workbench啟動(dòng)后新建工程菜單全灰License Server未啟動(dòng)或許可無效啟動(dòng)WRLicenseServer服務(wù)檢查.lic文件是否加載安裝過程中報(bào)“Permission denied”殺毒軟件攔截或UAC權(quán)限問題退出殺軟右鍵安裝程序以管理員身份運(yùn)行Workbench啟動(dòng)白屏或閃退Eclipse內(nèi)存不足或JDK不兼容修改workbench.ini加大Xmx確認(rèn)使用安裝包自帶JRE編譯工程時(shí)報(bào)一堆“找不到頭文件”路徑含中文空格或工程未關(guān)聯(lián)鏡像工程重裝到C:\WindRiver檢查Project References下載DKM提示“No target available”Target Server未連接目標(biāo)機(jī)確認(rèn)VxSim還在運(yùn)行檢查Target連接狀態(tài)6.2 編譯報(bào)錯(cuò)不直觀從Build Console看真相Workbench的Problems視圖有時(shí)候會(huì)“謊報(bào)軍情”——顯示的錯(cuò)誤不全或者跳轉(zhuǎn)位置不對(duì)。老Eclipse殼子的常見毛病。當(dāng)你覺得編譯結(jié)果莫名其妙時(shí)一定要打開Console視圖切到“Build”標(biāo)簽頁看完整的編譯輸出。真正的錯(cuò)誤信息比如語法錯(cuò)誤、未定義符號(hào)都在那里面比Problems視圖準(zhǔn)確得多。GNU工具鏈的報(bào)錯(cuò)格式一般是文件路徑:行號(hào):列號(hào): error: 描述照著這個(gè)格式去Console里搜索error:關(guān)鍵字一眼就能定位問題。6.3 運(yùn)行時(shí)連接與調(diào)試問題運(yùn)行階段的問題十個(gè)有七個(gè)出在Target Server連接上。我梳理了幾個(gè)高頻場景都實(shí)測驗(yàn)證過第一VxSim成功啟動(dòng)但Target Server連不上。先把防火墻關(guān)掉或者放行WorkbenchVxSim會(huì)占用某個(gè)端口和Windows通信防火墻經(jīng)常攔它。第二DKM下載成功但調(diào)用demoStart沒反應(yīng)。檢查任務(wù)是否創(chuàng)建成功用Target Shell敲taskShow命令查看當(dāng)前所有任務(wù)列表看看有沒有名為“demo”的任務(wù)。如果沒有說明taskSpawn參數(shù)有問題最常見的就是棧大小設(shè)太小任務(wù)創(chuàng)建直接失敗。第三printf輸出不顯示。先確認(rèn)你看的是不是Target Console而不是本地的Console——VxSim上所有應(yīng)用輸出都走Target Server轉(zhuǎn)發(fā)如果打印在Target上沒出現(xiàn)多半是Target Server的標(biāo)準(zhǔn)IO轉(zhuǎn)發(fā)配置沒打開回到Target Server的啟動(dòng)參數(shù)里檢查“Enable I/O forwarding”選項(xiàng)。6.4 幾個(gè)讓我節(jié)省大量時(shí)間的避坑習(xí)慣每臺(tái)新環(huán)境裝完后立刻做一個(gè)干凈的虛擬機(jī)快照。以后環(huán)境搞壞了不用重裝直接回滾快照。修改工程配置前先備份.wpj和.wrm這類工程文件。Workbench的配置損壞恢復(fù)起來比重裝還麻煩。定期備份workspace目錄。Eclipse系列的workspace里有很多本地歷史記錄和工程狀態(tài)丟了很傷。在Windows 7虛擬機(jī)里把虛擬機(jī)的內(nèi)存鎖定、CPU分配調(diào)高一些VxSim和Workbench雙開時(shí)不至于卡死。7. 環(huán)境跑通之后學(xué)習(xí)路線與方向建議7.1 把WindShell當(dāng)成你的朋友環(huán)境搭起來后很多人就急著寫任務(wù)、跑業(yè)務(wù)。但我更建議你先花時(shí)間把Target Shell也叫WindShell用熟。這是VxWorks最經(jīng)典的交互工具本質(zhì)是一個(gè)跑在目標(biāo)機(jī)上的命令行解釋器直接敲命令就能和內(nèi)核交互。試試這些命令i查看所有任務(wù)狀態(tài)taskShow看任務(wù)詳細(xì)信息memShow查看內(nèi)存使用devs查看設(shè)備列表ls和cd操作文件系統(tǒng)。這些命令看起來簡單但能幫你建立對(duì)“正在運(yùn)行的系統(tǒng)”的直覺。很多時(shí)候你寫代碼發(fā)現(xiàn)內(nèi)存泄漏第一反應(yīng)就應(yīng)該是用memShow看內(nèi)存趨勢。WindShell還支持直接調(diào)用C函數(shù)。你可以先用WindShell手動(dòng)執(zhí)行一個(gè)函數(shù)確認(rèn)行為正確再把它封裝成正式的任務(wù)函數(shù)。這種“先手動(dòng)、后自動(dòng)化”的開發(fā)方式在調(diào)試階段非常高效。7.2 用配置裁剪理解VxWorks的模塊化設(shè)計(jì)VxWorks一個(gè)極其重要的特性是組件可裁剪。一個(gè)完整的VxWorks鏡像可能幾MB但裁掉不需要的組件后可以做到幾百KB甚至更小特別適合資源受限的嵌入式場景。在Workbench的VxWorks鏡像工程里打開Build Properties的配置界面你會(huì)看到密密麻麻的組件列表內(nèi)核、POSIX接口、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)、USB、圖形庫等等。每個(gè)組件都可以勾選或取消。建議你嘗試在VxSim上裁剪掉文件系統(tǒng)和網(wǎng)絡(luò)組件重新編譯鏡像看看系統(tǒng)體積和啟動(dòng)日志的變化。這個(gè)過程幫助你理解“操作系統(tǒng)由什么組成”這個(gè)底層問題。VxWorks不是一個(gè)固定的黑盒而是由大量組件拼裝出來的積木系統(tǒng)。哪些組件影響實(shí)時(shí)性哪些組件增加功耗哪些組件有依賴關(guān)系你只有親手裁剪過才知道。7.3 從仿真到真實(shí)板卡的過渡VxSim畢竟只是仿真它的實(shí)時(shí)性、中斷行為、外設(shè)模擬都和真實(shí)硬件有差距。等你在VxSim上把任務(wù)調(diào)度、信號(hào)量、消息隊(duì)列這些基礎(chǔ)概念玩明白之后一定要找一塊真實(shí)板卡練手哪怕是工控機(jī)、x86小板子甚至QEMU模擬的ARM環(huán)境。遷移到真實(shí)板卡的核心是BSP。工作內(nèi)容的重點(diǎn)從“寫應(yīng)用”轉(zhuǎn)向“適配硬件”時(shí)鐘頻率的配置、內(nèi)存布局的規(guī)劃、串口驅(qū)動(dòng)的移植、網(wǎng)卡驅(qū)動(dòng)的綁定。在Workbench里創(chuàng)建新工程時(shí)選擇對(duì)應(yīng)的BSP編譯燒錄然后跑起你之前在VxSim上寫好的任務(wù)代碼看看哪些能直接跑通哪些跟仿真環(huán)境不一樣。從仿真到板卡你會(huì)遇到中斷延遲不理想、任務(wù)切換抖動(dòng)、外設(shè)驅(qū)動(dòng)工作不正常這些真問題。這時(shí)候你才會(huì)真正理解VxWorks的價(jià)值不在API有多別致而在于它能給你多大的底層控制力——而這恰恰是Linux這類通用系統(tǒng)給不了的。我個(gè)人在實(shí)際項(xiàng)目里的體會(huì)是VxWorks這套東西入門曲線比Linux應(yīng)用開發(fā)要陡但一旦把任務(wù)模型、內(nèi)存管理、BSP機(jī)制這幾個(gè)核心概念打通了你會(huì)發(fā)現(xiàn)RTOS的世界異常清晰。環(huán)境搭建只是萬里長征第一步但這一步穩(wěn)了后面的路就好走了。最后再分享一個(gè)小技巧以后凡是遇到Workbench行為怪異的問題先重啟License Server和Target Server再重啟Workbench別急著卸了重裝——這招能解決掉一半的靈異事件。