Убунту:Какой gcc использовать при кросс-компиляции для STM32 (Cortex-M3)?
Вопрос
Я пытаюсь начать работу с STM32 (Cortex-M3), и мой план — заставить это работать в Ubuntu (9.04/AMD64).
Для начала я получил Олимекс stm32-h103 Заголовок и Олимекс ARM-USB-OCD jtag, и помимо этого я, вероятно, буду использовать OpenOCD, gcc и Eclipse.
Но сейчас я изучаю, какую версию gcc использовать и как ее настроить, чтобы иметь возможность кросс-компиляции кода.
Кажется, есть некоторые проекты рук, но я не знаю, с чего начать, может ли кто -нибудь подтолкнуть меня в правильном направлении?
Спасибо, Йохан
Обновлять:Кажется, это почти то, что я хочу от источник кода, но они, кажется, сосредоточены на IA32, а не на AMD64.
Однако в поддерживаемых устройствах я нахожу Cortex-M3.
- ARM EABI, симулятор ARM M-профиля -mcpu=cortex-m3 -mthumb
Обновлять:Существует возможность установить IA32 на AMD64, поэтому, возможно, отмеченный ответ уже устарел.
Обновлять:Нашел эту ссылку о кросс-компиляции для Cortex-M3.
Решение
Поскольку этот ответ стал немного «нечитаемым», я создал страницу с этой информацией.
Это бесплатная интерпретация, основанная на этих двух руководствах, но мне пришлось изменить версии и применить некоторые исправления, чтобы она заработала.
- 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
Бинутилс
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
Примените патч к 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 ../..
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
И я должен быть готов к следующему шагу...