W5300E01-ARM是基于W5300的ARM功能测试评估板:

1      简介

当用户的开发环境与目标系统不同时就会用到交叉编译器. 例如,当开发基于ARM的嵌入式系统时,用户就需要在电脑上写出源代码,并用交叉编译器进行编译。编译的二进制映像是在基于ARM的系统中运行,而不是在电脑中运行。

1.1      交叉编译器的构成

有几种常用的交叉编译器 –例如 ADS/RVCT (由ARM提供) 和GNU编译器。 W5300E01-ARM支持GNU编译器,GNU编译器是由以下部分组成。

  1. binutils
  • 用来控制各种目标文件格式(.obj)的编程工具

2.  gcc

  • GNU 编译器

3.  gibc

  • 交叉编译器的程序库

1.2    安装准备

W5300E01-ARM的交叉编译器的版本是3.4.3,因此对于交叉编译器需要用3.4.x版本的GCC。 请检查你的电脑是否安装了3.4版本的GCC。

从下一章起,我们会逐步阐述交叉编译器的编译和安装的过程。请按本手册正确安装并且生成编译器。

2      源代码的下载

1.     由于系统组成原因,编译器的安装需要根(root)身份认证。在登陆进入root后,创建如下的目录:

  • mkdir /cross_tools
  • cd /cross_tools

2.     下载 ‘binutils-2.15’ 源代码

XXQ

3.     下载 ‘gcc-3.4.3’ 源代码.

4.     下载 ‘glibc-2.3.3’ 源代码.

5.     下载 ‘glibc-linuxthreads-2.3.3’源代码。 ‘glibc’包括‘linuxthreads’程序库.

3.      Linux 内核安装

为了使用Linux内核头文件,需要安装Linux内核。在开始安装之前,要安装 W5300E01-ARM提供的Linux核心代码,并生成 ‘linux/version.h’文件。

运行W5300E01-ARM包中的CD, 并且为W5300E01-ARM安装核心源代码. 如果CD-ROM是自动安装的,那么根据发行版本的不同,所显示的目录也不相同。

  • mount /dev/cdrom /media/cdrom

1.   复制核心源文件到 ‘/usr/src’ 目录下

  • cp /media/cdrom/Softare/LinuxKernel/linux-2.6.24.4-w5300e01.tar.gz /usr/src/

2.     移动到 ‘/usr/src’ 目录下,解压Linux的核心源文件

  • cd /usr/src
  • tar zxvf linux-2.6.24.4-w5300e01.tar.gz
  • cd linux-2.6.24.4-w5300e01

3.     为编译器和符号链接创建头文件

  • make prepare

4.     进行符号链接可以简化目录名称,.

  • cd ..
  • ln –s linux-2.6.24.4-w5300e01 linux

4      ‘binutils’ 的安装

1.        到工作目录下,并解压‘binutils’文件

  • cd /cross_tools/
  • tar jxvf binutils-2.15.tar.bz2
  • cd binutils-2.15

2.         为 ‘binutils’ 的编译创建目录

  • mkdir build
  • cd build

3.         配置编译环境

为了避免覆盖已有的编译程序 指定‘/usr/local/arm’作为安装目录.

  • ../configure –target=arm-linux –prefix=/usr/local/arm –program-prefix=arm-linux-

4.         编译和安装.

  • make
  • make install

5.         导出目录的路径.

  • export PATH=/usr/local/arm/bin:$PATH

5     ‘gcc’ 安装

安装 ‘gcc’ 来编译 ‘glibc’程序库和linux 内核。安装完 ‘glibc’之后,用于开发嵌入式软件的‘gcc’再次安装。

1.         移动到工作目录并解压‘gcc’压缩包

  • cd /cross_tools/
  • tar jxvf gcc-3.4.3.tar.bz2
  • cd gcc-3.4.3

2.         修改 ‘gcc/config/arm/t-linux’ 文件. (第3行)

  • < 修改前 >

TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC

  • < 修改后 >

TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer –fPIC –Dinhibit_libc–D__gthr_posix_h

3.         在 ‘gcc/config/arm/t-linux’增加一些内容

  • echo “T_CFLAGS = -Dinhibit_libc –D__gthr_posix_h” >> gcc/config/arm/t-linux

4.         为‘gcc’ 的编译创建一个目录.

  • mkdir build
  • cd build

5.         配置环境,以便编译

  • ../configure --target=arm-linux --prefix=/usr/local/arm \

--with-headers=/usr/src/linux/include --disable-shared --disable-threads \

--enable-languages="c" –nfp --with-cpu=arm9tdmi --without-fp \

--with-softfloat-support=internal

6.         编译和安装.

  • make
  • make install

