先日入手した、BareMetalで遊ぶ RaspberryPi に出てるソレを云々してみます。
とりあえずパケジを導入。
$ sudo apt-get install build-essential python3 python2.7 \
python-dev libzip-dev automake libncurses5-dev gperf bison \
flex gawk libtool libexpat1-dev expat
あるいは 32bit 環境用ライブラリを、とのことで以下。
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install ia32-libs libgtk2.0-0:i386
久しぶりに apt-get update とかしたのですが apt-line に docker だの heroku の toolbelt とか入っててアレですね。ともあれ、これで crosstool-NG の導入準備は OK とのこと。
とりあえず環境構築の手順としては
- crosstool-NG の導入
- 環境設定
- コンパイルとインストール
とあります。とりあえずディレクトリを掘って
$ mkdir ~/cross
$ mkdir ~/cross/rpi
$ mkdir ~/cross/src
rpi にコンパイラ、src にソースを、とのこと。で http://crosstool-ng.org からソースコードを取得して展開して ~/cross 配下に導入なのか。
cross 配下ですが以下なカンジになりました。
$ ls
bin lib rpi share src
次に環境設定、ということで
- 環境設定を保存するディレクトリを掘る
- 設定テンプレをそこに保存
とのことで以下。
$ mkdir ~/cross/src/ct-ng_rpi
$ cd ~/cross/src/ct-ng_rpi
$ ~/cross/bin/ct-ng arm-unknown-eabi
$ ls
config config.gen
何かができてます。glibc 使いたくないので arm-unknown-eabi 選択ですか。そしてこのテンプレのままでは RasPI への最適化が不十分とのことで以下四点の設定を、とのこと。
- インストール先
- RasPI 最適化 (hard-float 対応、arm1176jzf-s 最適化)
- BareMetal 環境特有の設定 (MMU 無効化、libc システムコール未実装)
- gcc やライブラリのバージョン指定
で、何するか、というと menuconfig みたいのを出して設定を変えて build する模様。
$ ~/cross/bin/ct-ng menuconfig
これはこれはなソレが出てきました。諸々修正を盛り込んでいるのですが gcc を最新に、ってこれは端末に導入されている、という理解で良いのだろうか。あるいは build の中で自動取得なのかな。
ええと gcc は 4.8.2 が最新。newlib は 2.1.0 が最新なのか。テキストでは 1.20.0 ってなってますが最新を指定してしまえ。
と思ったら指定できる最新は 4.8.1 ですね。そして newlib は 1.20.0 でした。
で、build を実行。
$ ~/cross/bin/ct-ng build
あとは PATH を通しておけば良い模様。menuconfig にて設定変更した項目を以下に列挙しておきます。
- Paths and misc options の Local tarballs directory
- Prefix directory に ~/cross/rpi/${CT_TARGET} 指定
- Target options の Use the MMU のチェック外す
- Target optimisations は以下を指定
- Architecture level は armv6zk
- Emit assembly for CPU および Tune for CPU には arm1176jzf-s
- Use specific FPU は vfp
- C compiler および C-library のバージョンは最新を選択
- Companion libraries の GMP, MPFR, MPC のバージョンを全て最新に
ちょっと BareMetal 本もきちんと目を通せていないので今のうちに確認しとこ。