Ubuntu: 在为STM32(Cortex-M3)进行交叉编译时,应该使用哪个gcc?

9
我正在尝试开始使用STM32(Cortex-M3),我的计划是在Ubuntu(9.04 / AMD64)上使其工作。
首先,我购买了Olimex stm32-h103扩展板和Olimex ARM-USB-OCD jtag,并且还打算使用OpenOCD、gcc和Eclipse。
但是现在我正在研究要使用哪个版本的gcc以及如何设置它来进行交叉编译代码。
似乎有一些ARM项目可供选择,但我不知道从何开始,有人能给我指点一下吗?
谢谢 Johan

更新: 看起来codesourcery几乎有我想要的东西, 但他们似乎专注于IA32而不是AMD64。

然而,在支持的设备中,我找到了Cortex-M3

  • ARM EABI,ARM M-profile模拟器 -mcpu=cortex-m3 -mthumb

更新: 在AMD64上安装IA32是可能的, 所以也许标记的答案已经过时了。

更新: 找到了关于Cortex-M3交叉编译的链接。


请参见 http://stackoverflow.com/questions/1523810/toolchain-for-any-arm-processor/1523907#1523907。 - themis
Buildroot适用于更大的ARM处理器,例如ARM9、ARM11和Cortex-A8(如果您想在其上运行Linux)。但不适用于MCU风格的Cortex-M3(更像是ARM7)。无论如何,还是感谢。 - Johan
1
您提供的链接已经过时,因为我们重新构建了eLua网站,您可以在此处找到相同的页面:http://www.eluaproject.net/en_tc_cortex.html顺便说一下,我有一些单独的说明,适用于在OS X上构建CodeSourcery的64位工具链。 将它们调整为在Linux上运行可能并不太难:http://fanplastic.org/gcc-for-arm-eabi/ - James Snyder
值得注意的是,由于Ubuntu 64位安装可以运行32位应用程序,因此CodeSourcery的工具在您的Ubuntu/AMD64安装上运行时不应该有任何问题。(免责声明:我是CodeSourcery的员工。) - Brooks Moses
感谢关于AMD64的说明,我已经更新了问题的信息。 - Johan
1个回答

6

由于这个答案变得有点"难以阅读",我创建了一个页面来展示这些信息。



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

首先是一些基本知识

sudo apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo build-essential

然后我创建了一个存储工具链的位置(将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

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

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

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


make 
make install
export PATH=${TOOLPATH}/bin:$PATH
cd ../..

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 ../..

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

然后我想使用类似这样的方式应用补丁(但它没有起作用)
patch -p1 -i ../newlib-1.14.0-missing-makeinfo.patch

所以我手动打开了它,并根据补丁编辑了第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 ../..

更多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

总结

现在我只是将一些路径添加到了我的~/.bashrc文件中。

#STM32 gcc...
export TOOLPATH=/usr/local/cross-cortex-m3
export PATH=${TOOLPATH}/bin:$PATH

我应该准备好迈出下一步...


1
非常感谢您发布这篇文章。我已经尝试了很长时间如何为Cortex M3芯片构建程序。我正在查看我的旧收藏问题,并找到了这个问题,我将把它作为我的参考。再次感谢! - Bojangles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接