eCos仿真目标机(3)――运行eCos应用
2013-12-13 19:14
225 查看
原文:http://ecos.sourceware.org/docs-latest/ref/synth-running.html
译文:/article/8120109.html
mingdu.zheng <at> gmail <dot> com
或者使用GDB:
默认情况下是不使用I/O辅助进程的,如果需要启用I/O辅助进程以支持附加的I/O设备,那么要使用--io选项。
注意:在将来可能会改变默认实现,将启用I/O辅助进程作为默认值,选项--nio可以用来阻止使用I/O辅助进程。
出现在--之前的参数将传递给I/O辅助进程,在--之后的参数不会传递给I/O辅助进程,而是传递给eCos应用本身,由eCos应用使用。完整的参数可以通过变量cyg_hal_sys_argc和cyg_hal_sys_argv访问。
通常情况下可以接受下列选项:
I/O辅助进程动态地加载各种设备的支持脚本而且一些设备可能接受附加的命令行参数。具体情况可以通过-h选项获取或者查阅设备相关文档。如果发现不能识别的命令行选项那么将引起警告。
默认情况下I/O辅助进程会查找一个名为default.tdf的文件。另外,可以通过使用命令行参数-t指定目标机定义文件,例如:
.tdf文件扩展名根据需要将自动被追加到文件名后面。如果使用的是相对路径,那么I/O辅助进程将依次在当前目录、~/.ecos/synth/和安装目录查找目标定义文件。
一个典型的目标定义文件可能看起来是这个样子的:
目标机定义文件实际上一个Tcl脚本,在初始化阶段,这个脚本在I/O辅助进程的Tcl解释器中执行。这种实现方式提供许多必要的灵活性。比如说,脚本可能打开一个连接到某类资源管理服务器的Socket来判断哪些硬件设备已经准备就绪并作出相应调整。另外的可能是根据命令行参数进行调整。不太懂Tcl编程的用户编辑简单的目标机定义文件也不会有太大困难,只要简单地使用剪切和粘贴,然后注释或取消注释某些行,以及做一些小修改,例如把tap4改成eth2。
每种类型的设备在目标机定义文件都有属于他们自己的项,就像下面的样子:
仿真目标机设备驱动文档提供了该设备可用选项的详细描述,并且通常会提供可以粘贴到目标机定义文件的脚本片段,用户只需要拷贝粘贴并进行简单的编辑。没有什么特别的选项是所有设备都会提供的。但事实上很多设备会使用I/O辅助进程导出的公共代码,或者他们的实现涉及一些原有设备的代码重用,因此某些选项类型对很多设备是通用的。
控制输出文本外观的过滤器(filter)是一个很好的例子。上面的目标机定义文件定义了一个名为trace的过滤器,该过滤器过滤eCos应用的输出。当选项CYGDBG_USE_TRACING和CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE使能时,过滤器的正则表达式将匹配从infra组件包的跟踪输出设备输出的文本。根据当前的配置,跟踪输出是不可见的,但是可以通过菜单项System Filters把它设置成可见状态。如果跟踪输出设置成可见的,那么将以非常规的颜色显示,因此用户可以很容易地从其他文本里把跟踪输出区分出来。所有过滤器都支持以下选项:
有些设备可能会创建他们自己的子窗口,例如用来监视以太网通信,或者提供诸如仿真LED或按钮之类的附加I/O设备,通常目标机定义文件可以用来控制这些子窗口的布局。可用来列出可用的颜色值。
默认情况下,I/O辅助进程不会对出现在目标机定义文件中但实际上没有被当前eCos应用使用的synth_device条目给出警告。这可以更容易地让多个不同应用使用相同的目标机定义文件。但是这可能导致混乱,如果某个条目因为拼写错误而最终没有实际使用到的话。使用-v命令行参数可以获得关于目标机定义文件中未使用的设备条目的警告信息。
如果synth_device命令的内容包含无法识别的选项而且该命令相关的设备正在使用中,那么I/O辅助进程总是产生该选项的警告信息。
这两个配置文件也都是Tcl脚本,将在I/O辅助进程使用的Tcl解释器中执行。这意味着它们可以完全访问I/O辅助进程内部数据,包括若干Tk小部件,并且如果有需要它们可以执行文件或socket读写。《编写新设备驱动程序――宿主机端》节包含了宿主机端可用资源的信息,这些信息可用在编写新设备驱动程序上,也可以用在编写初始化脚本上。
initrc.tcl脚本将在处理任何eCos应用请求之前执行,也就是在任何设备实例化之前执行。这时,通用命令行参数已经被处理,目标机定义文件已经被读取,而且钩子系统已经初始化完成。如果运行在图形模式那么主窗口已经创建完成,但是还未显示到屏幕上以允许添加新部件而不会产生闪烁。典型的initrc.tcl基本可以添加一些菜单项或工具栏按钮,或者安装eCos应用退出时执行的钩子函数。
mainrc.tcl脚本将在eCos系统完成所有设备初始化以及C++静态构造函数执行完成后执行,也就是在准备将控制权交给应用程序的cyg_start函数调用之前。典型的mainrc.tcl基本可以检查哪些中断向量被分配给了哪些设备,以及创建一个小监视窗口监视中断活动状态。
警告:当前版本的GUI会话功能是不可用的。当该功能完全实现后,部分目标机定义文件的选项可能被移除,作为替代,可以通过一个合适的首选项对话框来编辑选项,和其它配置一起保存在会话文件。
译文:/article/8120109.html
mingdu.zheng <at> gmail <dot> com
关键词
执行――参数和配置文件。描述
为仿真目标机配置和编译eCos系统及其应用的过程与其它目标机完全相同,可执行文件一旦编译完成就可以像Linux程序一样运行,例如,通过命令提示符:$ ecos_hello <options>
或者使用GDB:
$ gdb --nw --quiet --args ecos_hello <options> (gdb) run Starting program: ecos_hello <options>
默认情况下是不使用I/O辅助进程的,如果需要启用I/O辅助进程以支持附加的I/O设备,那么要使用--io选项。
注意:在将来可能会改变默认实现,将启用I/O辅助进程作为默认值,选项--nio可以用来阻止使用I/O辅助进程。
命令行参数
执行仿真目标机应用的语法如下:$ <ecos_app> [options] [-- [app_options]]
出现在--之前的参数将传递给I/O辅助进程,在--之后的参数不会传递给I/O辅助进程,而是传递给eCos应用本身,由eCos应用使用。完整的参数可以通过变量cyg_hal_sys_argc和cyg_hal_sys_argv访问。
通常情况下可以接受下列选项:
--io
这个选项告知eCos应用在HAL初始化期间执行I/O辅助进程,没有这个选项仅有部分I/O设备可用。--nio
这个选项阻止eCos应用执行I/O辅助进程,这是当前版本的默认值。-nw, --no-windows
I/O辅助进程可以提供一个图形用户界面或者在文本模式下运行,默认情况下提供图形用户界面,但是可以通过-nw选项屏蔽该功能。部分设备的仿真需要图形用户界面,例如连接到数字输入口的按钮。-w, --windows
这个选项告知I/O辅助进程提供一个图形用户界面,这是默认值。-v, --version
这个选项用来确定使用的I/O辅助进程版本及其安装路径,I/O辅助进程和eCos应用都将在打印版本信息后立即退出。-h, --help
这个选项告知I/O辅助进程列出所有支持的命令行参数。参数列表在所有设备初始化完成后列出,在这之前一些设备的主机端支持代码可能会扩展可识别的参数列表。I/O辅助进程和eCos应用将在参数列出后立即退出。这个选项会自动引入-nw选项。-k, --keep-going
在I/O辅助进程读取任何配置文件或初始化设备期间如果发生了错误,默认情况下I/O辅助进程和eCos应用都将退出。这个选项让I/O辅助进程在检测到错误时继续,但是显然不可能有完整的功能。-nr, --no-rc
一般情况下,I/O辅助进程会在启动过程处理两个用户配置文件:initrc.tcl和mainrc.tcl。这个选项忽略这两个文件的处理。-x, --exit
如果I/O辅助进程提供了图形用户界面,那么在eCos退出后I/O辅助进程将继续运行,这让用户有机会执行保存主窗口文本等操作。这个选项告知I/O辅助进程在eCos应用退出后立即退出。-nx, --no-exit
如果通过-nw选项屏蔽了图形用户界面,I/O辅助进程将在eCos应用退出后立即退出。在没有图形前端的情况下,通常用户没有办法与I/O辅助进程进行交互,因此在eCos应用退出后继续运行I/O辅助进程是没有意义的。指定-nx选项告知I/O辅助进程在eCos应用退出后继续执行。-v, --verbose
这个选项告知I/O辅助进程输出更多附加信息,特别是在初始化阶段。-l <file>, --logfile <file>
大多数eCos应用和I/O辅助进程的输出是一些简单的文本,例如,通过eCos的printf或diag_printf函数调用产生的输出。当I/O辅助进程运行在图形模式时,这些输出被显示到中间的文本窗口,并且可以通过菜单保存到文件或编辑。-l选项可以用来自动产生额外的包含所有文本的日志文件。如果不是使用图形模式,默认情况下所有输出都打印到当前标准输出,指定-l选项后,大部分文本将写到日志文件,但是包括I/O辅助进程错误消息在内的部分消息仍然打印到标准输出。-t <file>, --target <file>
在I/O辅助进程初始化阶段将读取一个目标机定义文件(target definition file)。这个文件保存了诸如哪个Linux设备用来仿真哪些eCos设备等信息。-t选项可以同来指定读取哪个目标机定义文件,默认值为default.tdf。<file>不需要包含.tdf文件扩展名,I/O辅助进程会根据需要自动追加扩展名。-geometry <geometry>
这个选项用来控制主窗口的大小和位置。I/O辅助进程动态地加载各种设备的支持脚本而且一些设备可能接受附加的命令行参数。具体情况可以通过-h选项获取或者查阅设备相关文档。如果发现不能识别的命令行选项那么将引起警告。
目标机定义文件
eCos应用需要访问硬件设备,例如eth0或/dev/ser0,这些设备需要映射到Linux设备上。举个例子,有些用户可能希望eCos系统/dev/ser0串口设备上的所有数据通过Linux串口设备/dev/ttyS1进行传输,并将eCos系统eth0以太网设备映射到Linux系统的ethertap设备tap3。有些设备需要额外的配置信息,例如I/O辅助进程应该缓存的数据包数量限制等。目标机定义文件(target definition file)提供所有的上述信息。默认情况下I/O辅助进程会查找一个名为default.tdf的文件。另外,可以通过使用命令行参数-t指定目标机定义文件,例如:
$ bridge_app --io -t twineth
.tdf文件扩展名根据需要将自动被追加到文件名后面。如果使用的是相对路径,那么I/O辅助进程将依次在当前目录、~/.ecos/synth/和安装目录查找目标定义文件。
一个典型的目标定义文件可能看起来是这个样子的:
synth_device console { # appearance -foreground white -background black filter trace {^TRACE:.*} -foreground HotPink1 -hide 1 } synth_device ethernet { eth0 real eth1 eth1 ethertap tap4 00:01:02:03:FE:06 ## Maximum number of packets that should be buffered per interface. ## Default 16 #max_buffer 32 ## Filters for the various recognised protocols. ## By default all filters are visible and use standard colours. filter ether -hide 0 #filter arp -hide 1 #filter ipv4 -hide 1 #filter ipv6 -hide 1 }
目标机定义文件实际上一个Tcl脚本,在初始化阶段,这个脚本在I/O辅助进程的Tcl解释器中执行。这种实现方式提供许多必要的灵活性。比如说,脚本可能打开一个连接到某类资源管理服务器的Socket来判断哪些硬件设备已经准备就绪并作出相应调整。另外的可能是根据命令行参数进行调整。不太懂Tcl编程的用户编辑简单的目标机定义文件也不会有太大困难,只要简单地使用剪切和粘贴,然后注释或取消注释某些行,以及做一些小修改,例如把tap4改成eth2。
每种类型的设备在目标机定义文件都有属于他们自己的项,就像下面的样子:
synth_device <device type> { <options> }
仿真目标机设备驱动文档提供了该设备可用选项的详细描述,并且通常会提供可以粘贴到目标机定义文件的脚本片段,用户只需要拷贝粘贴并进行简单的编辑。没有什么特别的选项是所有设备都会提供的。但事实上很多设备会使用I/O辅助进程导出的公共代码,或者他们的实现涉及一些原有设备的代码重用,因此某些选项类型对很多设备是通用的。
控制输出文本外观的过滤器(filter)是一个很好的例子。上面的目标机定义文件定义了一个名为trace的过滤器,该过滤器过滤eCos应用的输出。当选项CYGDBG_USE_TRACING和CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE使能时,过滤器的正则表达式将匹配从infra组件包的跟踪输出设备输出的文本。根据当前的配置,跟踪输出是不可见的,但是可以通过菜单项System Filters把它设置成可见状态。如果跟踪输出设置成可见的,那么将以非常规的颜色显示,因此用户可以很容易地从其他文本里把跟踪输出区分出来。所有过滤器都支持以下选项:
-hide [0|1]
该选项控制与该过滤器匹配的文本是否显示。程序运行时,每个过滤器都可以通过System Filters菜单项配置其可见性。-foreground <colour>
该选项指定过滤器匹配文本的前景色。颜色可以使用诸如#F08010格式的RGB值指定,或者使用诸如“light stell blue”的符号名。X11工具showrgb可以用来获取可用的颜色。-background <colour>
该选择指定过滤器匹配文本的背景色。和-foreground一样,颜色可以使用符号名或RGB值来指定。有些设备可能会创建他们自己的子窗口,例如用来监视以太网通信,或者提供诸如仿真LED或按钮之类的附加I/O设备,通常目标机定义文件可以用来控制这些子窗口的布局。可用来列出可用的颜色值。
默认情况下,I/O辅助进程不会对出现在目标机定义文件中但实际上没有被当前eCos应用使用的synth_device条目给出警告。这可以更容易地让多个不同应用使用相同的目标机定义文件。但是这可能导致混乱,如果某个条目因为拼写错误而最终没有实际使用到的话。使用-v命令行参数可以获得关于目标机定义文件中未使用的设备条目的警告信息。
如果synth_device命令的内容包含无法识别的选项而且该命令相关的设备正在使用中,那么I/O辅助进程总是产生该选项的警告信息。
使用配置文件
在初始化期间,I/O辅助进程将在~/.ecos/synth/查找并执行两个用户配置文件initrc.tcl和mainrc.tcl。如果该目录或文件不存在,那么将创建空文件。这两个配置文件也都是Tcl脚本,将在I/O辅助进程使用的Tcl解释器中执行。这意味着它们可以完全访问I/O辅助进程内部数据,包括若干Tk小部件,并且如果有需要它们可以执行文件或socket读写。《编写新设备驱动程序――宿主机端》节包含了宿主机端可用资源的信息,这些信息可用在编写新设备驱动程序上,也可以用在编写初始化脚本上。
initrc.tcl脚本将在处理任何eCos应用请求之前执行,也就是在任何设备实例化之前执行。这时,通用命令行参数已经被处理,目标机定义文件已经被读取,而且钩子系统已经初始化完成。如果运行在图形模式那么主窗口已经创建完成,但是还未显示到屏幕上以允许添加新部件而不会产生闪烁。典型的initrc.tcl基本可以添加一些菜单项或工具栏按钮,或者安装eCos应用退出时执行的钩子函数。
mainrc.tcl脚本将在eCos系统完成所有设备初始化以及C++静态构造函数执行完成后执行,也就是在准备将控制权交给应用程序的cyg_start函数调用之前。典型的mainrc.tcl基本可以检查哪些中断向量被分配给了哪些设备,以及创建一个小监视窗口监视中断活动状态。
会话信息
当运行在图形模式时,I/O辅助进程将读取包含会话信息的~/.ecos/synth/guisession文件,不能手动修改这个文件,当I/O辅助进程退出时将会自动更新该文件。这个文件的目的是保存通过图形用户界面操作的配置信息,例如显示帮助信息时应当使用的浏览器等。警告:当前版本的GUI会话功能是不可用的。当该功能完全实现后,部分目标机定义文件的选项可能被移除,作为替代,可以通过一个合适的首选项对话框来编辑选项,和其它配置一起保存在会话文件。
相关文章推荐
- ArrayList用foreach删除元素产生异常
- --多线程中,单生产单消费,多生产多消费的问题
- 李朝基礎의 完成 (朝鮮歷史 韓長庚)
- hdu-1106排序
- 【呆子营销兵法】:小虫米子---一次成功的商业“反间计”
- 软件测试
- DELPHI OnKeyDown,OnKeyPress,OnKeyUp区别
- Google的kaptcha验证码使用
- 软件测试
- Google的kaptcha验证码使用
- PHP的异常捕捉
- 燕山君의 失政 (朝鮮歷史 韓長庚)
- NSNumber,NSInteger,NSUInteger
- java动态画圈圈。运用多线程,绘图
- IOS真机测试测试步骤和遇到的问题解决方案
- AngularJS scope
- 让你不再害怕指针
- 矩阵相乘函数
- 我所遭遇过的中间件--VTK
- PHP生成带头像的二维码