前言:
开篇之季,我先说一下我的ecos经历吧。每个人都有过初学者的经历,初学ecos的时候我问了许多令网友老大啼笑皆非的问题,不过还是感谢这位热心的老大哥帮忙我才逐步的了解了ecos,从初学者变成了ecos的使用者。从初学到使用也就是一共三个月的时间,三个月后我转正了,也转向了专功uclinux和linux的移植和驱动的编写,再也没有很好的研究过ecos,直到最近帮同事移植ecos,才重新回顾了那段刚刚参加工作的岁月。
刚来公司的时候,我的第一个任务就是做ecos上面的网络应用,但是我只拿到了一块板子,内核什么的都没有,怎么做?刚来公司的时候情况比较特殊,其他的同事都没有这方面的经验,而我们副理正好赶上生孩子,什么也没给我留下,所以便开始了ecos的郁闷之旅:),可以说ecos完全是自学的。首先我google了一下什么叫ecos :),然后开始查查有没有好的论坛站点,然后看看有什么样的书可以要我看。很可惜ecos在资料方面一直都很欠缺。在网上找了个ecos方面的老大,很可惜现在他已经不怎么上网了,丢了联系方式。就这样我正式开始了我的ecos学习!
我们副理给我的只有ecos2.0的代码和编译器arm-tools两个文件,第一步肯定是要安装了,很简单,那时候没人教我自己很快就装好了,哈哈!
第一步:cygwin安装(下载here)
一个在windows平台上运行的unix模拟环境。具体的网上多的是就不解释了,下载得到cygwin后就可以点:setup.exe安装了。
(1)选择需要的安装文件的位置,一般我们都本地安装,因为下载cygwin又不费事。下一步
(2)提示用户选择安装位置,随便你选择。Dos or unix?我一般都选unix,二者只是文件结尾的不同,前者/r/n结尾,后者是/n结尾。下一步
(3)选择你要安装的cygwin包,我一般或者说肯定选完全安装,因为以前吃亏过,一通乱选到后来啥都找不到了,还不如完全安装呢,耗不了你多少空间,现在电子产品都便宜了,完全安装后下一步。
(4)开始安装了,要花不少时间,耐心的等一会,安装完毕,一些ok,运行一下看看效果就可以了,毕竟你用的是ecos,好玩的还在后头呢!
第二步:安装ecos源码。http://ecos.sourceware.org/mirror.html
一般来说我是把源码放在ecos的home目录下,不过有的时候我安装cygwin找不到home这个目录啊,所以放在哪都可以,只要再后来的环境变量路径对了就可以了,所以这步很简单,拷贝你源码到cygwin的home或其他目录下即可。
第三步:安装交叉编译工具
就是装个编译器了,我一般都是把arm-tools拷贝到/usr/local/下面可能是我们公司的传统问题吧,所以我也这么做!
第四步:环境变量
该拷贝的都拷贝了,现在最重要的是设置环境变量了,我在刚开始做的时候,都没有这一步啊,整的啥都找不到,configtool也找不到,只能输入完全的路径,笨啊!
后来终于晤透了,哈哈!
首先你要知道windows怎么设置环境变量了,我的电脑/属性/高级/环境变量/,当然这谁都知道的,建立一个新变量,名字叫ECOS_REPOSITORY,值为你安装的ecos源码中的包的位置,如下:
C:/cygwin/home/ecos-2.0/packages
此外还要设置编译器的路径和configtool的路径,如下:
C:/cygwin/usr/local/arm-tools/arm-elf/bin; C:/cygwin/home/ecos-2.0/tools/bin添加到PATH系统变量的取值中。
以上几步已经是最简单的了,但是我还是发现有的网友在问关于ecos的安装不成功问题,那么只要你按我以上说的办,应该是没有不成功的可能了!
接下来我迫不及待的打开cygwin,输入configtool,出现了配置工具界面,哇!界面看起来还不错,就是不知道怎么用,一通乱点乱配后也不知道啥是啥!经过网友老大的介绍我逐渐入门,知道了build下的templates和选择配置包的类型。于是赶紧找了个386的模板,选了个默认配置包,开始build起来,天呐一堆的错误,呵呵,傻了,我的编译器的arm的,于是乎找了个arm的模板选择好了配置包,开始编译了起来。然后我还是搞不懂配置工具里面的test菜单啊,build菜单啊都是干什么用的。也不知道我build出来的东东都放在哪里,怎么用?总之是一团雾水啊!
后来我明白了,build下的library是编译生成库用的,ecos不是和linux那样生成内核映像而生成的是库,然后你的应用在去和他链接才生成可执行文件的,我还傻傻的在那找内核映像呢。build下的test是测试用的,生成测试程序后,在run菜单里面点run test,会出现选择窗,选择你要进行的测试,然后属性里面设置和目标机连结方式,串口还是网口,然后点ok,run就可以下载到你的板子上面了,不过这个是后话了,刚刚安装完环境你就想下载程序测试,那只能说异想天开了。
经验总结:
最近有不少网友mail我关于安装错误的问题,我感到很惊讶,因为我的安装一直都很顺利啊,为什么有这样的问题呢,我觉得首先应该正确的安装cygwin最好完全安装,其次就是正确的设置环境变量了。别的我只能说没有了,或者我没有碰上!
学习ecos一定不要纸上谈兵,要有块开发板,试着去移植,在debug中学习比你在学完后debug强的多的多。我一开始关于ecos内核什么的都没有去了解,而是知道大致的移植方法后就开始移植,如果你有linux移植的基础,那么你将事半功倍了
GNU交叉编译工具
作者:aaaaatiger STU.03CS 版权所有
需要安装三种工具: GNU编译器GCC, GNU调试工具GDB, GNU二进制工具(GNU Binary Utility包括GNU汇编器和连接器)
下载地址:http://gcc.gnu.org
注意:Windows 95/98/ME下不支持安装GNU工具链。
不同体系结构的表示方式:
Architecture |
TARGET |
ARM (including StrongARM, XScale) |
arm-elf |
Intel x86 |
i386-elf |
MIPS32 |
mipsisa32-elf |
PowerPC |
powerpc-eabi |
Renesas SuperH |
sh-elf |
1) 将buildroot-snapshot.tar.bz2(你得先下载)复制到C:/cygwin/usr/src下
$ cd /usr/src
2)运行cygwin的shell,在cygwin环境里用tar –xvjf解压缩buildroot-snapshot.tar.bz2
$tar xvjf buildroot-snapshot.tar.bz2
$cd buildroot
3)配置uClibc 编译系统
$make menuconfig
进入配置界面:
在第一行”Target Architecture”里选择 目标平台的体系结构,我暂时选择为ARM,你可以根据你的板子自行选择。
在第二行配置你的板子型号,我选择是S3C2410(S3C2410是三星公司一款基于ARM920T的嵌入式通用处理器)。
选择所需的交叉编译工具及其版本。我选择的是linux2.6.19.2 kernel headers,uClibc 0.9.28,binutil 2.17,gcc3.4.2,gdb6.3等
下载这些编译工具源码包到目录buildroot/dl(你当然可以在前面的选项里选择网络下载安装)。
4) 建立Uclibc交叉编译工具链。
$make
如遇到编译错误,则继续make,直至编译结束,编译完成后,将在usr/src/buildroot下生成build_arm文件夹,里面的staging_dir/bin目录下的文件便是我们的编译工具
5) 将C:/cygwin/bin下cygwin1.dll拷贝到你的buildroot目录下build_arm/staging_dir/bin里面。
6) 将编译路径加入到环境变量中:
在cygwin的shell 里执行PATH=$PATH:/usr/src/buildroot/build_arm/staging_dir/bin
这样就可以在cygwin下用arm-linux-gcc 来编译程序了,用法
$arm-linux-gcc source.c
假设我们下载了如下包:
(1) (GNU compiler collection )GCC: gcc-core-3.2.1.tar.gz gcc-g++-3.2.1.tar.gz 补丁: gcc-3.2.1-arm-multilib.patch
建议采用版本为 3.2.1的软件包 . 你可以到有 GCC area 的 mirror sites地方下载. 使用下边链接可以直接下载:
(2) Newlib: newlib-1.11.0.tar.gz
Newlib provides support for building the run-time elements of C++ within the toolchain. 建议采用最新版本的Newlib. 你可以到有 Newlib area 的 mirror sites地方下载. 下载的文件名格式必须是: newlib-version.tar.gz , 你也可以使用下面的链接下载版本为1.11.0 的安装包: newlib-1.11.0.tar.gz (4.2MB)
(3) GDB: Insight或GDB(两个选一个)。Insight是GDB的扩充,它是一个具有图形界面的GDB,在使用Insight的时候,仍然可以使用”-nw”选项以命令行的形式运行GDB, 所以建议使用Insight。安装包:insight-6.1.tar.bz2和gdb-6.6.tar.bz2
介绍GDB的地址在 GDB home page.
介绍Insight地址在 home page.
这两个都可以在有 GDB area 的 mirror sites地方下载. 下载的文件名格式必须为: insight-version.tar.bz2 或者gdb-version.tar.bz2, 点击下边连接,可以直接下载:
insight的运行界面如下:
(4) GNU二进制工具(GNU binary utilities): binutils-2.13.2.1.tar.gz, 补丁:binutils-2.13.2-2.13.2.1.patch
建议采用最新的GNU binary utilities (binutils). 你可以到有binutils area 的 mirror sites. 里下载。 你下载的文件名格式必须是 binutils-version.tar.bz2 , 或者到下边链接下载版本为 2.13.1 的安装包
注意:上面所谓的建议(翻译的结果),都是有前提条件的,要以全体能够工作为前提。我推崇采用我们举例用的安装包。
Mkdir –p /gnutools
mkdir -p /src
cd /src
bunzip2 < binutils-2.13.1.tar.bz2 | tar xvf -
gunzip < gcc-core-3.2.1.tar.gz | tar xvf -
gunzip < gcc-g++-3.2.1.tar.gz | tar xvf -
gunzip < newlib-1.11.0.tar.gz | tar xvf -
bunzip2 < insight-5.3.tar.bz2 | tar xvf -
有可能出现的问题:gunzip或者bunzip2命令使用方式过时,解决办法:
第一种方法:使用tar -xzvf XXX.tar.gz和tar jxvf XXX.tar.bz2代替
第二种方法:直接用windows下的winrar软件解压到当前目录(推荐不要用这些软件在 windows 下解压,因为这样可能会造成某些信息的丢失)
下载补丁链接:
应用补丁:
patch -p0 < binutils-2.13.1-v850-hashtable.patch
patch -p0 < gcc-3.2.1-arm-multilib.patch
patch -p0 < insight-5.3-tcl_win_encoding.patch (如果版本为5.3,但如果更高就不用了)
如果出现下边的信息:
Reversed (or divviously applied) patch detected! Assume -R? [n]
你得输入n, 表示这个patch以前被应用过了,不需要再应用。
注意:如果你使用 ARM target并采用big-endian mode, 例如:IXP425, 你必须下载下边的补丁(使之可以适应big-endian 编译):gcc-3.2.1-arm-be.patch
应用补丁: patch -p0 < gcc-3.2.1-arm-be.patch
$mv newlib-1.11.0/newlib gcc-3.2.1
$mv newlib-1.11.0/libgloss gcc-3.2.1
我们使用临时编译目录/tmp/build,编译完成之后可以将其删除; 编译产生最后安装目录/gnutools, 工具存放目录/gnutools/bin。
Before attempting to build the tools, ensure that the GNU native compiler tools directory is on the PATH and divcedes the current directory. The following build procedures will fail if . is ahead of the native tools in the PATH.
eCos 支持的目标平台 以及对应的表示方式:
Architecture |
TARGET |
ARM (including StrongARM, XScale) |
arm-elf |
Intel x86 |
i386-elf |
Matsushita AM3x |
mn10300-elf |
Motorola 68K/ColdFire |
m68k-elf |
MIPS32 |
mipsisa32-elf |
NEC V850 |
v850-elf |
NEC VR4300 |
mips64vr4300-elf |
PowerPC |
powerpc-eabi |
Renesas H8/300H |
h8300-elf |
Renesas SuperH |
sh-elf |
Toshiba TX39 |
mips-tx39-elf |
Toshiba TX49 |
mips-tx49-elf |
$mkdir -p /tmp/build/binutils
$cd /tmp/build/binutils
$/src/binutils-2.13.1/configure --target=TARGET /
--divfix=/gnutools -v 2>&1 | tee configure.out
(我们这里用TARGET表示体系结构,你可以用上面介绍的TARGE代替这个词,例如: i386-elf,出错信息在configure.out)
最后结果:
$make -w all install 2>&1 | tee make.out
(错误信息在make.out, 编译产生的二进制应用程序位于/gnutools/bin目录下)
$PATH=/gnutools/bin:$PATH ; export PATH (假设是bash shell)
$mkdir -p /tmp/build/gcc
$cd /tmp/build/gcc
$/src/gcc-3.2.1/configure --target=TARGET /
--divfix=/gnutools --enable-languages=c,c++ /
--with-gnu-as --with-gnu-ld --with-newlib /
--with-gxx-include-dir=/gnutools/TARGET/include /
-v 2>&1 | tee configure.out
(我们这里用TARGET表示体系结构,你可以用上面介绍的TARGE代替这个词,例如: i386-elf, 出错信息在configure.out)
$make -w all install 2>&1 | tee make.out
(错误信息在make.out)
$mkdir -p /tmp/build/gdb
$cd /tmp/build/gdb
$/src/insight-5.3/configure --target=TARGET /
--divfix=/gnutools -v 2>&1 | tee configure.out
(我们这里用TARGET表示体系结构,你可以用上面介绍的TARGE代替这个词,例如: i386-elf, 出错信息在configure.out)
make -w all install 2>&1 | tee make.out
工具链的可执行文件在 /gnutools/bin, 这个路径应该加入你的环境变量路径里。