Ubuntu:在为STM32(Cortex-M3)进行交叉编译时使用什么gcc?

Joh*_*han 9 ubuntu gcc arm cortex-m3 stm32

我正在尝试开始使用STM32(Cortex-M3),我的计划是从Ubuntu(9.04/AMD64)开始使用它.

首先,我得到了Olimex stm32-h103标题板和Olimex ARM-USB-OCD jtag,并且我可能会使用OpenOCD,gcc和Eclipse.

但是现在我正在研究使用什么版本的gcc以及如何设置它以便能够交叉编译代码.

似乎有一些手臂项目,但我不知道从什么开始,有人可以推动我朝着正确的方向前进吗?

谢谢约翰


更新:似乎几乎是什么,我想从CodeSourcery的,但他们似乎把重点放在IA32和AMD64没有.

但是在支持的设备中,我找到了Cortex-M3

  • ARM EABI,ARM M-profile Simulator -mcpu = cortex-m3 -mthumb

更新:有可能在AMD64上安装IA32,因此标记的答案可能已经过时了.

更新:找到有关Cortex-M3的交叉编译的链接.

Joh*_*han 6

由于这个答案变得有点"不可读",我创建了一个包含此信息的页面.



这是基于这两个指南的免费解释,但我不得不更改版本并应用一些补丁来使其工作.

首先是一些基本的东西

sudo apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo build-essential
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个存放工具链的地方(将cj.users改为任何对你有用的东西).

export TOOLPATH=/usr/local/cross-cortex-m3
sudo mkdir /usr/local/cross-cortex-m3
sudo chown cj.users /usr/local/cross-cortex-m3
Run Code Online (Sandbox Code Playgroud)

在Binutils

wget http://ftp.gnu.org/gnu/binutils/binutils-2.19.tar.bz2
tar -xvjf binutils-2.19.tar.bz2
cd binutils-2.19
mkdir build
cd build
../configure --target=arm-none-eabi --prefix=$TOOLPATH --enable-interwork --enable-multilib --with-gnu-as --with-gnu-ld --disable-nls
Run Code Online (Sandbox Code Playgroud)

根据此信息将补丁应用于tc-arm.c http://sourceware.org/bugzilla/show_bug.cgi?id=7026/http://sourceware.org/bugzilla/attachment.cgi?id=3058&action=view

vi ../gas/config/tc-arm.c


make 
make install
export PATH=${TOOLPATH}/bin:$PATH
cd ../..
Run Code Online (Sandbox Code Playgroud)

GCC

wget ftp://ftp.sunet.se/pub/gnu/gcc/releases/gcc-4.3.4/gcc-4.3.4.tar.bz2
tar -xvjf gcc-4.3.4.tar.bz2
cd gcc-4.3.4
mkdir build
cd build
../configure --target=arm-none-eabi --prefix=$TOOLPATH --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --without-headers --disable-shared --with-gnu-as --with-gnu-ld
make all-gcc
make install-gcc
cd ../..
Run Code Online (Sandbox Code Playgroud)

Newlib

wget ftp://sources.redhat.com/pub/newlib/newlib-1.17.0.tar.gz
wget http://www.esden.net/content/embedded/newlib-1.14.0-missing-makeinfo.patch
tar -xvzf newlib-1.17.0.tar.gz
cd newlib-1.17.0
Run Code Online (Sandbox Code Playgroud)

然后我想用这样的东西应用补丁(但它不起作用)

patch -p1 -i ../newlib-1.14.0-missing-makeinfo.patch
Run Code Online (Sandbox Code Playgroud)

所以我手动打开它并根据补丁编辑了6651行.

vi configure

mkdir build
cd build
../configure --target=arm-none-eabi --prefix=$TOOLPATH --enable-interwork --disable-newlib-supplied-syscalls --with-gnu-ld --with-gnu-as --disable-shared
make CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer -mcpu=cortex-m3 -mthumb -D__thumb2__ -D__BUFSIZ__=256" CCASFLAGS="-mcpu=cortex-m3 -mthumb -D__thumb2__"
make install
cd ../..
Run Code Online (Sandbox Code Playgroud)

更多gcc

cd gcc-4.3.4/build
make CFLAGS="-mcpu=cortex-m3 -mthumb" CXXFLAGS="-mcpu=cortex-m3 -mthumb" LIBCXXFLAGS="-mcpu=cortex-m3 -mthumb" all
make install
Run Code Online (Sandbox Code Playgroud)

总结

现在我只添加一些路径到〜/ .bashrc

#STM32 gcc...
export TOOLPATH=/usr/local/cross-cortex-m3
export PATH=${TOOLPATH}/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

我应该为下一步做好准备......