2011年3月27日日曜日

mid816gps-tools ver1.0.0

●はじめに

これは、MID816(minipad)用 CFW mid816etc のGPS拡張ツールです。
mid816etc を導入後、この拡張をインストールしてください。


●インストール
  • まず、mid816etc CFWを入れておくのが前提。
  • mid816gps-tools-1.0.0.zip を適当なフォルダに解凍しておく。
  • gpsinit.sh を接続するGPSレシーバーに応じて編集する。
  • MID816を起動し、USBデバッグモードでPCと接続する。
  • mid816gps-tools-1.0.0.zip を解凍したフォルダをカレントにしてDOS窓を開く。
  • gps-tools.bat を実行。
  • インストールが終了すると自動的に再起動される。

●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 に記述されたセクション毎のチップ名称を記述してください。


●ttyUSB0以外に接続されるデバイスの場合

GPSレシーバーを接続した時の dmesg から、ttyUSB0 以外のデバイスファイルにGPSレシーバーが接続される場合は次の修正が必要です。

  • gpsinit.sh の GPS_DEVICE_TTY を正しく記述する。
    たとえば、ttyUSB5 なら
    GPS_DEVICE_TTY=ttyUSB5
  • etc\ttyUSB0.sh ファイルを デバイスファイルに合わせたファイル名に変更する。
    たとえば、ttyUSB5 なら
    etc\ttyUSB5.sh

以上の変更を行い、インストールを実行してください。


●GPSレシーバーの接続

動作確認が取れているのは下記の通りです。

  • GT-730FL-S    (Sky Traq Venus 6 / pl2303 / 38400bps)
  • Gosget BU-363    (SiRF StartIII / pl2303 / 4800bps)
  • SKYLAB SKM50    (MTK3327 / cp2102 / 9600bps)

USBシリアルドライバは、
pl2303.ko
cp210x.ko
cdc-acm.ko
ftdi_sio.ko
が、insmod されます。

GPSレシーバーを接続するとき、および外す時は、設定よりGPSをOFFにしてから行ってください。ウィジェットなどでのON/OFFが便利です。
本体の電源を切る必要はありません。


●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レシーバーを利用している場合、上記コマンドを調査し、指定された内容のメッセージを記述することで対応できるかもしれません。


●ダウンロード

mid816gps-tools ver1.0.0
mid816gps-tools-1.0.0.zip


http://www.megaupload.com/?d=IDF0WG13


以上。

っと。
とりあえず、電源を切らなくてもGPSレシーバーの着脱ができるようになったのがヨカッタ。
ttyデバイスの初期化にinotifydが使えたのが幸い。

M001とは違い、ファームイメージが簡単にいじれないこともあり、今回は追加ツール的なインストール方法を取ってみた。
ま、ハックされたファームが必要なのは仕方ないけどね(・∀・)
内容が分かる人は適当にいじってみてくだされ。

mid816etc ver1.0.0

●はじめに

このファームウェアは、MID816(minipad)用 20110311版ファームウェアを元に一部を改変したカスタムファームウェアです。
基本機能はオリジナルのファームに準じますが、下記の機能を追加しています。
  • root化
  • busybox導入
  • カスタマイズ用usrinit機能。

●root化

/system/bin/su および /system/app/Superuser.apk を導入済みです。


●busybox導入

/system/bin/busybox (BusyBox v1.17.1)をインストール済みです。
/system/bin/ 以下に各種コマンドへのシンボリックリンクが張られているのですぐに使えます。


●カスタマイズ用usrinit

Androidブートシーケンスの初期処理 init から、ユーザーオリジナルの処理スクリプトを呼び出す仕組みを入れています。
ブート時に動かしたい処理をシェルスクリプトで記述し、スクリプトファイルを /system/etc/usrinit.d ディレクトリに入れておけば、ブート時に自動的に実行されます。

動作概要は次の通りです。
init は 起動時に、init.rc と init.focus-s5pv210.rc を呼び出します。
このうち、init.focus-s5pv210.rc から、/system/etc/usrinit.sh が呼び出されるようになっています。
usrinit.sh は /system/etc/usrinit.d ディレクトリ内に存在するスクリプトを順に実行して行きます。
ここにスクリプトを入れておくだけで、特別なハードウェアの初期化処理や、ドライバのロードなど、ブート時に必要な処理を実行させることができます。


