eCos是可配置嵌入式操作系统,比Linux稍小,又很好地支持Linux的系统调用接口。其源代码大多是用C++编写。
安装与配置
进入到eCos的官网下载页面:http://ecos.sourceware.org/getstart.html
新建一个目录并进入。
$ mkdir -p Workspace/ecos
$ cd Workspace/ecos
安网页上的指引,执行wget命令
$ wget --passive-ftp ftp://ecos.sourceware.org/pub/ecos/ecos-install.tcl
运行 sh ecos-install.tcl
$ sh ecos-install.tcl
eCos installer v2.0.1 starting...
Written and maintained by Jonathan Larmour <jifl@eCosCentric.com>
Retrieving installer metadata information...
Connected...
Downloading ecos-install.db...
File size 6572 bytes
[**************************************************]
---------------------------------------------------------
Available distribution sites:
[1] ftp://mirrors.kernel.org/sources.redhat.com/ecos
[2] http://mirrors.kernel.org/sources.redhat.com/ecos
[3] ftp://mirror.aarnet.edu.au/pub/sourceware/ecos
[4] http://mirror.aarnet.edu.au/pub/sourceware/ecos
[5] ftp://ftp.mirrorservice.org/sites/sources.redhat.com/pub/ecos
[6] http://www.mirrorservice.org/sites/sources.redhat.com/pub/ecos
[7] ftp://gd.tuwien.ac.at/opsys/ecos
[8] http://gd.tuwien.ac.at/opsys/ecos
[9] ftp://ftp.funet.fi/pub/mirrors/sources.redhat.com/pub/ecos
[10] ftp://ftp.gwdg.de/pub/misc/sources.redhat.com/ecos
[11] http://ftp.gwdg.de/pub/misc/sources.redhat.com/ecos
[12] ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/sources.redhat.com/ecos
[13] http://ftp-stud.fht-esslingen.de/pub/Mirrors/sources.redhat.com/ecos
[14] ftp://bo.mirror.garr.it/mirrors/sourceware.org/ecos
[15] http://bo.mirror.garr.it/mirrors/sourceware.org/ecos
[16] ftp://ftp.u-aizu.ac.jp/pub/gnu/cygnus/ecos
[17] ftp://ftp.sun.ac.za/pub/mirrorsites/sourceware.org/pub/ecos
[18] http://ftp.sun.ac.za/ftp/pub/mirrorsites/sourceware.org/pub/ecos
[19] ftp://ftp.twaren.net/Unix/sourceware.org/ecos
[20] http://ftp.twaren.net/Unix/sourceware.org/ecos
[21] http://mirror.facebook.net/sourceware/ecos
[22] ftp://ecos.sourceware.org/pub/ecos
Please select a distribution site: 20
列举了22个下载源,让我们选一个。我选的是20,选有些源下载不了,要设置代理才行。
---------------------------------------------------------
Please select a directory for installation
[Default /home/hevake_lcj/ecos]:
然后就是让我们指定安排路径,默认就是相前目录。
---------------------------------------------------------
Available prebuilt GNU tools:
[1] arm-eabi
[2] arm-elf (old)
[3] i386-elf
[4] m68k-elf
[5] mipsisa32-elf
[6] powerpc-eabi
[7] sh-elf
[q] Finish selecting GNU tools
("*" indicates tools already selected)
Please select GNU tools to download and install: 1
这是让我们选择哪种平台。我选的是1,arm-eabi。还可以多选几个,选q结束选择。
然后就开始下载了:
Entering /home/hevake_lcj/ecos
Retrieving GNU tools for arm-eabi
Connected...
Downloading ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2...
File size 27341525 bytes
[******* ]
这个过程时间比较长,慢慢等。
小窍门:
如果你嫌下载时间太长,可以手动下载,这会快很多。它要下载的两个文件,分别是:
ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2
我们可先下载到本地,$HOME/ecos/ 目录下。再运行 sh ecos-install.tcl,这样安装会直接跳过下载过程。
最终:
Entering /home/hevake_lcj/ecos
Retrieving GNU tools for arm-eabi
Connected...
Downloading ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2...
File size 27341525 bytes
[**************************************************]
Retrieving eCos version 3.0
Connected...
Downloading ecos-3.0.i386linux.tar.bz2...
File size 17854418 bytes
[**************************************************]
Downloads complete.
If you wish to disconnect from the internet you may do so now.
Unpacking ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2...
Unpacking ecos-3.0.i386linux.tar.bz2...
Generating /home/hevake_lcj/ecos/ecosenv.sh
Generating /home/hevake_lcj/ecos/ecosenv.csh
---------------------------------------------------------
In future, to establish the correct environment for eCos,
run one of the following commands:
. /home/hevake_lcj/ecos/ecosenv.sh (for sh/bash users); or
source /home/hevake_lcj/ecos/ecosenv.csh (for csh/tcsh users)
It is recommended you append these commands to the end of your
shell startup files such as $HOME/.profile or $HOME/.login
---------------------------------------------------------
Installation complete!
表示安装完成。
上面提示要将 ecosenv.sh 加入到 shell 的启动配置中。本人的是CentOS,默认是bash。所以设置 .bashrc 即可。
$ echo '. $HOME/ecos/ecosenv.sh' >> .bashrc
重新开一个终端,查看一下是否设置成功
$ env | grep ECOS
ECOS_REPOSITORY=/home/hevake_lcj/ecos/ecos-3.0/packages
如果返回上述结果表示成功。
编译
进入ecos安装的目录并查看:
$ cd ~/ecos/
$ ls
ecosenv.csh gnutools/ ecos-3.0/ ecosenv.sh
主要有两个目录,一个是gnutools/,另一个是ecos-3.0。本人估计,第一个是一系列的与平台相关的开发工具,ecos-3.0才是源码。
于是进入ecos-3.0,查看:
$ cd ecos-3.0/
$ ls
acinclude.m4 buildid.txt configure doc Makefile.in README.txt
aclocal.m4 ChangeLog configure.in examples packages tools
acsupport config.log COPYING Makefile.am README.host
configure
看到了 configure,我就想到要先执行这个脚本。结果报错,说应该在顶层目录才能执行。
configure: error: This configure script should not be run inside the source tree. Instead please use a separate build tree
于是,回到了上一层。再执行
$ cd ..
$ ./ecos-3.0/configure
这次没有上面的错误了,是新的错误:
configure: looking for tkConfig.sh in /usr/local/lib /usr/lib
configure: error: unable to locate Tk config file tkConfig.sh
configure: error: ../../.././ecos-3.0/tools/src/libcdl/configure failed for libcdl
configure: error: ../.././ecos-3.0/tools/src/configure failed for tools/src
貌视是说,没有安装Tk相关的组件?
用yum search查一下:
$ yum search tk-devel
tk-devel.i686 : Tk graphical toolkit development files
应该就是这货,安装吧。
再来!这回OK了。
make
通常都是这样,configure完了就make。
$ make
报错:
make[1]: Entering directory `/home/hevake_lcj/ecos/packages/hal/synth/arch/v3_0/host'
gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -I. -I../../../../../.././ecos-3.0/packages/hal/synth/arch/v3_0/host -I/usr/local/include -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -O2 -DECOSYNTH_VERSION=\"0.1\" -DECOS_REPOSITORY=\"/home/hevake_lcj/ecos/ecos-3.0/packages\" -DLIBEXECDIR=\"/usr/local/libexec\" -DPKG_DIR=\"hal/synth/arch\" -DPKG_VERSION=\"v3_0\" -DPKG_INSTALL=\"hal/synth/arch/v3_0\" -MT ecosynth.o -MD -MP -MF .deps/ecosynth.Tpo -c -o ecosynth.o ../../../../../.././ecos-3.0/packages/hal/synth/arch/v3_0/host/ecosynth.c
In file included from ../../../../../.././ecos-3.0/packages/hal/synth/arch/v3_0/host/ecosynth.c:60:
/usr/include/tk.h:23:3: error: #error Tk 8.5 must be compiled with tcl.h from Tcl 8.5
make[1]: *** [ecosynth.o] Error 1
make[1]: Leaving directory `/home/hevake_lcj/ecos/packages/hal/synth/arch/v3_0/host'
make: *** [all-recursive] Error 1
是在说什么?TK 8.5 必须与 Tcl 8.5 中 tcl.h 一起编译。
打开 /usr/include/tk.h 文件,找到第22行:
再打开 /usr/include/tcl.h 文件,找到 TCL_MAJOR_VERSION 定义处:
问题来了,为什么这里明明 TCL_MAJOR_VERSION=8,TCL_MAJOR_VERSION=5,而在tk.h里就不成立了呢?
是不是找错文件了?找成别的 tcl.h 文件去了。于是我用 locate 命令查看是否还有其它同名的文件,也是在 path 中。
[hevake_lcj@localhost:/usr/include]$ locate -r /tcl\.h$
/home/hevake_lcj/Install/some-libs/tcl8.6.1/generic/tcl.h
/home/hevake_lcj/Install/some-libs/tcl8.6.1/unix/tclsh
/usr/bin/tclsh
/usr/local/include/tcl.h
发现还有一个 /usr/local/include/tcl.h 文件,打开看看:
想必就是这个文件导致的。这个头文件在 /usr/local/ 目录,想必是之前自己下载的安装包安的吧。
解决办法:(1)把自己源码安装的卸了。(2)更新环境变量,使 /usr/include/ 优先于 /usr/local/include。
我选择了第一种。
好了,我们再make。
What?就这两下就编完了?我还以为要想编译Linux那边等上一两个小时呢。
然后安装:
$ sudo make install
完成了。
裁减
在ecos-3.0/tools/bin/ 目录下有如下的几个工具:
$ cd ecos-3.0/tools/bin/
$ ls
configtool ecosconfig platforms.tar ser_filter
除了platforms.tar外,其它都是可执行文件。而这个路径就在PATH中,如下:
$ echo $PATH
/home/hevake_lcj/ecos/gnutools/arm-eabi/bin:/home/hevake_lcj/ecos/ecos-3.0/tools/bin
那就让我们运行一下。
$ configtool
弹出如下配置界面:
eCos的高度可配置性可能就是体现在这个地方。用户可以很方便地勾选与设置自己想要的选项。这点很棒!
配置完了,点工具菜单栏 File --> Save,保存配置。我这里命名为"my-first-try.ecc"
由于我也是新手,就不乱点了。保存了就直接关闭了吧。
观察当前目录:
[hevake_lcj@localhost:~/ecos]$ ls
ecos-3.0 ecosenv.sh my-first-try_build/ my-first-try_install/
ecosenv.csh gnutools my-first-try.ecc
我们会发现多出了三个 my-first-try 相关的文件。
今天就暂时研究到这里吧~