13,009
回編集
213行目: | 213行目: | ||
<br><br> | <br><br> | ||
== GCC | == GCC ARMツールチェーン == | ||
==== GCC ARMツールチェーンとは ==== | |||
Cortex-A向けGNUツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br> | Cortex-A向けGNUツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br> | ||
これは、Cortex-Aファミリのプロセッサを対象としており、Arm Aプロファイルアーキテクチャを実装している。<br> | これは、Cortex-Aファミリのプロセッサを対象としており、Arm Aプロファイルアーキテクチャを実装している。<br> | ||
このツールチェーンにはGCCが含まれており、WindowsおよびLinux向けに無償で提供されている。<br> | このツールチェーンにはGCCが含まれており、WindowsおよびLinux向けに無償で提供されている。<br> | ||
<br> | <br> | ||
==== GCC ARMツールチェーンのダウンロード ==== | |||
[https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ARMの公式Webサイト]から、ユーザの環境に合うバージョンをダウンロードする。<br> | [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ARMの公式Webサイト]から、ユーザの環境に合うバージョンをダウンロードする。<br> | ||
GCC ARMを解凍して、適切なディレクトリに配置する。 | GCC ARMを解凍して、適切なディレクトリに配置する。<br> | ||
<br> | <br> | ||
Raspberry Pi向けにクロスコンパイルする場合は、下表を参考にして、ユーザの環境に合ったGCC ARMツールチェーンをダウンロードする。<br> | |||
https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br> | |||
<center> | |||
{| class="wikitable" style="background-color:#fefefe;" | |||
|+ 表. GCC ARMツールチェーンのダウンロード | |||
|- | |||
! style="background-color:#00ffff;" | Raspberry Piの種類 | |||
! style="background-color:#00ffff;" | Raspbian Stretch(32-bit) | |||
! style="background-color:#00ffff;" | Raspbian Buster(32-bit) | |||
|- | |||
| Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+ | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-6.3.0-pi_0-1.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0] | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-8.3.0-pi_0-1.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0] | |||
|- | |||
| Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-6.3.0-pi_2-3.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0] | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-8.3.0-pi_2-3.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0] | |||
|- | |||
| Raspberry Pi 3 Model A+ / B+<br>Raspberry Pi 4 Model A+ / B+<br>Raspberry Pi Compute 3 / 3lite / 3+ | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-6.3.0-pi_3%2B.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0] | |||
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-8.3.0-pi_3%2B.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0] | |||
|} | |||
</center> | |||
<br> | |||
また、Raspberry Pi向けには、Linaro社が提供しているGCC ARMツールチェインを使用することもできる。<br> | |||
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf | |||
* Windows x86 / Linux x86の場合 | |||
*: gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz | |||
* Linux x64の場合 | |||
*: gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz | |||
<br> | |||
==== GCC ARMツールチェーンの実行 ==== | |||
===== Cortex-Aファミリ ===== | |||
以下の例では、ARMの公式WebサイトからダウンロードしたGCC ARMツールチェーンを使用して、<br> | |||
任意のソフトウェアをCortex-Aファミリ向けにビルドしている。<br> | |||
<br> | <br> | ||
もし、configureスクリプトを実行する時、<u>undefined reference to 'rpl_malloc'</u>というエラーが表示される場合は、<br> | もし、configureスクリプトを実行する時、<u>undefined reference to 'rpl_malloc'</u>というエラーが表示される場合は、<br> | ||
<code>ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes</code>オプションを付加する。<br> | <code>ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes</code>オプションを付加する。<br> | ||
これは、autotoolsの仕様で、GLIBC以外のシステム(例. uClibc等)を使用しているからである。<br> | これは、autotoolsの仕様で、GLIBC以外のシステム(例. uClibc等)を使用しているからである。<br> | ||
# 32bit Cortex-A(Hard Float版)向けにビルドする場合 | # 32bit Cortex-A(Hard Float版)向けにビルドする場合 | ||
235行目: | 270行目: | ||
--with-sysroot=/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/libc --with-gnu-ld | --with-sysroot=/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/libc --with-gnu-ld | ||
make -j | make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/lib" \ | ||
CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/include" | CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/include" | ||
248行目: | 283行目: | ||
--with-sysroot=/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/libc --with-gnu-ld | --with-sysroot=/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/libc --with-gnu-ld | ||
make -j | make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/lib64" \ | ||
CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/include" | CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/include" | ||
make install | make install | ||
<br> | <br> | ||
Raspberry Pi | ===== Raspberry Pi ===== | ||
以下の例では、SourceForgeからダウンロードした<u>Raspberry Pi専用のGCC ARMツールチェーン</u>を使用して、<br> | |||
任意のソフトウェアをRaspberry Pi向けにビルドしている。<br> | |||
ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \ | |||
../configure --prefix=<ソフトウェアのインストールディレクトリ> \ | |||
CC=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-gcc CXX=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-g++ \ | |||
--build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf | |||
make -j $(nproc) | |||
make install | |||
<br><br> | <br><br> | ||