手工从零开始建立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
调试效果如图:
- 手工从零开始建立ARM交叉编译工具链,并使用Eclipse+J-Link ARM-OB STM32调试S5PV210
- Eclipse stm32 编辑 编译 下载 调试 ( ST-Link J-Link ) 环境搭建 (使用GNU ARM Eclipse)
- arm gcc交叉编译工具链建立
- 全手工制作arm-linux交叉编译工具链《二》
- 全手工制作arm-linux交叉编译工具链《一》
- 全手工制作arm-linux交叉编译工具链
- 全手工制作arm-linux交叉编译工具链《一》
- 全手工制作arm-linux交叉编译工具链《二》
- 建立GNU/Linux ARM交叉编译工具链
- Ubuntu 下建立ARM交叉编译工具链(转)
- 用crosstool-ng建立arm交叉编译工具链
- 用crosstool-ng建立arm交叉编译工具链
- ARM-Linux交叉编译工具链的建立
- arm 交叉工具链编译
- ARM交叉编译工具链
- ARM交叉编译工具链
- 【转】使用J-Link GDB Server + Eclipse CDT进行ARM程序调试
- 编译 交叉编译工具链(ARM)
- Loadrunner11无法打开浏览器问题
- 用javascript获取屏幕高度和宽度等信息
- 页面禁止复制和粘贴的代码
- 查询优化器内核剖析第八篇:执行引擎之数据访问操作---Seek与Lookup
- UITableViewCell 上的ImageView响应
- 手工从零开始建立ARM交叉编译工具链,并使用Eclipse+J-Link ARM-OB STM32调试S5PV210
- 查询优化器内核剖析第九篇:执行引擎之数据访问操作---Bookmark Lookup
- ARC 和 非ARC 下 oc对象和core Foundation对象的转换
- 项目总结SpringMVC+hibernate框架 web.xml 分析(2)
- JSP 连接MySQL配置与使用
- 本来只是个私人吐槽的地方,惨遭陆渝高端黑,围观群众散了吧...
- 机试教程:时间问题
- fastcgi
- 线程与信号