●インストール方法
  • mid816etc-1.0.0.zip を適当なフォルダに解凍しておく。
  • MID816とPCをつなぐ。
  • ファームアップデートモードでMID816を起動する。
  • mid816etc-1.0.0.zip を解凍したフォルダをカレントにしてDOS窓を開く。
  • keep_data_20110311-update.bat を実行。
  • アップデートが正常に終了する事を祈る。

●ダウンロード

mid816etc ver1.0.0
mid816etc-1.0.0.zip

http://www.megaupload.com/?d=LQ81DP40


●取り扱い注意

root化した時点でセキュリティ的にまずいことをご理解ください。
ご利用は計画的に。



以上。


っと。
このCFWはオリジナルなカスタマイズを加えるためのベースになるCFWなんだなこれが。
GPS対応するための苦肉の策とも言う(笑)
これだけでは、GPSは繋がらないのでご注意を。
mid816gps-tools を別途、導入してくらはい(`・ω・´)

2011年3月12日土曜日

MID816(minipad)にゅーふぁーむ

タイトルはWikiトラップのテスト。

どなたかしらん、某Wikiに関連リンクとして登録していただいたっぽい。
いきなり、リファラが増えてびっくりした( ´∀`)
ありがたや、ありがたや。
でも、ここに書いてある内容を実行するときは自己責任でおねがいしますm(__)m
良い子は真似しないでね(`・ω・´)


んで、MID816-20110311版ニューファームが出てた。

http://mid816.com/filedrop/firmware/

20110311-update.zip
が、それ。
Slatedroidにも情報あり。

http://www.slatedroid.com/index.php?/topic/16003-03112011-firmware-released-im-not-sure-its-aviable-on-m816/


早速、アプデトしてみたけど、見た目はまったく変わらない。
パフォーマンスも良くなったのか??私の使い方ではあまり実感はなかった。
カーネルバージョンなどは写真のとおり。


残念なのは、Bluetoothの設定が無くなってしまった(´・ω・`)
ていうか、そもそも機能してなかったっぽいからなくても動作に影響はないんだろうけど、Bluetooth対応してみようと目論んでた人としては痛い。
地味に痛い。
チッ(゜-゜)・・・とりあえず、保留。
せっかく、ドライバもbluezもビルドしたのに(´・ω・`)

で、中身の確認をしてみた。

基本的な構成はこれまで通り変わってないっぽい。
システムツリーも初期化もドライバもライブラリも、顔ぶれは変わんない。
opt-root による root化もできるし、busybox もインストールできる。
お手軽ハック環境が作れるのはとても(・∀・)イイ!!

一般的な使用には関係ない部分で高評価(笑)

しばらく0311のユーザー評価を見てから、GPS対応ROMを作ろうかなと。
( ・ω・)ぼちぼち


参考
http://m001etc.blogspot.com/2011/02/mid816_23.html
http://m001etc.blogspot.com/2011/02/busybox.html

2011年3月10日木曜日

煮詰まってきた

っで、

MID816上でのGPS駆動は順調に進んでいるっぽい(・ω・)

前から何とかしたかった、ttyの初期化処理も何とか目処がついた。
GPS機能を使用=OFFにしたら、レシーバーの抜き刺しもOKにできそう。
これで、いちいち電源切らなくてもレシーバー取り外しできるぜ!(・∀・)
後はちゃんとテストして、組み込む方法を考えるだけだー。
できれば、パッチインストールできるような形がいいよなぁ。
カスタムROMをイチイチ入れなおすのは面倒だし、作るのも面倒(笑)
でも、できるかなぁ。/ の書き換えが必要なんだよなぁ。。。。
ま、いっか。

いやーしかし、一番厄介だったのは、MID816用の捏造ドライバを作るのに kernel config をどうやって調べるか?と言う問題。

カーネル組み込みモジュールやら、バイナリの形式、パワマネ関係、どのオプションで configure されているのかさっぱり情報がない。
仕方ないので、完全手探りでモジュールをmakeしては読み込ませてAndroidごとぶっ飛ばしたり、リブートの嵐になったりとかなりやばかった(笑)
最終的には、既存のドライバと diff って差異をコード上で探し出すと言う、力技以外の何者でもない方法に行き着いたり(笑)

でも、なんとか正解に近い config になったっぽい(`・ω・´)
おかげで、cp210x.ko も cdc-acm.ko も動いている。
たぶん、他のUSBシリアルドライバも動くだろう。
ファイルシステムとかはまた違うオプションを追求する必要があるので、動くかどうかわかんない。
ていうか、ファイルシステムは間違えるとディスクをぶっ飛ばす可能性がかなり高いのでちょっとビビリ気味(笑)
bluetoothはまだ調べてないけど、使えるかビミョーかも。

ま、気が向いたら調べるか(´・ω・`)

2011年3月8日火曜日

指先GPS

なんのこっちゃ!?

さておき、某ショップで取り扱ってるコレが以前から気になっていたので、散財ついでに手に入れた。
↓コレ

組み込み用のGPSレシーバー基板。
小さいんですよコレ。

 ほら(笑)


ちなみに、某ショップではpl2303接続のような記述になってるけど、本当は全然違う。
載っているGPSチップは u-blox5 で、チップ内臓のUSB出力を使ってるっぽいんだけど、windows用のドライバは u-bloxのサイトでダウンロードできる。

ちなみに、Linux環境では、USB-Serialドライバ cdc-acm.ko でドライヴできる( ・ω・)

で、手に入れたからにはつないでみよう!
と言うことで、MID816につないで自家製ドライバをぶち込んだらちゃーんと動いた(・∀・)

んでも、、、、感度悪っ!

アンテナが小さいのもあるけど、古いチップなのでそんなものかなぁ、、、、と。
MID816に内蔵しちゃうのはたぶん問題ない。
コレが入るくらいのスペースはあるし。
でも、問題は感度だよなぁ・・・・。
アンテナだけでもなんとかならんかなぁ。

Dropad A8割り

MID816にかかりっきりだけど、他の板を忘れているわけではない。
TR718Dはごろ寝用のビュワーとして、Dropad A8は本のページ押さえブックウェイトとして活躍中。
( ・ω・)。。。。

そんなわけで、あまり活躍してない、Dropad A8を殻割してみた。


今や定番の殻割り法、吸盤はがし。
中華pad界ではもう、マストアイテム。
(・∀・)イイ!!です。うまい具合に剥がれます。
隙間に差し込むのはヘラ系がいい感じ。私はバターナイフを使ってみた。
後の解体は簡単。

なーんか、やっぱ違和感のある基板だなぁ、なんでだろう~と、コネクタ側の接合を見てみると、、
二階建てピン結合。
久々にアクロバティックなメインボードを見た感じ(・∀・)
でもまぁ、このスペースに収めようと努力した結果なんだろうなー。


なぞの空きパターン。
パターン追っかけるのは面倒だったからパス。



んで、Wifiのアンテナ線がずーっと伸びているんだけど、追っかけると、なぜかバッテリーの裏に入っていく。。。
バッテリーをはがしてみると、、、、



Σ(゜Д゜υ) イタ!!


なんと、液晶とバッテリーの間に挟まれてた。。。。
これじゃ、、、感度悪すぎだろ(-_-メ

んなわけで、、、、
アンテナは移動させたました(・∀・)

2011年3月7日月曜日

カーネルモジュールをマケ(M001)

一応、私が試したM001用のカーネルモジュール構築手順を書いてみる。
あくまでも、手順の一例なので、これをそのまんま実行すればできるというものじゃないことを先にお断りしておく。
と言うのも、記憶を頼りに書いてる部分もあるので抜けてたりする(笑)
さらに、自力で調べる部分もあったりして手抜き満載。
最低、Linuxの知識とカーネルソースの泳ぎ方を知らないと手に負えない部分もあるのでそのつもりで読んでくだされ( ・ω・)

まず、クロスコンパイル環境を構築しておくこと。
環境へのPATH通しも忘れずに。

ARMクロスコンパイル環境
http://m001etc.blogspot.com/2011/03/arm.html

まず、、、
カーネルソースを展開

http://github.com/projectgus/kernel_wm8505

から、カーネルソースを取得してくる。
WM8505用のカーネルソース一式。

私が以前、拾ったのは。
projectgus-kernel_wm8505-v2.6.29-261-g59df0a4.tar.gz

今見たら、
projectgus-kernel_wm8505-v2.6.29-270-g33e33aa.tar.gz
ってのがそうみたい。

以下、ディレクトリ名など適当に読み替えてね。

mykernel以下に展開

# mkdir ~/mykernel
# cd ~/mykernel
# tar zxfv projectgus-kernel_wm8505-v2.6.29-261-g59df0a4.tar.gz
# cd ~/mykernel/projectgus-kernel_wm8505-59df0a4

READMEを読む。

カーネルコンフィグレーションの方法とかいろいろ書いてるのでチェックしておく。
とりあえず、M001のファクトリーコンフィグを雛形にドライバを作ってモジュール化する.configを作ってみる。

取得したカーネルソースだけど、これ一式でM001用カーネルを作ることはできる。
実際、M001 Debian のカーネルはこれがベースになってる。
でも、Androidについては、現状のカーネルを置き換えるまでには情報がなく、そのまま置き換えるのが難しい。
そこで、考え方を変えて、モジュール化できるドライバだけを makeして、現状のM001に移植できないか?できるだろ!?
という方針で進めていく。

まず、configの雛形をコピー

# cp arch/arm/configs/eken_m001_factory_configuration .config
# make menuconfig

configの内容だけど、今回は USB Serial の CP2101ドライバを作りたいので、目標のCONFIG値がセットされるように操作すれば基本的にOK
余計なところは触らない。。。。
ま、ちょっとくらいなら触っても、、、(´・ω・`)死んでもしらん(笑)

具体的な設定は、

Device Drivers -> USB support -> USB Serial Converter support -> USB CP2101 UART Bridge Controller

を "M" 設定(モジュール)する。
他にもよく使われそうな、コントローラの名前が見えるねー(^_^;

さて、 .config をセーブしてカーネルコンフィグはOK
ちなみに、設定されるべき define は

CONFIG_USB_SERIAL_CP2101=m

んで、カーネルバージョンの詐称をする。
カーネルは自分が知ってるドライバしかロードしないので、カーネルとドライバのバージョンを合わせておく必要がある。
とりあえず、Makefile の記述を下記のように直す。

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION = -00236-g4f8dbbb-dirty

dirtyな捏造( ̄ー ̄)
EXTRAVERSIONは端末情報のカーネルバージョン見れば分かる。

以上。ビルド準備完了。

んじゃ、make


# make via_obj

これはなんだろう?ソース読んでないからわかんないケド、READMEにそうすれと書いてあった(笑)必要ないかも(^_^;

んで、モジュールを作る。

# make modules ARCH=arm CROSS_COMPILE=arm-none-eabi-

しばらく待つと出来上がり。
できたモジュールは各モジュールソースのディレクトリ内にできてるはずなので探すべし。

さて、実際に出来上がった 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 が割り当てられているのがわかる。


以上。

簡単に見えるけど、実際はエラーが出たりして細かい修正を手動で行う必要があったりするかも。
それと、何でもモジュール化できるか?と言うと、そうではなくて、カーネル内に内蔵されているモジュールによっては作成できないものもあるし、ロードが拒否されるものもあるだろう。
この辺りは、情報がないので試してみるしか方法がない。

手探りでトライ!
(・∀・)

ARMクロスコンパイル環境

ただいま、もへーっとmake中。
そんなわけで、クロスコンパイル環境を書いてみる。
作業は、VMware上のUbuntu環境で行っているのでそれに準じてコマンドなどを書いてます。

CodeSourceryから
http://www.codesourcery.com/

下記よりDownload
http://www.codesourcery.com/sgpp/lite/arm

TargetOS -> EABI
IA32 GNU/Linux TAR のtar玉をダウンロード
arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz


/opt に展開
# sudo tar jxvf arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 -C /opt
環境変数PATHを通しておく。
# export PATH=/opt/arm-2010q1/bin:$PATH

シェルのリソースファイルに記述しておいてもいい。

これでクロスコンパイル環境ができた。

うわぁナニコレ。
こんなに簡単なのね。
ずーっと昔、同じくARMのクロスコンパイル環境作ったときはぜーんぶ、自家製ビルドのツール群を2日がかりでmakeして、途中でおかしくなって破棄すること数回(笑)
今はアーカイブ解凍するだけでいいのね。
ありがたいことです。いやほんと。

参照
http://d.hatena.ne.jp/androidzaurus/20091104/1257326571
https://sites.google.com/a/oidon.net/www/linux/arm-cross-tool-chain

2011年3月1日火曜日

ハイ捕まえた


キタコレ(・∀・)

とりあえず、はりぼての仮組み、手動キックスタートで動いた感じ。
いいねーいいねー。