Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用啥 gcc?

Posted

技术标签:

【中文标题】Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用啥 gcc?【英文标题】:Ubuntu: What gcc to use when crosscompiling for the STM32 (Cortex-M3)?Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用什么 gcc? 【发布时间】:2010-12-02 22:09:45 【问题描述】:

我正在尝试开始使用 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 模拟器 -mcpu=cortex-m3 -mthumb

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

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

http://www.eluaproject.net/en_tc_cortex.html http://fanplastic.org/gcc-for-arm-eabi/

【问题讨论】:

见***.com/questions/1523810/… Buildroot 适用于更大的 arm:s,例如 ARM9、ARM11、Cortex-A8(如果您想在其上运行 Linux)。但不适用于 MCU 风格的 Cortex-M3(更像 ARM7)。不过还是谢谢。 在我们重组 eLua 站点后,您的链接不再正确,您可以在此处找到相同的页面:eluaproject.net/en_tc_cortex.html FYI,我有一些单独的说明可用于构建 CodeSourcery 的 64 位工具链-bit 在 OS X 上。使它们也适用于 Linux 可能并不难:fanplastic.org/gcc-for-arm-eabi 另外值得注意的是,由于 Ubuntu 64 位安装可以运行 32 位应用程序,CodeSourcery 的工具在您的 Ubuntu/AMD64 安装上运行应该没有问题。 (免责声明:我是 CodeSourcery 的员工。) 感谢有关 AMD64 的说明,我用信息更新了问题。 【参考方案1】:

由于这个答案变得有点“不可读”, 我使用此信息创建了一个页面。

http://fun-tech.se/stm32/gcc/index.php

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

http://eluaproject.dreamhosters.com/en/Building_GCC_for_Cortex http://www.esden.net/blog/2009/02/26/how-to-build-arm-gnu-gcc-toolchain-for-mac-os-x/

首先是一些基本的东西

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

新库

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

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

【讨论】:

非常感谢您发布此信息。多年来,我一直在努力研究如何构建 Cortex M3 芯片。我正在浏览我最喜欢的旧问题并找到了这个问题,我将基本上将其用作我的所有参考。再次感谢!

以上是关于Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用啥 gcc?的主要内容,如果未能解决你的问题,请参考以下文章

stm32启动过程cortex-m3架构堆栈代码位置编译汇编链接分析

在Linux环境下使用JLink一键编译烧录调试包括但不限于Cortex-M芯片,如STM32SAMK60等

在Linux环境下使用JLink一键编译烧录调试包括但不限于Cortex-M芯片,如STM32SAMK60等

在Linux环境下使用JLink一键编译烧录调试包括但不限于Cortex-M芯片,如STM32SAMK60等

STM32 Cortex M0 上的 ThreadX 内存分配

Cortex-M3之STM32嵌入式系统设计的内容简介