搜索
bottom↓
回复: 17

手工建立ARM交叉编译工具链,使用Eclipse+J-Link ARM-OB STM32调试A8

[复制链接]

出0入0汤圆

发表于 2013-2-26 18:03:44 | 显示全部楼层 |阅读模式
手工从零开始建立ARM交叉编译工具链,并使用Eclipse+J-Link ARM-OB STM32调试S5PV210

一、安装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/library
mkdir -p $templib

export GMP_VER=5.0.4
export MPFR_VER=2.4.2
export EXPAT_VER=2.0.1
export ZLIB_VER=1.2.3
export MPC_VER=0.8.1


mkdir expat-build
cd expat-build
../expat-$EXPAT_VER/configure \
        --prefix=$templib \
        --disable-shared
make -j 8
make install
cd ..

cd zlib-$ZLIB_VER
./configure \
        --prefix=$templib \
        --static
make -j 8
make install
cd ..

mkdir -p gmp-build
cd gmp-build
../gmp-$GMP_VER/configure \
        --prefix=$templib \
        --disable-shared
make -j 8
make install
rm $templib/lib/*.dylib
cd ..

mkdir -p mpfr-build
cd mpfr-build
../mpfr-$MPFR_VER/configure \
        --prefix=$templib \
        --disable-shared \
        --with-gmp-build=../gmp-build
make -j 8
make install
cd ..

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

        2、编译binutils
        binutils 是一些辅助工具集,脚本如下
export target=arm-none-eabi
export prefix=$HOME/ARM/$target
export templib=$HOME/ARM/library
export PATH="$PATH:$prefix/bin"

export BINUTILS_VER=2.23.1

mkdir -p binutils-build
cd binutils-build
CFLAGS="-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-ld
make -j 8
make install
cd ..

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

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

export target=arm-none-eabi
export prefix=$HOME/ARM/$target
export templib=$HOME/ARM/library
export PATH="$PATH:$prefix/bin"

export GCC_VER=4.7.2


mkdir -p gcc-build
cd 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 fixincludes
make -j8 all-gcc
make install-gcc
cd ..

        4、编译newlib
export target=arm-none-eabi
export prefix=$HOME/ARM/$target
mkdir -p $prefix
mkdir -p $templib
export PATH="$PATH:$prefix/bin"

export NEWLIB_VER=1.20.0

mkdir -p newlib-build
cd newlib-build
mkdir -p etc
../newlib-$NEWLIB_VER/configure \
        --target=$target \
        --prefix=$prefix \
        --disable-newlib-supplied-syscalls \
        --enable-interwork \
        --enable-multilib
make -j 8
make install
cd ..

        5、编译支持newlib的gcc,这里使用3的配置,不过编译目标不一样
export prefix=$HOME/ARM/$target
export PATH="$PATH:$prefix/bin"

cd gcc-build
make -j8
make install
cd ..

        6、编译GDB调试工具,该工具与Jlink的GDBServer链接进行仿真调试;
export target=arm-none-eabi
export prefix=$HOME/ARM/$target
export templib=$HOME/ARM/library
mkdir -p $prefix
mkdir -p $templib
export PATH="$PATH:$prefix/bin"

export GDB_VER=7.5.1

mkdir -p gdb-build
cd gdb-build
CFLAGS="-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-libexpat
make -j 8
make install
cd ..

        至此,编译完成。

五、下载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
OK

        六、配置一个工程示例
        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配置正确即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-2-26 18:18:09 | 显示全部楼层
七、调试配置
        将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

调试效果如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-2-26 18:24:33 | 显示全部楼层
杀个发!!
支持,不错,哈哈!需要 JLINK ARM-OB STM32 可以点击我的签名啊,哈哈。

出0入0汤圆

发表于 2013-2-26 18:26:12 | 显示全部楼层
ARM-0B还真是无所不能啊!!

出0入0汤圆

 楼主| 发表于 2013-2-26 18:28:13 | 显示全部楼层
aureole 发表于 2013-2-26 18:24
杀个发!!
支持,不错,哈哈!需要 JLINK ARM-OB STM32 可以点击我的签名啊,哈哈。 ...

呵呵,我的JLINK-OB 时我自己做的,PCB时AMO这里打的,三线的不行哦

出0入0汤圆

发表于 2013-2-26 18:37:13 | 显示全部楼层
xivisi 发表于 2013-2-26 18:28
呵呵,我的JLINK-OB 时我自己做的,PCB时AMO这里打的,三线的不行哦

出0入0汤圆

 楼主| 发表于 2013-2-26 19:28:40 | 显示全部楼层
zgxcom123 发表于 2013-2-26 18:26
ARM-0B还真是无所不能啊!!

至少 有警告 不够intelligence    速度没V8快

出0入0汤圆

发表于 2013-2-28 15:46:48 | 显示全部楼层
跟着学习玩玩来

出0入0汤圆

发表于 2013-3-1 00:20:00 | 显示全部楼层
这个必须顶一下

出0入0汤圆

发表于 2013-3-1 02:01:02 来自手机 | 显示全部楼层
这个要顶

出0入0汤圆

发表于 2013-3-1 07:19:00 来自手机 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2013-3-13 16:01:53 | 显示全部楼层
  高手风范,学习啦。

出0入0汤圆

发表于 2014-2-6 00:57:11 | 显示全部楼层
mark 手工建立ARM交叉编译工具链,使用Eclipse+J-Link ARM-OB STM32调试A8

出0入0汤圆

发表于 2014-3-17 17:16:31 | 显示全部楼层
高手~~~~~~·

出0入0汤圆

发表于 2014-4-16 14:29:43 | 显示全部楼层
   顶一下

出0入4汤圆

发表于 2014-7-3 11:41:31 | 显示全部楼层
arm-none-eabi-gcc编译A8配置参数和LD脚本, 赞!

出0入0汤圆

发表于 2014-7-3 13:54:06 | 显示全部楼层
好东西啊,不错很好学习

出0入0汤圆

发表于 2014-11-1 01:14:39 | 显示全部楼层
学习学习~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 11:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表