手工从零开始建立ARM交叉编译工具链,并使用Eclipse+J-Link ARM-OB STM32调试S5PV210

来源:互联网 发布:域名交易平台有哪些 编辑:程序博客网 时间:2024/06/06 11:49

首先,你得有台PC

一、安装Linux系统,这里推荐Red Hat Enterprise Linux 6.3,服务器系统稳定优先;具体安装过程,请搜索即可,比较简单。

二、下载编译需要的源码包
binutils-2.23.1
expat-2.0.1
gcc-4.7.2
gdb-7.5.1
gmp-5.0.4
mpc-0.8.1
mpfr-2.4.2
newlib-1.20.0(可选)
zlib-1.2.3
glibc-2.17        (可选)

三、安装各种依赖包,因为我这里已经安装很久,都忘记了,不好意思,在运行每个源码包的configure时,如果出错,根据提示用 yum install 命令从网络下载即可;

四、开始编译
        1、编译依赖库 GMP,MPFR,EXPAT,ZLIB,MPC
                为了省事,直接写了一个sh脚本

 

export templib=$HOME/ARM/librarymkdir -p $templibexport GMP_VER=5.0.4export MPFR_VER=2.4.2export EXPAT_VER=2.0.1export ZLIB_VER=1.2.3export MPC_VER=0.8.1mkdir expat-buildcd expat-build../expat-$EXPAT_VER/configure \        --prefix=$templib \        --disable-sharedmake -j 8make installcd ..cd zlib-$ZLIB_VER./configure \        --prefix=$templib \        --staticmake -j 8make installcd ..mkdir -p gmp-buildcd gmp-build../gmp-$GMP_VER/configure \        --prefix=$templib \        --disable-sharedmake -j 8make installrm $templib/lib/*.dylibcd ..mkdir -p mpfr-buildcd mpfr-build../mpfr-$MPFR_VER/configure \        --prefix=$templib \        --disable-shared \        --with-gmp-build=../gmp-buildmake -j 8make installcd ..mkdir -p mpc-buildcd mpc-build../mpc-$MPC_VER/configure \        --prefix=$templib \        --disable-shared \        --enable-static \        --with-gmp=$templib \        --with-mpfr=$templibmake -j 8make installcd ..


 

 一般都添加—disable-shared,--enable-static参数,也修改了安装目录,主要是因为,编译出来的文件仅仅是交叉工具链使用,不必污染PC系统。
make -j 8 :这里因为本人笔记本使用4核8线程处理器,就用了多线程编译,加快编译速度,否则后面会让你等得心烦,^_^。

        2、编译binutils
        binutils 是一些辅助工具集,脚本如下

export target=arm-none-eabiexport prefix=$HOME/ARM/$targetexport templib=$HOME/ARM/libraryexport PATH="$PATH:$prefix/bin"export BINUTILS_VER=2.23.1mkdir -p binutils-buildcd binutils-buildCFLAGS="-I$templib/include" \LDFLAGS="-L$templib/lib" \../binutils-$BINUTILS_VER/configure \        --target=$target \        --prefix=$prefix \        --disable-libssp \        --disable-shared \        --disable-threads \        --enable-interwork \        --enable-multilib \        --with-gcc \        --with-gnu-as \        --with-gnu-ldmake -j 8make installcd ..


        这里一般不会出什么大问题。

        3、编译无库GCC,该GCC用于编译各种C库或者linux系统,以编译newlib为例脚本如下:

export target=arm-none-eabiexport prefix=$HOME/ARM/$targetexport templib=$HOME/ARM/libraryexport PATH="$PATH:$prefix/bin"export GCC_VER=4.7.2mkdir -p gcc-buildcd gcc-build../gcc-$GCC_VER/configure \        --target=$target \        --prefix=$prefix \        --disable-shared \        --disable-threads \        --disable-libssp \        --disable-libmudflap \        --disable-libgomp -v \        --enable-languages=c,c++ \        --enable-interwork \        --enable-multilib \        --with-gcc \        --with-gnu-ld \        --with-gnu-as \        --with-dwarf2 \        --with-newlib \        --with-headers=../newlib-$NEWLIB_VER/newlib/libc/include \        --with-mpc=$templib \        --with-mpfr=$templib \        --with-gmp=$templib \        --with-system-zlib        #--disable-shared 不编译动态链接        #--disable-threads 不支持多线程编译        #--disable-libssp 关闭缓冲溢出                mkdir -p libiberty libcpp fixincludesmake -j8 all-gccmake install-gcccd ..



        4、编译newlib

export target=arm-none-eabiexport prefix=$HOME/ARM/$targetmkdir -p $prefixmkdir -p $templibexport PATH="$PATH:$prefix/bin"export NEWLIB_VER=1.20.0mkdir -p newlib-buildcd newlib-buildmkdir -p etc../newlib-$NEWLIB_VER/configure \        --target=$target \        --prefix=$prefix \        --disable-newlib-supplied-syscalls \        --enable-interwork \        --enable-multilibmake -j 8make installcd ..



        5、编译支持newlib的gcc,这里使用3的配置,不过编译目标不一样

export prefix=$HOME/ARM/$targetexport PATH="$PATH:$prefix/bin"cd gcc-buildmake -j8make installcd ..



        6、编译GDB调试工具,该工具与Jlink的GDBServer链接进行仿真调试;

export target=arm-none-eabiexport prefix=$HOME/ARM/$targetexport templib=$HOME/ARM/librarymkdir -p $prefixmkdir -p $templibexport PATH="$PATH:$prefix/bin"export GDB_VER=7.5.1mkdir -p gdb-buildcd gdb-buildCFLAGS="-I$templib/include" \LDFLAGS="-L$templib/lib" \../gdb-$GDB_VER/configure \        --target=$target \        --prefix=$prefix \        --disable-shared \        --disable-threads \              --with-libexpat-prefix=$templib/lib \        --with-libexpatmake -j 8make installcd ..


        至此,编译完成。

五、安装Eclipse和最新的Jlink驱动
        Eclipse下载安装就不用我说了,建议Indigo Service Release 2 版本,界面看起来比较简洁,占用空间较少,4.2就不一样了,工具条各种粗,看起来不舒服……
        打开Eclipse->help->install new software
        定位到Indigo - http://download.eclipse.org/releases/indigo

搜索debug 安装如图所示的Hardware Debugging,安装完毕后重启Eclipse

 

JLINK的驱动下载Linux版本的即可

 

 六、配置一个工程示例
        1、新建一个Cross C 项目

填写工具连路径和前缀
        arm-none-eabi-
        /home/LiYong/ARM/arm-none-eabi/bin

完成

选中工程,Alt+Enter配置参数,这里增加CPU_TYPE和FPU_TYPE两个环境变量,供后面参数使用

GCC编译器这里替换参数为:
-c -mcpu=${CPU_TYPE} -mfpu=${FPU_TYPE} -marm -fdata-sections -ffunction-sections -fno-builtin -ggdb -gdwarf-2

链接参数:
        -mcpu=${CPU_TYPE} -mfpu=${FPU_TYPE} -marm -static -T../${ProjName}.ld -g3 -ggdb -gdwarf-2

汇编器参数:
        -x assembler-with-cpp -c -mcpu=${CPU_TYPE} -mfpu=${FPU_TYPE} -marm -Wall -g3 -ggdb -gdwarf-2 

OK,配置完毕

        增加连接器脚本文件,该文件名为 工程名.ld 在工程根目录:

LD脚本文件,主要有两个配置MEMORY和SECTIONS,举例

MEMORY{        IRAM                (rwx)        : ORIGIN = 0xD0020000, LENGTH = 85K}SECTIONS{        .text :        {                . = ALIGN(4);                KEEP(*(.text.ResetHandler))                *(.text)                *(.text.*)                . = ALIGN(4);                *(.rodata)                *(.rodata.*)                . = ALIGN(4);        } > IRAM        __INIT_DATA = .;                .data : AT (__INIT_DATA)        {                . = ALIGN(4);                __DATA_BEGIN = .;                *(.data)                *(.data.*)                . = ALIGN(4);                *(.fastrun)                *(.fastrun.*)                . = ALIGN(4);        } > GVAR        __DATA_END = .;                .bss :        {                . = ALIGN(4);                __BSS_BEGIN = .;                *(.bss)                *(.bss.*)                . = ALIGN(4);        } > GVAR        __BSS_END = .;                .VectorTable :        {                . = ALIGN(4);                KEEP(*(.VectorTable))                . = ALIGN(4);        } >VECTOR}


然后,就可以增减其他编译和调试了,对于M3,M4处理器来说,一般向量表都放在最前面,请将LD脚本中的VectorTable配置正确即可。

 七、调试配置
        将JLINK何目标板链接,启动J-Link GDB Server

配置调试功能
填写GDB命令:/home/LiYong/ARM/arm-none-eabi/bin/arm-none-eabi-gdb
取消使用远程调试

增加GDB初始化命令
target remote localhost:2331
monitor clrbp
monitor endian little
monitor speed 500
monitor reset
monitor sleep 100
monitor speed auto

运行命令:
break ResetHandler
break main
continue

 

调试效果如图:

原创粉丝点击