Firefox OSをビルド中

Firefox OSの開発機「Otoro」「Unagi」ってのは、どうもあまりスペックが高くない端末らしい、という話は把握していたものの、実体がよく分からないなぁ、と放置していました。

で、このたび、「Announcing the Firefox OS Developer Preview Phone!」ということで、Geekphone取り扱いで「Keon」と「Peak」の2機種が入手可能になるということがアナウンスされた。

外見とかスペック(Snapdragon S1 1GHz, HVGA, RAM 512MB)とかを考えると、ZTE V788D(MSM7225A)や、Xperia E(MSM7227A)あたりが該当しそうだなぁ、と

そして、先日手に入れたK-Touch W619も同じQualcommのMSM7225A系統。
もしかしたら動くかなぁ?とビルドしてみることにしました。

とりあえず、ソースファイル群を取得し、確認したところ、otoroとunagiの構成に関するファイルは、「B2G/device/qcom/」ディレクトリにありました。
CPUはどちらもMSM7627A、と予想よりはちょっとだけ上でした。
無線LANはunagiは、NL80211とath6kl_sdio(SDIO接続)
otoroは、ar6000という違いがありそうな感じ。
まぁ、見方が間違っているような気もしますけど・・・

とりあえず、otoro想定で、buildを開始してみてます。

まだ、Build途中ですが、すでにはまった点があるので公開しておきます。

・Ubuntu 12.10にしてたらはまった。
すでにUbuntu 12.10 32bit環境があったので、そこに構築したらビルドが早々にエラーになった。
公式の「Firefox OS ビルドの必要条件」にあるように「デフォルトホストコンパイラの変更方法」をおこなう必要があったようだ。
まぁ、64bit環境にかえた方がよさそう、というのもあったので、Ubuntu 12.04 64bit環境で作り直しました。

Firefox OS側の手順Android側の手順とでパッケージ選択に差異がある
同じAndroid開発環境をベースとしているわりに、差異があった。
とりあえず、両方に書かれているパッケージ選択をそのままやっておいた。

また、javaについては「openjdk-6-jdk」を選択しておいた。

・build.sh実行時に「-j2」を指定したら失敗した
オプションなしで実行したら進んだ。

・割り当てメモリが少ないと失敗しやすい?

make[7]: *** [TabChild.o] エラー 1
make[7]: *** 未完了のジョブを待っています....
arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)
Please submit a full bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

In the directory  /work/firefox/B2G/objdir-gecko/dom/ipc
The following command failed to execute properly:

こんな感じのエラーがでます。
公式の「Boot to Gecko のビルド」に空きメモリがないから、と書いてあります。

まぁ、仮想マシンで1.2GBの割り当てで構成しているからですね。
もう1回、build.shを実行すると先に進む程度の失敗のようです。

そんなわけで、終わるのにはまだまだ時間がかかりそうです。

ちょっとおもしろかったSPAMコメント

いままで英語のSPAMコメントばかりだったのですが、最近、翻訳版のSPAMコメントが増えてきました。
で、今回あったのは、↓のやつ。ちょっと面白かったので掲載してみる
———————————————————————————–
こんにちはすべて
私は27歳のメアリー、よ
私は善良な男を探しています。彼が存在している場合…
私は愛のスポーツなんだと… あなたが理解してほしい

<写真のURL>

blog.osakana.net 非常に興味深いフォーラムは私のためですので、私は、我々は同じ趣味を持っていると思う
だから、チャットすることができます…
私の電子メールである メールアドレス, Skype *
あなたの写真を送ってください!

__
後で追加:

この写真は、申し訳ございませんが、破損しています!

ああ、ここにすべての私の写真:
<ユーザページのURL>
———————————————————————————–

pcsensor-1.0.2 for TEMPerV1.2 with multi device support

USB温度計 TEMPer V1.2向けの温度計測ソフトウェアpcsensorを、自分の使い道にあうように改造しました。

http://blog.osakana.net/sw/pcsensor/pcsensor-1.0.2.tar.gz

元となったプログラムは以下の2つ。
・Juan Carlos Perezさん製作: http://www.isp-sl.com/pcsensor-1.0.1.tgz
・Momtchil Momtchevさん製作: pcsensor-1.0.0-multi.tgz (Juanさんのpcsensor-0.0.1.tgzを元にしている)からマルチデバイスサポートのやり方

追加した機能
・マルチデバイス時にデバイス名を出力するオプション “-d”

# ./pcsensor -d
2013/01/20 14:42:13 Bus 002 Device 003 Temperature 88.47F 31.38C
2013/01/20 14:42:13 Bus 003 Device 003 Temperature 74.30F 23.50C
#

・接続されているTEMPerのリスト表示 “-D”

# ./pcsensor -D
0 is Bus 002 Device 003
1 is Bus 003 Device 003
#

・接続されているTEMPerの個別表示 “-D番号”