7.         检查版本.

  • arm-linux-gcc –v

6      ‘glibc’ 安装

1.         移动到工作目录并解压 ‘glibc’压缩包

  • cd /cross_tools/
  • tar jxvf glibc-2.3.3.tar.bz2

2.         在 ‘glibc’ 目录下解压‘linuxhreads’

  • tar –C glibc-2.3.3 –jxvf glibc-linuxthreads-2.3.3.tar.bz2
  • cd glibc-2.3.3

3.         修改‘Makeconfig’ 文件. (第514行)

  • 修改前

gnulib := -lgcc –lgcc_eh

  • 修改后

gnulib := -lgcc

4.        修改‘csu/Makefile’文件(第107行)

  • 修改前

CFLAGS-initfini.s = -g0 –fPIC –fno-inline-functions

  • 修改后

CFLAGS-initfini.s = -O1 –g0 –fPIC –fno-inline-functions

5.         修改‘linuxthreads/Makefile’ 文件(第104行)

  • 修改前

CFLAGS-pt-initfini.s = -g0 –fPIC –fno-inline-functions

  • 修改后

CFLAGS-pt-initfini.s = -O1 –g0 –fPIC –fno-inline-functions

6.         修改‘sysdeps/generic/framestate.c’文件. (第44行)

  • 修改前

frame_state_for = fallback_frame_state_for;

  • 修改后

#ifndef __USING_SJLJ_EXCEPTIONS__

frame_state_for = fallback_frame_state_for;

#else

frame_state_for = abort;

#endif

7.         修改‘sysdeps/arm/machine-gmon.h’文件. (第 35 ~ 38行)

  • 修改前

static void mcount_internal (u_long frompc, u_long selfpc);

#define _MCOUNT_DECL(frompc, selfpc) \

static void mcount_internal (u_long frompc, u_long selfpc)

  • 修改后

#define _MCOUNT_DECL(frompc, selfpc) \

void mcount_internal (u_long frompc, u_long selfpc)

8.         修改‘sysdeps/unix/sysv/linux/arm/ioperm.c’文件(第 98 ~ 104行)

  • 修改前

static int

init_iosys (void)

{

char systype[256];

int I, n;

static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE };

static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };

  • 修改后

#include <linux/version.h>

static int

init_iosys (void)

{

char systype[256];

int I, n;

#if LINUX_VERSION_CODE < 132119

static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE };

static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };

#else

static int iobase_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_BASE };

static int ioshift_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT };

#endif

  • 创建一个目录对 ‘glibc’进行编译
  • mkdir build
  • cd build

9.        安装编译环境

  • CC=arm-linux-gcc ../configure –host=arm-linux –build=i686-pc-linux-gnu \

--prefix=/usr/local/arm/arm-linux –with-headers=/usr/src/linux/include \

--enable-add-ons=linuxthreads –enable-shared

10.      编译平台。 如果你在编译‘csu/version-info.h’文件时发生错误,打开 &修正这个文件并且重新编译。 (第1~4行)

  • make
  • 修改前

“Compiled on a Linux >>2.6.24-16-generic<< system on 2008-10-14

“Available extensions:

  • 修改后

“Compiled on a Linux >>2.6.24-16-generic<< system on 2008-10-14“

“Available extensions:“

  • make

11.        安装编译的 ‘glibc’程序库.

  • Make install

12.         检查安装的 ‘glibc’ 程序库

  • ls /usr/local/arm/arm-linux/lib

7      ‘gcc’重新安装

到这里,我们已经准备好了交叉编译器的开发环境。重新安装 ‘gcc’, 交叉编译器就完成了安装.

1.         删除以前使用过的 ‘gcc’代码

  • cd /cross_tools/
  • rm –rf gcc-3.4.3

2.         解压 ‘gcc’ 源代码.

  • tar jxvf gcc-3.4.3.tar.bz2

3.         为了防止对程序库的依赖而做以下修改

  • cd /usr/local/arm/arm-linux/lib
  • strings libc.so
  • cp libc.so libc.so.org
  • sed ‘/BUG/d’ libc.so > libc.so.new
  • mv –f libc.so.new libc.so
  • strings libpthread.so
  • cp libpthread.so libpthread.so.org
  • sed ‘/BUG/d’ libpthread.so > libpthread.so.new
  • mv –f libpthread.so.new libpthread.so

4.         创建用于‘gcc’ 编译的目录

  • cd /cross_tools/gcc-3.4.3
  • mkdir build
  • cd build

5.        配置编译环境

  • ../configure –taeget=arm-linux –prefix=/usr/local/arm –program-prefix=arm-linux- \

--with-headers=/usr/src/linux/include –with-cpu=arm9tdmi \

