2010年10月18日月曜日

SDK 2.0

地元の祭りで忙しかった罠(´・ω・`)

で、やっとこM001の新ファームがダウンロード&解凍できるようになってたので試してDiff。
EKENのプリインストアプリの構成は基本的に変わらないっぽい。
youtube関係のアプリがあったりなかったりするくらいで、特筆するようなものはない。

SDK 2.0 で先行してたM002版のファームと比較しても機種依存する部分以外は基本的に中身は同じっぽい。
SDK 1.9.1と比較して、カメラ周りのライブラリが更新されてたりするので、後でそっち方面を確認しようっと( ・ω・)

とりあえずは、いつもどおり軽量版を作って改造できる下地を作らねば。
久々にほげるぜ!(笑)

2010年10月11日月曜日

おあずけ

連休はすっかり休暇モードでした(* ̄∇ ̄*)

んで、
ようやく、M001用のSDK 2.0ファームが出た模様。

恒例のダウンロードしてDiff!!

と、意気込んだのもつかの間。

解凍できんがな(´・ω・`)

毎回、毎回、解凍できないアーカイブを1回うpするEKENの思考回路がよく分からん。
M001の担当者は何を考えとるのか?
ダウソして解凍できるかくらい確認しろい!
素人のおいらですら、うpしたら必ず自分でダウンしてインスコまで確認するのに(`・ω・´)

まぁ、品質にそれほど気を使わないお国柄なんだろうが、
イイカゲン気付けw


そんなわけで、おあずけ
(´・ω・`)ワン

2010年9月29日水曜日

M002の新ファーム

漁船がぶつかったり、某ショップ店長が逮捕されたり。
中華タブレット周辺はいつもきな臭い(笑)
結論としては、中華ってやっぱ信用できん(爆)
まじめに付き合う相手じゃないって認識した(・ω・)

さておき(笑)

EKENのオフィシャルに
M002S_2.0.rar
っていう、新ファームが公開されているのに気が付いた。

2.0・・・・(゜-゜) SDK 2.0か・・・・

早速ダウンロードして、いつものDiff(笑)

まーたインストールイメージツリー構成が変わってるし。。。
ファイルの増減はともかく、ツリー構造変えられると追っかけるのが面倒なんだよなぁ・・・(´・ω・`)

で、見ると、framework周り、ドライバ、一部ライブラリが変更されてる。
アップデートとしてはそんなに大きな更新ではないように見えるけど、実際に動かさないとわかんないね。
ライブラリ関係で大きく変わってるっぽいのは、WMT関係のライブラリとカメラ関係。
EKENは更新するたびに良くなる傾向にあるので期待できるかな?

で、dm9601.ko なんていうドライバが増えてる。
有線のNICドライバなんだけど、こんなオプション出てたんだろうか?
USBにぶら下げる有線NICドライバと言うことは、外付けだよなぁ・・・・謎
まぁ、、、、
この辺のNICドライバは自家ビルドすればふつーに使えると思うけど。

そうか、有線NICとwifiが使えれば無線ブリッジとかに改造できそうだな。
Androidの皮はそのままで、裏でネットワークブリッジ。流行の情報家電をLAN接続するためのイーサコンバータもどきとか。
NICドライバビルドしまくってみよう(笑)
だれか、ネタ実験してw

そのうち、M001版が出るのかなぁ。
いじってみるには面白そうなだなぁ。

でも、


まさか、バックドアとか仕掛けられてないよねー(笑)

2010年9月17日金曜日

百超え

1.1.0のダウンロード数が、M001&M003 共に100を超えた(・ω・)
なーんも宣伝してない割には、使ってもらってるようでビックリ。
オールインワン手間要らずカスタムファームとは方向性が違うので、一般ウケはしないかなーと思いながらも、オレ仕様で使っていただけたら幸いデス(^^)

んで、まだゴソゴソいじってたりする(笑)
少し前に、宙ぶらりんだったBluetoothを埋め込んだ。
ハード的にはこれ以上、いじれない感じなので置いといて、

カーネル方面はドライバをいろいろ見ている。
ファイルシステムで追加するとしたらNTFSくらい。大容量の外付けHDDを付けるなら必要になるかなぁ。
他には、、、(゜-゜)ISOイメージのマウントとか?
でも、CDもDVDもシステム的に無縁なAndroidくんだから意味無いか。
データファイルを読むくらいなら使えるかも。
ってか、そもそも外付けのドライブをマウントできるのか試してない罠。

あと、、、
UVC以外のカメラドライバか、、、
持ってないから、テストができんな(´・ω・`)

他は、、、
wifiカードとか、、、
これまた、テストできんし、Android側でも制御してるからそこも変えにゃならん。

