【ARM】BeagleBoneBlack に Debian / Ruby 環境構築

BeagleBoneBlack(以下BBB)に DebianWheezy, Ruby2.1環境を構築する方法です。

debian_logo

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の活動に関する記事です。