?? vxworks faq.txt
字號:
VxWorks中文FAQ
前言(Surface):
隨著國內使用VxWorks的用戶越來越多,為了方便VxWorkers少走一些彎路,特別推出了中文FAQ,其中
很多的FAQ來自comp.os.vxworks和原創。(很多FAQ都可以在該新聞組找到英文版)
文檔的FAQ總共分為7大類:
1.入門FAQ
2.Tornado工具FAQ
3.BSP FAQ
4.文件系統 FAQ
5.網絡 FAQ
6.VxWorks操作系統 FAQ
7.其它 FAQ
基本涵蓋了Tornado/VxWorks使用中的主要方面。
文檔組織本身沒有邏輯上的關聯,經過分類,只是松散的組合在一起,可根據你的需要選擇閱讀某一部
分。
為了保持本文檔的開放性和可擴充性,歡迎大家把自己曾經碰到過的問題及其解決辦法按分類加到文檔
里來。在修改本文檔時,請把修改記錄加到歷史記錄里。
歡迎任何人指出文檔中的錯誤之處,請把錯誤之處發到附錄B里的任一個EMAIL里,在此對那些問題的提
出者、回答者以及文檔的維護者一并表示感謝!
當前版本(Current Version):
version 0.1
歷史(History):
2002-08-27 wys205 create 0.1 version
目錄(Content):
1.入門FAQ
2.Tornado工具FAQ
2.1 編譯器和鏈接器
2.2 調試器
2.3 FTP
2.4 主機工具
2.5 安裝
2.6 MAKEFILE
2.7 工程
2.8 目標機服務器
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環境 environment
3.6.1 usrSerial.c
3.6.2 prj_vxworks.tcl
3.7 PCI
4.文件系統 FAQ
4.1 Dos文件系統
4.2 Flash文件系統
4.3 Floppy-disk文件系統
4.4 RAM-disk文件系統
4.5 基本文件系統問題
5.網絡 FAQ
5.1 配置問題
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 其它網絡相關問題
6.VxWorks操作系統 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.維護
1.入門FAQ
1.1 概念
1.1.1 最近剛開始學習VXWORKS,越看越迷糊:
1)BSP,bootImage,VxWorksImage三者的關系是什么?BSP是BootImage的一部分還是VxWorksImage 的一部
分?對于可以自啟動的系統是不是三者合在一起生成一個VxWorks Image?
2)應用程序代碼是和VxWorks內核一起編譯生成一個VxworksImage嗎?
以上問題是針對于代碼存放在rom介質上的系統(如flash)。希望各位大俠不吝賜教!謝謝。。。
A:BSP 是用來支持你的硬件的軟件, 它包含在你的VxWorksImg里面.
對于ROM啟動的系統來說, BootImg是ROM里代碼的第一部分, 用來
在開機時首先運行. 如果你的所有代碼都在ROM上, 則引導程序把
VxWorksImg拷貝到系統內存, 然后再跳轉的系統內存去執行.
BSP的作用屏蔽不同的硬件結構(如CPU和外圍芯片)向VxWorks的Kernel提供
它所需要的一個統一的接口調用(如時鐘)
(by 泡泡)
bsp: 板級支持包,主要完成目標硬件的初始化工作,提供操作系統一個統一的接口,負責硬件操作,
如中斷處理,啟動,停止,等工作。Bootimage:引導鏡像,我向如果把boot翻譯成啟動不是很是當的說法,
這是一個引導程序,負責把目標系統環境初始化,最小的程度,如啟動了串口,或者網絡接口,可以使用這
些接口現在程序,與主機通信,然后獲取你需要的OS-vxworksimage vxworksimage-包含vxworks內核以及
各種組件的鏡像,也就是object images,這是真正的操作系統,通常bootimage負責獲取這個鏡像,然后跳
到鏡像所在的位置開始執行。(by hongwind )
1.1.2 如何學習VXWORK,PSOS入門?
A:初次上站,感覺大家水平一般,入門級選手較多,實時多任務操作系統和以前大家使用的低端產品,如51
機在原理上是不同的,因此大家最好先學習多任務操作系統的原理。否則無法深入學習。
推薦一本書:坦尼博姆著:《操作系統》,各地都有的賣,主要是講MINIX的原理,其實就是UNIX系列操作
系統的實現原理,由于VXWORKS和PSOS都是這個系列的操作系統,因此理解了這本書,也就理解了它們的工
作原理。必將事半功倍,而且對你理解WINDOWS的工作原理也很有好處。 (by bruin)
1.2 環境
1.2.1 斑竹tornado都是支持那些cpu??能列一下嗎或哪里能找到
斑竹tornado都是支持那些cpu??能列一下嗎或哪里能找到!!!
A:開發平臺: 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中有些定義怎么找不到用到的地方,還有些定義找不到在哪里定義過了,比如
MAMR_PTA_SHIFT,哪位大俠給解答一下。不勝感激!
A:在h/drv/multi/ppc860Siu.h里。看代碼還是用Source Insight
(by vxfree)
2.Tornado工具FAQ
2.1 編譯器和鏈接器
2.1.1 當我把多個目標文件鏈接成一個時,出現了一個錯誤:
ldppc:built in linker script:43: syntax error 我怎么樣才能消除這個錯誤?
A:請確定你的鏈接器使用了-r參數。
(From: weber.dirk@t-online.de)
2.1.2 我怎樣使用新版本的編譯器?
A:參看如下連接,有一個PPC的編譯器
http://www.newgcc4vxworks4ppc.cjb.net/
2.1.3 當用另一個編譯器編譯代碼時,得到更多的錯誤和警告,怎樣才能讓GCC生成更多的警告信息?
A:首先用-Wall參數打開所有警告開關;另一種生成更多報告的方法就是把文件看作是C++文件,參數為
-x c++.(From: Claudio Ortega, cortega@sinfomed.org.ar)
-Wall不能真正打開所有的警告,我采用由Bruce Evans推薦的參數
而且在FreeBSD環境下,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 當編譯我的模塊時一切都是好的,但是當我試圖下載時得到一個錯誤:missing symbol "__eabi"?
A:在你的模塊里可能有個main函數,根據PPC "extended Application Binary Interface" (eabi)
標準,main函數必須調用__eabi函數,該函數為運行你的程序設置必要的運行環境。
由于這個原因GNU編譯器在main函數里插入 __eabi函數。
Tornado不提供該函數,因為在實時環境下,你不必寫main函數。VxWorks在應用程序運行前已經設置
好運行環境了,不再需要main函數了。
(From: Ilia, iliab@telegate.co.il)
2.1.5 我生成了2.95.2版本的編譯器,一切正常,但當我開始鏈接我的映象時,出現了錯誤,下面是我
鏈接ctdt表時的錯誤:
ctdt.o(.data+0x3c):fake: undefined reference to `global constructors keyed to
_constructor_name_
... 許多類似的錯誤,有誰見過這種錯誤嗎?
A: 該問題是由gcc(ver2.7.2-2.95.2)試圖改變它得到靜態構造函數的方法引起的。它不再對每個構造靜
態對象的模塊消除函數,該方法是vxworks在編譯鏈接過程中采用的方法。
你可以按如下修改gcc 2.95.2源代碼后,恢復原先的操作。
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
現在更換到你的編譯目錄,敲入make clean命令,然后重新編譯和安裝編譯器。我采用這種方法是可以的
,PPC版本的。它使得編譯器使用老的方法來making munchable constructors。
希望對你也有幫助。
(From: Dave Korn)
2.1.6 在我編譯時,我在編譯窗口看到如下輸出:
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)花了很長時間(半個小時),誰有解決辦法?
A: 這個可能是munching過程,而不是鏈接,花了半小時。有人曾貼了一個小竅門來加速。
在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 怎樣定義一個沒有空洞的結構。
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編譯器開關。我門最近移除了這個選項,使得我們的C++程序提
高了30%-100%的性能。這是因為每次存取結構或類里多字節值時,都是一個一個字節操作的。可以使用
__attribute__ ((packed)) 方法代替。
(From: Mark Fanara, mfanara@home.cNOSPAMMom, and Francisco Pataro, fpataro@dnaent.com)
2.1.8 我怎樣在一個C程序文件里調用一個C++函數?
A: 如果你想在一個C程序文件里調用一個C++函數,C++函數必須用extern "C"聲明;否則編譯器將破壞函數
名,把參數類型說明加在函數名末尾,并返回該函數。
(From: Dave Korn)
2.1.9 -fvolatile開關真的需要嗎?
A: WRS建議我們在編譯kernel/BSP時,使用-fvolatile開關。它通常缺省打開某個target/h/make/目錄下的
文件。
我們也在我們的應用程序編譯過程中使用-fvolatile開關,因為我們參考一些tornado的makefile。
當我們移除該開關后,就碰到一些微妙的BUG,如果你編寫驅動程序應當小心。
-fvolatile開關使編譯器生成非常conservative的代碼。通過指針使變量值增加(p->x++)不可能如你
想象的在一條指令里完成(68k example):
addql #1,a0@(8)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -