ぺんぎんノート

momoiro_tjのノート (旧:システムオペレータの週末)

binutilsインストール

Raspberry Pi 3B+のベアメタル環境構築のために、binutilsをインストールした。 いろいろとハマったのではまったことなどをまとめておく。

最終的に、ワーニングがいくつか出たが何とかコンパイルできてインストールが完了した、という次第。

環境はubuntu 18.04.3 LTS (Bionic Beaver)

基本的に以下のページを参考にさせていただいた。
piでベアメタルプログラミング - bobuhiro11's diary

注意:以下に述べるポイントはbinutilsのインストールを100%保証するものではない。あくまで私の環境で試したことをまとめているだけである。

最終的な実行手順

最終的に次の流れでインストールができた。

※2020/02/22 configureのtarget指定をarm-non-eabiからaarch64-elfに修正
64bitで動かしたかったがarm-non-eabiではコンパイルできなかったため。

$su -

$ apt install texinfo
$ apt install bison
$ apt install flex
$ apt install gap-core
$ apt install gap-grape
$ apt install g++

$ export LDFLAGS="-L/opt/local/lib"
$ export CFLAGS="-I/usr/local/include -O2"

$ cd /usr/local
$ mkdir cross-pi

$ cd /usr/local/src
$ git clone git://sourceware.org/git/binutils-gdb.git
$ cd binutils-gdb
$ mkdir work
$ cd work
$ ./configure --target=aarch64-elf --prefix=/usr/local/cross-pi
$ make
$ make install

以降、はまったポイントを述べる。

はまりポイント1 - 古いソースコード

まずソースコードをダウンロードする。参考サイトではwgetソースコードアーカイブをダウンロードしている。

参考サイトが2014年の記事だったため、ソースコードの意図する環境が変わって(新しくなって)いると考えた。なので、gitで公開されていた最新版をダウンロードするようにした。
Binutils - GNU Project - Free Software Foundation

$git clone git://sourceware.org/git/binutils-gdb.git

はまりポイント2 - 不足ツール

makeを実行すると、ツールが足りないとエラーをはいてくる。さすがにすべてコンパイルしてインストールするわけにもいかないので、不足ツールはaptで追加インストールを行った。

すべてメモっていたわけではないので抜け、重複しているものがあるかもしれない。

$apt install texinfo
$apt install bison
$apt install flex
$apt install gap-core
$apt install gap-grape
$apt install g++

texinfotextinfoではないことに注意すること。

はまりポイント3 - ワークディレクト

これが最大のはまりポイント。

make実行時に次のエラーメッセージに非常に悩まされた。

configure: error: source directory already configured; run "make distclean" there first

これがでるともうmake distcleanし、configureからやり直すしかない。

詳しい原因は不明だが、ワークディレクトリを作りワークディレクトリでconfigure、makeを行うと解消された。

$cd binutils-gdb
$mkdir work
$cd work
$./configure
$make
$make install

この後続けてgcc、newlibのインストールも行ったがbinutilsのインストールでベースができていたので問題なく終わった。コンパイルに1時間以上かかったが。