# ./pcsensor -D0
2013/01/20 14:43:48 Temperature 88.47F 31.38C
# ./pcsensor -D1
2013/01/20 14:44:16 Temperature 74.30F 23.50C
#

・摂氏/華氏表示の同時指定を可能にした

# ./pcsensor -c
2013/01/20 14:44:49 Temperature 31.38C
2013/01/20 14:44:49 Temperature 23.50C
# ./pcsensor -f
2013/01/20 14:44:53 Temperature 88.47F
2013/01/20 14:44:53 Temperature 74.30F
# ./pcsensor -f -c
2013/01/20 14:45:02 Temperature 88.47F 31.38C
2013/01/20 14:45:02 Temperature 74.30F 23.50C
#

Exynos 4412搭載の中華Android Newsmy N2(Newman N2)とFreelander I20

Quad Core系の中華Androidを探していると、Samsung Exynos 4412搭載のものがちらほらとある。

fastcardtech取り扱い品で探すとNewsmy N2(Newman N2)とFreelander I20 がある。

・Newsmy N2 Newman N2 – 4.7 inch HD Screen 1.4GHz Quad-Core Android Phone

・Freelander I20 Quad Core Smart Phone 4.7 Inch HD IPS Screen Android 4.0 Exynos 4412 1.4GHz 13MP Camera 10 Point Touch

見た目とスペックが似通ってるけれど、fastcardtechの比較動画を見ると、Atutu benchの結果が15866 vs 13929と、Newman N2が勝っている。
なので、別ものかなぁ?と思っていたんですが、探していたら、どちらも同じものらしいという記事を発見。

Newman N2 / Freelander I20 – Official Firmware

Newman N2側はメーカが積極的にfirmware更新をしているようなので、OSバージョンアップ対応は大丈夫そうかな、といった感じですね。

USB温度計 TEMPerV1.2は計測ミスが多い

(注意: TEMPer V1.2のドライバは→「ここ」にあります)
USB温度計TEMPer V1.2で温度取得をおこなっていると、以下の様な形で、エラーとなることがある。

 $ ./pcsensor
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
$

しかも、これが発生すると該当デバイスは一度offlineとなり、別のデバイスとして認識されてしまいます。

どれくらいの確率で発生するのかを、スクリプト組んで確かめてみました。

作成したスクリプト

#!/bin/bash

SUCCESS=0
FAILED=0
I=0
while [ $I -lt 1000 ]
do
        echo -n "$I "
        ./pcsensor > /dev/null 2>&1
        if [ $? -eq 0 ];
        then
                SUCCESS=`expr $SUCCESS + 1`
        else
                FAILED=`expr $FAILED + 1`
        fi
        sleep 5
        I=`expr $I + 1`
done
echo ""
echo "successed: $SUCCESS"
echo "failed:    $FAILED"

pcsensorを実行して5秒待つ、というのを繰り返すという、まぁ、素直なものですね。

USB温度計を2つつなげて、1000回の測定を開始!

$ ./test.sh
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
<略>
7 988 989 990 991 992 993 994 995 996 997 998 999
successed: 879
failed:    121
$

2個のうちどちらか片方こけただけでも、両方アウトになるので、失敗確率が結構いってしまいます。

また、エラーが発生すると、offlineになるので、ログには以下の様な記録がずらずらっと・・・

# tail /var/log/messages
Jan 17 15:02:27 temperserver kernel: usb 2-2: configuration #1 chosen from 1 choice
Jan 17 15:02:27 temperserver kernel: input: RDing TEMPerV1.2 as /class/input/input174
Jan 17 15:02:27 temperserver kernel: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.2] on usb-0000:00:1d.0-2
Jan 17 15:02:27 temperserver kernel: hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPerV1.2] on usb-0000:00:1d.0-2
Jan 17 15:03:02 temperserver kernel: usb 3-1: USB disconnect, address 90
Jan 17 15:03:03 temperserver kernel: usb 3-1: new low speed USB device using uhci_hcd and address 91
Jan 17 15:03:03 temperserver kernel: usb 3-1: configuration #1 chosen from 1 choice
Jan 17 15:03:03 temperserver kernel: input: RDing TEMPerV1.2 as /class/input/input175
Jan 17 15:03:03 temperserver kernel: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.2] on usb-0000:00:1d.1-1
Jan 17 15:03:03 temperserver kernel: hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPerV1.2] on usb-0000:00:1d.1-1

そして、lsusbを実行すると、以下のように、デバイス番号がすごいことに・・・

# lsusb
Protocol spec without prior Class and Subclass spec at line 4297
Bus 003 Device 091: ID 0c45:7401 Microdia
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 084: ID 0c45:7401 Microdia
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

(1000回スクリプト実行前にも、テストとかをおこなっているので・・・)

運用に当たっては、いろいろ配慮が必要なようです。