eCos Synthetic实践(三)——I/O辅助进程

来源:互联网 发布:字幕特效软件 编辑:程序博客网 时间:2024/05/20 23:03

mingdu.zheng <at> gmail <dot> com
http://blog.csdn.net/zoomdy/article/details/9101291


1. 简介

I/O辅助进程为eCos Synthetic提供不能简单通过系统调用实现的设备模拟。 I/O辅助进程为eCos和虚拟设备之间提供了标准接口,通过该接口可以模拟数据读写和中断。 I/O辅助进程提供了一个用户界面, 通过用户界面可以为开发人员提供一个直观的状态指示。 I/O辅助进程的主要部分使用TCL编写,因此其模拟设备的实现也可以使用TCL语言实现,这使得扩展I/O辅助进程变得更加容易。

本文是《eCos Synthetic实践》系列的第三篇,介绍怎样配置、编译、安装I/O辅助进程,以及相关的设备模块, 配置、编译、安装过程是标准的configure, make, make install三部曲。以及I/O辅助进程的使用和tdf配置文件。

2. 安装附加软件

首先需要安装tcl-dev和tk-dev,分别是tcl和tk的开发包,I/O辅助进程使用TCL实现,使用Tk实现其用户界面, 因此需要安装这两个开发包。

sudo apt-get install tcl-dev

安装tcl-dev开发包,如果未安装该软件包,那么将出现错误:unable to locate Tcl configuration file tclConfig.sh

sudo apt-get install tk-dev

安装tk-dev开发包,如果未安装该软件包,那么将出现错误:unable to locate Tk config file tkConfig.sh

3. I/O辅助进程的编译安装

3.1. 编译安装I/O辅助进程主模块和Console模块
mkdir ~/buildcd ~/build~/ecos-hg/packages/hal/synth/arch/current/host/configuremakesudo make install

默认安装到/usr/local/libexec/ecos/hal/synth/arch/<version>目录下。 主要文件包括ecosynth, ecosynth.tcl, console.tcl。ecosynth是由C语言编译的二进制可执行文件, ecosynth初始化TCL的运行环境,然后调用TCL解释器运行ecosynth.tcl脚本,ecosynth.tcl是I/O辅助进程的主体部分, 提供数据传输、中断管理、用户界面等功能。console.tcl是终端模拟设备,用来接收eCos的诊断输出并将输出显示在I/O辅助进程的窗口内, console.tcl由ecosynth.tcl根据tdf配置选项决定是否加载。不能直接执行这三个文件中的任意一个,这也是将这几个文件存储在libexec目录下的原因, ecosynth由eCos在初始化时创建执行。

3.2. 编译安装Ethernet模块

rm * -rf ~/ecos-hg/packages/devs/eth/synth/ecosynth/current/host/configuremakesudo make install

默认安装到/usr/local/libexec/ecos/devs/eth/synth/ecosynth/>version<目录下。 主要文件包括ethernet.tcl、rawether,ethernet.tcl是虚拟以太网设备的实现文件,由ecosynth.tcl根据tdf配置选项进行加载, rawether是由C语言编译的二进制可执行文件,用来帮助ethernet.tcl完成一些使用TCL语言不能实现的底层操作, 主要是对Linux以太网设备的读写,可以是真实的网卡,也可以是TAP设备。

3.3. 编译安装Framebuffer模块

rm * -rf~/ecos-hg/packages/devs/framebuf/synth/current/host/configuremakesudo make install

默认安装到/usr/local/libexec/ecos/devs/framebuf/synth/>version<目录下。 主要文件包括framebuf.tcl、framebuf,framebuf.tcl是虚拟显示设备的实现文件,由ecosynth.tcl根据tdf配置选项进行加载, framebuf是由C语言编译的二进制可执行文件,用来帮助framebuf.tcl完成一些使用TCL语言不能实现的底层驱动, 主要是像素格式换行和对X Server的绘图输出。

3.4. 编译安装Watchdog模块

rm * -rf~/ecos-hg/packages/devs/watchdog/synth/current/host/configuremake sudo make install

默认安装到/usr/local/libexec/ecos/devs/watchdog/synth/>version<目录下。 Watchdog是相对简单的设备,由watchdog.tcl实现,不需要C语言实现的其它程序来辅助,watchdog.tcl由ecosynth.tcl根据tdf配置选项进行价值。

4. 简单实例

