タグ別アーカイブ: raspberry pi

Raspberry Pi 3でErlang

Raspberry Pi 3にErlangを入れてみました。ウェブではソースからインストールする情報が見つかりますが、面倒なのでErlang Solutionsが公開しているdebパッケージをインストールします。

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb

Debianのコードネームを求められるので、jessieと入力します。するとapt lineが追加されますので、いつも通りにapt-getしましょう。なお、Erlang Solutionsからはerlangパッケージとesl-erlangパッケージの二つがリリースされていますが、今回は前者を入れてみます。

$ sudo apt-get update
$ sudo apt-get install erlang
...
$ erl
Erlang/OTP 18 [erts-7.3] [source] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V7.3  (abort with ^G)
1>

50個近いパッケージが芋蔓式にインストールされました。erlを起動してみると、ちゃんと4コア認識されていることが確認できます。素晴らしい。

Raspberry Pi 2用のケース

先日、仕事でRaspberry Pi 2 (以下、RasPi2)を使うことがあり、外寸はRaspberry Pi B+と同じと聞いていたのでRSのB+ケースにRasPi2を入れてみたところ、どうもmicroSDカードに変な力が加わってしまったらしく、RasPi2がカーネルパニックを起こして起動できなくなりました。

この時は、RasPi2のmicroSDスロットの穴を切り開いて接点をピンセットで持ち上げ直して接触を改善することで治ったのですが、精神衛生上よろしくありません。そこで、Amazonで無加工でRasPi2にも使えるB+用のケースを購入しました。

GPIOのところが開きっぱなしになるのとカメラモジュールを固定できないのが気になりますが、それ以外は文句なしです。価格がもうちょっと安ければ完璧なのですが、贅沢は申しません。おすすめです。

Raspberry Pi 2でPlanex GW-450D その2

先の記事の手順で一応はWiFiを5GHzで利用できるようになりましたが、釈然としません。ということで、クロス環境を用意してみました。

詳細な手順はこちらのサイトに整理されているので再掲しません。私はVMWare上のDebian Wheezy 64bit環境に構築したのですが、カーネルのビルドは15分程度で済みました。注意点として、

  • toolsのgcc等を実行できない (コマンドを実行してもcommand not foundになる) 場合は libc6-i386 をインストール
  • libz.so.1がnot foundというエラーが出る場合はlib32z1をインストール
  • linaroのコンパイラはlibc6-2.14依存っぽいので素のWheezyでは使えないかも

の三点が挙げられます。また、特にカーネルオプションを変更しないのであれば、make menuconfigでなくoldconfigでもよいかも知れません(この場合はncurses-devが不要)。

もう一点、先の記事にも書きましたが、5GHzでも利用できるようにするにはRT2870STA.datのWirelessModeの値を5に変更する必要があります。これが9のままだと2.4GHzしか利用できません。

Raspberry Pi 2でPlanex GW-450D

Raspberry Pi 2 (以下RasPi2)を5GHzのWiFiに接続させる必要があったため、AmazonでPlanexのGW-450Dの簡易パッケージ版であるFFP-450Dを購入し、RasPi2で動作させてみました。

Planex自身がRasPi対応を謳っており、実際、ドライバの導入方法まで公開していたので安心して購入したのですが、いやはや、世の中そんなに甘くありません。rpi-updateでRasPi2のファームを最新に更新したのが原因か分かりませんが、この手順通りに作業すると最後のinsmodで Invalid module format のエラーが発生します。

軽く調べてみた感じでは、内部的なカーネルのバージョンが 3.18.7+-v7 だったり 3.18-7-v7+ だったりで、どうもカーネルのバージョンとinsmodしようとしたドライバ(モジュール)のバージョンが違うと判断されてしまうようです。

で、結局、カーネルのビルドからし直しました。この時はクロス環境を用意できなかったため、RasPi2の上でコンパイルしたのですが、4時間以上掛かりました。一応以下にざっくりとした手順を整理してみましたが、microSDの寿命も縮めるし、正直お勧めできません。

  1. GCCのバージョンを4.8に上げる (jessieから)
  2. GCCのデフォルトのバージョンを4.8に設定
  3. Linuxのソースコードを取得
  4. .config作成
  5. カーネルとモジュールのコンパイル、インストール、reboot
  6. ドライバのソースを編集
  7. ドライバをコンパイル
  8. /etc/wpa_supplicant/wpa_supplicant.confの編集
  9. /etc/Wireless/RT2870STA.datのWirelessModeを9から5に変更
  10. insmod
  11. ifup ra0

Raspberry Pi用に用意されているクロス環境を整えて、マシンパワーのある環境でクロスビルドした方がよいです。実際、私の開発PCで試したところ、4時間以上掛かったビルドが15分程度で完了しました。