W5300E01-ARM 交叉编译器(Cross Compiler)用户手册
W5300E01-ARM是基于W5300的ARM功能测试评估板:

1 简介
当用户的开发环境与目标系统不同时就会用到交叉编译器. 例如,当开发基于ARM的嵌入式系统时,用户就需要在电脑上写出源代码,并用交叉编译器进行编译。编译的二进制映像是在基于ARM的系统中运行,而不是在电脑中运行。
1.1 交叉编译器的构成
有几种常用的交叉编译器 –例如 ADS/RVCT (由ARM提供) 和GNU编译器。 W5300E01-ARM支持GNU编译器,GNU编译器是由以下部分组成。
- 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)用户手册的更多相关文章
- 安装ARM交叉编译器
1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Li ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPSvendor – 工具链提供商os – 目标操作系统 ...
- 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别【转】
转自:https://www.cnblogs.com/deng-tao/p/6432578.html 博客来之于: http://www.veryarm.com/296.html 交叉编译工具链的命 ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别
博客来之于: http://www.veryarm.com/296.html 命名规则: 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别
转自 https://www.cnblogs.com/linuxbo/p/4297680.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eab ...
- Ubuntu上Xilinx ARM交叉编译器安装
1,Windows中下载交叉编译器 2,在ubuntu中创建zedboard目录,并将交叉编译器复制进来 3,将该交叉编译器设置成可执行程序 chmod a+x xilinx-2011.09-50 ...
- arm交叉编译器科普
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 ea ...
- ubuntu 10.04 安装arm交叉编译器
家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...
随机推荐
- 关于left join连接查询 两张表里有同名字段的问题
左连接查询在开发中很常用,但有个问题常常会遇到,两个表中有同名字段时,比如左右表都有一个id字段,会造成查询结果中左表的id值被右表的id值覆盖掉(大部分php框架都是这个效果),而且还不会报错,容易 ...
- uva 10304 - Optimal Binary Search Tree 区间dp
题目链接 给n个数, 这n个数的值是从小到大的, 给出个n个数的出现次数. 然后用他们组成一个bst.访问每一个数的代价是这个点的深度*这个点访问的次数. 问你代价最小值是多少. 区间dp的时候, 如 ...
- I/O事件
I/O事件 最近在研究tornado和gevent,里面涉及了非阻塞I/O.在了解非阻塞I/O之前,需要先了解I/O事件 我们知道,内核有缓冲区.假设有两个进程A,B,进程B想读进程A写入的东西(即进 ...
- 寻找最大数--nyoj题目448
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
- 一个简化的printf函数
<C和指针>第7章第5道编程题: 实现一个简化的printf函数,它能够处理%d.%f.%s 和 %c 格式码,根据ANSI标准的原则,其他格式码的行为是未定义的.你可以假定已经存在函数 ...
- 转载【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 原文链接 http://www.cnblogs.com/monodin/p/3866441.html 1.使用场景 ViewPager+ ...
- mobile端
1.技术解决方案--------->(widget/event/ajax)->function->data------>XMLHttpRequest----->Serve ...
- Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
- 经典CSS颜色混合模式
转自:http://www.webhek.com/css-blend-mode/ 注意:只有使用最新版的谷歌浏览器.火狐浏览器,才能正确的显示本文中的演示. Photoshop里最没有用处的一种功能— ...
- Centos下编译Linux内核
Linux内核编译是一件简单却费事的事.但是独立的编译linux内核会帮助你很好的理解Linux内核的工作机理. 首先编译linux内核我们需要在当前linux操作系统下安装gcc编译器,因为我是Ce ...