そもそも、必要なドライバを選択してinsmodする方法を考えるのが面倒くさいw
使わないのロードしてもメモリの無駄だし。
色々入ったドライバパックでも作って、使いたい人は自己責任でお好きなように(はぁと、ってパターンになっちゃうなぁ。

そう考えると、Androidはデバイスが固定された端末用のOSなんだなぁ。
汎用的に色々するなら、最低、ホットプラグとドライバモジュールの自動制御が無いと。
うーん、、、
現状はコレがネックだよなぁ。

2010年9月12日日曜日

書き忘れていたこと

相変わらず、B4が伸びている(´・ω・`)130て、、、
それと、ver1.1.0 ダウンロード数、M001対M003比が逆転してM003が多くなった。
うむ、時代はM003か(`・ω・´)

で、、、

コメント欄で突っ込まれて、
をぉ!そういえば、そうだったっ!!と、すっかり忘れていたことを思いだしたので表の記事にも書いておこうっと。

SDK 1.7.4までは、USBシリアルコンバータの pl2303 が ttyUSB0 に割り当てられるようになっていた。
しかし、SDK 1.9.1 からは、 ttyUSB5 に割り当てられるように変更されている。
cp2102 を利用するGPSレシーバーはこれまでどおり、ttyUSB0 にバインドされる。

そんなわけで、gpsinit.sh の記述に注意。

SDK 1.9.1 において、pl2303 を使用しているGPSレシーバーの場合は、gpsinit.sh内の設定値を次のようにするべし。
GPS_DEVICE_TTY=ttyUSB5

GPS_DEVICE_TTY=ttyUSB5
大事なことなので、2度言いました。(`・ω・´)

( ..)φメモメモ

次のSDKではどうなるかわかんないけどね( ・ω・)

2010年9月7日火曜日

SDK 1.9.1 シリーズ差

SDK 1.9.1になって、安定してきたEKENタブレット。
M001, M002, M003 とシリーズがあるけど、ファームウェアの中身についてほとんど差がなくなっている。
バイナリレベルではほぼすべて同じ。
以前は機種によって異なるハードウェア、画面関係やボタン関係についてはドライバが違っていたりしたけど、1.9.1についてはそれもすべて同じ。

M003用ROMを作るとき、Diffって調べた結果、入れ替えたのは、

rescriptcmd         \script\
touchcal             \script\etc\
touchcal             data.tar -> /wmtpref/
batterystats.bin   data.tar -> /system/
3種4箇所だけ。
なんと簡単移植。

実際は apk が使う .db ファイルもかなり違うんだけど、これはアプリが使うものだから特に機種依存するものではないため無視。
batterystats.binについては不明だったため、一応、コピーしといた。

ひょっとしたら、M001のROMに、
rescriptcmd と touchcal をコピーしてくるだけで動くかも知れない。
data.tarのtouchcal は \script\etc\touchcal で上書きされるので、実質、アーカイブ内部は触らなくてイイのかも。
もしそうなら、移植がとっても楽になるなぁ。(・∀・)


ところで、B4のダウンロード数がとうとう100を超えた。
踏み台ROMww、外人、ダウソしすぎww

2010年9月6日月曜日

m001etc ver1.1.0

●はじめに

USB GPSレシーバー対応 m001etc カスタムファームウェアです。
オリジナル ver 1.9.1 ベースです。

基本機能は m001etc ver 1.0.0 と変わりませんが、一部機能の変更があります。

M003なんちゃって対応版もリリースします。
ダウンロードは右サイドバーからどうぞ。


●変更点
  • オリジナルファーム ver 1.9.1ベース
  • thumbserverの停止
  • Snapshot機能が使用できなくなった

●概要

  • オリジナルファーム ver1.9.1ベース
  • プリインストールアプリの削除による軽量化
  • root化済み
  • googleアプリ(Marketなど)
  • Bluetooth使用可能
  • USB GPSレシーバー対応(ホットプラグは不可)
  • swap on スクリプト(オプション)
  • フォントコピー(オプション)

●GPSレシーバー

動作確認が取れているのは下記の通りです。
  • GT-730FL-S    (Sky Traq Venus 6 / pl2303 / 38400bps)
  • Gosget BU-363    (SiRF StartIII / pl2303 / 4800bps)
  • SKYLAB SKM50    (MTK3327 / cp2102 / 9600bps)
  • GR-300        (SiRF StartIII / pl2303 / 4800bps)


●追加フォントファイルのインストールについて


アーカイブを解凍してできる script\usr_etc ディレクトリに、TrueTypeフォントファイルを入れておくと /system/fonts に自動的にコピーします。
このとき、フォントファイル名を DroidSansJapanese.ttf にしておくと、Androidのロケール設定で日本を選択したときに、このフォントが使用されます。


●thumbserverの停止について


M001のバックグランドサービスとして起動される、thumbserverを停止しました。
thumbserverはpeacockシリーズのアプリケーションにおいてメディアファイルを管理するデータベースを構築するサーバーです。
このサーバー機能は本体内のメディアファイルを走査し、メディア情報を収集するのが目的です。この処理は非常に高コストであり、しばしば、M001の処理の重さの原因になっています。
peacockシリーズのアプリケーションを使用しない場合はサービスを起動する必要が無いため、今回、削除としました。
これにより、バックグランドで重い処理を走らせることがなくなり、安定した動作を得る事ができます。

ただし、Snapshot機能がこのthumbserverを利用しているため、serverの停止により Snapshot機能も使用できなくなります。
スクリーンショットを撮る場合は、別途、SDK環境よりデバッグ機能を用いて撮影してください。


●スクリーンショット


●ダウンロード

m001etc ver1.1.0
http://www.megaupload.com/?d=CIDAUUB2

m001etc-m003 ver1.1.0
http://www.megaupload.com/?d=59ADSI85


以上。



1.9.1ベースっと(・∀・)

基本的に機能は同じ。
大きな変更点としては、thumbserverを停止したこと。
snapshot 機能が使えなくなったので、スクリーンショットが撮れない(;´Д`)
ステータスバーには目玉アイコンが表示されて、押すこともできるけど、何もならないヨ(・∀・)
スクショ、便利なんだけどね。
どうしても処理が重くなるthumbserverが許せなかった(笑)

2010年9月4日土曜日

setenvの再現

1.9.1ベースのm001etcでテスト中(・∀・)

動作環境の移植はできたんだけど、最後の難関、scriptcmdでのsetenvをどうするかで躓いていた。
コメント情報からscriptcmd内にsetenvを埋め込んでも書き換わる環境変数があるのは確認できた。
がしかし、肝心の wifi_powerdown についてはインストール処理のどこかで上書きされてしまい元に戻ってしまう(´・ω・`)
他に幾つかの環境変数も同じような現象になる。
こりゃ、事実上scriptcmdで環境変数をセットするのは諦めたほうがいいなと、別の方法を考えていた。

で、方法としては、
ブート時に必ず実行される init.rc 内で環境変数設定スクリプトを呼び出す方法。
コレは上手くいく。実際にやってみた。
ただし、1回目の起動は失敗する。
1回目の起動で環境変数を書き換えるため、1回目は書き換わってない状態でブートしてるから。
ま、この方法でも「1度リブートしてね(はぁと」と断り書きしとけば問題ないんだけど、ブート時に毎回走るのがウザい。

んで、もう少し調べてみた。
きっと、インストール時のユーザーランドを調べればどこかでsetenvしてるだろうと探したんだけど、どこにもその形跡が見つからない。
prepare.bin, ramdisk_88_en.gz, mvl5_v5t_ramdisk_WM8505.090922.loop_en.gz, どこにも見当たらない。
これまた、行き詰った(´・ω・`)
圧縮ファイルの中かもしれず、、、そうなると、インストール処理のブートシーケンスを追っかけるのも面倒くさくなって、投げた(笑)

で、考える。
1度だけ実行されればいい setenv。
インストール時に実行可能なのは、scriptcmd か update.sh。
例えば、update.sh内でsetenvできれば上手く行きそうだ。
つーことは、インストール時のユーザーランドにsetenvのバイナリがあればおk!?( ・ω・)

なんとなく、いけそうだな。
問題は移植するsetenvバイナリをどこから持ってくるか?

まず、インストール時にloopバックデバイスとしてmountされる、2つのイメージ、
mvl5_v5t_ramdisk_WM8505.090922.loop_en.gz
ramdisk_88_en.gz
を、バラしてみた。
すると、ramdisk_88_en.gz 内に使えそうな setenvコマンドがあった。
試しに抜き出して、実機上でsetenvすると、環境変数が上手く書き換わる(・∀・)

イケる!

と言うわけで、このsetenvバイナリをインストール時のユーザーランドに移植すれば、update.sh内で setenvし放題!!ってことになるハズ\(^o^)/


つーわけで、移植方法を書いておく(`・ω・´)

取り出しはすべて開発用のUbuntu上で実行。

●setenvを取り出す。
mvl5_v5t_ramdisk_WM8505.090922.loop_en.gz
ramdisk_88_en.gz
をUbuntu上にコピーしておく。

ちなみに、インストール時に使用されるユーザーランドイメージは、mvl5_v5t_ramdisk_WM8505.090922.loop_en の方。

んで、解凍。
# gunzip mvl5_v5t_ramdisk_WM8505.090922.loop_en.gz
# gunzip ramdisk_88_en.gz
mountポイントを掘って、ramdisk_88_en をloopバックデバイスとしてmount。
# sudo mkdir /mnt/tmp
# sudo losetup /dev/loop0 ramdisk_88_en
# sudo mount /dev/loop0 /mnt/tmp
setenvコピー
# cp /mnt/tmp/bin/setenv ~/
umount & 後始末
# sudo umount /mnt/tmp
# sudo losetup -d /dev/loop0
取り出し成功(・∀・)

次、インストール時のユーザーランドへコピーする
mvl5_v5t_ramdisk_WM8505.090922.loop_en をloopバックデバイスとしてmount。
# sudo losetup /dev/loop0 mvl5_v5t_ramdisk_WM8505.090922.loop_en
# sudo mount /dev/loop0 /mnt/tmp
setenvコピー
# sudo cp ~/setenv /mnt/tmp/bin/setenv
# sudo chown 1001:1001 /mnt/tmp/bin/setenv
# sudo chmod 777 /mnt/tmp/bin/setenv
umount & 後始末
# sudo umount /mnt/tmp
# sudo losetup -d /dev/loop0
んで、圧縮
# gzip mvl5_v5t_ramdisk_WM8505.090922.loop_en
おしまい。

できあがった mvl5_v5t_ramdisk_WM8505.090922.loop_en.gz をファームイメージにコピーすればおk

android_fs.tar の中にも system/bin/setenv があるんだけど、これはダイナミックリンクされてるので複数のライブラリが別途必要になる。
ramdisk_88_en.gz の中の setenv は libcだけが必要なのでダイジョウブ(・∀・)

ちなみに、このsetenvコマンド。
実行するだけで、自動的にsaveenvしてくれる。便利。

あとは、update.sh内で、
setenv wifi_powerdown "D8110064|0x4,D811008C|0x4,D81100B4|0x4"
setenv regop "D8110064|0x4,D811008C|0x4,D81100B4|0x4,D8110064|0x8,D811008C|0x8,D81100B4|0x8,D8130054|0x1"
setenv camera_ui yes
してやればおk(・ω・)

setenv問題についてはコレで解決~

2010年9月2日木曜日

自由だぁ~

google app の移植は完了。
Market周辺の動作も確認できたのでたぶんダイジョウブ。
とはいえ、みんなで共有IDには変わりない(笑)

にしても、フリーのアプリを落とすだけでなぜgoogleにこれだけ縛られるのか。(´・ω・`)
固体情報が欲しいんだろうけど。
コンテンツでがんじがらめにするリンゴとあんまりかわらん気が。

これではシャクなので、Fix Market For Slate Wiki を試してみた。
結果は、、、ゴニョゴニョ(笑)
コリジョンの無い世界ってイイなぁ(゜-゜)
ひとまず、アプリのバックアップだけ取って置いて、ローカルインストールできるようにしておくと吉。

んで、m001etc。
後はデバイスの初期化処理なんかを入れる作業が残っている。
ま、ぼちぼちやります( ・ω・)


ところで、m001etc-B4のダウンロード数がココへ来てなぜか伸びている。
なぜB4が?おかしいな?と、SlateDroidのフォーラムを眺めてたら、

『へい!WinCEをインストールするなら、m001etc-B4でやると確実だぜ!ダウンロードはココ!』

なーんて、紹介されてたww
踏み台ROMキタコレ(爆)

まぁ、野良ROMをどう使おうが、
煮ようが、焼こうが、

使う人間の自由だぁ~( ´∀`)9

ってことで。

2010年8月30日月曜日

あっけなく

夏休み最後の日曜日。
我が子らと遊び疲れてヘトヘトの中、
Droidくんと延長戦をしてた(・ω・)

1.9.1をバラしながら料理していくわけだが、なれたもんで、アプリの削除はサクサク終了。
しかしながら、GPSの移植作業中に睡魔が襲ってきたらしく、気が付いたら寝てたww
何をどこまで作業したのか分からないまま、とりあえず、置いといたのをさっきテストインストールしてみたら、

動くジャマイカ( ´∀`)

きっと、小人さんが出てきて、疲れきって寝てしまった良い子の代わりに、せっせと移植作業をしてくれたんだ(・∀・)!
ハイホォ~♪ハイホォ~♪

と言うわけで、移植作業は順調、、、、と、
言いたいところだけど、、、、
インストール処理scriptcmdの変更が結構痛い。
setenv してる箇所をどこか別のところでしなきゃならないんだけどどうするか。
いっそ、直接環境変数領域を書き換えるバイナリを作るか・・・うーむ。あと、google app関係だなぁ。


そうそう、カメラ関係が修正されて比較的まともに実装されてるようだ。
Camera.apk での表示は真っ黒にならずに比較的安定して表示されるようになった。
他のカメラアプリではまだ死ぬ事が多いようだ。
しかし、カメラ画像のキャプチャができない。なぜだ。。。(´・ω・`)

少しずつ改善されるけど、劇的に良くならない。
全般的に中途半端感は脱していない新ファーム。

がんがれ、EKEN。

2010年8月28日土曜日

1.9.1プレビュー

夕方、EKENのサイトに新ファームが上がってるのに気が付いた。
早速落としてインスコ。

と、同時にバラして、恒例のDiff(笑)

ベータで終わった1.9.0との比較でも、結構な範囲でバイナリが変わっている。
システムに必要なapkやフレームワークはSDKのバージョンアップにあわせて再ビルドしたものだろう。

んで、大きな変更箇所が2つ。

まず、インストールスクリプト。
scriptcmdが大幅に削られて、大半のインストール処理が prepare.bin に移ったらしい。
おかげで、システム環境変数が書き換えられないようになってしまった(´・ω・`)
wifi_powerdownが書き換えられないとツライ・・・(;´Д`)

それと、メディア系のコーデックライブラリが無くなった。
libavcodec.so, libavformat.so, libavutil.so, libfaad.so, libmad.so, この辺。
その代わり、libffplayer.so が入ったようだ。


実際に動かしてみると、表向きはあんまり変わってない。
サクサクもしてない。
入ってるアプリは相変わらず中華三昧だけど。
google appは、Map以外、何も入ってない。
もうMarketはあきらめたか、EKENw
ていうか、Gmailも何も入ってないと個人的に使いづらい。
なんとかならんのか(;´Д`)

で、メディア系のライブラリが変わってたので試してみた。
640x480のムービー。
これまでは映像はまったくダメで音声のみだったのが、絵が出た(・∀・)!をぉっ!?
絵が、、、出てる、、、動いてる、、、、
めっちゃゆっくりwww
音声が1とすると、絵が5分の1くらいの速度で流れる。

まったくダメジャン(;´Д`)

まぁ、とりあえず真っ黒にはならないようになった努力は認めるが、音声と絵がこんなにズレちゃ意味が無い。
結局、まともに見る事ができたのは、以前から正常に見られたものだけだった(´・ω・`)



とりあえず、、、
m001etc ROM に戻したw

google app の移植かぁ・・・・
面倒くさそうだなぁ・・・・・・・・・

2010年8月27日金曜日

2つのDroid

代替機が届いた(`・ω・´)

で、とりあえず、動作確認。
画面OK、タッチパネルOK、SDカードOK、WifiもOK。


んじゃ、、、、(-。-)y-゜゜゜

バラすか(笑)

届いて15分で手術室に運ばれるM001くん。
これまで埋め込んだ数々のデバイスを丸ごと移植。
サクサクばらして、サクサク移植♪
あー楽しいw

1時間後、
にゅーM001は、
ここに誕生したっ!

<完>


いや、、、終わらんケド。(・ω・)

とりあえず、動く機体を確保できたのでまた遊べる。

しっかし、今回はジャンク品と言う扱いってことで、その品姿はヒドイもんだ。
まず、液晶面のフィルムに傷がたくさんついている。お前、絶対こすっただろ!?って感じ。
画面が点灯してれば目立たないけど。
あと、本体にも汚れやスレが目立つ。まともな検品だったら絶対アウト。
んで、極めつけは、本体カバーのネジ止め部分がボンドで固めてあった。
あり?って見てみると、ネジ止めの足がポッキリ折れてるしw
止めてる意味無いじゃんww
ふ~む、、、まぁ、不良品レベルだな(;´Д`)

中身はと言うと、
基板バージョンはV5。前のがV6だったから1つ古い。
wifiがメインボードのくぼみに直接半田してあるタイプ。
当然、引っぺがして改造しやすいようにした。

緑もかわいそうっちゃ、かわいそうだ。
こんなトンデモレベルの品物が届いた日にゃビックリだわ。
日本だったら確実メーカー返品&補償。
中華との取引って怖いね~( ´∀`)

と言うことで、緑のジャンク扱い品は、ちゃんと動くけど品姿はヒドイ物が来るっと( ..)φメモメモ
覚悟して買うように(笑)

m001etc ver1.0.0

●はじめに

最初のリリース版です。
M003なんちゃって対応版もリリースします。


●概要
  • オリジナルファーム ver1.7.4ベース
  • プリインストールアプリの削除による軽量化
  • root化済み
  • Bluetooth使用可能
  • USB GPSレシーバー対応(ホットプラグは不可)
  • swap on スクリプト(オプション)
  • フォントコピー(オプション)

●GPSレシーバー

動作確認が取れているのは下記の通りです。
  • GT-730FL-S    (Sky Traq Venus 6 / pl2303 / 38400bps)
  • Gosget BU-363    (SiRF StartIII / pl2303 / 4800bps
  • SKYLAB SKM50    (MTK3327 / cp2102 / 9600bps)
  • GR-300        (SiRF StartIII / pl2303 / 4800bps)

●追加フォントファイルのインストールについて

アーカイブを解凍してできる script\usr_etc ディレクトリに、TrueTypeフォントファイルを入れておくと /system/fonts に自動的にコピーします。
このとき、フォントファイル名を DroidSansJapanese.ttf にしておくと、Androidのロケール設定で日本を選択したときに、このフォントが使用されます。


●スクリーンショット



●ダウンロード

以上。


とりあえず、1.7.4ベースの安定版、っと(・∀・)

今、ぼやーっと考えてるのは、
SDK1.9.0化
USBシリアルドライバの追加(できれば、インストール時に使用ドライバを選択したい)
面白そうなカーネルモジュールを追加して遊べないか?
Bluetooth周りでもう少し遊べないか?
もっと軽量化できないか?(裏方サービスを削ってみる?)

そんな感じ。

実現性があるのから手をつけると思う(`・ω・´)

SDK 1.9.0調査中

ぼけーっとしてても仕方ないので、SDK 1.9.0の入ったROMを試している。
M001くんは仕事上でのスケジュール管理ビュワーに使ってたりしてるので、ほぼ卓上固定でJorteとかを使っている。
これくらいの負荷なら貧弱CPUのM001くんでもへーき。
ま、コレくらいしか使い道が無いってのも悲しいが(笑)

んで、ノートPC上でUbuntuを開き、ターミナルでlogcatを流しっぱなしにしてるんだけど、やっぱりまだSDK自体が完成してないのか、流れるデバッグログが1.7.4よりもかなり多い。
でも、思ったより安定している感じはする。
ドライバ関係は手を入れてるんだろうな。
正式にアナウンスが無いのがアレだけど、ROM作者が使いたいって思うのは分かる。
Setting.apkもイイ具合に項目が増えてるし。
私も使いたい(笑)

m001etc-ROMだけど、ver1.0.0は1.7.4ベース。
その次のバージョンは 1.9.0ベースにしようと思う。
それまでに、正式アナウンスで安定版ファームが出ればいいんだけどね。
やっぱ、現状で安定しているSDKバージョンで1つは出したい。
ま、安定版の担保みたいなもんだけど。

で、SlateDroid効果でダウンロード数が伸びている・・・
このサイトは日本語ベースなので、アナウンス用の英語サイトも作ってみた。
ていうか、英語はまったくダメなんだが(;´Д`)
機械翻訳に頼りっぱなしでいくしかない。

日本語もおぼつかない変な関西人が妙な英語を披露する面白サイトってことでヨロシク♪

2010年8月25日水曜日

M002≒M001

えー、画面がぶっ壊れたM001くんはまだなんとか生きてます(笑)
マウスで動かせるのが救い(・∀・)
でも紐付きだと持ち運べんべん不便。
とりあえず、代替品を入手するまで辛抱辛抱・・・・。
早く来ないかなぁ~(・∀・)

ところで、
ココで扱ってるファイルはmegauploadにおいてるんだけど、オーナーにはダウンロード数が分かるようになっている。
各バージョンで見るとM001用とM003用あわせて40件弱。
あまり宣伝もしてないし、マニアな内容だけに妥当な数字だと思う( ・ω・)
んでも、こんな勝手ROMでも使ってくれてるのはありがたいことだ。
m(__)mありまとう。

で、コメント欄に異国の方からのレポートがあってビックリした。
確かにSlateDroidのフォーラムにはちょこっと書き込みしたりしてたんだけど。
どこから辿ってきたのか謎だ。
でも、こんなめちゃくちゃな日本語すらおぼつかない、ぁゃιぃコンテンツを読んでくれたのかと思うとちょっと「やっちまった!」感が漂う。。。。

もうちょっとマシな日本語書けよ。ほんと。
トランスレータにかけたらむちゃくちゃだよ?
異国の方が混乱するよ?キット。
関西弁とか、オワタとか、(チンチン略とか、草wwとか。
Web翻訳とかで、訳すとヒドイw

でも、直す気は更々無い(`・ω・´)
(これでもドキュメントは平易な日本語にしてるつもり)


さておき、

M002とM001、各ver 1.7.4ファームの比較をしてみた。
いつものごとく、ファームのアップデータを解いてDiff。

違ってる部分は、
script\scriptcmd
script\etc\custkey
の2つのファイルだけ。
あと、M002には、
script\driver\wm8505_kpad_md.ko
script\mvl5_v5t_ramdisk_WM8505.100202.package.gz
が、存在しない。
ボタン周りが違うだけで、中身は同じっつーことだねー。

つまり、これだけ直せば、M001用をM002に適用できるっぽい。
あくまでも、っぽいのであって、できる!ではない。
だって、検証してないもーん(・∀・)
死んでも知らんw

人柱さぁ~ん、よろしく~( ´∀`)

2010年8月24日火曜日

バリンっとな


出先から帰ってきたら、

家に置いてたM001くんの

LCD割れてたww

家族が落として割ったらしいw

画面点くけど、色おかしいし(爆)

M001\(^o^)/オワタw
はぃはぃ、終了、終了ww

・・・・・(´・ω・`)つまらんがな。

なんか、いまさら1万も出して買いなおすのもバカみたいだなw
給料日までに考えるか・・・(゜-゜)

にしても、m001-ROMどうすっかな。

2010年8月21日土曜日

いろいろメモ

めも1

巷でうわさの新ファーム 1.9.0 beta ROM。
何が新しくなったのか、ちょっぴり覗いてみた。
Frameworkまわりは、まぁ新しくなってた。と言うか、WMのSDKにあわせてビルドしなおしたんだと思うけど。
で、ライブラリ周りを見てるとき気が付いた。

新ファームに gps_freerunner 載ってるww

libhardware_legacy.soにインプリメントされてるのを確認。
つまり、GPSに対応しようとしている。。。ってこと。

/dev/ttyUSB5 につながってる(予定の)GPSレシーバーを見にいってるみたいだ。init.rcでも関連の初期化をしてるっぽい。

でも、、、ちょっとぁゃιぃ。
と言うのも、、、コレ、レシーバーの対応はどうするつもりなのだろう??
専用のレシーバーをオプションとして売るのかな?
ひょっとして、うわさのM005用のライブラリと共通?
てか、M001用のファームだからやっぱり外付け??

とか、色々考えた。
まぁ、、、、いいけど。( ・ω・)

オイラとしては、キャリブレーションもGセンサーもGPS設定もできる Settings.apk が手に入ればそれでおkw



めも2

RMapsのTracks機能を使ってGPSのテストをしてるんだけど、Trackの軌跡がブチブチ切れる事がある。
しばらくトラックポイントを拾って軌跡描いてるなぁ~と見てると、突然、プチッとポイントを拾わなくなってしまう。
でも、マーカーはちゃんと移動してるから、ロケーションは拾ってるっぽい。
アレ??と思ってしばらくすると、またちゃんと復帰する(--;
なんか、ぴょんぴょん飛んでる軌跡になるんだけどww

で、たまたま、wifiを切ってトラッキングするとあら不思議、キレーにトラックポイントを拾いこぼすことなく記録してくれた。

むぅ(;´Д`)

前から感じてたんだけど、wifi処理って実は重い。
M001上でベンチマークを動かすと分かるんだけど、wifi ON/OFFでベンチマーク値がずいぶん違う。
もちろん、OFFの方が軽いのでベンチマークは良い結果になる。

やはりお粗末貧弱CPUにはハードな仕事だったのかと。。。
んなわけで、オフラインでトラッキングするときはwifi切って使おうっと。



めも3

で、、、
1.9.0まだー(チンチン略

2010年8月20日金曜日

M003なんちゃって版の作り方

M001とM003は兄弟機なのは知られてるところ。
で、中身についてもほとんど同じ。
ていうか、基本的にバイナリレベルではほぼ差が無い。
スペックが同じならまったく同じ振る舞いをする。

で、ハードウェアの面で違うところといったら、画面の解像度。あと、ボタン。
ま、外部ポートの有無もあるんだけど、直接カーネルとかドライバに関係するものではないので。

GPSの動作確認を募る意味もあって、M003に対応したROMも出してるんだけど、一応、どうやって作ってるのかをメモしておく。

-注意!!-
くれぐれも自己責任のもとで試してネ!
どうなっても、わしゃ知らん(`・ω・´)
-とりあえず書いておく-

M001版のROMをベースに、M003用に置き換えるべきファイルは次のもの。
置換するファイルはM003のオリジナルROMから取り出しておくこと。
(作業途中でM001用とM003用を混ぜると危険なので注意!(笑))
ファイル                   置く場所
touchcal                   \script\etc\
touchcal                   data.tar           /wmtpref/
usbgadget.sh              android_fs.tar    /
wm8505_kpad_md.ko    android_fs.tar    /
libwmtapi.so               android_fs.tar    /system/lib/
scriptcmd                 \script\
以上、オリジナルROMのDiffから引っ張り出した内容なので、基本的にコレで画面周りとタッチパネル、ボタンは大丈夫なはず。
.tarファイルの中にアーカイブしなきゃならないファイルは 7-Zip などを使って直接アーカイブを開きコピーすればOK。所有者とか権限はとりあえず気にしなくても大丈夫。

usbgadget.sh は、なぜかM001と扱いがちょっと違う。謎。
wm8505_kpad_md.ko はキーパッドのモジュール、libwmtapi.soはWMチップ用のライブラリで画面制御の処理が中に入ってる。

他のカスタムROMもやろうと思えば対応できるかも。
ただし、M001のハードウェアに依存した機能を組み込んでるようなものは難しい。
逆もまたしかり。(`・ω・´)

で、なぜ、「なんちゃって」版なのかというと、
私の脳内M003で妄想動作検証してるから(笑)
要するに、実機のM003持ってないけど対応できたよ!なんちゃって!(動かなくても許してね)という思いを込めて。

いや、そんなものは込めるな( ゜Д゜)

2010年8月19日木曜日

m001etc-B4 >A4

●はじめに

Beta 4です。
GPSレシーバーの動作機種が増えました。
一部の不具合を修正し、ファイルなどを整理しました。

今回もM003なんちゃって対応版も同時公開です。
ダウンロードは右サイドバーからどうぞ。


●ビーサンからの変更点
  • USBシリアルコンバータチップ、CP2102(CP2101)ドライバを組み込みました。
  • GPSチップ、MTK3327 と Sky Traq Venus 6 に対応しました。
  • ブートロゴを変更しました。(Thx おしこうじさん)
  • 追加フォントファイルのインストールができるようになりました。
  • 検索ウィジットの不具合を修正しました。

●解説

<対応GPSレシーバーについて>
実機として動作確認が取れているのは下記の通りです。
・GT-730FL-S    (Sky Traq Venus 6 / pl2303 / 38400bps)
・Gosget BU-363    (SiRF StartIII / pl2303 / 4800bps
・SKYLAB SKM50    (MTK3327 / cp2102 / 9600bps)
・GR-300        (SiRF StartIII / pl2303 / 4800bps)

<追加フォントファイルのインストールについて>
アーカイブを解凍してできる script\usr_etc ディレクトリに、TrueTypeフォントファイルを入れておくと /system/fonts に自動的にコピーします。
このとき、フォントファイル名を DroidSansJapanese.ttf にしておくと、Androidのロケール設定で日本を選択したときに、このフォントが使用されます。



以上。


対応GPSも増えて、選択肢も広がる~(・∀・)
だいぶ安定したバージョンになってきたかな~。
これで特に問題なければ次がバージョン1.0になる予定。
でも、これ以上はあんまり広がらないかなぁ。。。
新ファームが出ればいいのになぁ(゜-゜)

ちなみに、B4 は A4よりも大きい。
紙のサイズね(・ω・)

GPSコレクション

が、また増えたw

GPSレシーバーがぶっ壊れた後遺症とこの暑さで頭がおかしくなったのかも( ̄ー ̄)

ブツはコレ!

GT-730FL-S
GPS chip : Sky Traq Venus 6
USB Serial : pl2303 / 38400bps


秋月で売ってるGPSロガー。バッテリ内蔵。
スイッチON!でその時点からの位置情報をロギングしてくれる便利なヤツ。
もちろん、USBでつなげばフツーのレシーバーとしても使える。情報も多いねー。

早速、GPSコマンドを調べて、設定に追加。
今回はレシーバーのコントロールにバイナリメッセージを使う機種なのでちょっとドキドキ。何せ初めてなもので(* ̄o ̄*)
が、思ったようなトラブルも無く、あっさり認識&動作。
バッテリ外付けのGT-730FLも、中身はほぼ同じっぽい(旧型はVenus 5らしいけど)ので、たぶん使える。

使ってみた感じ。
衛星の捕捉もまずまず。受信レベルもまずまず。
まだ車載で試してないのでなんとも言えないけど、精度はあまり期待してない(^_^;


この調子でポンポン対応GPSレシーバーが増やせそうだ。
てか、自分で入手はすでに限界&お腹いっぱい(笑)
3つも買って(壊れたの含めて4つ)どうするんだよ馬鹿。
しかも、バイク乗りでもなければ、自転車や登山するわけじゃないので、自分で使用する用途はトンと見当たらない(・∀・)
単なる探究心だけ(大馬鹿)

B4準備中ぅ~。

2010年8月17日火曜日

モジュール(ってフラ語っぽいよね)

お盆休みも終わり、休み明けの荒野に日焼けの跡が痛い、今日の僕です。

休み前に急遽、GPSレシーバーを調達する羽目になって、自宅に戻ってすぐにぼげってみた。
ブツはコレ。

Gosget BU-363
GPS chip : SiRF StartIII
USB Serial : pl2303 / 4800bps


スペック的には前のGR-300と変わらないので、そのままM001につないで認識OK、運用OK。
テスト用の安パイレシーバーは確保(・∀・)

で、もひとつ。

SKYLAB SKM50
GPS chip : MTK3327
USB Serial : cp2102 / 9600bps


コレ、ショップの説明では pl2303仕様だったのに、購入したのは違うチップ cp2102 が使われているものだった(-_-メ
M001ではドライバ入ってないので認識しない・・・・
ショップに捻じ込もうか、、、と、一瞬、モンスな考えもよぎった。
説明と違うのは明らかにショップのミスなんだから捻じ込むのは簡単だ。

が、まぁまて、もう少し冷静に考えろオレ。
前から少し気になってたことを試すチャンスかもしれない。。。
コレは神が与えてくれた試練でもあり、チャンスなんだ!
と、わけの分からない妄想にとりつかれること5分。

チーン(・∀・)!
無いなら作れ!やったるで!

と、作業を始めたのが一昨日の晩のことだった(笑)

で、結局どうしたかというと、

有志が作業している WM8505用のカーネルソースを頂いてきて、必要なモジュールだけを捏造ビルドしてぶち込んだ。

うん。。。

動くね!(・∀・)

ビルド環境なんかは気が向いたら書く。
そういや、Androidのビルド環境も書いてないね(笑)


さて、実際に出来上がった cp2101.ko を実機にコピーして手動で insmod してやると、
USB Serial support registered for cp2101
usbcore: registered new interface driver cp2101
cp2101: v0.07:Silicon Labs CP2101/CP2102 RS232 serial adaptor driver
こんな具合にドライバが組み込まれる。

んでもって、USBにデバイスを接続すると、
usb 2-2: new full speed USB device using uhci_hcd and address 2
usb 2-2: configuration #1 chosen from 1 choice
cp2101 2-2:1.0: cp2101 converter detected
usb 2-2: reset full speed USB device using uhci_hcd and address 2
usb 2-2: cp2101 converter now attached to ttyUSB0
こんな感じで、シリアルポートとして認識され、/dev/ttyUSB0 が割り当てられているのがわかる。

これで、SKM50も使用できるようになったw

いや、USB シリアルコンバータチップ CP210x に対応できたってのが正解か。

2010年8月12日木曜日

m001etc-ビーサン

●はじめに

Beta 3版。
主にGPS以外のその他不具合の修正を行いました。
GPS処理に部分については変更無しです。
GPSレシーバーが壊れたので、GPS部分の動作確認は取っていません。

M003なんちゃって対応版も同時に公開します。
ダウンロードはいつものように、右のサイドバーからどうぞ。


●B2からの変更点
  • スリープ(バックライト消灯)時の状態遷移の不具合修正。
  • デバッグログ出力の整理。
  • Setting.apkをオリジナルに戻した。

●解説
スリープ時の状態遷移について。
M001系のAndroidはハードウェア上、完全なるスリープ状態にはならず、単なる画面の消灯しか行っていません。
したがって、Android標準のスリープ遷移を実行しようとすると、今回のような状態復帰などの不具合が発生するものと考えられます。

Setting.apkをオリジナルに戻すことについて。
「設定」などのシステムアプリはハードウェア依存の項目が含まれていますが、自家ビルドしたものでは、依存部分のソースコードが含まれないためそういった設定項目が反映されません。
M001では、タッチパネルキャリブレーションとGセンサー設定が上げられます。
しかし、オリジナルの「設定」では、位置情報やGPSに関する設定がすべて殺されてしまっていて設定できません。
そこで、オリジナルの設定機能を残したままGPSを使用できるように、GPSについてはデフォルトでON固定になるようにしました。
実際、GPSレシーバーの運用を考えると、現状ではホットプラグに対応する事が難しいため、その場でON/OFFする必要がありません。
GPSレシーバーが接続されていないときはレシーバーとの通信エラーになり、LocationProviderがその状態をアプリ側へ返すため、特に問題がないと考えます。
よって、Setting.apkについてはオリジナルに戻すことにしました。
GPSは設定しなくても、内部的には機能が有効化されています。


●thumbserverの処理抑制

バックグラウンドで動作する、メディアファイル用のデータベースサーバーです。
このサーバーのメディア走査処理が非常に重くM001の動作に影響を与えています。
SDカード等に存在するすべてのメディアファイル(音楽、画像、動画)を調べ、データベースへ蓄積していきます。(~peacockディレクトリ内)
大量のJPEG画像ファイル等があると、バックグラウンドですべてを走査するので非常に重くなり、動作がもたつく事があります。
そもそも、このサーバーはPEACOCKのメディアアプリ用に作られたもので、該当するアプリを使用しない場合、まったく必要がありません。

ただし、このサーバーは画面のキャプチャ処理に関わっており、サービスを停止すると画面キャプチャが撮れなくなるという問題があります。

そこで、メディアファイルの走査のみを抑制する方法を調べたところ、下記の方法で抑制できる事がわかりました。
走査して欲しくないディレクトリ内に .nomedia ファイル(ドットnomedia)を作成する。
ファイルの中身は空でも、何か書かれていても、どちらでも構わない。
thumbserverは、上記ファイルが存在するディレクトリ以降の下位ディレクトリも含めてメディアファイルの走査を中止します。

参考までにログ出力の様子です。
D/MediaScanner(  329): found .nomedia, skipping directory
D/MediaScanner(  329):  postscan directories: /sdcard

I/ActivityManager(  146): Stopping service: com.android.providers.media/.MediaScannerService
D/        (   51): found .nomedia, skipping directory
D/        (   51): start thread 1 at /sdcard/************
D/        (   51): [----I]Start file monitor loop
D/        (   51): CREATE OR OPEN DATABASE /sdcard/~peacock/peacock.db
D/        (   51): ------------version:210-------------
D/        (   51): [-------I]rootdir DELETE BY syncDB()
D/        (   51): ------------version:210-------------
例えば、SDカードのルートディレクトリに .nomedia ファイルを置くと、そのSDカードに対してはメディア走査を一切行いません。


以上。


この夏の必須アイテム(?)ビーサン。

スリープ復帰については確信を持った処理とは言い難いんだけど、ログのトレース上はタブン問題ないと思う。
けど、何かあったらコッソリ教えてくだされ( ̄∇ ̄)

不要アプリは削ったし、swapも使えるし、thumbserverは抑制できるし。
最初に比べればかなり軽くなったなぁ。
おかげで、Androidのノウハウも色々分かってきて面白い。
他のタブレットやら、Froyoとかでも応用できれば面白いだろうなぁ~。

ちなみに、
明日からしばし休みに入るのだ(`・ω・´)
しばらく、ほげるのもお休み。。。。

とかいいながら、出先にノートPC持って行ってほげってそうww

2010年8月11日水曜日

何というオチ

私は関西人である。
いきなり、なんだ?と言われそうだが。

関西人は、話の流れの中である種の「オチ」を本能的に期待する人種であることは間違いない。
「オチ」と言うと、お笑いを想像しがちである。
ストーリーに沿って最後はプッ!と笑える落しどころ。
そんなイメージを持つだろうが、それだけではない。
たとえ、悲惨な話であっても、その話の核心である「オチ」を期待する。

「実は!こうだったのです!!」「えぇ~!!なんだってぇ!!」

そんな感じだ。
そういった、ある種の予想外の展開であるとか、ネタの広がりであるとか、「オチ」に向かって行く話ほど好まれるのである。


で、


話はM001くんに戻るのだが。

スリープ復帰の不具合を追っかけていて、AndroidってスマフォOSだけあって電源管理の処理もきちんと入ってるんだぁ~、、、と、コードを眺めていた。
そもそも、電源管理の低レベル処理はハードウェアに依存するので、デバッグしながらあまり気にしてなかった。
と言うのも、どうせM001用のソースは無いしどこかの謎なドライバが勝手に処理してくれて、Android側とのステータスI/Fもコントロールしてくれてるだろうと考えていた。
オイラとしてはI/Fを基点に処理を追っかければ済むだろうと思ってわけだ。


で、、


気が付いた。


M001って、


細かい電源管理なんて考慮してないだろ!!
ヽ(`Д´)ノウワァン


やられた。。。。

そもそも、電源管理なんてきっちりしてないところに、スマフォ仕様の正常な電源管理の処理をぶち込んで正常に動くわけが無い!(ややこしい

ようするに、バッテリー充電のステータスは取れる(一部変だけど)けど、アイドリングステータスやら、オフスクリーンやらのときの細かい電源処理(具体的にはデバイスを一時的に切り離したりスリープ状態にしたり)は全くしてない。

必死で正常なスリープ処理を追っかけてたオレ様の時間を返せ馬鹿。


実際に、正常な処理が「走らないように」libhardware_legacy 内の powerコントロールからのイベント処理を殺してやると、


キレーに動きました♪(タブンw)


ばかちーん(つД`)

またひとつ、中華タブレットの恐ろしい仕様を見た気がする
( ̄ー ̄;

でも、なんとかビーサンの目処が付いたな。
GPSが無いけどwww
こりゃお盆明けだな。

GPS死亡ちーん

先ほど、亡くなられました (-m-)

よりによって、こんなときに。


Winなマシンにつないでもうんともすんとも。

ばかちーんヽ(`Д´)ノウワァン

とりあえず、代替品を調達せねば(つД`)

2010年8月10日火曜日

スリープぅ他

m001etc-ROMはスリープが変、(´・ω・`)なのを、相変わらず調査中。

原因を絞り込んでいる過程で、オリジナルと色々置き換えてたライブラリとかシステムapkとかを戻したりしてたら環境がワっケワっカラン♪状態になってしまい、再度やり直し。
結局、Setting.apkが原因ではなく、改造 libhardware_legacy.so が悪者である事がやっと分かった。

って、、、、
それでもまだどこが悪いのかは分からん。
そもそも、正しいスリープ動作がどうなってるのかが分かってないから(笑)

でも、GPS周りの処理は分からないなりに組めた気がするので、スリープ動作も分からないなりに何とかなりそうな気がする。
いや、気がするだけで、根拠は無い!(キッパリ

libhardware_legacy.so に組み込まれているサービスとしては、
GPS, wifi, flashlight, mount, vibrator, uevent, power
この中で怪しげなのは、wifi と power かな。
uevent なんかも臭うけど、処理の中身はほとんど何もないのでシロっぽい。
power は電源管理関係の処理が入ってるのでぁゃιぃ。
とりあえず、こいつらをしらみつぶしにチェックだ!
おそらく、EKENが手を入れた箇所がどこかにあるにちまいない。

でもなぁ、オリジナルでスリープ遷移のlogcat見てても情報が少なすぎるんだよなぁ。
もうちょっと詳しくログが取れれば原因も分かるのに(つД`)


ところで、ウザいthumbserverの件。
メディアファイルの走査を抑制する方法がなんとなく分かった。
でもちょっと手間。
強制的に抑制できないかさらに調べる(`・ω・´)


さらにところで、、、
SlateDroidのフォーラムで、M001開発版ファーム(?)らしき、ver1.9.0ファームが出回っている話題で盛り上がっている。
私は試してないのでなんとも言えないんだけど、読んでる感じでは完全にカスタマイズする前のフレームワークなどを使ってるような。
これが本当に開発版なら、次のファームの準備もあるってことなのかな?
てっきり、1.7.4で打ち止めだろう?と期待してなかった(笑)
でも、本物かどうかも分からないよなぁ。

それよりもむしろ、ソースコードまだぁ~(チンチン略

2010年8月9日月曜日

Ecotox 1.3.1他

Eco氏もがんがっているが、ややペースが落ちた。

っつーか、フォーラム見てても反響が多すぎてレスも大変だぁなぁ~と。
オイラは他人事だからいいんだけど、何度も同じ質問するやつは自重しろ、と思う。
(´・ω・`)しょぼーんだよ。

で、Diffった(笑)

Eco氏も今回からベースを 1.7.4に移した。ほぼ100%に近い。
ただし、一部のスクリプトは何故か1.7.2のまま。
でも、特に影響ないので問題無しだろう。
中華アプリもごっそり減ってる。

見た感じ、その他は特筆する事がない。( ・ω・)

そうそう、
telnetが入って有効化されてる模様。
スクリプト見た感じでは、リモートからtelnet loginできるっぽい?

でも、、、、特にナニができるわけでもないしなぁ・・・・
デバッグするならadbでも同じだし。
むしろ、ネットにつながった端末のtelnetを開けっ放しはどうかなぁ~、と、思う。
(´・ω・`)ま、危険性を理解してればいいんだけど。

と言うわけで、今回もパスした。
ていうか、m001etc-ROMでインスコする余裕などない(笑)

ところで、m001etc-ROM。
GPSのコアな処理は問題なさそうなので、ひとまず置いといて、問題点と全体的なパッケージのまとめを考え中。

問題点をつぶしてて気が付いたんだけど、
今、入ってるSetting.apkは、GPSやBluetoothが設定できる反面、キャリブレーションとGセンサーの設定ができない。
で、なぜか、Gセンサー設定の有無がスリープ復帰の動作不具合に絡んでいるっぽい。
なんで、Settingが(・ω・?
詳細がいまひとつ分からないんだけど、スリープ復帰のデバッグログを見てると、やたらSensor系のログが絡んでくるのだ。
で、Setting.apkを1.7.4オリジナルのに戻すと不具合解消( ゜Д゜)
SensorもWMオリジナルのコードで書かれてるっぽい。

やっぱさぁ、
wm系のソースコードが欲しい(´・ω・`)
そっちの処理でどうやってるのか見ないと、さっぱりわからん。

とりあえず、オリジナルを踏襲しながらGPSが使えるようにやってみるか( ・ω・)

2010年8月5日木曜日

m001etc-B2

以下、ドキュメント的な文章(`・ω・´)

●はじめに

Beta 2版です。
基本的な仕様はB1と変わりませんが、設定ファイルなどを外部に出して個別設定ができるようにしました。
あと、個人的にswap関係の設定も追加しました(^_^;

ダウンロードは右サイドバーからどうぞ。



●B1からの変更点
  • gps_freerunner レシーバーコマンドメッセージをバイナリメッセージに対応。
  • GPSレシーバーチップの設定ファイルを追加。
  • u-bloxのGPSチップに対応したつもり。
  • GPS初期化の設定ファイルを追加。
  • swap初期化の設定ファイルを追加。(オプション)
  • 各個別指定ファイルのupdate.sh処理追加。
  • scriptcmdを手直し。
  • google mapを一般アプリに変更(削除可)

●インストール構成ファイル

B2から、GPSなどの個別設定に対応できるように、インストール時に構成ファイルを使用するようにしました。
各自の環境に合わせた構成内容を記述することにより、インストール処理時に自動的に本体に反映するようになります。
構成ファイルはzip解凍後にできる次の3つです。
script\usr_etc\gpsdevice.conf
script\usr_etc\gpsinit.sh
script\usr_etc\swapinit.sh
必要に応じて、3つのファイルをテキストエディタなどで開き、中身を編集してください。

※編集後の保存時には改行コードに注意してください(UNIX系)


●gpsdevice.conf

GPSチップごとのコマンドメッセージが書かれています。
セクション構成は次のようになっています。
  • [SiRF StarIII general]
    GPSチップ名称です。[]でくくった中の文字列をgpsinit.shにて指定します。
  • GPSCMD_INIT=
    GPSレシーバーを初期化するコマンドです。現在、未使用です。
  • GPSCMD_COLDSTART=
    GPSレシーバーをコールドスタートするコマンドです。
  • GPSCMD_WARMSTART=$PSRF104,0,0,0,0,1,1,12,2*
    GPSレシーバーをウォームスタートするコマンドです。現在、未使用です。
  • GPSCMD_HOTSTART=$PSRF104,0,0,0,0,1,1,12,1*
    GPSレシーバーをホットスタートするコマンドです。現在、未使用です。
  • GPSCMD_BAUDRATE=$PSRF100,1,%d,8,1,0*
    GPSレシーバー側のシリアル通信速度を設定するコマンドです。現在、未使用です。
  • GPSCMD_MSG_UPDATE_H=
    GPSからのメッセージ通知を頻繁に行うためのコマンドです。これによりGPSを利用するアプリケーション起動時にメッセージ頻度を上げます。目安として1秒ごとにメッセージが送られてくるように指定します。
    メッセージ毎に複数のコマンドになる場合は、'|'でセパレートしてください。
  • GPSCMD_MSG_UPDATE_L=
    GPSからのメッセージ通知をアイドリングするためのコマンドです。GPSが使用されていないアイドリング時のメッセージ頻度を下げます。目安として10秒ごとにメッセージが送られてくるように指定します。
    メッセージ毎に複数のコマンドになる場合は、'|'でセパレートしてください。
上記、コマンド指定の記述はAscii文字列になります。
バイナリコマンド送る必要がある場合は'\'に続いてバイナリコードを記述してください。

現在、対応外のGPSレシーバーを利用している場合、上記コマンドを調査し、指定された内容のメッセージを記述することで対応できるかもしれません。


●gpsinit.sh

Androidブート時に、GPSデバイスを初期化するスクリプトです。
次の行を変更可能です。
  • GPS_DEVICE_TTY=ttyUSB0
    GPSが接続されているシリアルポートのttyデバイスを指定します。
    通常、ttyUSB0になります。
  • GPS_DEVICE_SPEED=4800
    GPSが接続されているシリアルポートの通信速度(bps)です。
    GPSレシーバー毎にデフォルトの速度が決められているはずなので調べてください。
  • GPS_DEVICE_MODEL="SiRF StarIII general"
    接続されているレシーバーのGPSチップ名称です。gpsdevice.conf に記述されたセクション毎のチップ名称を記述してください。

●swapinit.sh
Androidブート時に、swapをonにするスクリプトです。
次の行を変更可能です。
  • SWAP_DEVICE=""
    swapパーティションのデバイスファイルを指定します。
    例:SWAP_DEVICE="/dev/block/mmcblk0p2"
    空文字列の場合、swap onは行いません。
  • SWAP_SWAPPINESS=30
    カーネルのswappiness値を指定します。
    特に変更の必要がなければそのままでも問題ありません。
以上。


と言うわけで、色々いじれるようにしてみた。

GPSチップの各コマンドはネットでぐぐれば色々調べられると思う。
おいらは、GPS受信機用NMEAモニタ for Windows NMEA.EXE Ver1.60 (4river氏作)のiniファイルを参考にさせてもらった。
作者殿には感謝感謝m(__)m

swap設定も追加したので手間無しで環境インストールできるようになって便利。

オイラ仕様でごまめなさい(´・ω・`)


動作報告など待ってまぁ~っす♪(はぁと


などと、かわいこぶってもしゃーない(`・ω・´)

ていうか、みんなM001に飽きたんだろうなww

2010年8月3日火曜日

m001がクソ重くなるわけ

デバッグしてると、Androidや本体の色んな挙動ログを目にする。
見に行かなくてもいいデバイスファイル読みに言ってエラーこいてたり、初期化サービスがタイムアウトしてたり。
それが正常な挙動かどうか判断できないから調べないけど、こういうのが積もり積もってm001の貧弱CPUリソースを食いつぶしてるんだなぁ~としょんぼりな気分にもなる(´・ω・`)

で、m001を使っていて、特に初期起動時やSDカードを刺したときなんかにクソ重くなることはないだろうか?
なんでこんなに重くなるのだろう?と不審に思ってたら、
流れるようなログが。

D/        (   48): *******Update file info work
D/        (   48): /sdcard/DCIM/101MSDCF/DSC00057.JPG
W/WMT_MEDIA(   48): calcFinalDestSize invalid args: dstWidth/dstHeight=(0/0)
I/WMT_MEDIA(   48): H/W jpeg decoding return 0, decode OK(1), scaling OK(1)
D/        (   48): *******Update file info work
D/        (   48): /sdcard/DCIM/101MSDCF/DSC00058.JPG
W/WMT_MEDIA(   48): calcFinalDestSize invalid args: dstWidth/dstHeight=(0/0)
I/WMT_MEDIA(   48): H/W jpeg decoding return 0, decode OK(1), scaling OK(1)
こんなのが延々流れて行った( ゜д゜)
こいつか・・・・

このログを吐いてるプロセスはコレ
   48 root     41024 S    /system/bin/thumbserver
メディアファイルのサムネイルサーバーらしい。

こいつはディレクトリを走査して、メディアファイル(画像、音楽、動画)をみつけると上記ログの処理をするようになっている。
たぶん、サムネイルの生成チェックだとおもう。

たまたま、古いデジカメで使ってたSDカードを、画像を消さずにそのまま作業用に使ってて、ログを取ってるときに気が付いた。
バックグランドの処理とはいえ、この画像が大量にあったりすると、延々、裏で走りっぱなしになるのでとても重い。

よく、マンガ読む端末として使う話を聞くけど、あれって画像ファイルを表示してるんだよね?
もし、ページ数が膨大なら、このバックグランド処理に気をつけたほうがいいかも。

とはいえ、この処理が走るのは最初の1回だけで、あとはSDカードを抜き差ししても再度走ることはないみたい。
だから、最初(初めてSD刺したときなど)は重いけど、しばらくすれば処理が終わり以降は軽くなるだろう。

もちろん、ファームを入れ替えたらやり直しだけどね( ゜Д゜)

2010年7月30日金曜日

m001etc-B1人柱公開バージョン

■はじめに

GPSに対応したM001用カスタムファーム、m001etc-B1 を人柱公開します。
Beta 1と言う扱いなので、万人に推奨できるものではありません。
GPSレシーバーを動かしてみたい!と言う人柱精神にあふれた方々向けです。


■注意事項とお願い

次のことについて了解の上、ご利用ください。
  • 全てにおいて無保証、自己責任、ノーサポート、文鎮化しても知らん(´・ω・`) ことが前提です。
  • ここに書いてあることは正確ではありません。間違いが含まれていることがあります。
  • この内容についてメーカーやベンダーに問い合わせはしないこと。
  • 助けが得られなくても男の子は泣いたりしないこと。 
  • よい子は絶対にまねをしないこと。
以上、了解いただけない方は絶対にインストールしないでください。
なお、ファイルは予告なしに削除する事があります。

人柱な方はインストールした結果やGPSの動作報告、場合によってはデバッグログの提供などしてもらえると助かります。

このカスタムファームはGPS実験用のライブラリを組み込んだものですが、GPSがなくてもフツーに使用できます。
デバッグ用にroot化してあったり、不要なアプリは全削除してあったりと、何かと小回りのきく仕様になっています。
また、Bluetoothはデフォルトで使用可能にしてあるので試してみたい方はどうぞ。
できれば、ドングルの動作報告などしてもらえたらありがたいです。

それと、pl2303なGPSでSiRF以外のチップのレシーバーをお持ちの方は、初期化コマンドの実験台になってくだされ(笑)


■m001etc-B1仕様
  • オリジナルファームver1.7.4ベース。
  • アプリを大幅削除。
  • いくつかのアプリを追加。
  • Marketはそのまま。
  • /system/appを自ビルドパッケージに入れ替え。
  • /system/lib/libhardware_legacy.soを入れ替え(GPS対応)
  • Bluetooth設定可。
  • GPS初期化利用可。
  • wifi offでUSB電源を切らない。
  • GPSのホットプラグには未対応。
分かっている問題点
  • wifiでステルスなSSIDを見つけられない。
  • 自動消灯が上手くいかないことがある(?)
  • オリジナル未対応機能の設定は無保証。
  • タッチパネルキャリブレーションができない。

■m001etc-B1インストール

ダウンロードは右サイドバーのダウンロード項からどうぞ。
MEG*UPLOADでスマン(・ω・)

zipを解凍すると script フォルダができるので、ファームウェアアップデート同じ要領でアップデートすればOK。
zipファイルには、ConnectBot.apk と com.chartcross.gpstest.apk が同梱されているので、必要に応じてインストールしてください。


■GPSレシーバー

m001etc-B1で対応しているレシーバーは次の仕様のものです。

本体とUSBで接続し、本体からはシリアルポートとして認識されるもので、
USB-シリアル変換チップ pl2303 が使われているもの。
かつ、
GPSチップ SiRF StartIII 系チップが使われているもの。
(「SiRF pl2303」でぐぐると幾つか機種がヒットするはず)

pl2302ドライバはオリジナルカーネル組み込みのものを使用しています。
シリアルポートのデフォルト通信仕様は次の通りです。
4800bps 8N1

■GPS起動確認
  • GPSレシーバーの取り付け
    本体電源offの状態でGPSレシーバーを取り付けます。
    本体電源onの状態でGPSレシーバーを取り付けてもデバイスの初期化ができないので使用できません(ホットプラグには未対応)
  • 電源on
    本体電源をonにします。
    Androidが起動してきますのでしばらく待ちます。
  • 設定の確認
    「設定-セキュリティ&位置情報-GPS機能をONにする」がチェックされているか確認します
  • 衛星の捕捉
    GPSレシーバーを衛星が捕捉できる場所へ移動させます。
  • テスト
    googleマップや同梱のGPS Testにて動作を確認します。
    (googleマップに現在地が表示されている。GPS Testで衛星を測位している状態が表示される。)

■デバッグ

簡単なデバッグ確認を行う手順です。
  • 設定-アプリケーション-開発-USBデバッグ をチェックする。
  • ConnectBotを起動する。
  • 接続先は local ユーザー名は空でOK。
  • あるいは、adb shellを使ってもOK。
  • コンソールが開いたら、プロンプトより

    $ head /dev/ttyUSB0
    を実行。しばらくするとGPSレシーバーからのNMEAメッセージが表示される。

logcat でもデバッグメッセージが出力されます(タグ:gps_fr)
リモートマシンからadbを使ってlogcatするのがログを取り易いと思います。



■スクショなど


あと、、、、
改造向けの詳しい解説なんかは気が向いたら書く(´・ω・`)

さぁ金曜日だ。
会社帰りにGPSゲットして、
土日に改造三昧、
「うごかねー!」って悲鳴が聞こないように、
健闘をいもる( ̄ー ̄)ニヤリ

タッチパネルキャリブレーション

ファームを更新するたびにキャリブレーションするのが面倒になってきたので、ファームの初期値として最適なキャリブレーション状態で起動するようにしてみた。

で、タッチパネルのポイント位置を制御するキャリブレーションファイルがある。
本体内で言うと、

/data/wmtpref/touchcal

この中に矩形点の座標値らしき数値が7つ書かれている。
タッチパネルのキャリブレーションを行うと、このファイルの内容が書き換わるようになっている。

んで、実機でキャリブレーションを行った後、ConnectBot なり、adb shell なりでこの内容をメモっておく。
各コンソールより、
$ su
# cat /data/wmtpref/touchcal

-168 -22764 92048478 15106 14 -5038164 112813
こんな感じ。

で、ファームウェアインストール時からこの最適値を採用するには、ファームを解凍して出てくる、script\etc\touchcal ファイルの内容をメモった内容で上書きすればOK。

とても簡単。
touchcalだけコピー取っておけば、ファームアプデト時に使える。

さて、GPSファームまとめるか・・( ゜Д゜)

2010年7月28日水曜日

ROMダイエット

--注意!!--
この記事の内容は正確ではありません。
各自の責任において実行するなりなんなりしてください。
ナニか間違いがあってトンでもないことになってもわたしゃ知らん!(´・ω・`)
--注意おわり--

とりあえず、私がやってる手順をメモっておく。
基本は、よくわかってないBlogさんとこの手順を参考にして、いくつか追加で修正している。

下記の手順はオリジナルファーム ver 1.7.4 ベース。
それ以外のバージョンもだいたい同じだと思う。

用意するもの。
・WinなマシンにファームウェアROMを解凍しておく。
・PupSQLite
・7-zip

1. script\pre_data_disk\app の中の不要なapkを削除。
2. 7-zip で script\android_fs.tar を開く。
3. /system/app の中の不要なapkを削除。
4. 7-zip で script\data.tar を開く。
5. /data/app の中の不要なapkを削除。
6. 削除したapkに対応した /data/dalvik-cache を削除。
7. 同じく、対応した /data/data 以下のフォルダを削除。
8. /data/data/com.android.launcher/databases/launcher.db を取り出し、PupSQLiteで開き、favoritesテーブルから削除したapkのデータを削除。(Home画面に表示されるアプリ)
9. 8.で編集したlauncher.db を data.tar の /data/data/com.android.launcher/databases/ に戻す。
10. /system/packages.xml を取り出し、テキストエディタで開く。
11. 削除したapkの <package> ~ </package> ブロックを削除していく。ブロック範囲を絶対に間違えないように!!
12. 編集したpackages.xmlを data.tar の /system/packages.xml に上書き。

※作業は一気にやらずに、少しずつアプリを減らしていって動作確認が吉。
※下手すると、起動しない。
※バックアップを取っておこう。
※script\pre_data_disk\app と data.tarの/data/app に同じアプリが入ってたりして面倒くさい。


●やってることの概要
apkの削除はアプリ本体を削除している。
/data/dalvik-cache と /data/data 内のデータはアプリが使用してるものを削除している。
packages.xml の packageブロックはアプリケーションマネージャが使用しているもので、インスコしないアプリ分は削除する。
8.は起動したときにホームから削除すればいいような気がするので、しなくても支障が無いかも。

単純にこの手順で削除できないものもあるので注意するべし。


GPSなROMを作りながら、M001はリブートマシーンと化している今日この頃。
(´・ω・`)まだ文鎮にはなってないよ

2010年7月21日水曜日

ちゃらり~DockからUSB~

で、って言う。

私はUSB Hubを内蔵して色々組み込んで工作してるけど、ふつーの人はこんな複雑で面倒な改造を求めてるとは思わない。
Hubにぶら下げてるのは
USBメモリ(内蔵拡張ディスク&固定swap領域)
Bluetooth(内蔵予定)
あと、外出し用の外部USBコネクタ。

SlateDroidでも古くから話題になってるんだけど、実はDockコネクタにホストUSBが出ている。
DockコネクタとUSBメスコネクタと工作する根気さえあれば内部改造なしでUSBが引き出せる。
どうせHub内蔵するし、コネクタを入手するのが面倒だったのでそのまんま放置してたんだけど、ここへ来て作ってみることにした。


DockコネクタはiPod用のUSB充電ケーブルだと思われるものからむしりとった。

で、配線はこんな感じ。


ピンアサインは
Dock 9pin -- USB +5V (RED)
Dock12pin -- USB D- (WHITE)
Dock13pin -- USB D+ (GREEN)
Dock30pin -- USB GND (BLACK)
Dockコネクタのピン番号は写真の通り、
Dockコネクタを刺して、左から 1~30 となっているので間違えないように。
【2010.8.1追記】D+とD-の表記が逆だった(^^ゞ修正済み

Dockピンとコードの半田はとても細かいので特にショートしないように注意。
私の入手したコネクタはピンを引き抜く事ができるタイプだったので、いったん、全ピン抜いてばらした。
んで、必要なピンだけ半田->アサインどおり入れなおすようにすれば半田付けも楽だしショートも防げる。

ショートしちゃうと最悪本体を壊すので各自の責任において実行してね(はぁと
壊しても知らん(´・ω・`)

これで、内部無改造でホストUSBが引き出せる。
GPSもちゃんと認識される。
イけるね(・ω・)

要は、
GPSを取り付けるのにUSBが必須になってくる。
内部改造が必須だと敷居が高すぎてやりにくい。
で、内部改造なしの方法を確かめてみたかったと言うわけ。

あ、そうなると、今の外出しのUSBコネクタが不要になるなぁ。
デバッグ用にシリアルコンソールでも引き出そうかな。

小麦色の肌!暑い夏!

タイトルは特に意味はなす。
小麦色の肌はうぇるかむだけど、小麦入りの肌はなんだかなぁ。

さておき。

GPSはおおむねまとまってきた。
結局、GPSチップごとに必要な情報を外部コンフィグファイルで指定することにした。
残ってるのはホットプラグ部分。
これ、どうしようか。
抜き差しをうまく検出できる方法があれば良いんだけど。
ポート監視サービスでも裏で動かすくらいしか思いつかない(´・ω・`)
まぁ後で試そう。

で、テストしながら思ったんだけど、
RMapsとGPSはとても良い感じの組み合わせだと思う。
必要なマップだけを取り込んで使えるからエコだし(^^;
GPSの追従はちょっと遅いけど、位置の確認には問題ないし。

んで、良い天気だったから、M001を車載してドライブがてらRMpasでぐるぐるしてたとき。
ふとみると、マップが固まってる。
宅内デバグの時はフリーズなんかしたことないのに、、、
あれー?と思って、再起動。
10分ほど走ってると、、、また固まった。

で、本体を持ってみると、、、
(;´Д`)・・・アチイ、、、

はい!熱暴走かましてくれてました!
確かに、車内は涼しいとはいえなかったけど、シートに置いとくだけで熱暴走とは、、、、、
使えねぇ、M001(メ--)

と言うわけで、
暑い夏を迎えて、放熱対策も必要になってしまったとさ。
(´・ω・`)ばかちーん

2010年7月15日木曜日

他のGPS

今まさにほげり中。

で、おおむね動作の概要をつかんだ。が、しかし。
色々とハードウェア依存の処理が入ってきて困った。

gps_freerunner.c はu-blox社のGPSチップを前提に組まれているっぽい。
初期化処理がそうなっている。

GPSレシーバーは基本的に電源が入れば衛星を補足してシリアルポートへNMEAメッセージを送り続ける仕組みになっている。
これはほぼ、どんなGPSレシーバーも共通。(メッセージプロトコルが特殊な場合もある)

で、レシーバーの動作をコントロールする場合、ホスト側からシリアルポート経由でコマンドを送ってやる仕組みになっているものがほとんどだ。
そのコントロールコマンドはGPSチップベンダーによって仕様が異なっている。

例えば、
レシーバーから送られてくるNMEAメッセージの送信間隔時間を変更するコマンド。
GGAメッセージを1秒間隔で送ってくるようにするには、
u-bloxの場合
$PUBX,40,GGA,0,01,0,0
私の使ってる、SiRF社 StarIIIと言うチップシリーズの場合
$PSRF103,00,00,01,01
とまぁ、全然違う。(ほんとは、メッセージのお尻にチェックサムが付く)
他のチップはもっと複雑なものもある。

GPSレシーバーのコントロールは、初期化やGPSアイドル時のメッセージの抑制などでどうしても必要になる。

困ったがな(´・ω・`)

GPSチップごとにコマンド切り替える仕組みなんか面倒くさくて入れる気にならん。
おまけにシリアルポートの向こうにあるチップの型番なんかできるだけ知りたく無い(ハードウェア依存の処理を埋めたくない)

う゛ーーーん。

gpsdevice.confみたいなコンフィグファイルを作るか・・・
( ゜Д゜)、、、、
それでも、特定のチップしか初期化できないよな。

てか、そもそも、GPS刺した時に /dev/ttyUSB0 になるなんて保証も無いんだよなw

環境に依存する部分は各自の責任ってことでいっか(笑)

2010年7月14日水曜日

取り急ぎ

いじってたら知らぬ間に測位してた(*´д`)ハァハァ

位置情報も取れてるっぽ。




googleマップ

をぉwまさに現在地(笑)


とりあえずやらなきゃならないこと。
・GPS設定のUIをなんとかする
→自家ビルドSetting.apkに置き換え?
→wifiの挙動が怪しい。
・GPS初期化処理(Android側)をきちんと入れる
→/dev/ttyUSB0 の初期化
→GPS ONの正しい処理手順を調べる
→USBのホットプラグが検出できないか?
・GPSレシーバーの初期化処理
→シリアルポートへ発行するコマンドを調べる。
→レシーバーチップごとに違うので、どこでデバイス差を吸収するか?
→レシーバーチップ独自の機能(測位アルゴリズム)などは使えないか?

山盛りじゃまいか(笑)

走るgps_freerunner

で、一体、今どこ?

そもそも、素のM001にはGPSのつぶやき(NMEAメッセージ)を処理する仕組みが入ってない。

でも、シリアルドライバは入ってるので、一部のUSB-GPSは認識できる。

デバイスをつないで、NMEAメッセージを取り出すことは簡単。

じゃ、Android定義のI/Fをちゃんと用意して、GPS周りの処理を実装すればおk!?

gps_freerunnerと言う実装を掘り出す。なんかいけるかも。

libhardware_legacy.so 野良ビルド

動かねぇwwデバッグ

ちょっと動いたwwさらにほげる&修正

衛星拾ったww(←今ココ)


と言うわけで、こんな感じで衛星拾ってたりする。
少年の心をくすぐるマンガレーダー風味が(・∀・)イイ!!

画面の通り、9つの衛星をキャッチ。
しかし、何時までたっても測位してくれない
(´・ω・`)ありー?
おかげで位置情報が取れない。
なぜだ、、、

でもまぁ、ここまでこぎつければ何とかなりそう。

gps_freerunnerの処理を読んでみて、I/F周り~スレッド処理には特に問題ない、、、と思う。
GPSデバイスが投げてくるメッセージは、gps_freerunnerのスレッドが受け取ってせっせと解析処理する。
NMEAパーサーの動きは、
D/gps_fr  (  131): Received: '$GPGGA,******.***,,,,,0,00,,,M,0.0,M,,0000*59
D/gps_fr  (  131): '
D/gps_fr  (  131): Found 15 tokens
D/gps_fr  (  131):  0: 'GPGGA'
D/gps_fr  (  131):  1: '******.***'
D/gps_fr  (  131):  2: ''
D/gps_fr  (  131):  3: ''
D/gps_fr  (  131):  4: ''
D/gps_fr  (  131):  5: ''
D/gps_fr  (  131):  6: '0'
D/gps_fr  (  131):  7: '00'
D/gps_fr  (  131):  8: ''
D/gps_fr  (  131):  9: ''
D/gps_fr  (  131): 10: 'M'
D/gps_fr  (  131): 11: '0.0'
D/gps_fr  (  131): 12: 'M'
D/gps_fr  (  131): 13: ''
D/gps_fr  (  131): 14: '0000'
こんな感じで、NMEAメッセージを受け取るたびに解析処理されてる。

とりあえず、位置情報の取得ができるように、もう少しじっくり読む。
AndroidのGPSの扱いが不明な点もあるのでそっちも調べないとなぁ。
(`・ω・´)

2010年7月12日月曜日

Goin な My Location

なんか、古いアイドルの曲名みたいなタイトル。
 まぁいいや。さて、、、、
ひとまず、気になるところから攻めてみた。

メニューのセキュリティ&位置情報でGPSに関する現在地設定を出す方法を探してたんだけど、結局よくわからない。
bluetooth_uiのようなパターンでは無いような気がする。
と言うのも、BTに関してはデフォルトで使えないはずなのに init.rc内で初期化処理をちゃんと行ってた。
使えもしないのにこの手続きは不自然だ。
恐らく、そのうちBT付きのバージョンを出す(他機種として)ために、事前に入れ込んだ可能性が高い。
だって、M003もM002も、ベースファームウェアは同じなんだもの(・∀・)

一方、GPSはどうか。
これは最初から初期化する処理など入ってない。
BTとは全く対照的。てことは、GPSについては対応する気はあまり無い、、、と言うのが透けて見える。

となると、この先対応するかも知れないBTはこっそり入れて、対応予定も無いGPSは入れる必要もない。。。
と、考えるのは至極当然。

そんなわけで、個人的な結論として、
現在地設定は機能が殺されている、と考えることにした。
要するに探すのがメンドクセー!になった(笑)

と言うのも、あるアイディアがひらめいたから。

んじゃさ、自家ビルドしたAndroidのSettings.apkと入れ替えちゃったらどうよ?

・・・・(・∀・)相変わらずイイカゲンかつ強引。

でも、実験(笑)

サクッと結果、、、、、
思ったとおりw

ちゃーんと現在地設定が出る。
設定も一応できる。
ただし、エラーぶっこいてる模様。
GPSをEnableにした時のlogcat

D/GpsLocationProvider(  130): enable
W/GpsLocationProvider(  130): Failed to enable location provider
あはははは( ゜∀゜)

で、
Settingsを全部入れ替えたことになるので、色々と設定項目が増えたりUIが微妙に変化した。
VPNとモバイルネットワーク。通話設定なんてのも。


しかし、問題点がひとつ。

タッチパネルキャリブレーションが無くなった(爆)

やっぱプロダクト専用の設定項目だから、素のAndroidにあるわけ無い。
こんなところまで、ベンダーが手を入れてるとなると困ったな。
、、、(゜-゜)キャリブレーションのソースが欲しい。

ていうか、キャリブレーションだけ別アプリでできんのか?
できるならデフォのSettingsは捨てるのに(・ω・)

2010年7月11日日曜日

ほげりほげる

昨日に続き、調べるほげる。

wifiが居なくなる原因は分かった。
libhardware_legacy.so はgps以外にwifiとかpowerとか、他のデバイス制御も含まれている。
で、wifiの中身をデフォルトのままビルドしてたので、M001くんと性格の不一致が起こり、wifiが実家へ帰ってた模様。
具体的に言うと、呼び出すwifiドライバとかの指定が違ってた。wifi/wifi.c の中身を見たらすぐに分かった。
で、makeファイル直して無事つながるようになった。

と言うことは、それ以外のデバイスについてもM001くんに合わせないといけないってことになる。。。。
・・・そんなん(´・ω・`)知らんがな
ま、ひとまず、問題が起こればその時対応ってことで。


で、肝心のGPS。

ソースをほげりながら、logcatを見ながら、動作を観察してた。
どうやら、GPSのNMEAメッセージを処理するメインのスレッドが動いて無いような気がした。ていうか、動いてないっぽい。
で、アプリ側はLocationProviderで情報取ろうとしてるけど、処理スレッドが動いて無いんだから情報が取れるはずもない。

(´・ω・`)・・・たぶん、initのタイミングでエラってるにちまいない。

しかし、なかなかイイ感触。
処理さえ通れば問題なく動くことが予想できるので比較的楽観してたりする。
何よりソースを直接いじれてなんとかできる環境があるのがイイ。
とりあえず、夢の中でデバッグの方法を考えることにする。

2010年7月10日土曜日

GPSを動かす仕組み

色々調べて分かったこと。
シェアードライブラリ libhardware_legacy がGPSデバイスとのI/Fの入り口になる。
このライブラリの中で、GPSデバイスに対する制御のためのI/Fが取得される。
GPSを操作するときは、得られたI/F -> GPSライブラリ へと呼び出される形になる。
デバイスへのR/Wとかパースとか、実処理はGPSライブラリによって行われる。

で、現状はI/Fの接続先が、GPSデバイスエミュレータ用のダミーになっている。
つまり、GPSライブラリ自体が存在せず、ダミーにつながれていて、ダミーなので当然、I/Fから得られる情報は全部 false。
つまり、デバイスを見に行こうにも見に行くことなど到底ムリ。な、わけ。

これは、libhardware_legacy をmakeするときに、GPSについてはダミー関数をリンクしちゃってるってことで、逆に考えれば、GPSライブラリを使ったちゃんとした(?)libhardware_legacyをmakeしてやればいいんじゃないの?
んで、現状のと入れ替えちゃえば動くかな?
って、感じの方針で行ってみる。

いつものとおり、かなりイイカゲン。

んで、ぐるぐるしてたら、eclair用とおぼしきgpsライブラリの実装を見つけた。
ttp://gitorious.org/android-on-freerunner/freerunner_platform_hardware_hw/trees/eclair/gps

たぶん、これでいけるんじゃないか?と思って、さらにぐるぐるしてたら、実際に独自の実装で同じことをされてる方がおられた。
ttp://labs.beatcraft.com/ja/index.php?bc9%2FSoftware%2FAndroid%2Fgps

をぉ!これでいけるかも!?
早速、実験♪
と言うところが、3日ほど前のオイラ。

・・・環境作るのに時間かかった・・・(´・ω・`)

ケド、、、、
実験用のlibhardware_legacyをビルドしてGPSの初期処理なんかを適当にやってみると、、
以前は「GPSが見つからんがな」とか言って起動しなかった GPS Searcher が起動したよ(゜д゜)
位置情報は拾ってないけどw


で、現状での問題点がいくつかある。
  • GPS設定のUIが出せていない。
    GPSの強制ONはできてるからとりあえず後回し。
  • なぜかwifiがつながらなくなる。
    ONにすらできない。libの作り方を間違ってるか、制御用のソースが別に必要なのか、わからん。
  • 位置情報を教えてくれない。
    処理が抜けてる気がするww
うむむ、、、
どれもこれも致命的じゃまいか(笑)

まぁ一歩前進、と言うことだけど
公開できるレベルじゃないなぁ~(´・ω・`)
まだ先は長い。

2010年7月9日金曜日

特になし

雑記w

現在、ほげり中。。。( ゜Д゜)。。。。
わからんことだらけでワクワクする。

で、
Bloggerって初めて使うんだけど、なんかシステムが変なのか、デザイン変えたり記事を修正すると化けたりコメントが行方不明になったり。謎過ぎる。。。。
まぁ、そもそもネタ書きのためにその場しのぎで作ったからどうでもいいんだけどねー。
いつ消えてもおかしくない。それが、今日の他。
むしろ、ほげりすぎて文鎮化すれば円満に終了~(^_^;

ていうか、M001「他」って言う割にはその他のガジェットは出てこない(笑)
雨後の筍のようにぞろぞろタブレット機の新種は出てくるけど、評価がいまいちだったり、今更OSだったり、中華偽スペックだったりで、ほしいと思う機種が無い。
いじり倒して遊ぶなら、情報とノウハウの豊富なM001系でいいかなと。
次買うなら、もう少し中華スペックがはっきりした、それなりに安定したAndroid2.x系を手に入れようと思ふ。
それまでに色々いじって勉強すよう(`・ω・´)

2010年7月3日土曜日

usbgadget.sh

他の解析が楽しくてすっかり忘れてた。
この記事の通り、USBメモリを埋め込んで、swapも良好に動いてるんだけど、埋め込んだメモリの大半を未使用のままにしていた。
具体的に言えば、4Gのメモリを埋め込んで、swapに256M使った(/dev/block/sd1)だけで、残り(/dev/block/sda2)は絶賛死蔵中。

で、M001を付属のUSBケーブルでPCにつなぐと、リムーバブルな外部ドライブとして認識されるのを利用して、この絶賛死蔵中のメモリ領域も外部ドライブとして認識させてしまおう!、、、と言うネタ。

以下、ver 1.7 4ベース。

とりあえず、前の記事を思い出しながら。。。。

M001を外部ドライブとして認識させるのは、g_file_storage.ko と言うモジュール。
/init.rc -> /usbgadget.shと言う流れでロードされる。
この /usbgadget.sh と言うスクリプトに細工すればおk。

その前に、開放するべき領域、/dev/block/sd2 をフォーマットしたいんだけど、M001の内部コマンド mkfs.vfat は 2G以上の領域をフォーマットできないっぽい。
今更かよをぃをぃ、、、って感じだけどショウガナイ。
とりあえず、放置(笑)

で、usbgadget.sh の変更ポイントは、

insmod を実行している行で g_file_storage.ko を読み込んでいる部分のパラメータ file= に 開放したいデバイスを追記すればおk

例えば、16行目ほどにある記述。
insmod g_file_storage.ko file=/dev/block/loop0,/dev/block/mmcblk0 removable=1 stall=0

insmod g_file_storage.ko file=/dev/block/loop0,/dev/block/mmcblk0,/dev/block/sda2 removable=1 stall=0
こんな感じで追加する。
同じような箇所が他にも2箇所ほどあるので修正する。
echo出力のメッセージは別に直さなくてもいい。気になるなら修正。
file= 指定はデバイスであれば開放できるっぽい。

んで、
修正した、usbgadget.sh をadb で push
\>adb push usbgadget.sh /
コンソールから、suして、
# chown 0:0 usbgadget.sh
# chmod +x usbgadget.sh
リブ~~ト。うぃんうぃんうぃん(・∀・)

起動したら、付属のケーブルでPCと接続。
リムーバブルディスクとして3台認識されるはず。
1台目は内蔵フラッシュメモリ、2台目はSDカード、3台目が追加したメモリ。

で、M001ではフォーマットできなかったので、ここでフォーマット(笑)
Windowsからドライブのフォーマットをして使用可能になる。

めでたし、めでたし。

って、、、
普段、USBケーブルでPCにつなぐことなんかまず無いから!
あんまり意味無いんだけどね(・∀・)

2010年6月30日水曜日

NMEAを読む

とりあえず、GPSレシーバーが届いた。

コレ。
GR-300
やや太目のUSBメモリ(笑)
でも、GPSレシーバーも小さくなったなぁ~。

一般的なGPSレシーバーは、PCから見ればシリアルポート(いわゆるCOMポート)に接続され、衛星からの情報を元に位置情報をつぶやいてくれる装置だ。
USBのGPSも同じく内部にシリアルコンバータを持っているのでシリアルポートとして見える。
ひとまず、GPSレシーバーからの情報が取得できるか試してみた。

とりあえず、USBポートに刺す。
で、コンソールから、suになって、
# dmesg | grep pl2303

pl2303 1-1.4:1.0: pl2303 converter detected
usb 1-1.4: pl2303 converter now attached to ttyUSB0
/dev/ttyUSB0 にGPSレシーバーが接続されている。
pl2303はシリアル-USBコンバータチップ。
ファーム1.7.4のカーネルはpl2303をサポートしてるので同じチップのGPSレシーバーならいけるはず。

んで、GPS初期化
# stty -F /dev/ttyUSB0 4800
初期化に必要な情報はGPSの説明書に書いてあるハズ。
通信速度とかパリティビットとか、必要な項目を設定する。
あぁ懐かしいアナログモデム(´・ω・`)

これで、GPSレシーバーからのつぶやきが聞こえるはず。
20行ほど読んでみる。
# head -n 20 /dev/ttyUSB0

$GPGGA,.............hoghog.............

$GPGSA,.............foobar.............
と、意味不明の文字列が表示されればおk。
当たり前だけど、出るよー出るよー( ・ω・)

なーんか昔、
某GPSレシーバーを使ってNTPサーバー組んだなぁ~って思い出した罠。

んで、
ハードウェア的には問題なく認識できてるんだけど、肝心のAndroid側での接続がよくわからない。。。。
GPS関係の設定項目を出すにはどうするのだ?
あとたぶん、仮想マシン側でデバイスを接続しないといけないような気がする。
で、その方法が分からん。。。。(゜-゜)
Android1.6でGPS動いてる他のガジェットはどんな処理になってるんだろ?

いかーん、つまづいた~。

アテンション

このサイトで、

ファーム ver 1.7.4 用

と銘打って公開してるものは、
ECOTOX ver 1.1.1 では適用できません!!
\(^o^)/

だって、ECO1.1.1は1.7.2ベースなんだも~ん(´∀`)

死んでもしらん(´・ω・`)

2010年6月29日火曜日

環境変数変更用scriptcmd

scriptcmd適用するたびにファームをアップデートしてしまうのはとっても無駄。
Wifiの設定や解析用アプリを入れなおすだけでも時間の無駄なので、scriptcmdの環境変数初期化部分だけ抜き出して適用することにした。

今のところ、、、、問題ないみたい。
おkw
これで自由に切り替えられる(^^)

と言うわけで、置いときます。

※何が起こっても知りません(・∀・)

scriptcmd.env.bt.wifi.cam.1.7.4
bluetooth_ui, camera_ui, Wifiキレテナーイ適用

scriptcmd.env.bt.wifi.hw.cam.1.7.4
bluetooth_ui, camera_ui, enable_hw_scal, Wifiキレテナーイ適用

scriptcmd.env.wifi.all_ui.1.7.4
色んなUI, enable_hw_scal, Wifiキレテナーイ適用
※数分放置で勝手にリブートしちゃう。とっても不安定。

使い方は、
SDカードにscriptフォルダ掘る。
その中にお好みのスクリプトを scriptcmd にリネームしていれる。
M001に刺す。
電源ON。
環境変数だけアップデート実行(数秒)
画面にメッセージが出たらSDカードを抜いて再起動。

以上。


ところで、enable_hw_scalって何?
/system/lib/libwmtmedia.so
内で初期化されているパラメータ。
WM特有のライブラリなので、WM CPU専用と思われる。
中を少し見ると、MJPEGハードウェアデコーダで使用されるパラメータらしい。
変数名から察すると、ハードウェアスケーラーを有効化するものか?
よくわからんけど、面白い事ができればいいなぁ。

2010年6月28日月曜日

例えばこんなUI

いろんなUIを出してみた。

設定トップ


Ethernet


Pppoe settings


3G network setting


Hibernate



肝心のGPSセッティングが出せない(´・ω・`)

2010年6月26日土曜日

できたことまとめ

○USB Hub埋め込んだ
○USBメモリを埋め込んだ。
○swap常時稼動。
○WebCamの動作を確認した。
○USBキーボード&マウスで遊んだ。
○Bluetoothを有効化した。
○BTヘッドセットをつないだ。


昨日、何を血迷ったのかUSB-GPSをポチッた(笑)

次はGPS(゜∀゜)

Bluetoothヘッドセット

とりあえず、ヘッドセット借りてきた(^_^;
えーっと、、、

多摩電子工業 S4100
BTヘッドセットって使ったこと無いので使い勝手がよくわからん。
とりあえず、テスト用と言うことで。


認識は手順どおりやれば問題なくペアリングする。
一度、接続はしてるけど音声を送ってこない状態になったけど、M001でBluetoothのOFF/ONすれば直った。

M001側の音声は、通話とメディア音声を送ってくるようだ。
実際には操作音(メニュー操作のシュッ!とか)も送られてくる。


ビデオとMP3を再生させて見ると、ちゃんと音声を送ってきた。
をぉ、なんかデカいメディアプレーヤーww

録音もヘッドセット側のマイクを拾って録音してくる。
付属のレコーダーソフトがイマイチだからマケで拾ってきたボイレコ使った。

ソフト側にちゃんと音声を流せてるから、Skypeとかでボイチャできるかも。
使い方によってはいい感じ。



しかーし、問題点が無いわけではない。

一番困るのが、音楽再生でよく死ぬ

BT経由で音楽を聴いている最中に、音声が切れてそのままフリーズと言うことがよくある。
フリーズは音声だけ送られてこなくなるのではなく、再生ソフト自体も固まる(ていうか全部固まる)
音楽を鳴らさず、普通に操作している時にフリーズしたことは無いので、ソフトの負荷も関係ありそう。
もっと軽量のプレーヤー試してみようっと(´・ω・`)

それと、BTを常に使ってるとバッテリーの消耗が早い。
もうちっとなんとかならんか。。。。(ーー;

やっぱ、思った。
貧弱CPUに加えて、この大雑把な中華クオリティは偉大だ。

2010年6月25日金曜日

Bluetooth UI

なんか、、、、、できた(`・ω・´)
ドライバを読んでるのは分かってたので、無理やりON/OFFして遊んでたけど、設定UIを出す方法が分かったので公開。

今回利用したUSB Bluetoothのドングルはこの2個。
PCI BT-MicroEDR2X
corega CG-BT2USB02C
どっちも動いた。中身は同じっぽい。


で、作り方。

ここの記事と同じようにscriptcmdを改造する。

テキスト記述したscriptcmdファイルを作り、
scriptcmd内の環境変数に、
setenv bluetooth_ui yes
を、追加する。

修正した内容で、Linux上で mkimage して scriptcmd を作り直した。

んで、アップデータ内のファイルを置き換えて再インスコ。

個人的にmakeしたのを置いとく(・ω・)

scriptcmd (bluetooth_ui) M001ファームver1.7.4用

scriptcmd (wifi_powerdown & bluetooth_ui) M001ファームver1.7.4用

当然、責任は持ちませんよ、、、と、( ..)φメモメモ

これで、設定メニューが使用できるようになる。設定->ワイヤレス設定に項目が増える。


設定は、Bluetoothの設定から端末名を入れて、「検出可能」をチェックすると他の端末から見えるようになる。


Win7なPCから見たらこんな感じ。


ペアリングコードの入力などを済ませるとペアリングできる。


さて、

見ての通り、PC側がヘッドセットとして認識されて音声通話で接続されてる。

で、、、、具体的にテストはできなかったw
どうやってテストすりゃいいの?w
M001から音声を流す方法がわからん(てか、電話じゃないからムリ)
とりあえず、Bluetoothヘッドセットはつながるっぽい。

他のプロファイルについても調べないと使えるかどうか分からない部分が多い。
個人的にはファイル転送と、マウス、キーボードが使えると嬉しいかなと。

ちなみに、Bloetoothファイル転送アプリを試した見たら、
ライブラリが足りんか。。。どうするべか(´・ω・`)

とりあえず、動くことは証明できたので後は誰かハックして!
と、相変わらず他力本願。


日々進化するM001。
やっぱ、この手のガジェットは手を入れてなんぼ。
いじり倒すのが目的になりつつある今日この頃。

ま、いっか(笑)

2010年6月24日木曜日

1.7.4用scriptcmd他

Original Firmware 1.7.4用のscriptcmdを置いときます。

(´・ω・`)つ旦 どぞ


ちなみに、ファームバージョン違いのscriptcmdを使用してはいけない。
文鎮になるかもよ(つД`)



さて、
1.7.4をいじってみて、一通り楽しんだ。
色々追加されてて進化してるのがわかる。
scriptcmdの中に謎のUIフラグがあったりなかったり。
有線LANのUIはちゃんと生きてるようで、設定もできるっぽい。


で、root化してswapも動く。



ところで、Marketが変だ。
サインインして最初、ダウンロードができたけど、しばらくすると見覚えの無いダウンロード通知が来て何が何だかさっぱりw
そして、なぜかダウンロードできなくなる有様。
(・ω・?

フォーラムを見てみると、なにやら他人のダウンロードが飛んできてるような感じがする。。。。
Marketの認証情報、世界中で共有ですか??w

ちっともダウンロードできない。

変な実装しやがって。
(つД`)ばかちーん!

Original Firmware 1.7.4

 ざくっと見た結果。
おいら、ワクワクしてきたぞww

■ソフト的な主な変更

・Marketが動く。
起動、検索からダウンロード開始までは問題なくできる。
が、Starting Download... で停止する現象が多数報告されてる。

・Gmail, Gtalkが入ってる。

・相変わらず中華アプリてんこ盛り。
いらねー




カスタムファームに期待ですな(`・ω・´)


■ハード的な主な変更

・MTDパーティションが変更になってる。
これは内部的なものだから表面的には何にも変わってない。

・これナニ?
USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems
usbcore: registered new interface driver VIAUSBModem
LinuxVIAUSBD1.0.4:VIA USB CDMA Modem<6>
USB-3Gアダプタ?w

・これナニ?その2
USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
シリアルドライバきたー!w


・これナニ?その3
Bluetooth: Generic Bluetooth USB driver ver 0.5

Bluetooth: L2CAP ver 2.13
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO (Voice Link) ver 0.6
Bluetooth: SCO socket layer initialized
Trying to free already-free IRQ 4
Bluetooth: RFCOMM socket layer initialized
rfcomm_init_ttys: Can't register RFCOMM TTY driver
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
きたー!(・∀・)


と言うわけで、swap対応しなきゃね(´・ω・`)

埋め込みストレージにswap

ECOのswap実装をみて、、、
ちゅーと半端な実装なら、いっそ外部ツールに任せてswapは実装しない方向でいいと思うけど。
と、思った。(´・ω・`)

それはさておき。
まずは前口上から。

以下、基本的な知識があるという前提で書く。
ハッキリ言って、Linuxコマンドラインや、Androidのadbシェルが理解できない人、下記手順が何をしているのか分からない人はやらないほうがいい。


と、とりあえず警告だけはしとく
(・∀・)


さて、前回までにおおかたの準備ができた。
無理やり埋め込んだUSBメモリは元気に動いてるっぽい。
で、今回はそこに swap領域を作って動かすのと、残りをUSBストレージとして利用するための準備をする。

ベースはECOTOX ROM ver1.0
オリジナルファーム 1.7.2でも同じだと思う。
やってることは大したことではないので、他のROMでも手を入れれば動くはず。

まずはadbシェルを使ってM001内での作業。
DOS窓からログインしてsu。adb shellする方法なんかはググって頂戴。
adb shell

$ su
さて、埋め込んだUSBメモリが/dev/block/sda として認識されたとする(コレを知る方法はdmesgを読むべし)

まずはデバイスの初期化。
fdiskでパーティションを切りなおす。
# fdisk /dev/block/sda
fdiskでの作業は、
既存のパーティションを削除。
第1パーティションをLinux swap領域として確保(例えば256M)
残り全部、第2パーティションをFAT32-LBAとして確保。
パーティションテーブルを書き込んでおしまい。

こんな感じ。
Disk /dev/block/sda: 3959 MB, 3959422976 bytes
126 heads, 61 sectors/track, 1006 cylinders
Units = cylinders of 7686 * 512 = 3935232 bytes

         Device Boot      Start         End      Blocks  Id System
/dev/block/sda1               1          66      253607+ 82 Linux swap
/dev/block/sda2              67        1000     3589362   c Win95 FAT32 (LBA)
次にswap領域のフォーマット
# mkswap /dev/block/sda1
これで、swap領域が確保された。
で、残りの領域をvfatでフォーマットしたいところなんだけど、ファームに付いてる mkfs.vfat では2G以上の領域をフォーマットできないっぽい。
エラーになってダメ。
仕方ないのでフォーマットは後回しにする。

もし、swapだけできればいいと言う場合はこれで作業はおしまい。
後はSwapper系ツールで、/dev/block/sda1 をスワップパーティションとして指定してやればいい。

でも、それでは面白くないので、
swapon他の処理をブートシーケンスに完全に組み込んでしまうことにする。

処理を行うスクリプトは下記のような内容。
ファイル名を etcinit.sh とする。
#!/system/bin/sh

# swapon to sda1
count=10
until [ $count -eq 0 ];
do
  if [ -b /dev/block/sda1 ] ; then
    swapon /dev/block/sda1
    echo 30 > /proc/sys/vm/swappiness
    sysctl -w vm.swappiness=30

    break
  fi

  sleep 3
  count=`expr $count - 1`
done

# mount sda2
if [ -b /dev/block/sda2 ] ; then
  mkdir /ExtDisk
  /system/bin/mount -o dirsync,nosuid,nodev,noexec,utf8,uid=1000,gid=1015,fmask=702,dmask=702,shortname=mixed -t vfat dev/block/sda2 /ExtDisk
fi
やってることは、swaponとdev/block/sda2 を /ExtDisk ディレクトリに mount している。
何度かテストした結果、init.rcの実行よりsdaの認識が微妙に遅れる場合があるので、ループとsleepで時間稼ぎをしながらsdaの存在をチェックしている。
ちなみに、スクリプトファイルをWindowsで作る時、改行コードに注意して保存すること。

お次はスクリプトの転送。
まず、adbシェルを抜けて、etcinit.sh を、/ に adb pushする。
ファイルパスは適当に読みかえるべし。
adb push e:\etcinit.sh /
で、再び、adb shellでの作業。
adb shell

$ su
# chown 0:0 etcinit.sh
# chmod +x etcinit.sh

最後の仕上げ。
init.rcの改造。

init.rcをエディタで開いて、スクリプトの最後の方、usbgadget.shを呼び出す手前に、次の2行を入れる。
#service usrinit /usrinit.sh
#    oneshot
service etcinit /etcinit.sh
    oneshot
service usbgadget /usbgadget.sh
    oneshot

ついでに、ECOのスクリプトはコメントアウト。
init.rcを保存して完了。

上記の改造を施した init.rcをWindowsで作っておいて、adb pushしてadb shellからchown & chmodする方法でもおk。
私は面倒だったから、M001上のConnectBotで直接viで編集したけど。


さて、再起動!!
うぃんうぃんうぃん・・・(・∀・)きたー!
# free
              total         used         free       shared      buffers
  Mem:       101472        99620         1852            0            4
 Swap:       253596         4804       248792
Total:       355068       104424       250644


# cat /proc/swaps
Filename                             Type            Size    Used    Priority
/dev/block/sda1                      partition       253596  4872    -1

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               150528     71696     78832  48% /
tmpfs                    50736        16     50720   0% /dev
tmpfs                     4096         0      4096   0% /sqlite_stmt_journals
/dev/block/mtdblock8    153600     45144    108456  29% /data
/dev/block/mtdblock9    102400      4616     97784   5% /cache
/dev/block/mtdblock11  1678336     14488   1663848   1% /UserSpace
/dev/block/sda2        3581168         0   3581168   0% /ExtDisk
/dev/block/loop0       1507540      4828   1502712   0% /LocalDisk
/dev/block//vold/179:1 3858432    823520   3034912  21% /sdcard


以上、

/dev/block/sda1 は swap
/dev/block/sda2 は /ExtDisk に mountされている。

これで、電源オンで内蔵ストレージにサクッとswapon♪
SDカード抜き差しの心配もいらない(´∀`)

うむ、ずばり自己満足だけだなw

で、
ひとまず、長くなったのでおしまい。

埋め込みメモリの残り物をUSBストレージとして認識するのはまた次回。