--with-softfloat-support=internal –enable-languages=c,c++ --nfp

6.         编译与安装

  • make
  • Make install

8      测试

1.         我们以 ‘Hello WIZnet’为例来做测试.

  • 输入 ‘/cross_tools/hello.c’

#include <stdio.h>

Int main(void)

{

printf(“Hello WIZnet\n”);

return 0;

}

2.          用新创建的交叉编译器编译 ‘hello.c’ 源代码.

  • arm-linux-gcc –o hello hello.c
  • file hello

3.         在连接‘W5300E01-ARM’ 板和PC以后, 执行 ‘minicom’。然后,接通‘W5300E01-ARM’ 板电源。 想更多了解关于‘minicom’ 配置的详细信息, 请参考 ‘W5300E01-ARM用户手册’, ‘4.1.2 Booting Check at the Linux’的部分.

  • minicom

4.         系统启动之后,登入 ‘root’ 把‘hello’ 发送到W5300串口中

  • root
  • ‘Ctrl’ + ‘a’,’s’
  • 选择 ‘Zmodem’
  • 移动到 ‘/cross_tools’
  • 用空格键选择‘hello’文件
  • 点击回车键把文件从PC发送到‘W5300E01-ARM’

5.         在‘W5300E01-ARM’板中执行 ‘hello’

  • chmod 755 hello
  • ./hello

感谢阅读!

更多信息与我们交流:

WIZnet邮箱:wiznetbj@wiznet.co.kr

W5300E01-ARM 交叉编译器(Cross Compiler)用户手册的更多相关文章

  1. 安装ARM交叉编译器

    1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Li ...

  2. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

    命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPSvendor – 工具链提供商os – 目标操作系统 ...

  3. 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

    原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...

  4. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别【转】

    转自:https://www.cnblogs.com/deng-tao/p/6432578.html 博客来之于:  http://www.veryarm.com/296.html 交叉编译工具链的命 ...

  5. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别

    博客来之于:  http://www.veryarm.com/296.html 命名规则: 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - ...

  6. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别

    转自 https://www.cnblogs.com/linuxbo/p/4297680.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eab ...

  7. Ubuntu上Xilinx ARM交叉编译器安装

    1,Windows中下载交叉编译器 2,在ubuntu中创建zedboard目录,并将交叉编译器复制进来 3,将该交叉编译器设置成可执行程序 chmod  a+x  xilinx-2011.09-50 ...

  8. arm交叉编译器科普

    交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 ea ...

  9. ubuntu 10.04 安装arm交叉编译器

    家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...

随机推荐

  1. UVA 10375 Choose and divide

    n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...

  2. MYSQL delete 从多人表中删除

    语法 1. delete table_list_A from table_list_B where bool_expression; 从delete_table_list_A 删除 bool expr ...

  3. 一步一步学python(七) - 更加抽象

    1.面向对象 面向对象程序设计中的术语对象基本上可以看做数据以及由一系列可以存取这些数据方法所组成的集合. 2.多态 对不同的类的对象使用同样的操作 2.1 多态和方法 程序得到了对象可能有多种形状, ...

  4. java 编码 UTF-8、ISO-8859-1、GBK 【转】

    Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意 ...

  5. Inno Setup技巧[界面]添加和自定义左下角标签

    原文 http://blog.sina.com.cn/s/blog_5e3cc2f30100cc49.html 本文介绍添加和自定义“左下角标签”的方法. 界面预览: Setup技巧[界面]添加和自定 ...

  6. 字符编码介绍及java中的应用

    字符编码,就是对日常的控制符号.文字和常用符号的二进制表示.为了准确的表示如何编号,怎么生产八位字节流,Unicode Technical Report (UTR) #17提出现代编码模型的5个层次: ...

  7. JQuery中html()方法的注意事项

    .html方法当不传参数时用来获取元素的html内容, return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.rep ...

  8. myeclipse中自己手动配置maven

    第一步,配置myeclipse的jdk,因为myeclipse默认的是运行在jre之上,而maven是在jdk之上 第二步,配置maven:

  9. 远程访问数据库查询数据量一大就Hang

    最近刚为客户升级了一套Oracle Database,一切进展顺利,眼看就要顺利验收时,发现有部分客户端软件连接新版本数据库时会Hang,问题非常诡异. 系统环境如下 升级前的环境OS:Windows ...

  10. OC——封装(初级与高级)

    所谓的封装,就是通过定义方法或者函数去操作成员属性或者成员变量,而不是直接通过指针方式去操作.借此达到提高代码安全性,代码可行性以及代码执行效率的目的. 1:初级封装,对成员变量进行封装. #impo ...