VxWorks for X86的输入输出定向
发布时间:2008/5/27 0:00:00 访问次数:1026
email: jinyuhe@163.com
摘要:
此文主要介绍在嵌入式系统vxworks中针对x86开发时标准输入输出的重定向
关键词:
pc console
重定向
嵌入式系统 vxworks
实时操作系统 rtos
前言:
vxworks操作系统是美国windriver公司于1983年设计开发的一种嵌入式实时操作系统(rtos),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。实时嵌入式操作系统vxworks已经在国内的嵌入式系统开发中占据着重要的地位,特别是在通信行业中。
在通信设备中,一般都是无头设备,所谓无头设备是指不外接显示器,也不外挂键盘的,那么这个时候一般采用串口作为其输入输出的用户操作接口。怎么将串口转换为标准输入输出的用户操作接口,此时就出现了标准输入输出的重定向问题,笔者在vxworks的开发中,曾多次碰到此问题,并就此问题进行了一些研究,也有一些心得。
vxworks5.4中的输入输出重定向
在vxworks5.4 for x86的开发中,缺省输入输出是pc console,也即通过vga的标准输出和键盘的标准输入。
那么此时怎么将其输入输出定向到串口上来呢?
a)、bootrom中的重定向
打开target\config\all\bootconfig.c文件,可以找到这样一行代码:
consolefd = none;
此consolefd变量即标准输入输出句柄,此时为空。
同样,可以找到如下的三行代码:
ioglobalstdset (std_in, consolefd);
ioglobalstdset (std_out, consolefd);
ioglobalstdset (std_err, consolefd);
此三行代码的意思是将标准输入输出定向到consolefd。
在这两段代码之间有打开诸如串口、pc console等过程,并将其打开的句柄赋给了consolefd,这样就将其标准输入输出定向到pc console等。
同样,如果在定向之前,即ioglobalstdset函数之前打开别的i/o设备,如socket、文件、管道等的话,那么标准输入输出就定向到socket、文件、管道等。
一般情况下,用户采用串口作为输入输出操作接口,所以我们一般将标准输入输出定向到串口。
那么,怎么将标准输入输出定向到串口呢?按照以上原理,只要在ioglobalstdset函数之前打开相应的串口并将所打开的串口句柄赋给consolefd就可以了。
实现代码如下:
/*打开串口,输入输出重定向到超级终端*/
if((consolefd=open("/tyco/0",o_rdwr,0))==error)
logmsg("open /tyco/0 error! ",0,0,0,0,0,0);
(void)ioctl(consolefd,fiobaudrate,9600);
(void)ioctl(consolefd,fiosetoptions,opt_terminal&~opt_echo);
(void)ioctl(consolefd,fiowflush,0);
(void)ioctl(consolefd,fiorflush,0);
b)、vxworks中的重定向
在bootrom中将标准输入输出已经定向到串口,但是在vxworks中,当bootrom起来将vxworks引导后,将执行权交给了vxworks,而此时vxworks会将bootrom中对硬件初始化的过程重新初始化,故其定向会重新按照缺省方式定向到pc console,标准vga输出和键盘输入。
那么又怎么将其定向回串口呢?
打开target\config\comps\src\usrpcconsole.c文件
在其代码中也同样可以看到其定向过程,那么我们也可以按照bootrom的方式将串口打开并定向。
vxworks5.5中的输入输出定向
在vxworks5.5中,已经将其标准输入输出直接定向到串口,并且其标准输入输出更简单,直接通过target\config\bspname\config.h文件中的宏定义就可以实现。
怎么样切换回pc console的输入输出模式呢?
在target\config\bspname\config.h文件中,可以找到如下定义:
#undef include_pc_console /* pc keyboard and vga console */
#ifdef include_pc_console
# define pc_console (0) /* console number */
# define n_virtual_consoles (2) /* shell / application */
#endif /* include_pc_console */
/* ps/2 101-key default keyboard type (use pc_xt_83_kbd for 83-key) */
#define pc_kbd_type (pc_ps2_101_kbd)
从上可以看出,缺省情况下,宏include_pc_console是关闭的,所以我们在制作bootrom后,启动时在显示器上会出现如下的输出:
v1.6+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++……
并且此时会停在这里不动,感觉好象是系统不能启动,其实,系统已经启动起来了,并
email: jinyuhe@163.com
摘要:
此文主要介绍在嵌入式系统vxworks中针对x86开发时标准输入输出的重定向
关键词:
pc console
重定向
嵌入式系统 vxworks
实时操作系统 rtos
前言:
vxworks操作系统是美国windriver公司于1983年设计开发的一种嵌入式实时操作系统(rtos),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。实时嵌入式操作系统vxworks已经在国内的嵌入式系统开发中占据着重要的地位,特别是在通信行业中。
在通信设备中,一般都是无头设备,所谓无头设备是指不外接显示器,也不外挂键盘的,那么这个时候一般采用串口作为其输入输出的用户操作接口。怎么将串口转换为标准输入输出的用户操作接口,此时就出现了标准输入输出的重定向问题,笔者在vxworks的开发中,曾多次碰到此问题,并就此问题进行了一些研究,也有一些心得。
vxworks5.4中的输入输出重定向
在vxworks5.4 for x86的开发中,缺省输入输出是pc console,也即通过vga的标准输出和键盘的标准输入。
那么此时怎么将其输入输出定向到串口上来呢?
a)、bootrom中的重定向
打开target\config\all\bootconfig.c文件,可以找到这样一行代码:
consolefd = none;
此consolefd变量即标准输入输出句柄,此时为空。
同样,可以找到如下的三行代码:
ioglobalstdset (std_in, consolefd);
ioglobalstdset (std_out, consolefd);
ioglobalstdset (std_err, consolefd);
此三行代码的意思是将标准输入输出定向到consolefd。
在这两段代码之间有打开诸如串口、pc console等过程,并将其打开的句柄赋给了consolefd,这样就将其标准输入输出定向到pc console等。
同样,如果在定向之前,即ioglobalstdset函数之前打开别的i/o设备,如socket、文件、管道等的话,那么标准输入输出就定向到socket、文件、管道等。
一般情况下,用户采用串口作为输入输出操作接口,所以我们一般将标准输入输出定向到串口。
那么,怎么将标准输入输出定向到串口呢?按照以上原理,只要在ioglobalstdset函数之前打开相应的串口并将所打开的串口句柄赋给consolefd就可以了。
实现代码如下:
/*打开串口,输入输出重定向到超级终端*/
if((consolefd=open("/tyco/0",o_rdwr,0))==error)
logmsg("open /tyco/0 error! ",0,0,0,0,0,0);
(void)ioctl(consolefd,fiobaudrate,9600);
(void)ioctl(consolefd,fiosetoptions,opt_terminal&~opt_echo);
(void)ioctl(consolefd,fiowflush,0);
(void)ioctl(consolefd,fiorflush,0);
b)、vxworks中的重定向
在bootrom中将标准输入输出已经定向到串口,但是在vxworks中,当bootrom起来将vxworks引导后,将执行权交给了vxworks,而此时vxworks会将bootrom中对硬件初始化的过程重新初始化,故其定向会重新按照缺省方式定向到pc console,标准vga输出和键盘输入。
那么又怎么将其定向回串口呢?
打开target\config\comps\src\usrpcconsole.c文件
在其代码中也同样可以看到其定向过程,那么我们也可以按照bootrom的方式将串口打开并定向。
vxworks5.5中的输入输出定向
在vxworks5.5中,已经将其标准输入输出直接定向到串口,并且其标准输入输出更简单,直接通过target\config\bspname\config.h文件中的宏定义就可以实现。
怎么样切换回pc console的输入输出模式呢?
在target\config\bspname\config.h文件中,可以找到如下定义:
#undef include_pc_console /* pc keyboard and vga console */
#ifdef include_pc_console
# define pc_console (0) /* console number */
# define n_virtual_consoles (2) /* shell / application */
#endif /* include_pc_console */
/* ps/2 101-key default keyboard type (use pc_xt_83_kbd for 83-key) */
#define pc_kbd_type (pc_ps2_101_kbd)
从上可以看出,缺省情况下,宏include_pc_console是关闭的,所以我们在制作bootrom后,启动时在显示器上会出现如下的输出:
v1.6+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++……
并且此时会停在这里不动,感觉好象是系统不能启动,其实,系统已经启动起来了,并