vxWorks FAQ中文版收藏
這是從別處轉(zhuǎn)載的,可以將它復(fù)制下來(lái),查找自己碰到的問(wèn)題,可能有解答額,呵呵。
前言(Surface):隨著國(guó)內(nèi)使用VxWorks的用戶越來(lái)越多,為了方便VxWorkers少走一些彎路,特別推出了中文FAQ,其中很多的FAQ來(lái)自comp.os.vxworks和原創(chuàng)。(很多FAQ都可以在該新聞組找到英文版)??
??? 文檔的FAQ總共分為7大類:
1.入門FAQ
2.Tornado工具FAQ
3.BSP FAQ
4.文件系統(tǒng) FAQ
5.網(wǎng)絡(luò) FAQ
6.VxWorks操作系統(tǒng) FAQ
7.其它 FAQ
??? 基本涵蓋了Tornado/VxWorks使用中的主要方面。文檔組織本身沒(méi)有邏輯上的關(guān)聯(lián),經(jīng)過(guò)分類,只是松散的組合在一起,可根據(jù)你的需要選擇閱讀某一部分。
??為了保持本文檔的開(kāi)放性和可擴(kuò)充性,歡迎大家把自己曾經(jīng)碰到過(guò)的問(wèn)題及其解決辦法按分類加到文檔里來(lái)。在修改本文檔時(shí),請(qǐng)把修改記錄加到歷史記錄里。
??歡迎任何人指出文檔中的錯(cuò)誤之處,請(qǐng)把錯(cuò)誤之處發(fā)到附錄B里的任一個(gè)EMAIL里,在此對(duì)那些問(wèn)題的提出者、回答者以及文檔的維護(hù)者一并表示感謝!??
當(dāng)前版本(Current Version):
version 0.1
?
歷史(History):
2002-08-27 wys205??create 0.1 version
?
目錄(Content):
1.入門FAQ
2.Tornado工具FAQ
2.1 編譯器和鏈接器
2.2 調(diào)試器
2.3 FTP
2.4 主機(jī)工具
2.5 安裝
2.6 MAKEFILE
2.7 工程
2.8 目標(biāo)機(jī)服務(wù)器
2.9 Shell
2.10 Telnet
2.11 Tornado
2.12 版本控制
2.13 可視化集成
2.14 Windsh
2.15 WindView
?
3.BSP FAQ
3.1 不同BSP
3.2 處理器
3.2.1 Power PC
3.2.2 I960
3.2.3 MIPS
3.2.4 ARM
3.2.5 x86
3.3 Bootstrap
3.4 配置你的VxWorks
3.5 VME
3.6 VxWorks環(huán)境 environment
3.6.1 usrSerial.c
3.6.2 prj_vxworks.tcl
3.7 PCI
?
4.文件系統(tǒng) FAQ
4.1 Dos文件系統(tǒng)
4.2 Flash文件系統(tǒng)
4.3 Floppy-disk文件系統(tǒng)
4.4 RAM-disk文件系統(tǒng)
4.5 基本文件系統(tǒng)問(wèn)題
?
5.網(wǎng)絡(luò) FAQ
5.1 配置問(wèn)題
5.2 ARP
5.3 DHCP
5.4 FTP和TFTP
5.5 PPP
5.5.1 PPP on Windows 95
5.5.2 PPP on Windows NT
5.5.3 PPP on Solaris
5.6 Sockets
5.7 Telnet
5.8 SNMP
5.9 其它網(wǎng)絡(luò)相關(guān)問(wèn)題
?
6.VxWorks操作系統(tǒng) FAQ
6.1 C++ issues
6.2 Communication problems
6.3 Interrupts
6.4 LoadModule problems
6.5 pthreads
6.6 Reboot
6.7 Semaphores
6.8 Simulator (VxSim)
6.9 Task related items
6.10 Time/timer related items
6.11 Wind Web Server related items
6.12 Zinc/windML related items
6.13 Other items
6.14 VxWorks AE issues
7.其它 FAQ
7.1 Hard delay
7.2 Memory leaks
7.3 Corba engines
7.4 Web servers
7.5 NTP usage
7.6 Performace / Benchmarks
7.7 SNMP
7.8 Lint
7.9 Encryption
7.10 其它
?
附錄A.一些有用的連接
附錄B.維護(hù)
?
1.入門FAQ
1.1 概念
1.1.1 最近剛開(kāi)始學(xué)習(xí)VXWORKS,越看越迷糊:
1)BSP,bootImage,VxWorksImage三者的關(guān)系是什么?BSP是BootImage的一部分還是VxWorksImage 的一部分?對(duì)于可以自啟動(dòng)的系統(tǒng)是不是三者合在一起生成一個(gè)VxWorks Image?
2)應(yīng)用程序代碼是和VxWorks內(nèi)核一起編譯生成一個(gè)VxworksImage嗎?
以上問(wèn)題是針對(duì)于代碼存放在rom介質(zhì)上的系統(tǒng)(如flash)。希望各位大俠不吝賜教!謝謝。。。
A:BSP 是用來(lái)支持你的硬件的軟件, 它包含在你的VxWorksImg里面.對(duì)于ROM啟動(dòng)的系統(tǒng)來(lái)說(shuō), BootImg是ROM里代碼的第一部分, 用來(lái)在開(kāi)機(jī)時(shí)首先運(yùn)行. 如果你的所有代碼都在ROM上, 則引導(dǎo)程序把VxWorksImg拷貝到系統(tǒng)內(nèi)存, 然后再跳轉(zhuǎn)的系統(tǒng)內(nèi)存去執(zhí)行.
BSP的作用屏蔽不同的硬件結(jié)構(gòu)(如CPU和外圍芯片)向VxWorks的Kernel提供
它所需要的一個(gè)統(tǒng)一的接口調(diào)用(如時(shí)鐘)(by 泡泡)
?
bsp: 板級(jí)支持包,主要完成目標(biāo)硬件的初始化工作,提供操作系統(tǒng)一個(gè)統(tǒng)一的接口,負(fù)責(zé)硬件操作,如中斷處理,啟動(dòng),停止,等工作。Bootimage:引導(dǎo)鏡像,我向如果把boot翻譯成啟動(dòng)不是很是當(dāng)?shù)恼f(shuō)法,這是一個(gè)引導(dǎo)程序,負(fù)責(zé)把目標(biāo)系統(tǒng)環(huán)境初始化,最小的程度,如啟動(dòng)了串口,或者網(wǎng)絡(luò)接口,可以使用這些接口現(xiàn)在程序,與主機(jī)通信,然后獲取你需要的OS-vxworksimage vxworksimage-包含vxworks內(nèi)核以及各種組件的鏡像,也就是object images,這是真正的操作系統(tǒng),通常bootimage負(fù)責(zé)獲取這個(gè)鏡像,然后跳到鏡像所在的位置開(kāi)始執(zhí)行。(by hongwind )
?
1.1.2 如何學(xué)習(xí)VXWORK,PSOS入門?
A:初次上站,感覺(jué)大家水平一般,入門級(jí)選手較多,實(shí)時(shí)多任務(wù)操作系統(tǒng)和以前大家使用的低端產(chǎn)品,如51機(jī)在原理上是不同的,因此大家最好先學(xué)習(xí)多任務(wù)操作系統(tǒng)的原理。否則無(wú)法深入學(xué)習(xí)。?
??? 推薦一本書:坦尼博姆著:《操作系統(tǒng)》,各地都有的賣,主要是講MINIX的原理,其實(shí)就是UNIX系列操作系統(tǒng)的實(shí)現(xiàn)原理,由于VXWORKS和PSOS都是這個(gè)系列的操作系統(tǒng),因此理解了這本書,也就理解了它們的工作原理。必將事半功倍,而且對(duì)你理解WINDOWS的工作原理也很有好處。??(by bruin)
?
1.2 環(huán)境
1.2.1 斑竹tornado都是支持那些cpu??能列一下嗎或哪里能找到?斑竹tornado都是支持那些cpu??能列一下嗎或哪里能找到?。。?
A:開(kāi)發(fā)平臺(tái): Windows NT, Sun Solaris, SunOS, HP-UX, Win95 支持處理器: x86, 68k, PPC, CPU 32, i960, SPARC, SPARCLite, SH, ColdFire, R3000, R4000, C16X, ARM, MIPS ...
1.3 編程
1.3.1 vxworks,bsp中有些定義怎么找不到用到的地方,還有些定義找不到在哪里定義過(guò)了,比如MAMR_PTA_SHIFT,哪位大俠給解答一下。不勝感激!?
??? A:在h/drv/multi/ppc860Siu.h里??创a還是用Source Insight(by vxfree)
2.Tornado工具FAQ
?
2.1 編譯器和鏈接器
2.1.1 當(dāng)我把多個(gè)目標(biāo)文件鏈接成一個(gè)時(shí),出現(xiàn)了一個(gè)錯(cuò)誤:ldppc:built in linker script:43: syntax error 我怎么樣才能消除這個(gè)錯(cuò)誤?
A:請(qǐng)確定你的鏈接器使用了-r參數(shù)。(From: weber.dirk@t-online.de)
?
2.1.2 我怎樣使用新版本的編譯器?
A:參看如下連接,有一個(gè)PPC的編譯器http://www.newgcc4vxworks4ppc.cjb.net/
?
2.1.3 當(dāng)用另一個(gè)編譯器編譯代碼時(shí),得到更多的錯(cuò)誤和警告,怎樣才能讓GCC生成更多的警告信息?
A:首先用-Wall參數(shù)打開(kāi)所有警告開(kāi)關(guān);另一種生成更多報(bào)告的方法就是把文件看作是C++文件,參數(shù)為 -x c++.(From: Claudio Ortega, cortega@sinfomed.org.ar)-Wall不能真正打開(kāi)所有的警告,我采用由Bruce Evans推薦的參數(shù)而且在FreeBSD環(huán)境下,BDECFLAGS變量比較固定。
?
# BDECFLAGS are a set of gcc warning settings that Bruce Evans has suggested
# for use in developing FreeBSD and testing changes.??They can be used by
# putting "CFLAGS+=${BDECFLAGS}" in /etc/make.conf.??-Wconversion is not
# included here due to compiler bugs, eg: mkdir()‘s mode_t argument.
#
BDECFLAGS=-W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align \
?????-Wcast-qual -Wchar-subscripts -Winline \
?????-Wmissing-prototypes -Wnested-externs -Wpointer-arith \
?????-Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings
?
This set of flags is *much* pickier than -Wall alone. (From: W Gerald Hicks)
?
2.1.4 當(dāng)編譯我的模塊時(shí)一切都是好的,但是當(dāng)我試圖下載時(shí)得到一個(gè)錯(cuò)誤:missing symbol "__eabi"?
A:在你的模塊里可能有個(gè)main函數(shù),根據(jù)PPC "extended Application Binary Interface" (eabi)標(biāo)準(zhǔn),main函數(shù)必須調(diào)用__eabi函數(shù),該函數(shù)為運(yùn)行你的程序設(shè)置必要的運(yùn)行環(huán)境。
??由于這個(gè)原因GNU編譯器在main函數(shù)里插入 __eabi函數(shù)。Tornado不提供該函數(shù),因?yàn)樵趯?shí)時(shí)環(huán)境下,你不必寫main函數(shù)。VxWorks在應(yīng)用程序運(yùn)行前已經(jīng)設(shè)置
好運(yùn)行環(huán)境了,不再需要main函數(shù)了。(From: Ilia,?iliab@telegate.co.il)
--??作者:lxlong
--??發(fā)布時(shí)間:2005-6-25 13:09:28
--??
2.1.5 我生成了2.95.2版本的編譯器,一切正常,但當(dāng)我開(kāi)始鏈接我的映象時(shí),出現(xiàn)了錯(cuò)誤,下面是我鏈接ctdt表時(shí)的錯(cuò)誤:
ctdt.o(.data+0x3c):fake: undefined reference to `global constructors keyed to?
_constructor_name_... 許多類似的錯(cuò)誤,有誰(shuí)見(jiàn)過(guò)這種錯(cuò)誤嗎?
A: 該問(wèn)題是由gcc(ver2.7.2-2.95.2)試圖改變它得到靜態(tài)構(gòu)造函數(shù)的方法引起的。它不再對(duì)每個(gè)構(gòu)造靜態(tài)對(duì)象的模塊消除函數(shù),該方法是vxworks在編譯鏈接過(guò)程中采用的方法。你可以按如下修改gcc 2.95.2源代碼后,恢復(fù)原先的操作。
in [source code dir]/gcc/config/arm/vxarm.h, at the very end, add:-?
/*? More DK patches: we undef these two in order to force the??*/
/*? compiler to output our static constructors and destructors????*/
/*??in the fashion to which it is accustomed....? */
#undef ASM_OUTPUT_CONSTRUCTOR
#undef ASM_OUTPUT_DESTRUCTOR
/*? This one is so that GLOBAL_THING gets a $ in it‘s name? */
#undef NO_DOLLAR_IN_LABEL
現(xiàn)在更換到你的編譯目錄,敲入make clean命令,然后重新編譯和安裝編譯器。我采用這種方法是可以的,PPC版本的。它使得編譯器使用老的方法來(lái)making munchable constructors。希望對(duì)你也有幫助。
(From: Dave Korn)
2.1.6 在我編譯時(shí),我在編譯窗口看到如下輸出:
nm386 -g partialImage.o @B:\Sources\Components\Common\Common_Geni_Test\Src\prjObjs.lst | \
wtxtcl D:\Tornado\host\src\hutils\munch.tcl -asm 386 > ctdt.c
?? ...
cc386 -nostdlib -r -Wl,-X??partialImage.o ctdt.o -o VxWorksGeniServerTestExe.out
最后一步(linking partialImage.o to ...out)花了很長(zhǎng)時(shí)間(半個(gè)小時(shí)),誰(shuí)有解決辦法?
A: 這個(gè)可能是munching過(guò)程,而不是鏈接,花了半小時(shí)。有人曾貼了一個(gè)小竅門來(lái)加速。
在munch命令管道里使用"grep GLOBAL"如:
nm386 -g partialImage.o @B:\Sources\Components\Common\Common_Geni_Test\Src\prjObjs.lst?
| grep GLOBAL | \
wtxtcl D:\Tornado\host\src\hutils\munch.tcl -asm 386 > ctdt.c
(From: Dave Korn)
2.1.7 怎樣定義一個(gè)沒(méi)有空洞的結(jié)構(gòu)。
Q: How do define a structure without holes in it?
A: 我在vxworks中使用GNU編譯器
struct ex {
INT8??source;
INT32 txSize;
INT32 datSize;
INT16 cmd;
} __attribute__ ((packed));
typedef struct ex PackedStruct;
注意:如果可能,避免使用-fpack-struct編譯器開(kāi)關(guān)。我門最近移除了這個(gè)選項(xiàng),使得我們的C++程序提高了30%-100%的性能。這是因?yàn)槊看未嫒〗Y(jié)構(gòu)或類里多字節(jié)值時(shí),都是一個(gè)一個(gè)字節(jié)操作的??梢允褂胈_attribute__ ((packed)) 方法代替。
(From: Mark Fanara, mfanara@home.cNOSPAMMom, and Francisco Pataro, fpataro@dnaent.com)
2.1.8 我怎樣在一個(gè)C程序文件里調(diào)用一個(gè)C++函數(shù)?
A: 如果你想在一個(gè)C程序文件里調(diào)用一個(gè)C++函數(shù),C++函數(shù)必須用extern "C"聲明;否則編譯器將破壞函數(shù)名,把參數(shù)類型說(shuō)明加在函數(shù)名末尾,并返回該函數(shù)。
(From: Dave Korn)
2.1.9 -fvolatile開(kāi)關(guān)真的需要嗎?
A: WRS建議我們?cè)诰幾gkernel/BSP時(shí),使用-fvolatile開(kāi)關(guān)。它通常缺省打開(kāi)某個(gè)target/h/make/目錄下的文件。
??我們也在我們的應(yīng)用程序編譯過(guò)程中使用-fvolatile開(kāi)關(guān),因?yàn)槲覀儏⒖家恍﹖ornado的makefile。當(dāng)我們移除該開(kāi)關(guān)后,就碰到一些微妙的BUG,如果你編寫驅(qū)動(dòng)程序應(yīng)當(dāng)小心。
??? -fvolatile開(kāi)關(guān)使編譯器生成非常conservative的代碼。通過(guò)指針使變量值增加(p->x++)不可能如你想象的在一條指令里完成(68k example):
addql #1,a0@(8)
如果采用-fvolatile 開(kāi)關(guān)你會(huì)得到:
??movel a0@(8),d0
??addql #1,d0
??movel d0,a0@(8)
??movel a0@(8),d0
You can imagine what a C++ application using the "this" pointer everywhere gets compiled into!?
(From: Chris Varlese, cv@no.mail.net)
2.1.10 我鏈接了許多檔案文件,現(xiàn)在鏈接器在解析文件之間的交叉參考時(shí)出現(xiàn)了問(wèn)題?
A: 試試下面的方法
1、把$(LIBS)替換成$(LD_PARTIAL) -o vxWorks.tmp $(MACH_DEP) usrConfig.o version.o?
$(LIBS) (在target/h/rules.bsp文件中)。 Now LD_PARTIAL is ccxxx, so you need to specify -Wl,--group-start to get cc to pass the argument to ld.?
2、Try adding a -Usymbol for each symbol that has to be pulled in early.?
3、如果辦法2 make ld行太笨拙,生成一個(gè).s文件,包含每個(gè)沒(méi)定義的符號(hào)和加到鏈接里的。
4、如果你工作UNIX下,它應(yīng)該可能得到ld生成沒(méi)有定義的所要求的列表。你需要加一個(gè)循環(huán),就象下面一樣:
/*這是原文,我翻譯不好。
1、$(LIBS) is substituted int $(LD_PARTIAL) -o vxWorks.tmp $(MACH_DEP) usrConfig.o version.o?
$(LIBS) (in target/h/rules.bsp for a non-project build). Now LD_PARTIAL is ccxxx, so you need to specify -Wl,--group-start to get cc to pass the argument to ld.?
2、Try adding a -Usymbol for each symbol that has to be pulled in early.?
3、If (2) make the ld line too unwieldy, generate a .s file that contains: .extern symbol for each undefined symbol and include that into the link before the libraries?
4、If your building on unix, it ought to be possible get ld to generate the required list of undefines! You need to add a loop! Something like this might work:?
*/
?? [ ! -f undefs.s ] && echo "#" >undefs.s
?? while
??$(CC) -c $(CFLAGS) undefs.s
??$(LD_PARTIAL) -o vxWorks.tmp $(MACH_DEP) usrConfig.o version.o \undefs.o $(LIBS)
??$(NM) vxWorks.tmp | grep ‘ __‘ | $(MUNCH) > ctdt.c
??$(MAKE) CC_COMPILER="-fdollars-in-identifiers" ctdt.o
??do
??$(LD) $(LDFLAGS) -e $(SYS_ENTRY) $(LD_LOW_FLAGS) -o vxWorks \dataSegPad.o vxWorks.tmp ctdt.o tad_hook_list.o 2>&1 | tee ld.errs |while read file undef ref to symbol do
?? [ "$undef" = "undefined" ] || continue
?? [ "$ref" = "reference" ] || continue
?? [ "$to" = "to" ] || continue
???oifs="$IFS"
???IFS="‘/`"
???symbol="`echo $symbol`"
???IFS="$oifs"
???echo "\t.extern\t$symbol"
???done | sort -u - undefs.s >undefs.new
???cmp -s undefs.s undefs.new && break
???mv undefs.new undefs.s
???done
???cat ld.errs
當(dāng)然它需要另一系列的ESC和; \在每一行,以使得可以在make下運(yùn)行。(我也重新構(gòu)造了原始的rules.bsp內(nèi)容,我的可能與vxWorks原來(lái)的有些不同。)(From: David Laight, dsl@tadpole.co.uk)
2.1.11 警告"trigraphs occured"是什么意思?
A: 對(duì)Tornado或Vxoworks沒(méi)什么要做的。你可能在你代碼(也可能在注釋里)中有三字符序列--參看K&R (Kernighan & Ritchie; A12.1 - 這是ANSI 新引進(jìn)的。-- 但是GNU手冊(cè)里提示"You don‘t want to know about this brain-damage..." 使用-ansi或-trigraphs開(kāi)關(guān),或更好的辦法消除任何包含三字符序列‘??X‘的注釋。 (參看K&R書中對(duì)X的定義)。
(From: Michael.Ben-Ari@ecitele.com)
2.1.12 為什么編譯的最后步驟時(shí)間這么長(zhǎng)?
生成.out步驟如下:
??1) 鏈接應(yīng)用程序和庫(kù)到partialImage.o
??2) 使用partialImage.o解析出所有靜態(tài)類(munch)
??3) 編譯上面發(fā)現(xiàn)的(ctdt.o)
??4) 用ctdt.o鏈接第一個(gè)obj文件partialImage.o
我們的應(yīng)用程序.out文件有10M,但是多數(shù)是調(diào)試信息,size386返回只有1M。我們的下載文件生成需要超過(guò)5分鐘,Step #1-3正常需要35秒!但是step #4 需要很多時(shí)間,整個(gè)過(guò)程需要5分30秒。
A: 我不知道為什么這樣?但是我們?cè)趕tep #4不重新使用partialImage.o 而是重新生成它,整個(gè)過(guò)程45s.(是ld386沒(méi)有對(duì)符號(hào)過(guò)濾進(jìn)行優(yōu)化的原因嗎?)
我只是修改了tornado\target\h\make\rules.vxApp文件,它包含制作應(yīng)用程序的規(guī)則。我修改了上面提到的step $4代碼如下:
把$(LD_PARTIAL) $(LD_PARTIAL_LAST_FLAGS) partialImage.o ctdt.o -o $@
替換成$(LD_PARTIAL) $(PRJ_OBJS_FOR_LD_PARTIAL) $(PRJ_LIBS) ctdt.o -o $@
(From: Ole Asbjorn Fadum, OleAsbjornF@scanmar.no)
Some more information.?
For a variety of reasons I‘ve had to do a few build on a slow system. One bit that seemed exceptionally slow is the ‘binToAsm‘ call (just after the ‘deflate‘ generating vxWorks.Z.s).?
This is done by od -bv $infile | sed -e "s/^[0-9]*[ ]*//;
s/ /, 0/g;
/^[0-9a-fA-F][0-9a-fA-F]/s/^/ .byte 0/"
(ie use od to generate a list of octal bytes, remove the offset, change the spaces to comma, add the directive - an extra 0 is added to each number to ensure they are octal).?
The above is terribly slow... Slightly faster (under solaris) is:
?od -An -v -tu1 $infile | tr ‘ ‘ ‘,‘ |
???sed -e ‘s/,00*\([0-9]\)/,\1/g;s/^,/??????.byte?? /‘
However it is clear that a C program would be even faster... It was still sluggish using printf, so...
char map[256][4];
??for (count = 0; count <= 256; count++)
????sprintf( map[ count ], "%d", count );
for (;;) {
????count = read( input_fd, buf, BLK_SZ );
??? if (count <= 0)
????break;
??for (off = 0; off < count; off++) {
????if (off & 15)
???????putchar( ‘,‘ );
????else
???????fputs( "\n??????.byte?? ", stdout??);
????fputs( map[ buf[ off ] ], stdout );
????????}
????}
now the system is spending very little of its time doing this bit (it was a lot slower than the deflate!). If you are using gcc/gas you can pipe EXTRACT_BIN, COMPRESS, BINTOASM directly into AS - saving that
massive intermediate file...?
Build (compiling one small object) just took 6m50 - was over 10 minutes before I played with binToAsm!
Ages ago I sped up ‘munch‘ - by grepping out most of the symbols it isn‘t interested in...
nmarm vxWorks.tmp | tee vxWorks.nm | grep " __" | munch > ctdt.c
(I use the symbol table from this stage for a variety of things...)?
(From: David Laight,?David.Laight@btinternet.com)
--??作者:lxlong
--??發(fā)布時(shí)間:2005-6-25 13:11:03
--??
2.1.13 怎樣把一個(gè)段裝載到特定的絕對(duì)地址?
A: 我曾包含一個(gè)腳本做這些工作,最方便得到這個(gè)腳本的方法是使用--verbose開(kāi)關(guān)運(yùn)行你的鏈接器,例如:?
"ldarm --verbose". 編輯這個(gè)文件加入類似如下的段落,
??.text??0x8000 : {
[omit]
????????. = ALIGN(0x8000);
????????/* Create a 8k section of all 0xffff, first value is jump. */
????????FILL(0xffff);
????????LONG(0xeb000004);
????????. = ALIGN(0x2000);
[...]
這將把數(shù)據(jù)放到任何你想放的地方,在程序被鏈接時(shí)新的鏈接器腳本必須使用-T參數(shù)。
(From: Bill Pringlemeir, bpringlemeir@yahoo.com)
2.1.14 我在使用C++類型的注釋時(shí),出現(xiàn)錯(cuò)誤,怎樣改變它?
A: 一種方法是移除-ansi開(kāi)關(guān)。然而,你可能希望保留你的源代碼與ANSI兼容;所以我更喜歡代碼能在每個(gè)地方都能編譯。傳遞"-Wp,-lang-c"參數(shù)只能使CPP的注釋方法可以使用。下面來(lái)自預(yù)編譯器文檔
`-lang-c‘, `-lang-c89‘, `-lang-c++‘?
`-lang-objc‘, `-lang-objc++‘?
Specify the source language. `-lang-c‘ is the default; it allows recognition of C++ comments (comments that begin with `//‘ and end at end of line), since this is a common feature and it will most likely be in the next C standard. `-lang-c89‘ disables recognition
of C++ comments. `-lang-c++‘ handles C++ comment syntax and includes extra default include directories for C++. `-lang-objc‘ enables the Objective C `#import‘ directive. `-lang-objc++‘?
enables both C++ and Objective C extensions. These options are generated by the compiler driver gcc, but not passed from the `gcc‘ command line unless you use the driver‘s `-Wp‘ option .
(From: Bill Pringlemeir, bpringlemeir@yahoo.com)
2.1.15 我在編譯時(shí)碰到了關(guān)于cc1參數(shù)/選項(xiàng)的錯(cuò)誤?
A: 這個(gè)可能是由于安裝了Cygwin 或DJGPP引起的。當(dāng)該版本的編譯器在路徑里先于Tornado版本Cygwin的GCC被調(diào)用時(shí),這個(gè)版本不知道這些參數(shù)或選項(xiàng)。這個(gè)問(wèn)題可以通過(guò)卸載該軟件或確定Tornado版本的編譯器在路徑環(huán)境變量里是頭一個(gè)后解決。
2.2 調(diào)試器
2.2.1 我怎么使用GDB的plain版本去調(diào)試我的目標(biāo)機(jī),而不用Tornado?
A:gdb compiles ‘out of the box‘ for vxworks.去cygnus(sourceware.cygnus.com)下載最新的‘insight‘軟件,該軟件是gdb + cygnus的UI(譯者:可能是用戶接口)運(yùn)行 "configure --target=mips-wrs-vxworks". 把mips改成你的處理器,然后運(yùn)行make.
這樣就可以在安裝了cygwin的win32平臺(tái)上運(yùn)行了,在UNIX系統(tǒng)平臺(tái)上也類似。RDB是windriver以前的調(diào)試協(xié)議,現(xiàn)在變成WDB了。好象沒(méi)公布wdb的比特,盡管Tornado使用了gdb。你可能不得不配置RDB。包含RDB組件(INCLUDE_RDB) ,并移除WDB組件(remove INCLUDE_WDB),以使得調(diào)試可以進(jìn)行。(From: Don Bowman, don@pixstream.com)
2.2.2 我怎么在創(chuàng)建一個(gè)任務(wù)后停止它,以使得我能從開(kāi)始對(duì)它進(jìn)行調(diào)試?
A: 菜單tools->options,選擇debugger頁(yè),選擇always halt after attaching a task和Auto Attach to task -> Always現(xiàn)在輸入一個(gè)全局?jǐn)帱c(diǎn)(Shift F9),在它碰到斷點(diǎn)后,它將從mainTask中分離。
(From: Chacha Hindustani, Gurudev@mediaone.net)
2.2.3 為什么當(dāng)我使用SHELL檢查內(nèi)存時(shí),看不到斷點(diǎn)?
A: shell是一個(gè)不可中斷的任務(wù),所以任何時(shí)間它都在運(yùn)行在無(wú)斷點(diǎn)的環(huán)境。當(dāng)任務(wù)切換引起一個(gè)中斷的任務(wù)運(yùn)行時(shí),斷點(diǎn)將被重新安裝。所以如果查看內(nèi)存中的斷點(diǎn),只是簡(jiǎn)單使用d()或l()命令,它在一個(gè)中斷任務(wù)中可以運(yùn)行,你將看到一個(gè)magic code插入并引起異常。
The shell is an unbreakable task, so all the time it is running the breakpoints are not installed. When a contexttch causes a breakable task to run, the breakpoints will be resinstated.?
So, to see the breakpoint in memory simply spawn the d() command or l() command. That will then run in a breakable task, and you should see the magic code inserted to cause an exception.?
(From: John, john_94501@yahoo.com)
2.3 FTP
參看5.4
2.4 主機(jī)工具
2.4.1 我制作了一個(gè)基于rom的VxWorks(vxWorks_rom),但是當(dāng)我試圖用elftobin把它轉(zhuǎn)換成bin格式的(vxworks_rom.bin),得到了如下錯(cuò)誤:
C:\project\Project3\default\elftobin
2.4.2 我怎樣寫一個(gè)WTX工具?
A: 我曾經(jīng)在Tornado 1.0.1 和Windows NT 4.0環(huán)境下寫過(guò)一個(gè)WTX工具,按下面的例子和Tornado API參考開(kāi)始,甚至不用關(guān)閉build.讓它獨(dú)自按我的步驟工作。就是我使用VC++6編譯,但仍有許多東西丟掉了,不論編譯器是什么版本。我知道我能更熟練的使用路徑里的環(huán)境變量。但有時(shí)你只需要它工作,所以下面澄清一下:
原代碼放在$(WIND_BASE)\host\src\wtxtest下,我的安裝目錄或任何其它人的安裝目錄里沒(méi)有例子源碼。
按手冊(cè)源代碼按如下修改(大多是信號(hào)處理代碼修改和增加includes,其它修改在我的程序里說(shuō)明)把下面的設(shè)置加到工程設(shè)置、 C/C++, Preprocessor: include目錄(路徑按實(shí)際情況修改):
C:\Tornado_03\share\src\wtx,C:\Tornado_03\host\include?
預(yù)處理定義:HOST
把下面的設(shè)置加到工程設(shè)置,Link,General:
C:\Tornado_03\host\x86-win32\lib\wtxapidll-d.lib 增加環(huán)境變量WIND_REGISTRY,設(shè)為我的注冊(cè)位置。許多痛苦就在發(fā)現(xiàn)這個(gè)。手冊(cè)里參考wtxEnvironSet()調(diào)用,Windsurf說(shuō)它是不存在的,但手冊(cè)為這個(gè)不存在的函數(shù)使用提供了許多參考。我的機(jī)器上沒(méi)設(shè)置WIND_REGISTRY,所有的Tornado工具都可以不使用它而正常工作。我的工具不能發(fā)現(xiàn)注冊(cè),設(shè)置它并關(guān)閉它(Set it and poof)!注冊(cè)發(fā)現(xiàn)了,工具可以工作。
確信起調(diào)用了wtxProbe()去檢查注冊(cè)(并且變量被設(shè)置),它可以避免許多痛苦。我也修改那個(gè)工具例子代碼。代碼在此#代碼連接#http://www.xs4all.nl/~borkhuis/vxworks/wtxSample.c
(From: Christopher A Leddy, caleddy@west.raytheon.com)
2.4.3 當(dāng)我執(zhí)行wtxwish時(shí),碰到了一個(gè)關(guān)于init.tcl文件的錯(cuò)誤?
A: 不要忘記把TCL_LIBRARY和TK_LIBRARY環(huán)境變量設(shè)置為 $(WIND_BASE)/host/tcl/tcl and
$(WIND_BASE)/host/tcl/tk. init.tcl文件位于TCL_LIBRARY路徑。tk.tcl文件位于目錄。不要使用 $(WIND_BASE) 變量,而是實(shí)際路徑。然后從你的TCL/TK目錄執(zhí)行:
wtxwish
2.4.4 我試圖在windows NT4.0 SP5環(huán)境下運(yùn)行Tornado2.0帶的vxsys程序,碰到一個(gè)錯(cuò)誤: "the system try to access directly to the disk, this is not possible ....."
A: vxsys是DOS程序,不能工作windows環(huán)境下,你應(yīng)該從DOS窗口下運(yùn)行它。
(From: Andray Kaganovsky, andreyk@home.com)
2.4.5 怎樣創(chuàng)建加密密碼?
A: 你可以使用Tornado自帶的創(chuàng)建密碼程序vxencrypt,但是它功能很弱。sum( p* i ^ i )) * 0x1e3a1d5將HEX字符集轉(zhuǎn)化成ASCII(假定認(rèn)為你有超過(guò)2^32加密密碼)。我能用鋼筆和紙來(lái)把它做反變換。你也可以使用loginEncryptInstall()安裝自己的加密算法,對(duì)一個(gè)強(qiáng)密碼[1],加密知道使用密碼作為KEY。
UNIX傳統(tǒng)使用DES,但需要適當(dāng)?shù)拇a。我使用TEA參看http://vader.brad.ac.uk,因?yàn)樗遣皇芊恋K的。
[1] problematical since you have difficulty protecting the password file as none of the vxWorks filesystems support user-ids.
(From: David Laight)
--??作者:lxlong
--??發(fā)布時(shí)間:2005-6-25 13:11:16
--??
2.5 安裝
2.5.1 當(dāng)我試圖安裝GNU源光盤時(shí),出現(xiàn)了一個(gè)關(guān)于文件aux.h的錯(cuò)誤:permission denied。但該文件并不存在,是怎么回事?
A: 在微軟SW環(huán)境下存在這個(gè)問(wèn)題,"AUX"是保留字,所以任何以"AUX."開(kāi)頭的都不能存在。任何以設(shè)備名開(kāi)始的文件名也是不能存在的,例如你不能打開(kāi)一個(gè)叫"LPT1.TXT"的文件。
2.5.2 在我安裝完Tornado或它的補(bǔ)丁后,我所有的C文件類型都被移除了,而使用Tornado作為打開(kāi)該文件的工具。我怎樣能恢復(fù)到原來(lái)的編輯器?
A:Tornado覆蓋注冊(cè)表中的實(shí)體。你可以用下面的.reg恢復(fù)。警告:在使用這個(gè)文件前必須小心!首先讀一下該文件,如果你不理解它就不要使用它。
警告:我在windows95和NT下測(cè)試過(guò),如果有時(shí)間我會(huì)在別的的平臺(tái)測(cè)試的。如果你在98、2000下使用后可以工作,請(qǐng)告訴我。
首先下載該文件,仔細(xì)閱讀它,修改它,使她執(zhí)行你需要的編輯器,然后執(zhí)行它。你怎么修改它?一個(gè)方法是執(zhí)行這個(gè)文件,然后去瀏覽器View->Options->File Types.這里你可搜索"C源文件"和"C頭文件"。
修改打開(kāi)命令為你想要的?,F(xiàn)在編輯文件c-files.reg,并移除20行后的部分,第一行以[HKEY_CLASSES_ROOT\c_source_file]開(kāi)始。再次執(zhí)行,、將把所有文件類型恢復(fù)成你選擇的。
另一種方法:在你的文件類型里找到你的確省編輯器,把這行COPY到文件c-files.reg中vim行(BTW:vim是非常好的編輯器,你可以到http://www.vim.org查詢更多信息)。
文件: c-files.reg#文件連#http://www.xs4all.nl/~borkhuis/vxworks/c-files.reg
2.5.3 當(dāng)我每次雙擊一個(gè)文件,都打開(kāi)一個(gè)Tornado.我想所有的文件都用一個(gè)Tornado打開(kāi),怎么做?
A:是的,這是可能。下面的注冊(cè)文件將完成這個(gè)工作。警告:在使用這個(gè)文件前必須小心!首先讀一下該文件,如果你不理解它就不要使用它。編輯該文件,修改Tornado的安裝路徑為你機(jī)器上的安裝路徑。文件: TornadoFileTypes.reg#文件連接#http://www.xs4all.nl/~borkhuis/vxworks/TornadoFileTypes.reg
2.5.4 能把多個(gè)CPU平臺(tái)安裝到一個(gè)目錄下嗎?
A:可以,但是需要注意幾點(diǎn):只能把同一版本的安裝到同一目錄下。這意味著Tornado 2.0.1 for ARM不能同其它版本安裝到同一個(gè)目錄。也不能把2.0和2.0.2混合在一起。我發(fā)現(xiàn)的唯一不兼容的是MIPS。在安裝了idts134 BSP后,下面的文件會(huì)帶來(lái)問(wèn)題:
1)host\resource\tcl\wtxcore.tcl
在最后的函數(shù)里設(shè)置tool為sfgnu替換為gnu.在if結(jié)構(gòu)里增加設(shè)置tool為sfgnu.現(xiàn)在只有MIPS這個(gè)工具變量被改變。這樣更讓人滿意,如果你只使用MIPS版本它是可以工作的。
2)host\resource\tcl\app-config\Browser:
在line 138 有個(gè)目錄為obj...sfgnuvx,對(duì)其它CPU來(lái)說(shuō)它是obj...gnuvx. 問(wèn)題可以通過(guò)把這行替換為如下行解決:
This problem can be solved by replacing this line with the follwoing lines:?
??if { $cpuType($cpuId) == "RC32364" } {
????set name [wtxPath target lib obj$cpuType($cpuId)sfgnuvx]spyLib.o
????} else {
????set name [wtxPath target lib obj$cpuType($cpuId)gnuvx]spyLib.o
??}
然后替換RC32364為你處理器類型的名稱。
2.6 MAKEFILE
2.6.1 Make不能發(fā)現(xiàn)我自己的INCLUDE目錄?
A:在C/C++編譯選項(xiàng)里,使用-I
簡(jiǎn)單拷貝包含整個(gè)應(yīng)用和工程的整個(gè)目錄結(jié)構(gòu)到NT,可以解決問(wèn)題,并生成一個(gè)完整的build??截惖搅硪粋€(gè)win95和win98上,則建立失敗。失敗的原因是build過(guò)程試圖存取一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器的共享庫(kù)文件。我嘗試了所有的在VPATH里的分隔符組合,他們都可以在NT下工作。
2.6.2 為什么make沒(méi)有在我修改了BSP目錄里的文件(比如sysSerial.c)后重新生成我的工程?
A: 在Tornado里你能定義不必掃描的include目錄。其中缺省的目錄之一是BSP目錄(target\config)。如果你從不包含列表里移除它,BSP文件將出現(xiàn)在依賴列表里。在你選擇生成依賴關(guān)系后選擇"高級(jí)"按扭,會(huì)彈出一個(gè)窗口,包含一個(gè)選項(xiàng)"Read-only dependency path"從列表中移除.....\target\config。關(guān)閉窗口,重新生成所有的依賴關(guān)系。下次BSP文件被修改后就會(huì)正確生成了。
(From: gerard.kerkhofs@nicolet.NOSPAM.nl)
另一個(gè)解決辦法是不要?jiǎng)h除該項(xiàng),但是用.....\target\config\comps替換它?,F(xiàn)在你得到所有的BSP目錄里的文件,而不是comps目錄里的,該目錄里放置了許多標(biāo)準(zhǔn)文件。
2.6.3 我怎樣在我的工程里生成一個(gè)連接器列表(linker list)?
A: 在build屬性里的缺省連接器命令不被make采用。未了使用額外的連接選項(xiàng)make,把如下內(nèi)容加入到build屬性里:
Macros: Name: LD_PARTIAL_FLAGS_FOR_PARTIALIMAGE?
Value: -Wl,-Map,$(basename $(notdir $(PRJ_FILE))).link
然后修改$(PROJECT_OUT)文件rules.vxApp里的連結(jié)器命令行的LD_PARTIAL:
$(LD_PARTIAL) $(LD_PARTIAL_FLAGS_FOR_PARTIALIMAGE) \?
$(PRJ_OBJS_FOR_LD_PARTIAL) $(PRJ_LIBS) -o partialImage.o
這會(huì)在輸出目錄里生成一個(gè)linker輸出文件--
2.6.4 怎樣生成C和匯編混合文件?
A: 在你makefile文件添加如下規(guī)則:
%.out: %.o
@objdump$(TOOLENV) -S $< < $@
This will generate a file called
But this is probably not enough. By default VxWorks puts a name in the object file. This name consists of the absolute path of the project directory with the complete path of the file name appended to it. (This can be seen with the command "objdump$(TOOLENV) --debugging
puts $fd "PRJ_DIR = [file dir??[prjInfoGet $hProj fileName]]"
This should be changed t puts $fd "PRJ_DIR = .."(With assistance from Bill Pringlemeir, bpringlemeir@yahoo.com)
2.6.5 怎樣把額外的.o文件加入到我的工程里?
A: 把文件加到宏EXTRA_MODULES。文件名用空格分開(kāi)。確定在同一目錄有目標(biāo)文件。它也可能把文件放到你的源文件目錄里。在宏里你應(yīng)該使用../
--??作者:lxlong
--??發(fā)布時(shí)間:2005-6-25 13:11:33
--??
2.6.6 我想使用make man在我的BSP里生成額外的文檔,但只有sysLib.c的文檔被更新了。我把我的文件加到BSP Makefile里DOC_FILES行?
A:在make環(huán)境下DOC_FILES變量沒(méi)被使用。應(yīng)該做如下改變:
1) 把你的文件和makefile里的文件加到DOC_FILES里,應(yīng)該類似下面的行:DOC_FILES = sysLib.c sysTffs.c tycoDrv.c myFile.c
2) 修改rules.x86-win32文件包含DOC_FILES變量的使用,修改如下:
from:
docs:
@echo Processing
@for %f in (sysLib sysTffs tyCoDrv) do @if exist %f.c @echo %f.c & \
??$(CPP) $(CASFLAGS) -C $(DOCFLAGS) %f.c > %f.i & \t?
docs:
@echo Processing
@for %f in ($(basename $(DOC_FILES))) do @if exist %f.c @echo %f.c & \
???? $(CPP) $(CASFLAGS) -C $(DOCFLAGS) %f.c > %f.i & \
到現(xiàn)在,我看到該問(wèn)題只發(fā)生在windows平臺(tái),unix平臺(tái)并沒(méi)有這種情況。
2.6.100 MAKEFIEL文件里的疑問(wèn)?
有誰(shuí)知道在$(WIND_BASE)/host/include/make/generic2.mh文件里,[! -d ./$(HOST) ]代碼的含義。請(qǐng)大蝦指點(diǎn)。
.....
objdircre:?
if [! -d ./$(HOST) ]; then \
mkdir ./$(HOST); \
fi
....
備注:
HOST=x86-win32
A:該makefile是在編譯tornado的host工具時(shí)用到的,這個(gè)判斷是在cygwin的shell中執(zhí)行,意思是如果該目錄不存在著創(chuàng)建該目錄。注意:tornado的host工具很多是用cygwin的工具編譯的,所以其風(fēng)格是unix的。(by bestracer)
2.7 工程
2.7.1 當(dāng)我修改了usrConfig.c后,我的應(yīng)用程序并沒(méi)改變,怎樣能把改變編譯到應(yīng)用程序里?
A:Tornado 2.0的工程不使用usrConfig.c,它使用配置面板,文件可以在target/config/comps下發(fā)現(xiàn),如果你喜歡用usrConfig.c,make target/config/yourBsp目錄下的 Makefile文件,就可以了。
(From: Roie Geron, roie@ecitele.com)
2.7.2 怎樣不用Tornado重新生成工程文件?
A: 使用如下命令重新生成那些bootable工程文件:
wtxtcl
2.7.3 當(dāng)我生成依賴關(guān)系時(shí),一些依賴關(guān)系丟失了。它們不在Tornado樹(shù)中,但include目錄用-I包含和使用VPATH宏?
A:我們以前也碰到同樣的問(wèn)題,你可以把#include "xxx\xxx\xxx.h"改成#include "xxx/xxx/xxx.h", 然后在試試。(From: ellin_lin@263.net)
2.8 目標(biāo)機(jī)服務(wù)器
2.8.1 怎樣不用Tornado啟動(dòng)target server?
A:首先創(chuàng)建一個(gè)DOS窗口的快捷方式,然后在Tornado里配置你的target server,使得它能正常啟動(dòng),并把配置窗口里的配置文本拷貝到DOS快捷方式的屬性里。即可。
(From: John Finley, john@kivala.com)
2.8.2 我的程序正常裝載需要幾秒鐘,但現(xiàn)在裝載一個(gè)小的應(yīng)用程序卻需要很長(zhǎng)時(shí)間。我怎樣加速下載過(guò)程?
A:增加你target server的Cache容量,缺省是1M,增加容量將減少下載時(shí)間。
(From: Wade Oram, oram_w_t@ifrinternational.co.uk)
2.8.3 當(dāng)我啟動(dòng)target server時(shí),碰到WTX錯(cuò)誤,告訴同步停止,我怎么修正它?
A:一個(gè)解決問(wèn)題的辦法是使用遠(yuǎn)程registry,即使你在你本機(jī)上運(yùn)行target server,這可以通過(guò)使用真實(shí)IP設(shè)置遠(yuǎn)程registry解決。
??基本上"localhost"得到存儲(chǔ)在Windows registry中的運(yùn)行registry的機(jī)器名。主機(jī)上的WTX工具把localhost解析成127.0.0.1,并把它傳給目標(biāo)機(jī),然后目標(biāo)機(jī)嘗試與127.0.0.1通信,以便符號(hào)表的同步和結(jié)束只與自己聯(lián)系而不與主機(jī)聯(lián)系。很好的特性。
??如果你的Windows主機(jī)有多個(gè)網(wǎng)口,并且目標(biāo)機(jī)連在一個(gè)次要接口上,這還不足夠。機(jī)器名被解析成IP地址,否則目標(biāo)機(jī)不知道。在連接目標(biāo)機(jī)進(jìn)行符號(hào)表同步前,你需要在目標(biāo)機(jī)上使用routeNetAdd命令。
(From: Markus Mitterer, markus.mitterer@sbu1.storkgroup.com and lori@rti.com)
2.8.4 當(dāng)我在SHELL里輸入一個(gè)命令時(shí),出現(xiàn)"The target system is not initialized yet. Can‘t roceed."
A:當(dāng)你在目標(biāo)機(jī)配置項(xiàng)里的"Core filea"指定一個(gè)"vxWorks"文件作為核心文件(core file),該問(wèn)題將解決。我指定了"vxWorks_rom"文件,并選擇了"synchronize host/target symbol table"項(xiàng),它工作的很好。
2.9 Target Shell
2.9.1 當(dāng)我從我的工程里移除shell組件時(shí),我碰到一個(gè)dosFsDevInit執(zhí)行錯(cuò)誤,怎樣能不包含shell而包含DOSFS組件?
A:首先它看起來(lái)可能是wierd,后來(lái)我想起來(lái)老的dosFsLib使用在RAM中的文件名數(shù)據(jù)庫(kù)(使用HASH表),所以如果你移除任何可能連接到hashLib中的符號(hào)表,就可能不能初始化。一個(gè)可能的原因就是沒(méi)有人注意到它,因?yàn)橥ǔ6及?INCLUDE_STAT_SYM_TBL (也是一種符號(hào)表)。所以你應(yīng)該增加 INCLUDE_STAT_SYM_TBL 或簡(jiǎn)單的在dosFsInit前調(diào)用hashLibInit() 。
(From: Leonid Rosenboim, leonid@bitband.com)
2.9.2 在啟動(dòng)windshell時(shí),一般是通過(guò)執(zhí)行 windsh.tcl來(lái)實(shí)現(xiàn)的,我在.wind目錄下創(chuàng)建了這個(gè)文件,但它沒(méi)執(zhí)行,我什么地方做錯(cuò)了?
A:沒(méi)有,這是windshell的一個(gè)bug,它不去搜索Tornado的安裝目錄,只搜索C:上的,所以你應(yīng)該把你的windsh.tcl移動(dòng)到c:\.wind目錄下,它將執(zhí)行。
2.9.3 當(dāng)我ping 我的"myHost"時(shí),shell好象丟掉許多內(nèi)存,為什么?
A:目標(biāo)機(jī)上的shell為字符串分配內(nèi)存(字符串的地址被傳送給函數(shù))。shell不能決定何時(shí)可以安全的釋放內(nèi)存,所以它就把它留在那里,那塊內(nèi)存也不能重新使用。所以下次ping的時(shí)候,它又會(huì)分配內(nèi)存。
你可以試試使用一個(gè)變量:
pingaddress = "myHost"
memShow
ping pingaddress
memShow
(From: Urban Lindberg, urbanl@my-deja.com)
2.9.4 怎樣重復(fù)使用一個(gè)不斷增加的參數(shù)的命令?
A:你可以寫一個(gè)擴(kuò)展的重復(fù)命令。在/target/src/usr/usrLib.c 文件里有repeat的源碼,應(yīng)該是很簡(jiǎn)單的。
(From: Werner Schiendl,ws-news@gmx.at)
2.9.5 怎樣使用"lkup"列出2個(gè)字符的符號(hào)?
A:lkup "^[a-z][a-z]$",如果需要3個(gè)或更多,lkup "^[a-z][a-z][a-z]$"
(From: p_lavarre@my-deja.com)
2.9.6 怎樣增加SHELL的最大行長(zhǎng)(128字符)?
A:我也碰到同樣的問(wèn)題,我把一些更長(zhǎng)的字符串放到變量里,然后在命令行里使用該命令,這樣可以突破128個(gè)字符??赡芡ㄟ^(guò)設(shè)置環(huán)境變量也可以實(shí)現(xiàn),但第一個(gè)方法更簡(jiǎn)單。
(From: Don Small, dmsmall@sandia.gov)
2.9.7 怎樣能讓我的程序去SHELL正在使用的端口上讀數(shù)據(jù)?
A:我發(fā)現(xiàn)不用SHELL接口,掃描用戶輸入。唯一的方法是先刪除SHELL任務(wù),然后讀數(shù)據(jù),再重新生成SHELL。
/*******************************************************/
shelltid = taskNameToId("tShell");
taskDelete(shelltid);
for( ; ; )
{
??// read
}
shellInit(0,TRUE);
/*******************************************************/
(From: Mridul Gupta, mridulgupta1@yahoo.com)
2.9.8 有shell的替換程序嗎?
A:在如下地址http://www.xmission.com/~bgeer/bgsh.html: BGSH: A VxWorks Shell With Command Line Editing. 可以發(fā)現(xiàn)。
(From: Pekka Taipale, pjt@iki.fi)
2.9.9 怎樣能在我的程序中執(zhí)行SHELL命令,并使用它的輸出?
A:我寫了一個(gè)函數(shù)來(lái)實(shí)現(xiàn)該功能,它把命令作為字符串,并把執(zhí)行結(jié)果輸出到文件里。
?? -> shellToFile("ifShow","ifShow.out")
你可以按你的需求修改它。
//
//
//??This function runs a shell command and captures the output to the
//??specified file
//
extern int consoleFd;
typedef unsigned int (*UINTFUNCPTR) ();
extern "C" int shellToFile(char * shellCmd, char * outputFile)
{
int rtn;
int STDFd;
int outFileFd;
outFileFd = creat( outputFile, O_RDWR);
printf("creat returned %x as a file desc\n",outFileFd);
if (outFileFd != -1)
{
??STDFd=ioGlobalStdGet(STD_OUT);
??ioGlobalStdSet(STD_OUT,outFileFd);
??rtn=execute(shellCmd);
??if (rtn !=0)
????printf("execute returned %d \n",outFileFd);
??ioGlobalStdSet(STD_OUT,STDFd);
}
?? close(outFileFd);
?? return (rtn);
}
(From: RonnoBonno, RHNAssociates@yahoo.com)
2.9.10 怎樣檢查靜態(tài)變量?
A:在映象上執(zhí)行nmxyz,并提出變量地址,你可以隨后導(dǎo)出它的內(nèi)容。
#> nmppc vxWorks | grep ftpsActive 0023dc60 d ftpsActive
(From: Toni Kurzberger, gonozal@gmx.at)