📄 vxworks中文faq.txt
字号:
2.2 调试器
2.2.1 我怎么使用GDB的plain版本去调试我的目标机,而不用Tornado?
A:gdb compiles 'out of the box' for vxworks.
去cygnus(sourceware.cygnus.com)下载最新的'insight'软件,该软件是gdb + cygnus的UI(译者:可能是用
户接口)运行 "configure --target=mips-wrs-vxworks". 把mips改成你的处理器,然后运行make.
这样就可以在安装了cygwin的win32平台上运行了,在UNIX系统平台上也类似。
RDB是windriver以前的调试协议,现在变成WDB了。好象没公布wdb的比特,尽管Tornado使用了gdb。你可能
不得不配置RDB。包含RDB组件(INCLUDE_RDB) ,并移除WDB组件(remove INCLUDE_WDB),以使得调试可以进
行。(From: Don Bowman, don@pixstream.com)
2.2.2 我怎么在创建一个任务后停止它,以使得我能从开始对它进行调试?
A: 菜单tools->options,选择debugger页,选择always halt after attaching a task和Auto Attach to
task -> Always
现在输入一个全局断点(Shift F9),在它碰到断点后,它将从mainTask中分离。
(From: Chacha Hindustani, Gurudev@mediaone.net)
2.2.3 为什么当我使用SHELL检查内存时,看不到断点?
A: shell是一个不可中断的任务,所以任何时间它都在运行在无断点的环境。当任务切换引起一个中断的任
务运行时,断点将被重新安装。所以如果查看内存中的断点,只是简单使用d()或l()命令,它在一个中断任
务中可以运行,你将看到一个magic code插入并引起异常。
The shell is an unbreakable task, so all the time it is running the breakpoints are not
installed. When a context switch 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.2.100 任务级调试和系统级调试的不同?
A:任务调试模式:
1.只能调任务,不能调ISR
2.缺省时,断点仅作用于被Attached的任务
3.当被Attached的任务停下来的时候,其他任务和ISR继续执行
4.Target Server和WDB Agent中的任务模块以中断方式通讯
系统调试模式:
1.能调任务,ISR和初始程序
2.缺省时,断点作用于整个系统
3.当系统停下来时,WDB Agent中的外部模块把中断禁止,所以
调试的只能通过查询的驱动程序通讯。
补充一下:
在使用系统调试模式下时,一旦系统停下来时(不管是由于断点还是人工interrupt debug),所有的任务
都停下来了,此时如果进行查看变量、寄存器等操作,由于此时屏蔽中断了,所以wdb agent用来和target
server进行通信的底层driver(如串口的driver或END driver)必须工作在poll mode下。
wdb agent用来和target server进行通信的底层driver都有2种工作模式:poll mode和interrupt-driven
mode。当使用系统调试模式时,wdb agent将底层driver切换到(switch to)poll mode,当使用任务调试模
式时,wdb agent将底层driver切换到interrupt-driven mode。
2.3 FTP
参看5.4
2.4 主机工具
2.4.1 我制作了一个基于rom的VxWorks(vxWorks_rom),但是当我试图用elftobin把它转换成bin格式的
(vxworks_rom.bin),得到了如下错误:
C:\project\Project3\default\elftobin <vxWorks_rom> vxWorks_rom.bin
seg1 : Expected load address 0xfff00100 but file address is 0x00111670
我怎样才能把这个文件转成二进制格式?
A: 这个问题只在PPC版本中出现过,问题编号为SPR#8845. 已经有个更新版本的elftobin解决了这个问题。
请联系你的销售代理或服务工程师。
2.4.2 我怎样写一个WTX工具?
A: 我曾经在Tornado 1.0.1 和Windows NT 4.0环境下写过一个WTX工具,按下面的例子和Tornado API参考
开始,甚至不用关闭build.让它独自按我的步骤工作。就是我使用VC++6编译,但仍有许多东西丢掉了,不
论编译器是什么版本。我知道我能更熟练的使用路径里的环境变量。但有时你只需要它工作,所以下面澄清
一下:
原代码放在$(WIND_BASE)\host\src\wtxtest下,我的安装目录或任何其它人的安装目录里没有例子源码。
按手册源代码按如下修改(大多是信号处理代码修改和增加includes,其它修改在我的程序里说明)
把下面的设置加到工程设置、 C/C++, Preprocessor:
include目录(路径按实际情况修改):
C:\Tornado_03\share\src\wtx,C:\Tornado_03\host\include
预处理定义:HOST
把下面的设置加到工程设置,Link,General:
C:\Tornado_03\host\x86-win32\lib\wtxapidll-d.lib
增加环境变量WIND_REGISTRY,设为我的注册位置。
许多痛苦就在发现这个。手册里参考wtxEnvironSet()调用,Windsurf说它是不存在的,但手册为这个不存
在的函数使用提供了许多参考。我的机器上没设置WIND_REGISTRY,所有的Tornado工具都可以不使用它而正
常工作。我的工具不能发现注册,设置它并关闭它(Set it and poof)!注册发现了,工具可以工作。
确信起调用了wtxProbe()去检查注册(并且变量被设置),它可以避免许多痛苦。
我也修改那个工具例子代码。代码在此#代码连接#http://www.xs4all.nl/~borkhuis/vxworks/wtxSample.c
(From: Christopher A Leddy, caleddy@west.raytheon.com)
2.4.3 当我执行wtxwish时,碰到了一个关于init.tcl文件的错误?
A: 不要忘记把TCL_LIBRARY和TK_LIBRARY环境变量设置为 $(WIND_BASE)/host/tcl/tcl and
$(WIND_BASE)/host/tcl/tk. init.tcl文件位于TCL_LIBRARY路径。tk.tcl文件位于目录。
不要使用 $(WIND_BASE) 变量,而是实际路径。然后从你的TCL/TK目录执行:
wtxwish <yourTclFile>
(From: DrDiags, drdiags@flashcom.net)
2.4.4 我试图在windows NT4.0 SP5环境下运行Tornado2.0带的vxsys程序,碰到一个错误: "the system
try to access directly to the disk, this is not possible ....."
A: vxsys是DOS程序,不能工作windows环境下,你应该从DOS窗口下运行它。
(From: Andray Kaganovsky, andreyk@home.com)
2.4.5 怎样创建加密密码?
A: 你可以使用Tornado自带的创建密码程序vxencrypt,但是它功能很弱。
sum( p[i] * i ^ i )) * 0x1e3a1d5将HEX字符集转化成ASCII(假定认为你有超过2^32加密密码)。我能
用钢笔和纸来把它做反变换。
你也可以使用loginEncryptInstall()安装自己的加密算法,对一个强密码[1],加密知道使用密码作为KEY。
UNIX传统使用DES,但需要适当的代码。我使用TEA参看http://vader.brad.ac.uk,因为它是不受妨碍的。
[1] problematical since you have difficulty protecting the password file as none of the
vxWorks filesystems support user-ids.
(From: David Laight)
2.5 安装
2.5.1 当我试图安装GNU源光盘时,出现了一个关于文件aux.h的错误:permission denied。但该文件并不
存在,是怎么回事?
A: 在微软SW环境下存在这个问题,"AUX"是保留字,所以任何以"AUX."开头的都不能存在。任何以设备名
开始的文件名也是不能存在的,例如你不能打开一个叫"LPT1.TXT"的文件。
2.5.2 在我安装完Tornado或它的补丁后,我所有的C文件类型都被移除了,而使用Tornado作为打开该文件
的工具。我怎样能恢复到原来的编辑器?
A:Tornado覆盖注册表中的实体。你可以用下面的.reg恢复。
警告:在使用这个文件前必须小心!首先读一下该文件,如果你不理解它就不要使用它。
警告:我在windows95和NT下测试过,如果有时间我会在别的的平台测试的。如果你在98、2000下使用后可
以工作,请告诉我。
首先下载该文件,仔细阅读它,修改它,使她执行你需要的编辑器,然后执行它。你怎么修改它?
一个方法是执行这个文件,然后去浏览器View->Options->File Types.这里你可搜索"C源文件"和"C头文件"。
修改打开命令为你想要的。现在编辑文件c-files.reg,并移除20行后的部分,第一行以
[HKEY_CLASSES_ROOT\c_source_file]开始。再次执行,、将把所有文件类型恢复成你选择的。
另一种方法:在你的文件类型里找到你的确省编辑器,把这行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 当我每次双击一个文件,都打开一个Tornado.我想所有的文件都用一个Tornado打开,怎么做?
A:是的,这是可能。下面的注册文件将完成这个工作。
警告:在使用这个文件前必须小心!首先读一下该文件,如果你不理解它就不要使用它。
编辑该文件,修改Tornado的安装路径为你机器上的安装路径。
文件: TornadoFileTypes.reg#文件连接#http://www.xs4all.nl/~borkhuis/vxworks/TornadoFileTypes.reg
2.5.4 能把多个CPU平台安装到一个目录下吗?
A:可以,但是需要注意几点:
只能把同一版本的安装到同一目录下。这意味着Tornado 2.0.1 for ARM不能同其它版本安装到同一个目录。
也不能把2.0和2.0.2混合在一起。我发现的唯一不兼容的是MIPS。在安装了idts134 BSP后,下面的文件会
带来问题:
1)host\resource\tcl\wtxcore.tcl
在最后的函数里设置tool为sfgnu替换为gnu.在if结构里增加设置tool为sfgnu.现在只有MIPS这个工具变量
被改变。这样更让人满意,如果你只使用MIPS版本它是可以工作的。
2)host\resource\tcl\app-config\Browser:
在line 138 有个目录为obj...sfgnuvx,对其它CPU来说它是obj...gnuvx. 问题可以通过把这行替换为如
下行解决:
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不能发现我自己的INCLUDE目录?
A:在C/C++编译选项里,使用-I<dir>选项增加目录,现在在build属性里包含如下内容:
宏名称:VPATH
值:$(filter-out -I.,$(filter -I%,$(CFLAGS)))
在修改了include目录后需要更新编译器选项,VPATH自动被上面规则更新。
在选项改变保存到工作区并确认改变生效后,重新生成依赖关系和开始编译器。
Bob Baker (Bob@dskti.com)曾写过他关于这个问题的经验:
我们在使用Tornado 2编译一个应用程序时碰到了很多问题,如'No rule to make target'。尝试了所有有
用的办法。如:使用":"替代空格作为VPATH的分隔符。使用" :"或": "或" : "改变宏的顺序。"\","/","\\"
(原文:E.G. using ':' for VPATH separators instead of spaces. Using 'space :' or ': space' or
'space : space', changing the order of the macro's, forward slashes, back slashes, double
slashes, pointing the PC screen south at dawn etc the problem turned out to be incompatibility
between tornado 2 and win95/98. )证明在Tornado2和WIN95/98上是不兼容的。
简单拷贝包含整个应用和工程的整个目录结构到NT,可以解决问题,并生成一个完整的build。拷贝到另一
个win95和win98上,则建立失败。失败的原因是build过程试图存取一个网络驱动器的共享库文件。我尝试了
所有的在VPATH里的分隔符组合,他们都可以在NT下工作。
2.6.2 为什么make没有在我修改了BSP目录里的文件(比如sysSerial.c)后重新生成我的工程?
A: 在Tornado里你能定义不必扫描的include目录。其中缺省的目录之一是BSP目录(target\config)。如果
你从不包含列表里移除它,BSP文件将出现在依赖列表里。在你选择生成依赖关系后选择"高级"按扭,会弹
出一个窗口,包含一个选项"Read-only dependency path"从列表中移除.....\target\config。关闭窗口,
重新生成所有的依赖关系。下次BSP文件被修改后就会正确生成了。
(From: gerard.kerkhofs@nicolet.NOSPAM.nl)
另一个解决办法是不要删除该项,但是用.....\target\config\comps替换它。现在你得到所有的BSP目录里
的文件,而不是comps目录里的,该目录里放置了许多标准文件。
2.6.3 我怎样在我的工程里生成一个连接器列表(linker list)?
A: 在build属性里的缺省连接器命令不被make采用。未了使用额外的连接选项make,把如下内容加入到build
属性里:
Macros: Name: LD_PARTIAL_FLAGS_FOR_PARTIALIMAGE
Value: -Wl,-Map,$(basename $(notdir $(PRJ_FILE))).link
然后修改$(PROJECT_OUT)文件rules.vxApp里的连结器命令行的LD_PARTIAL:
$(LD_PARTIAL) $(LD_PARTIAL_FLAGS_FOR_PARTIALIMAGE) \
$(PRJ_OBJS_FOR_LD_PARTIAL) $(PRJ_LIBS) -o partialImage.o
这会在输出目录里生成一个linker输出文件--<Project>.link。在这个文件名字映射为原始.o文件而不是
partialImage.o。如果文件使用最终的连接命令生成,它会生成partialImage.o文件的。
2.6.4 怎样生成C和汇编混合文件?
A: 在你makefile文件添加如下规则:
%.out: %.o
@objdump$(TOOLENV) -S $< < $@
这
This will generate a file called <file>.out containing C and assembly code. You need to have
the -g flag for the compiler to get debug informtion in the output file. This information is
needed by objdump.
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
<object file>", in the first few lines the filename is given.) This is caused by the fact that
the compiler is called with the complete path of the sourcefile. This can be changed to ".." in
the Makefile. But the Makefile is generated each time the configuration is changed.
To correct this the file prj_vxApp.tcl can be changed to write ".." to the Makefile istead of
the complete path. This is done in the function makeGen. The original line in this function is:
puts $fd "PRJ_DIR = [file dir [prjInfoGet $hProj fileName]]"
This should be changed to:
puts $fd "PRJ_DIR = .."
(With assistance from Bill Pringlemeir, bpringlemeir@yahoo.com)
2.6.5 怎样把额外的.o文件加入到我的工程里?
A: 把文件加到宏EXTRA_MODULES。文件名用空格分开。确定在同一目录有目标文件。它也可能把文件放到你
的源文件目录里。在宏里你应该使用../<object files name>格式。这样做的优点是你能make clean或
rebuild所有文件而没有松散你的目标文件。
2.6.6 我想使用make man在我的BSP里生成额外的文档,但只有sysLib.c的文档被更新了。我把我的文件加
到BSP Makefile里DOC_FILES行?
A:在make环境下DOC_FILES变量没被使用。应该做如下改变:
1) 把你的文件和makefile里的文件加到DOC_FILES里,应该类似下面的行:
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 & \
to:
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 & \
到现在,我看到该问题只发生在windows平台,unix平台并没有这种情况。
2.6.100 MAKEFIEL文件里的疑问?
有谁知道在$(WIND_BASE)/host/include/make/generic2.mh文件里,[! -d ./$(HOST) ]代码的含义。
请大虾指点。
.....
objdircre:
if [! -d ./$(HOST) ]; then \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -