zoukankan      html  css  js  c++  java
  • W5300E01-ARM 交叉编译器(Cross Compiler)用户手册

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

    W5300E01-AVR



    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

    W5300E01-AVR1



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

    W5300E01-AVR2

     XXQ

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

    W5300E01-AVR3 

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

    W5300E01-AVR4

    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

    W5300E01-AVR6


    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-

    W5300E01-AVR7


    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

    W5300E01-AVR8 

    6.         编译和安装.

    • make
    • make install

    7.         检查版本.

    • arm-linux-gcc –v

    W5300E01-AVR9

    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

    W5300E01-AVR10

    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

    W5300E01-AVR11


    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

    W5300E01-AVR12


    W5300E01-AVR5

    6.         编译与安装

    • make
    • Make install 

    8      测试

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

    • 输入 ‘/cross_tools/hello.c’

    #include <stdio.h> 

    Int main(void)

    {

      printf(“Hello WIZnet ”);

      return 0;

    }

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

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

    W5300E01-AVR13

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

    • minicom

    W5300E01-AVR14

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

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

    W5300E01-AVR15

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

    • chmod 755 hello
    • ./hello    

          W5300E01-AVR16   

    感谢阅读!



    更多信息与我们交流:

    WIZnet邮箱:wiznetbj@wiznet.co.kr

  • 相关阅读:
    NGINX学习(二)--nginx配置文件详解
    NGINX学习(一)--nginx的安装与启动
    Linux服务器参数查看命令
    记录工作中遇到的那些坑(一)--NGINX配置worker_connections
    Mysql视图触发器函数事务
    pymsql
    装饰器模型
    多进程属性和方法
    mysql
    FTP简单的大文件传输
  • 原文地址:https://www.cnblogs.com/james1207/p/3325079.html
Copyright © 2011-2022 走看看