BeagleBoneBlack(以下BBB)に DebianWheezy, Ruby2.1環境を構築する方法です。
BeagleBoneBlack
ARM CortexA-8(ARMv7)を搭載したAM3358BZCZ(TI製, 1GHz)が搭載されています。
メモリは DDR3L, ストレージは eMMC(embedded MultiMediaCard, NAND)です。
BBB搭載のCortexA-8の進化版であるCortexA-9はRevision4まで進んでおり、CortexA-15よりハイエンドモデルとして定番化しています。CortexA-15はARMの特徴である省電力が薄れてしまっているのかもしれません…
eMMCに書き込まれているLinuxOSはAngstormですが,
MicroSDスロットがありeMMCにSDカードの内容をアップデート可能です。
今回はMicroSDからDebianをブートしてみます。
Debian環境の構築
以下からARMV7用のDebianWheezyを取得します。
$ wget https://rcn-ee.net/deb/rootfs/wheezy/debian-7.3-console-armhf-2014-01-24.tar.xz
md5でファイルに破損がないか確認します。
$ md5sum debian-7.3-console-armhf-2014-01-24.tar.xz
47a2221a3f5a46d69f45148401d9952a debian-7.3-console-armhf-2014-01-24.tar.xz
展開します。
$ tar xf debian-7.3-console-armhf-2014-01-24.tar.xz
$ cd debian-7.3-console-armhf-2014-01-24
sdブートのためのsetupを行うスクリプトが用意されています。microSDのpathである/dev/sdXは環境によって変わります。
$ sudo ./setup_sdcard.sh --mmc /dev/sdb --uboot bone
microSDを挿してBBBの電源ON, SSHログインして確認します。
# ID:root,pass:root or ID:debian,pass:temppwd
$ ssh debian@192.168.7.2
$ cat /etc/debian_version
7.3
以上の手順でインストールしたDebian環境でCを実行するにはクロスコンパイル時にStaticBuildかBBBにライブラリを配置してダイナミックリンクする必要があります。
$ arm-linux-gnueabi-gcc --static sample.c -o sample
Ruby環境の構築
BBBにDebianをインストールしてインターネットに接続できればapt-getでRubyをインストールできます。
# on BBB
$ sudo apt-get install ruby
ここからはクロスコンパイルを試してみます。Ruby2.1のSouceCodeを取得します。
$ wget https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.0.tar.gz
$ tar xvzf ruby-2.1.0.tar.gz
クロスコンパイルで使用するためにホストPC(例えばVBoxのDebian)にinstallします。
このときのRubyはクロスコンパイル時と同じバージョンである必要があります。
$ ./configure --build=i386-linux --host=i386-linux
$ make
$ make install
続いてクロスコンパイルです。
ホストPCにARMクロスコンパイル環境(GCC/G++)が必要です。
この辺は別途,書くかもしれません。
$ export CC=arm-linux-gnueabi-gcc
$ export LD=arm-linux-gnueabi-gcc
$ export CCFLAGS=--static
$ export LDFLAGS=--static
$ export AR=arm-linux-gnueabi-ar
$ export RANLIB=arm-linux-gnueabi-ranlib
$ export ac_cv_func_setpgrp_void=yes
$ export ac_cv_func_getpgrp_void=yes
$ ./configure --build=i386-linux --host=arm-none-linux-gnueabi --prefix=/home/cross-ruby --exec-prefix=/home/cross-ruby/exec
$ make
$ make install
fileでARM用にコンパイルされていることを確認できます。
$ file /usr/bin/ruby
BBBで helloworld.rb を書いて実行してみます。
$ ssh debian@192.168.7.2
$ ruby helloworld.rb
Hello World
* この記事はkarota-projectの活動に関する記事です。