ecos自学历程(一)环境安装篇

前言:

开篇之季,我先说一下我的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

 

               第一小节采用软件安装方式

参考网站:http://www.macraigor.com/full_gnu.htm

下载gnutools-arm-elf-2.05.exe 或者gnutools-mips-elf-2.05.exe 这类的应用文件之后,就可以立即安装。

缺点: 它要求Cygwin安装在C

网上使用例子:它安装后的GCC3.4.0.写了个例子程序来试了一下,只包含crt0main,结果发现可在AXD中进行源码的调试。

但是用此来build redboot时,却发现错误,更改了 cflag:-mcpu=arm7tdmi -c -gdwarf-2
   ldflag:-mcpu=arm7tdmi -g -lgcc -nostdlib -nostartfiles -gdwarf-2
仍然有下列错误
arm-elf-gcc : -r : linker input file unused because linking not done.
arm-elf-gcc :--whole-archive:linker input file unused

错误原因:去掉-c选项,否则不能链接。

               第二小节 采用buildroot

参照网页:http://buildroot.uclibc.org/

1)  buildroot-snapshot.tar.bz2(你得先下载)复制到C:/cygwin/usr/src

   $ cd /usr/src

2)运行cygwinshell,在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/bincygwin1.dll拷贝到你的buildroot目录下build_arm/staging_dir/bin里面。

6)     将编译路径加入到环境变量中:

cygwinshell 里执行PATH=$PATH:/usr/src/buildroot/build_arm/staging_dir/bin

  这样就可以在cygwin下用arm-linux-gcc 来编译程序了,用法
$arm-linux-gcc source.c

 

第三小节 采用eCos主页介绍的方法

1)需要下载的安装包介绍

  • GNU binary utilities - including the GNU assembler (as) and GNU linker (ld)
  • GNU compiler collection core - core GCC functionality including the C compliler (gcc)
  • GNU compiler collection g++ - the GCC C++ compiler (g++)
  • Newlib - a C library intended for use with embedded systems
  • GDB - the GNU debugger

假设我们下载了如下包:

(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地方下载. 使用下边链接可以直接下载:

  • gcc-core-3.2.1.tar.gz (12.8MB)
  • gcc-g++-3.2.1.tar.gz (2.5MB)

 

(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: InsightGDB(两个选一个)InsightGDB的扩充,它是一个具有图形界面的GDB,在使用Insight的时候,仍然可以使用”-nw”选项以命令行的形式运行GDB, 所以建议使用Insight。安装包:insight-6.1.tar.bz2gdb-6.6.tar.bz2

介绍GDB的地址在 GDB home page.

介绍Insight地址在 home page.

这两个都可以在有 GDB area mirror sites地方下载. 下载的文件名格式必须为: insight-version.tar.bz2 或者gdb-version.tar.bz2,  点击下边连接,可以直接下载:

  • gdb-6.6.tar.bz2 (10.7MB)
  • insight-6.1.tar.bz2 (17.0MB)

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 的安装包

  • binutils-2.13.1.tar.bz2 (9.5MB)

注意:上面所谓的建议(翻译的结果),都是有前提条件的,要以全体能够工作为前提。我推崇采用我们举例用的安装包。

2)安装前的准备工作

  1. 建立/src目录,将安装包都放入这个目录下:

          Mkdir –p /gnutools

mkdir -p /src

 

  1. 解压方式:bunzip2 < XXXX.tar.bz2 tar xvf- 或者:gunzip <XXX.tar.gz|tar xvf-

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.gztar jxvf  XXX.tar.bz2代替

第二种方法:直接用windows下的winrar软件解压到当前目录(推荐不要用这些软件在 windows 下解压,因为这样可能会造成某些信息的丢失)

  1. 补丁使用方式:patch –p0<XXXX.patch

下载补丁链接:

  1.  
    • binutils-2.13.1-v850-hashtable.patch
    • gcc-3.2.1-arm-multilib.patch
    • insight-5.3-tcl_win_encoding.patch (如果版本为5.3,但如果更高就不用了)

应用补丁:

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

 

  1. 最后必须要将newlib-1.11.0的内容移至gcc-3.2.1目录下:

$mv newlib-1.11.0/newlib  gcc-3.2.1

$mv newlib-1.11.0/libgloss  gcc-3.2.1

3)建立交叉编译工具链

我们使用临时编译目录/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

  1. Configure the GNU binary utilities:

$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

最后结果:

  1. Build and install the GNU binary utilities:

$make -w all install 2>&1 | tee make.out

 (错误信息在make.out, 编译产生的二进制应用程序位于/gnutools/bin目录下)

 

  1. Configure GCC, ensuring that the GNU binary utilities are at the head of the PATH:

$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

 

  1. Build and install GCC:

$make -w all install 2>&1 | tee make.out

(错误信息在make.out)

 

  1. Configure Insight: (建议安装insight, 你也可以安装gdb)

$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

 

  1. Build and install Insight:

make -w all install 2>&1 | tee make.out

工具链的可执行文件在 /gnutools/bin 这个路径应该加入你的环境变量路径里。

 

 

你可能感兴趣的:(gcc,Build,工具,compiler,编译器,linker)