📄 vxworks faq.txt
字号:
以工作,请告诉我。
首先下载该文件,仔细阅读它,修改它,使她执行你需要的编辑器,然后执行它。你怎么修改它?
一个方法是执行这个文件,然后去浏览器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 \
mkdir ./$(HOST); \
fi
....
备注:
HOST=x86-win32
A:该makefile是在编译tornado的host工具时用到的,这个判断是在cygwin的shell中执行,意思是如果
该目录不存在着创建该目录。注意:tornado的host工具很多是用cygwin的工具编译的,所以其风格是unix
的。
(by bestracer)
2.7 工程
2.7.1 当我修改了usrConfig.c后,我的应用程序并没改变,怎样能把改变编译到应用程序里?
A:Tornado 2.0的工程不使用usrConfig.c,它使用配置面板,文件可以在target/config/comps下发现,如
果你喜欢用usrConfig.c,make target/config/yourBsp目录下的 Makefile文件,就可以了。
(From: Roie Geron, roie@ecitele.com)
2.7.2 怎样不用Tornado重新生成工程文件?
A: 使用如下命令重新生成那些bootable工程文件:
wtxtcl <Tornado base>/host/src/hutils/configGen.tcl <Project>.wpj
这个命令也可以被Tornado使用。当配置改变时,这个命令可以作为build的第一个执行命令。
对downloadable工程,没有标准命令。一个修改过的configGen也可以被使用,文件名为makeGen.tcl
(连接#http://www.xs4all.nl/~borkhuis/vxworks/makeGen.tcl#),把这个文件拷贝到../host/src/hutils
目录。Makefile文件可用如下命令生成:
wtxtcl <Tornado base>/host/src/hutils/makeGen.tcl <Project>.wpj
请确认你使用了<Project>.wpj的完整路径。
2.7.3 当我生成依赖关系时,一些依赖关系丢失了。它们不在Tornado树中,但include目录用-I包含和使用
VPATH宏?
A:我们以前也碰到同样的问题,你可以把#include "xxx\xxx\xxx.h"改成#include "xxx/xxx/xxx.h",
然后在试试。(From: ellin_lin@263.net)
2.8 目标机服务器
2.8.1 怎样不用Tornado启动target server?
A:首先创建一个DOS窗口的快捷方式,然后在Tornado里配置你的target server,使得它能正常启动,并把
配置窗口里的配置文本拷贝到DOS快捷方式的属性里。即可。
(From: John Finley, john@kivala.com)
2.8.2 我的程序正常装载需要几秒钟,但现在装载一个小的应用程序却需要很长时间。我怎样加速下载过程?
A:增加你target server的Cache容量,缺省是1M,增加容量将减少下载时间。
(From: Wade Oram, oram_w_t@ifrinternational.co.uk)
2.8.3 当我启动target server时,碰到WTX错误,告诉同步停止,我怎么修正它?
A:一个解决问题的办法是使用远程registry,即使你在你本机上运行target server,这可以通过使用真实IP
设置远程registry解决。
基本上"localhost"得到存储在Windows registry中的运行registry的机器名。主机上的WTX工具把
localhost解析成127.0.0.1,并把它传给目标机,然后目标机尝试与127.0.0.1通信,以便符号表的同步和结
束只与自己联系而不与主机联系。很好的特性。
如果你的Windows主机有多个网口,并且目标机连在一个次要接口上,这还不足够。机器名被解析成IP地
址,否则目标机不知道。在连接目标机进行符号表同步前,你需要在目标机上使用routeNetAdd命令。
(From: Markus Mitterer, markus.mitterer@sbu1.storkgroup.com and lori@rti.com)
2.8.4 当我在SHELL里输入一个命令时,出现"The target system is not initialized yet. Can't roceed."
A:当你在目标机配置项里的"Core filea"指定一个"vxWorks"文件作为核心文件(core file),该问题将解决。
我指定了"vxWorks_rom"文件,并选择了"synchronize host/target symbol table"项,它工作的很好。
2.9 Target Shell
2.9.1 当我从我的工程里移除shell组件时,我碰到一个dosFsDevInit执行错误,怎样能不包含shell而包含
DOSFS组件?
A:首先它看起来可能是wierd,后来我想起来老的dosFsLib使用在RAM中的文件名数据库(使用HASH表),
所以如果你移除任何可能连接到hashLib中的符号表,就可能不能初始化。
一个可能的原因就是没有人注意到它,因为通常都包含 INCLUDE_STAT_SYM_TBL (也是一种符号表)。所以
你应该增加 INCLUDE_STAT_SYM_TBL 或简单的在dosFsInit前调用hashLibInit() 。
(From: Leonid Rosenboim, leonid@bitband.com)
2.9.2 在启动windshell时,一般是通过执行 windsh.tcl来实现的,我在.wind目录下创建了这个文件,但它
没执行,我什么地方做错了?
A:没有,这是windshell的一个bug,它不去搜索Tornado的安装目录,只搜索C:上的,所以你应该把你的
windsh.tcl移动到c:\.wind目录下,它将执行。
2.9.3 当我ping 我的"myHost"时,shell好象丢掉许多内存,为什么?
A:目标机上的shell为字符串分配内存(字符串的地址被传送给函数)。shell不能决定何时可以安全的释放
内存,所以它就把它留在那里,那块内存也不能重新使用。所以下次ping的时候,它又会分配内存。
你可以试试使用一个变量:
pingaddress = "myHost"
memShow
ping pingaddress
memShow
(From: Urban Lindberg, urbanl@my-deja.com)
2.9.4 怎样重复使用一个不断增加的参数的命令?
A:你可以写一个扩展的重复命令。在/target/src/usr/usrLib.c 文件里有repeat的源码,应该是很简单的。
(From: Werner Schiendl,ws-news@gmx.at)
2.9.5 怎样使用"lkup"列出2个字符的符号?
A:lkup "^[a-z][a-z]$",如果需要3个或更多,lkup "^[a-z][a-z][a-z]$"
(From: p_lavarre@my-deja.com)
2.9.6 怎样增加SHELL的最大行长(128字符)?
A:我也碰到同样的问题,我把一些更长的字符串放到变量里,然后在命令行里使用该命令,这样可以突破
128个字符。可能通过设置环境变量也可以实现,但第一个方法更简单。
(From: Don Small, dmsmall@sandia.gov)
2.9.7 怎样能让我的程序去SHELL正在使用的端口上读数据?
A:我发现不用SHELL接口,扫描用户输入。唯一的方法是先删除SHELL任务,然后读数据,再重新生成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. 可以发现。
(From: Pekka Taipale, pjt@iki.fi)
2.9.9 怎样能在我的程序中执行SHELL命令,并使用它的输出?
A:我写了一个函数来实现该功能,它把命令作为字符串,并把执行结果输出到文件里。
-> 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -