eCos是功能完备的开源实时操作系统,eCos提供的仿真目标机可以将eCos系统作为Linux下的进程执行,这为学习和开发eCos都提供了便捷。本文是eCos参考手册仿真目标机部分的第4节,其它章节在这里。
eCos官网:http://ecos.sourceware.org eCos中文技术网:http://www.52ecos.net eCos交流QQ群:144940146。
描述
eCos仿真目标机I/O辅助进程被设计成支持扩展和用户自定义。对指定设备的支持是动态加载的,并且每个设备都可以扩展用户界面。例如,一个设备可以添加菜单项,在工具栏添加新的按钮,在主窗口内创建自己的子窗口,甚至可以创建整个全新的顶层窗口。这些子窗口或顶层窗口可以展示像中断或数据包传输的活动状态图。同时,允许用户通过辅助进程与eCos应用进行交互,例如,显示若干映射到eCos应用的数字I/O输入的按钮,当点击这些按钮时eCos应用的I/O输入状态将发生改变。不同的应用对I/O有不同的需求,修改宿主机对应的设备支持文件可以自定义用户界面。I/O辅助进程也会读取用户配置脚本,用户配置脚本以相同的方式增强用户界面功能。因此用户界面的确切效果取决于用户配置以及运行的eCos应用。但是总体布局看起来是差不多的。
标题栏标识这个窗口属于eCos仿真目标机应用,并显示eCos应用名称和它的进程ID。如果用户首先运行eCos应用然后使用GDB调试这个应用,进程ID将非常有用,因为GDB通过进程ID来标识需要调试的进程。这个窗口包含常规的菜单栏,菜单栏包含一些常用项;窗口还包含工具栏,工具栏包含一些像剪切和粘贴之类的基础按钮。同时也支持上下文帮助。
窗口的中心是一个文本窗口,它的四周可能围绕着各种设备的子窗口。例如,可能有一行仿真的LED在文本窗口的上方,以太网流量监视器和中断活动状态表在文本窗口的右边。在窗口的底部是状态栏,状态栏包括一个小动画,这个动画指示eCos应用是否仍然在运行。
菜单栏和工具栏
通常情况下,菜单栏包括4个菜单项:File、Edit、View和Help。
在File菜单有三个菜单项与保存中间文本窗口的当前内容有关。Save用来保存文本窗口当前可见的内容。任何因过滤而被隐藏的文本不会被保存到文件。如果之前有进行过Save或Save As操作,那么将使用之前使用的已存在的文件,如果是第一次将要求用户选择一个合适的文件名。Save As也是保存当前的可见内容,但是总是要求用户选择一个文件名。Save All可以用来保存文本窗口的完整内容,包括任何隐藏的文本。Save All总是要求用户选择一个文件名,避免与可见文本内容的保存文件冲突。
通常情况下,eCos应用从gdb运行或从命令行运行。当eCos应用正在被gdb调试时杀死它可不是个好主意,最好的办法是使用gdb自己的kill命令。另一个方式是eCos应用自己调用CYG_TEXT_EXIT或者cyg_hal_sys_exit退出进程。但也可以使用I/O辅助进程的Kill eCos菜单项结束应用。Kill eCos首先尝试清理关闭(clean shutdown)应用,但是如果应用被gdb挂起或已经已经完全死掉,那么清理关闭将会失败,最终使用SIGKILL信号来终止进程。
当I/O辅助进程运行在图形模式时,即使eCos应用已经退出,辅助进程仍然保持运行。这可以让用户有机会检查eCos应用最后几行输出,并且可以执行例如保存输出到文件之类的操作。Exit菜单项可以关闭I/O辅助进程。需要注意的是:通过命令行参数--exit和--no-exit可以改变这个行为。
如果在eCos仍然在运行时点击Exit菜单项,那么I/O辅助进程首先尝试终止eCos应用,然后再退出。
Edit菜单包含了常用的文本操作菜单项:Cut、Copy、Paste、Clear和Select All。这些菜单项是操作中间的文本窗口的。默认情况下,文本窗口是不可编辑的,所以Cut、Paste和Clear菜单项是不可用的。如果用户需要编辑文本窗口的内容,那么要切换Read Only菜单项为不选择状态。
Perferences菜单项将打开一个手选项对话框。其中一个手选项与上下文帮助有关:I/O辅助进程目前并没有包含内建的html阅读器,它调用外部的浏览器来实现html帮助文档阅读。下图的例子显示I/O辅助进程首先尝试使用现有的mozilla回话,如果失败那么尝试创建一个新的mozilla会话,如果还失败最终尝试使用GNOME帮助阅读器。
View菜单包含System filters菜单项,用来编辑器当前的过滤器。
Help菜单用来打开eCos系统帮助文件、仿真目标机帮助文件以及特定设备的帮助文件。首选项对话框可以选择使用哪个浏览器打开帮助文件。
备注:在写这份文档的时候,eCos文档还没有一个定义良好的顶层索引文件,因此相关的菜单项是不可用的。仿真目标机文档和设备文档存储在它们自己的组件包目录中,因此很容易找到。这可能需要设置正确的ECOS_REPOSITORY环境变量。
文本窗口
中间的文本窗口容纳eCos应用的控制台输出:上方的屏幕截图显示了TCP/IP协议栈的DHCP初始化输出,以及在底部有部分main线程的输出。一些设备可以插入它们的文本输出,比如说以太网设备支持通过配置显示输入输出数据包的详细信息。混合eCos应用输出和设备输出可以更容易地理解事件产生的次序。
不同源头的文本输出可以通过过滤器控制其外观,也可以隐藏部分文本输出。例如,如果eCos配置使能了跟踪输出(Trace output),可以给跟踪输出指定颜色模式,把它与其它输出区分开来。此外,跟踪输出会产生大量的数据,因此可以将其默认隐藏,仅在出现特定问题的时候将其显示出来以便查找更多的信息。类似的,以太网设备可以输出数据包传输的具体内容,并且使用不同的背景色与控制台输出相区别。
大多数过滤器的默认外观通过目标定义文件指定。一个简单的例子:
每个过滤器的颜色以及隐藏标记可以在运行时使用View菜单的System filters菜单项进行修改。这会打开下图所示的对话框:
需要注意的是文本窗口是基于行而非字符的。如果eCos应用发送了一行文本的部分内容,那么该内容将被缓存起来直到接收到换行符而不是立即显示。这避免了不同输出源协同输出可能导致的冲突。
默认情况下,文本窗口是只读的。这意味着不能进行剪切、粘贴和清除操作,以及键盘输入将被忽略。Edit菜单有一个复选菜单项Read Only可以将文本窗口切换成可读写模式。例如,用户可以输入某个时间点发生什么事件的备注,或者粘贴gdb会话的部分内容。文本窗口的按键消息是不会传递给eCos应用的,如果eCos应用需要按键消息,那么需要另外的键盘设备。
定位可选窗口
一些设备可能会创建它们自己的子窗口,例如监视以太网数据流的窗口或者提供诸如LED或按键的附加I/O设备的窗口。通常情况下可以使用目标定义文件控制这些窗口的布局。这需要理解主窗口的布局。
子窗口可以放置在围绕中间文本窗口周围的8个框架中:.main.nw、.main.n、.main.ne、.main.w、.main.e、.main.sw、.main.s以及.main.se。为了将包含一行LED的子窗口定位到文本窗口的上方并靠左边,需要在目标定义文件包含以下条目:
类似的,将数据传输监视窗口定位到文本窗口的右边需要像这样的内容:
通常情况下,指定框架容器以及靠左、靠右、靠上或靠下就足够了。完全控制窗口定位需要理解Tcl/Tk,特别是窗口定位算法,此外还要阅读相关的参考资料。