接下来我们将创建一个比较简单的实例,该实例将引用诊断输出和看门狗这两种相对简单的设备。

4.1. 配置编译eCos库

请参考《eCos Synthetic实践(一)——Hello World!》3. 配置编译eCos Synthetic库。

需要补充的是需要添加Watchdog IO device,这里的实例将引用Watchdog组件。

图 1. 添加Watchdog IO device组件

4.2. 创建Eclipse工程

打开Eclipse,通过菜单File > New > Project,选择C/C++分类下的C++ Project, 打开C++ Project项目创建向导, Project name 输入 synth-hello,Project type选择Hello World C++ Project, 点击Finish完成项目创建。 剩下的工作请参考《eCos Synthetic实践(一)——Hello World!》5. 创建Hello World工程

实例C++代码,将下列代码覆盖Eclipse工程的源代码, 在这个代码中,不断增加复位看门狗的延时时间,直到看门狗超时停止eCos应用程序。

#include <cyg/infra/diag.h>#include <cyg/kernel/kapi.h>#include <cyg/io/watchdog.hxx>int main(void){    diag_printf("Start watchdog.\n");    Cyg_Watchdog::watchdog.start();    for(int i = 0; ; i++)    {        diag_printf("Delay %d ticks.\n", i * 10);        cyg_thread_delay(i * 10);        diag_printf("Reset watchdog.\n");        Cyg_Watchdog::watchdog.reset();    }    return 0;}

实例tdf文件,保存到~/.ecos/synth/default.tdf,tdf文件是I/O辅助进程的配置文件。

synth_device console {    filter trace {^TRACE:.*} -foreground HotPink1 -hide 1}synth_device watchdog {    use wallclock_time}

4.3. 编译工程

通过菜单Project > Build Project编译工程,在Console视图可以看到编译输出及结果。

4.4. 运行eCos应用和I/O辅助进程

默认情况下,调试或运行eCos不会执行I/O辅助进程,需要为eCos可执行文件加上–io选项才会执行I/O辅助进程。 如果在Eclipse环境下调试,那么通过Run > Debug Configurations…打开调试配置对话框, 在C/C++ Application上右键,选择New, 新建一个 C/C++ Application类型的调试配置。 选择Arguments标签页,在Program arguments输入框内加入选项“–io”。

图 2. 添加程序参数

再切换到Environment标签页,添加环境变量ECOS_REPOSITORY=”~/ecos-hg/packages”,这个环境变量指向所使用的eCos仓库的根目录。

图 3. 添加环境变量

如果没有添加ECOS_REPOSITORY环境变量,那么默认使用编译I/O辅助进程的那个eCos仓库作为当前的eCos仓库, 但是ecosynth.tcl文件存在一个bug,变量名引用错误,实际上不能正确使用默认的eCos仓库。 如果没有添加环境变量,那么将导致错误:can’t read “synth::_ecos_repository”: no such variable,

如果通过终端运行eCos程序,那么在程序前设置环境变量,程序名后添加–io参数。

ECOS_REPOSITORY=~/ecos-hg/packages/ ./synth-hello --io

4.5. 运行效果

下图是看门狗超时后的I/O辅助进程主界面,可以看到diag_printf输出的文字信息显示在程序主界面中,右上角显示看门狗状态, 图中的狗叫图形象地展示了超时状态。

图 4. 运行效果

5. 参考资料

在线资料

  1. 《eCos Synthetic实践(二)——简单外设》
  2. 《eCos Synthetic实践(一)——Hello World!》
  3. 《XXXVIII. eCos Synthetic Target》:官方参考手册。
  4. 《eCos的Linux Synthetic Target简介》:官方参考手册的部分翻译。
  5. 《eCos需要Synthetic虚拟目标板的理由》:谁需要Synthetic,什么情况下需要Synthetic?
  6. 《虚拟实验室eCos开发环境的配置 (Linux)》:使用基于QEMU的模拟器运行eCos。
  7. VirtualBox:虚拟机软件。
  8. Xubuntu:易于使用又节省资源的Linux发行版。

中文图书

  1. 《嵌入式可配置实时操作系统eCos软件开发》
  2. 《嵌入式可配置实时操作系统eCos开发与应用》
  3. 《嵌入式可配置实时操作系统ecos开发与应用》 第2版
  4. 《嵌入式可配置实时操作系统eCos技术及实现机制》