2015年05月30日

格安BTキーボードを買ってみた

android 用の bluetooth キーボードが気になって調べてたら、aliexpress で、送料込み $7.77 のキーボードを見つけた。随分怪しげなんだが、ものは試しと買ってみることに。


例によって2つ買ったのである。下のやつは違うショップで、カラー版。安い方は 白 or 黒のみ。

最初にかいておこう。$7.7 の方は、AB1112 採用の 新しいタイプ (BT3.0 対応)。F1 に虫眼鏡がマークされている。カラーの方は、RDA5871 採用の 古いタイプ(BT2.1 対応)。虫眼鏡は F2 。裏のアルミがペラい。いずれにしても、剛性が足りない。木板を張り付けて補強することを薦める。




こんなやつ。どうも中華には、このキー配列のものが多い。このタイプが安いが、それ以外に、同じキートップでケースになるやつだとか、いろいろある。


キートップの刻印は3通りあるようだ。Android/Windows 用と iOS用、そして古いタイプ。機能は同じようだが使ってみないことには分からない。カラー版は古いタイプで、中のチップまで違う。

Fn+Q(Android), Fn+W(Windows), Fn+E(iOS) でキーマッピングが変えられる。はやりのマルチデバイス対応ではないと思う。たぶん、一番上の Fn + の機能が変わるだけで、Windows だと ファンクションキーになるのだろう。iOS用キートップは、切り替え機能の刻印がない。固定かも知れない。

このキー配列が好みに合ってそうな気がしてきて欲しくなった。自分に合えば長らく使うことになりそう。

赤札天国でも、売っているこういうタイプのも。



後で色々調べてみたが、$7.77 だと 1000円弱だが、そう格安というわけでもないようだ。2000円までのものが国内でも結構ある。気になったのは、ポケモンキーボードで、かなり使いやすいらしい。ただ、少し大きいような気もする。また、やたら小さいスマホ用は使いにくいというレビューが多いみたいだ。

同日に申し込んだが、上のやつが先に到着した。10日に注文して 23日に到着だから、まぁ早いほう。

2015-05-20 00:00 Japan Arrive at Japan Airport-(Yanwen's Track End)
Original Country-Yanwen[SZAA008252670] To China Post Air Mail[YC66766xxxxYW]
2015-05-16 00:00 BeiJing Handled by Airline
2015-05-15 00:00 Beijing Internationg Mail Center Prepare to Dispatch
2015-05-14 00:00 BeiJing Arrived at Beijing Internationg Mail Center
2015-05-14 00:00 Beijing Internationg Mail Center Received
2015-05-12 20:00 ShenZhen Despatched from Yanwen ShenZhen Sorting Center
2015-05-12 18:00 ShenZhen Arrived at Yanwen ShenZhen Sorting Center

中国郵政 Small Packet By AIR で、記録上はこうなってる。

充電しつつ 接続しないで、キーを押したりして どんな感じか確かめ。キータッチはそんな悪くない。ただ、非常に軽いんだが、剛性が全然ない。好みではないので、補強とかしてみたいような ... 。

次に接続を試みた。... これが全然つながらない。ちゃんと "Bluetooth 3.0 Keyborad" と名前が出るのだが、PIN コードが正しくないとかなんとか。Android の方をいろいろ変えてもダメだった。

Windows でも試した。最初はランダムな数字を 接続するキーボードで入力せよと出ていたが、後で 入力BOX が出るようになった。何を入力すればよいか分からなかったのだが、ここで入力した数字を接続するキーボードでも入力すれば良いらしい。0 でも良いらしいので試したら、遂に接続できた。

接続してようやく分かった。入力できないキーがやたらにあるのである。数字は、0 と 9 のみ。あとはダメ。アルファベットは、"pgklvbnm" のみ。スペースもダメで、カーソルキーは OK 。

要するに不良品である。早く着いたので、喜んで Confirm 押しちゃったし、最初からワケアリだと思ったし。ここは一回クリーニングしてみようと思う。

さあ、分解。


中にキーボードのモジュールが入っているのではなく、ケースがキーボードの一部。裏側も金属板が入ってないから、底面のアルミ板も剛性確保に必要なパーツとなっているようだ。フィルムケーブルの厚み分を逃がす仕組みはないから、キーによって、打ち味が違うかも知れない。

基板は、ネジで止まっているが、ネジをわざわざ潰してある。あと、見慣れた QC pass のシールはない。裏板がアルミだが、基板との絶縁はされていない。底板を曲げて接触させないよう注意だ。



ラジオペンチで外して、記念撮影。メインのチップが、BT のアンテナと、キーボードにつながってる。キーボードのケーブルはちゃんとコネクタで接続されている。基板の設計は新しい。20141208 と記載されている。

さて、なにが出来るのだろう。ケーブルの抜き差しは、全く効果がなかった。基板から見えているテストパッドのような所を適当にショートさせると 入力できなかった文字が入力された。接触不良がどこかにある。

aliexpress では、Confirm した後もメッセージが書ける。ダメもとで 不良品だったと書いたら返事がきた。進展があるかも知れないので、破壊するような所業はおあづけ。

交換はするつもりはないので、(元には戻せないのを覚悟して)キーボードを止めてるプラスチックを外そうと思っている。マトリックスを記録するのだ。清掃なりして再度トライ。やはりダメとなったら、電子工作で変てこなキーボードを作るかも。その場合、底のアルミ板を(今だ来ていない)もう一つのキーボードの補強に使うつもり。
さらに、カラー版のキートップが iOS用だったら 交換するかも。機能まで iOS専用だったら 基板も交換という手があるか。意外とこのジャンクは役立つかもしれない。

すぐに返事が来た。新しいやつを 送ってくれることになった。ダメなやつは、好きにして良い!



止まっているところを全部切り取って外し、キートップも外したところ。
予想に反して、キーボードはモジュールだった。配線パターンがなにか変、黒いところが所々ある。断線してたりするのかも。

水を少しこぼして放置すれば、パターンが腐食することもあるそうだ。その人は、NICKEL CONDUCTIVE PEN で補修したそうだが ... パターンが複雑だったりしたら絶望的。



ぶっ壊して、マトリックスを記録。上の写真は、裏から撮ったものを左右反転している。右に伸びた線が下の写真の右につながっている。結構複雑な取り回しで、整理するのは大変。



キートップ裏。パンタグラフなのだが、構造が良くわからない。キートップの交換に使えると思ったが、付けたり外したりの練習して経験を積まないと壊してしまうかも知れない。

2つの部品がキートップ裏にきれいに収まっている。一回外れると、この状態にするのにも難儀する。精密な部品だから壊してしまいそう。


これは、iBuffalo のポメラキーボードで宣伝されている、パンタグラフの構造図。まさに、これと同じなんだが、支点がどこにあるかとか、良くわからないのだ。

おまけ




これは基板に載っているチップ。左がメインチップで、Bluetooth のアンテナパターンとキーボードが接続されている。



これを見ると、AB1112 は、キーボード専用のチップ。外付けの EEPROM が付けられる。おそらく右の写真のもの。これに入っているものは、単なるキーマップなのか?それとも ファームウェアなのか? 型番 24C64 から見て 64kbit (8KB) 。たぶん秋月とかで売っている 24LC64の系統なのではないかと。もしそうならば、外して読みだすなんてことも可能。電子工作的には、楽しめそうな素材。

専用チップなので、たぶん上記の性能がちゃんと出る。消費電力的にも優秀な印象。

ちょっと見たが、同じ 8pin で VCC にはコンデンサ、SCL,SDA のところにプルアップ抵抗らしきものが付いている。I2C ROM なのは間違いなさそうだ。

もし、キーマップを自由に設定できれば、さらに楽しめる。気に入ったキーボードを bluetooh 化できるかも知れない。ちなみに、コネクタは 1mm ピッチ 26pin 。信号線は 24 本で、2pin は接続されていない。往年の HPC マシンのキーボードだけ流用するとか..面白そう。

少し近い AB1120 のデータシートは、入手できた。詳細は分からないが、I2C ROM にはまず、config 情報が入る。その config の設定にプログラムを指定するものがあるらしい。汎用OS のドライバのような構造っぽい。

あと、このチップは SPP にも対応してるし、UART も積んでいる。設定方法が分かれば、全く別の使い方ができる。全然情報ないから絶望的だが。

I2C ROM だが、外さなくても読めると思う。多分電源投入時に読み込んでしまうはずだ。その後は空いているから、コマンドを送れるだろう。また、ロジアナなんかがあれば、読みだす場所と順番が分かるかも知れない。そうであれば、解析の情報になる。

キーマップ解析




写真を見て、キーマップを解析しておこう。

まず、信号名を決める。右側の線を上から A,BC,DEF,GHIJ としよう。よく見ると A と F は接続されているだけ。A=F なので注意。右下のケーブルは、数が多い。左の9本を 1-9 、右側は、上記の A-J を除いて abc .. と付けていく。信号線は、上側が BCDEGHIJ と 8本ある。下側は、1-9, a-f,F で 16 本。

ピンとのマップ (+正式信号名)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1 2 3 4 5 6 7 8 9 a b c d e B C D E F G H I J f
C00 C02 C04 C06 C12 C10 C09 R0 R2 C15 R6 R7
C01 C03 C05 C13 C11 C14 C07 R1 R3 R4 R5 C16
キーマップ
ESC 1 2 3 4 5 6 7 8 9 0 - =
B5 C5 C6 C7 C8 B8 B9 C9 Ca Cb Cc Bc Ba

TAB Q W E R T Y U I O P DEL
E5 D5 D6 D7 D8 E8 E9 Db Da D9 Dc Ee

CAPS A S D F G H J K L ; ENTER
E6 G5 G6 G7 G8 I8 I9 G9 Ga Gb Hc Gc

LSFT Z X C V B N M , . RSFT
E3 H5 H6 H7 J8 J9 H9 Ha Hb Jc He

FN CTRL ALT WIN SPACE / \ UP
G1 B4 E2 I1 IF Ec Ea Id

LEFT DOWN RIGHT
Jd JF Jf

C00 C01 C02 C03 C04 C05 C06 C13 C12 C11 C10 C14 C09 C07 C15 C16
1 2 3 4 5 6 7 8 9 a b c d e F f
R0 B CTRL ESC 5 6 = -
R1 C 1 2 3 4 7 8 9 0
R2 D Q W E R O I U P
R3 E ALT LSFT CAPS T Y \ / DEL
R4 G FN A S D F J K L ENTER
R6 H Z X C N M , ; RSFT
R5 I WIN G H UP SPACE
R7 J V B . LEFT DOWN RIGHT
1 2 3 4 5 6 7 8 9 a b c d e F f
C00 C01 C02 C03 C04 C05 C06 C13 C12 C11 C10 C14 C09 C07 C15 C16
(目視でのみ作成:未チェック)

まとめ


格安ではあるが、不良品をつかまされた。分解したところキーボードのフィルムに断線もしくはショートがある模様。再送してくれることになったが、同じロットならこの部分の品質が悪そうだ。良品でもすぐにダメになるかも知れない。

ジャンクとして見れば、基板は使えそうだし興味深い。300円なら良かったんだが。

ただ、まとめるにはまだ早い。2つ目も到着してないし、再送品も受け取ってない。到着しだい追記予定。

2つめ



Number: FTL0045xxxxMY
Status: Transit
Destination: Japan
Origin: China
2015-05-28 16:52 MPC PMIH (KLIA), Item Arrived at Japan
2015-05-26 18:58 MPC PMIH (KLIA), Item Sent to JAPAN
2015-05-26 16:45 MPC PMIH (KLIA), Item Posted Over The Counter to Japan
2015-05-25 16:31 MPC PMIH (KLIA), Dispatch PreAlert to Japan
2015-05-20 06:08 FLYTEXPRESS-CN, Processed Through Sort Facility
2015-05-20 06:08 FLYTEXPRESS-CN, Processed Through Sort Facility
2015-05-19 15:16 FLYTEXPRESS-CN, Acceptance
2015-05-11 16:39 Customer, Shipping information recieved
======================================
Powered by www.17track.net

適当なトラッキング番号しか載ってなかったんで、メッセージを送ったら、土曜にも関わらず返事が来た。FLYT というところ。昨日日本に到着したようだ。速攻で手続きはしたようだが、送付まで時間がかかっている。

6/3 到着。普通は3週間みとかないとダメそうだ。



写真と違って、キーは黒。キートップは 上の2種類とも違う。
とりあえずは、Windows でペアリング。"bluetooth keyboad" と表示される。3.0 がないから、最初のものとは中身が違う。ちょっと古いバージョンかも知れない。

そして、重要なことは刻印どおりでないキーがいくつかある。詳細にしらべないと。

... これは、Windows の罠であった。多分英語キーボードの設定かなにかしないとダメなんだろう。Android で接続してみたところ、刻印どおり。
どう刻印どおりかというと ... Winモードでは Fn+数字は、ESC, F1 - F12。
Android モードでは刻印と同じ。KeyTest.apkで確認したところ。
ESC ホーム
F1 ESC
F2 SEARCH (84 217)
F3 ctrl A
F4 ctrl C
F5 ctrl V
F6 ctrl X
F7 MEDIA_PREVIOUS (88 165)
F8 MEDIA_PLAY_PAUSE (85 164)
F9 MEDIA_NEXT (87 163)
F10 VOLUME_DOWN (25 114)
F11 VOLUME_UP (26 115)
F12 電源OFF
(keycode scancode)

こういう結果であった。iOS モードは、Androidモードと少し違うだけのようだ。F3 で電卓が起動し、F4 で連絡帳が起動した。

その後、電源が入らなくなった。充電ランプは付くが動作しない。前のやつで経験したがバッテリーのケーブルが外れると同じ症状になる。本当に品質が悪い。

中身を空けたところ、バッテリーの電源はちゃんと来ている。壊れた?

バッテリーの電圧は、4.1v あって問題ないのだが、電源をON すると 0v になる。一度動いた基板が突然壊れるなど信じがたいが、4.1v あるバッテリーが弱っているとも思えない。どうしたものか。

しょうがないので、ダメだったキーボードとのニコイチ作戦に出た。基板そのものは、大分違うのだが、互換性がある。あと、バックパネルがペラペラなので、これも入れ替え。ペアリングして、チェックしたが全部キー認識した。OK。
FN キーの部分が刻印と違ってしまったが、気にしない。

再送分が来る!

2015-06-03 00:00 Japan Arrive at Japan Airport-(Yanwen's Track End)
Original Country-Yanwen[SZAA008359148] To China Post Air Mail[YC69146xxxxYW]
2015-05-30 00:00 BeiJing Handled by Airline
2015-05-29 00:00 Beijing Internationg Mail Center Prepare to Dispatch
2015-05-28 00:00 BeiJing Arrived at Beijing Internationg Mail Center
2015-05-28 00:00 Beijing Internationg Mail Center Received
2015-05-26 20:00 ShenZhen Despatched from Yanwen ShenZhen Sorting Center
2015-05-26 18:00 ShenZhen Arrived at Yanwen ShenZhen Sorting Center

これ、Arrive at Japan になって初めて出た。安心は出来るが意味ない。


キーボード台




黄色のキーボードを買った理由は、これ。
クラムシェルもどきのキーボード台を作ってみたかったのである。



まだ、試行錯誤中ではあるが、こうなってる。プラスチックのものは、ダイソーのスマホスタンド。これを曲げてこんな形にした。で、レールのようなアルミのアングルを付けて、3mm 厚のアルミ板に取り付けた。一応、キーボードを乗せれば後ろに倒れないようだ。

タブレットの取り付けは、ダイソーのマジックテープ。十分強力でテープの方がはがれそうになる。レールのようなものは、コの字型で、8mm x 5.5mm 。 3mm 厚のアルミ板に溝を切って差し込んでみた。

このアルミパーツをキーボードに貼り付けようかと思っている。そのためには、段差をなくす必要がある。また、これではキーボードの補強にはなってない。もう少し検討しないと。

ちなみに、このスマホスタンドは、かたさにばらつきがある。バネだかなんだかが弱いものがある。



結局補強は、木でやることにした。簡単に曲がらなきゃなんでも良いのである。とりあえず、ホムセンに行ったら、ファカルタ集成材というのがあった。120mm幅、5mm 厚のを購入。すごく柔らかいが、補強という点では、これでも十分だろう。アルミパーツの段差問題は、木に埋める方針。アルミパーツなしなら塗装などしないのだが、はがれて来そうなぐらい柔らかい。で、ウレタンニスとかいうのを塗ることに。結局高くついたのだが、趣味の品だから良いのだ。

他に、3mm厚 アガチス材 も買ってみた。これは、えんぴつなどに使われているそうだ。加工してみたが、すこし無理をすると割れそうな材質。まぁ、えんぴつと同じ。アルミパーツを付けるのは、1つだけなので、別のやつに使ってみる。

正確に加工されていて、曲がってないやつは、この2つだけだった。あ、MDF もあったか。 MDF では補強にならないと思って外した。

ちょっと重さを測定。本体 130g に対して 5mm厚 ファカルタ集成材が 37g。アルミパーツも 38g で プラスチックの スマホ台も 38g 。全部で 243g。 3mm厚 アガチス材 は 31g 。

その後:スマホ台のヒンジがゆるゆるになって、すぐ後ろに倒れるようになってしまった。交換可能なようにはしたが、思いのほか早かった。

スマホ台を破壊して中をみたところ、バネが入っていて、溝と出っ張りを押さえつけている。で、溝が摩耗してゆるゆるに。元には戻せないが、修理することは可能かも知れないのでやってみる。

黄色キーボード基板



電源が入らなくなったので、入れ替えた 黄色キーボードの基板。基板自体は、しっかりしている。I2C ROM (L24C64) の信号線がコネクタとして出ている。キーのマトリックスも信号名が載っている。さらに、TXD/RXD のテストパッドまで。
なかなか面白そうではあるが、チップは RDA5871 であった。にも関わらず、基板には AB1107 とかなんとかのシルクがある。

信号名を記録。C00 とか R0 とかになっている。

ところで、 RDA5871 だが、ググると色々と出てくる。こっちの方が改造とかしやすいかも知れない。このチップは、bluetooth 2.1 対応と少し古い。16KB までの I2C ROM に対応していて、そこに入れたコードで、機能をカスタマイズするタイプ。AB1112 と同じ仕組み。

改造するツールなども見つかった。
 ・https://code.google.com/p/rda5871-sdk/
これなど興味深い。HID にしか対応していないはずだが、SPP のファームウェアがある。リンク先には、ソースコードまである。


エレコム TK-FBI033BK


送料込み、1200円と安価なので、iPhone 4s 用のキーボードを買ってみた。pigu で使ってみたいのと、中身に興味がある。



スライドじゃなくて、パンタグラフのような構造。ケース部分を外すとこんな感じ。ダイキャストの金属部品が使われている。ケース部分を取って pigu を直付けしようかと思ったが、意外にもほとんど薄くならない。1mm ぐらいしか稼げないので、方針変更。ケースのホールドする部分を切り取って pigu のバックパネルを直接張り付ける。



分解したところ。基板の上に、タクトスイッチの接点が幅広のテープのようなもので、張り付けてある。上は micro USB の コネクタ。ちなみに、白い部分は何かちゃんと見てない。位置決め用のマスクのようにも見えるが、基板のシルクかも。

タクトスイッチの接点と言ってもわからないかも知れない。皿のような形状で押すとぺこぺこ凹む。内側にポッチがあって、そこと、皿の周囲が接点となる。これはタクトスイッチを分解しても出てくる。



基板の裏、バッテリーは 95mAH 。この基板一枚が主要部品で、見慣れたモジュールが載っている。AB1112 が載ってないかと、期待してたが違った。日付は 2011/11/17 で結構古い設計。

再度分解して、シール下の型番を確認したが、BCM20780 らしい。シリアルROM らしきチップも載っているが、型番見てもサッパリ。

一応レビュー。クリック感があるし、キーの中央は凸になってて、押しやすいかな。キー配列は慣れればなんとかなりそうな感じ。安く手に入れたとはいえ、高級感はある。ただ、常用するかどうかは分からない。


謎のセットぽちった



黄色キーボードを買ったショップを覗いたらこんなのがあった。値段は、$10.98 。

ハンドルリモコン と IRリモコン、時代遅れっぽい本体 ... という妙な組み合わせのセット。一応 MP3 プレイヤーだそうだ。

お目当ては、ハンドルリモコン。これは、bluetooth なのだそうだ。0000 でペアリングと書いてあった。これだけが欲しい。ただ、本体も bluetooth に対応しているわけで、ちょっと分解してみたい。

良くみたら、なんか違う。ハンドルリモコンは、多分 IR でしかも左ハンドル向け。本体が bluetooth でスマホと A2DP で接続できる。FM トランスミッタで、音をカーオーディオに飛ばすことが出来て、本体のマイクでハンズフリー会話も出来る。そういうものっぽい。予定が外れたが、まぁ面白そうだ。

"Headset Button ControllerTrial"とかいうアプリはあった。が、ハンドルリモコンのキーをフルカスタマイズできるようなものなのだろうか?やりたいことは、多分 Tasker に渡せるイベントを発生させること。で、Tasker で、アプリを起動したりしたい。

電子工作的には、例の余った基板を使い、IR リモコンの信号を受けたら、アナログスイッチで キーマトリックスの該当ボタンを押す .. みたいなものを作れば純粋な HIDキーボードになりそうだ。


3週間みておかないといけないから、忘れたころにレビュー予定。

ちょっとメモ



CScanCodeを確認する
 Key Testというアプリで、変更したいキーのScanCodeを確認してメモっておくScanCode: 数字の部分)
 ただし、fnキーとの同時押しがShiftとの同時押しと同じかどうかで扱いが違うので省略

DベンダーID、プロダクトIDを確認する
 要するにデバイスを区別するためのIDを確認する
 自分で確認しても良いけどBoxwave5sはVendor ID:05ac Product ID:023c
 別のデバイスとかならググってくれ

Eキーレイアウトを変更する
 E-1 .klファイルを作る
  一から作ることも可能だけどめんどいので、デフォルトのをコピーする
  多分どの機種も同じだろうけどZ1fだったら/system/usr/keylayoutにアクセスしてGeneric.klをコピーする
  ファイル名を"Vendor_○○_Product_△△.kl"に変更する
  ○○のとこはVendor IDで、△△のとこはProduct IDね
  Boxwave5sなら"Vendor_05ac_Product_023c.kl"
  OSは4.2でやったけど、この辺4.4だと処理違うかも
 E-2 .klを弄る
  ファイルの内容が"key ScanCode(数値) KeyCode(キーの名前、AとかMENUとか)"
  になってるから、Cで確認したキーScanCodeのところのKeyCodeを変更したいキーに変える
  ただし、fn同時押しが元々割り当てられてないところに新たに割り当てるとかは出来ない
  注意が必要なのはfn同時押しの操作がShift同時押しと同じもので、こっちを変更したい場合後で.kcmを弄る(今は省略)
  あと、アクサングラーブ"`"はアプリによっては全角半角に割あて出来る
 E-3 .klを設置する
  /system/usr/keylayoutにE-2で作ったファイルをコピーする

これでキーを無駄なく利用できる
自分が設定して便利だったのは
ZENKAKU_HANKAKU(日本語切り替え)
MUHENKAN(無変換、日本語入力アプリによるかも知れなけど英数カナ変換として使える
PAGE_UP,PAGE_DOWN とかかな

ここまでやれば、ハンドルリモコンの全キーをカスタマイズできるはず。

これなんだが、Mediatek の場合、言語と入力の設定で、"MTK BT HID" としか認識されない。複数のキーボードは接続できるのだが、システムには疑似キーボード1台と認識される。上の方法も使えそうだが、切り替えが相当に面倒。

 ・https://github.com/y10g/android_user-keymap_jp109keyboard
言語と入力の設定には、キーボード・レイアウトを設定する機能がある。(4.1 以上らしいが)。このレイアウトを追加するアプリのソースコードを提供してくれた人がいる。これを変更して独自のレイアウトを作るとかしても、好きな設定が出来るようだ。自動というわけには行かないが、こうすれば切り替えは出来る。

追記1 (2015/7/1)




現在のキーボード台(作成中) −2号機と3号機。
スマホ台がどうも弱いということで、ダイソーの竹製まな板とスマホ台2個を使って2号機を作った。まな板にスリットを切って、スマホ台を差し込んである。
だが、スマホ台がだんだん弱くなることが分かったので、全部木で作ったのが3号機。かたさを調節するためにEVAを差し込んでみようと思っている。
どちらも、ニスを塗ったのだが、まだベトつき感が残っているので使えない状態。

それはともかく、どちらも重いタブレットだと後ろに倒れるおそれがある。ウェイトを付ける必要があるかも知れない。
posted by すz at 10:43| Comment(0) | TrackBack(0) | android

2015年04月27日

MediaTekタブレット

MediaTek のスマホが随分と気に入ったので、タブレットを買ってみることにした。いろいろじった挙句に、飽きたらカーナビにするのが目的。最低限度カーナビにしたときに困らなければ良い。
条件としては、
1) MediaTek の Android 4.4.2 であること (+ROM が入手できること)
おそらく、4.4.2 であれば、BT子機になるだろう。ROM があれば、mtkbt が /dev/tun にアクセスするかどうかで分かるはずだ。カーナビでは bluetooth で接続したいのだ。消費電力を抑えたいのも理由の一つだが、親機側の操作も簡単にしたい。
また root が取れるのは確実だ。専用機にする場合には、要root である tasker を使って起動を自動化したい。
あとは、pigu のファイルを使ってカスタム化してみたり、弄ってみたいのもある。

2) 充電が常に追い付くこと。
カーナビでは、長時間使う場合があるから、バッテリが減っていくような機種は使えない。実際のところは、良くは分からないのだが、スマホ用が元になっている MediaTek だと消費電力が小さいだろうという期待がある。また、カーネルのコードを見た限り iPad 用 2.1A の USBポートに対応しているはずだ。多分大丈夫だろう。

3) IPS 液晶であること (+ 輝度の自動調整をサポートしていること)
IPS 液晶でないと日中は良く見えないだろう。それが原因で注意が散漫になったりしては危険だ。ここは譲れないのだが、 輝度の自動調整が必要なのかは実際のところよく分からない。

4) GPSの感度が良好なこと (+ できれば電子コンパス)
これも実機でないと良くわからない。機種によってばらつきがありそうで、ここはギャンブル。電子コンパスは走行してしまえば必要ないのだが、走り出しのとき逆を指したりするのを防ぐのにあったほうが嬉しい。ただ、安タブではほぼ絶望的。

5) 専用のハードケースもしくは、TPU ケースがあること。
自分の車は 2DIN のところは、ふたがしてある。ここに TPU ケースなどを張り付けると脱着が可能になる。見栄えも良い。ただ、専用機化するときに、バッテリを例の3セルニッ水に変えて置きっぱなしにしたい。そうであれば、脱着しないから直接貼り付けても良いかという気も。

6) メモリ 1GB
今時のタブレットは、256MB というのは存在しない。普通は 1GB なんだが、専用機なら 512MB でも良いんじゃないかとは思う。

こういうことを考えて探してみると、ベストマッチするのは、『Colorfly E708 3G Pro』あたり。価格も1万円と安いのである。なのだが、実際にぽちったのは、『原道 T3 N70 3G』なのであった。これは 512M だが、もう一段安く 8000円前後。安い方が無茶をする心理的障害が小さい。だが、決め手になったのは、4.4 の ROM をダウンロードできてしまったこと。もうこれでいいや -- いくつもダウンロードするのは嫌なのであった。


Vido T3-A4.4.2-20140929-EZ

ro.product.model=Vido T3_EZ
ro.product.brand=Vido
ro.product.name=Vido T3_EZ
ro.product.device=Vido T3_EZ
ro.product.board=m706_yd_n70_wsvga_dsi
ro.build.id=KOT49H
ro.build.display.id=ALPS.KK1.MP1.V2.11
ro.custom.build.version=M706-V30YDM4GN4GCN-WG03.WSVGA.MIPI.YLD.2M.N703G_EZ

多分間違いないだろう。mtkbt もチェック済みで、多分 BT子機にできる。

ここで ... 本当のことを言うとカーナビ用タブレットは、既に持っている。Nexus7 (Wifi 2013) で、だいたい条件を満たす。TPU ケースも貼り付けてあって、まぁちゃんと使えているのだ。BT 接続も pigu を親機にできている。ただ、面倒なのだ。脱着も root 化も。これを専用機化するのは気が引けるので、新しく買おうというのが主旨なのであった。だから、たぶん常設化するために色々やってみるつもり。ただし、慌てない。弄り回すのに飽きてから。

ところで、弄り回す件だが、こいつは大胆なことをやってみたい。framework 入れ替えたりなんでも出来るのに、polasma や pigu は抵抗があった。SIM を入れて運用してるし、せっかくの技適が台無しになるのが嫌なのである。これは技適は取ってない。3G どころか Wifi も憚られる。bluetooth なら ( 特に屋内ならば ) まぁ良いんじゃないかという気がしている。(そして車中は勿論屋内)

現物入手



現物は、まさに写真の通りのものだった。ホワイトのフロントパネルに黄色のバックパネル。フロントはビニールという質感で実に安っぽい、その上このシートが下に少しずれていて、下辺回りが少し浮いている。でもそんなに悪くない。わざと、おもちゃっぽく作ったという印象もある。
まずは、立ち上げていろいろ確認。

バッテリーは、30% であった。どれぐらいで充電できるのだろうか? INPUT 5V 1.5A とは書いてあるが...
それはともかく端末情報

モデル番号: N70 3G_EZ
Android バージョン:4.4.2
ベースバンドバージョン:(略) 2014/06/12

ROM はビンゴのようだ。商品ページは 4.2.2 とあったが、2014/11/18 版の 4.4.2 が入っていた。次に、BT機能を確認してみる。

BTティザリング -- OK
BT子機 -- OK

とりあえず安心した。あと気が付いたこと:

App Permissions が入っている -- Pigu と同じ
バイブレータは付いているが、すごく弱い
たしかに IPS 液晶ではあるが、フロントの(保護?)シートのせいで、横からの視認性は悪い。
バックライトのオプションには、Economical backlight があった。

Automatic brightness (明るさを自動調整) または Economical backlight (経済的なバックライト) をチェックすると、状況に応じた明るさに自動調整されます。

ということらしいのだが、望む機能なのだろうか?
Antutu

14715 だった。商品ページには 13000 と書いてあったが、それ以上の値なので驚いた。

充電時間
適当なのだが、30% - 75% になるのに 1.5 時間。
リブート時間
リーブートは、36 秒。シャットダウンはそのうち 5秒ぐらい。悪くはないが、今どきの水準だと、遅い方かも。
GPS をちょっと
なんかダメだぁ。androiTS で見ると、Pigu や Polasma は、屋内でも 8/9 とか。こいつは、屋外でも7/7。屋内だと 0/5 とかで一瞬 4/4 。
... と思ったのだが、蓋になにかアンテナらしきものが付いている。そして、このアンテナと接触するような端子が本体側にある。これをごにょごにょするとあるいは ... 。


ただ、何のアンテナなのか? ... どうも違うような。

拾ってきたMediatek系の回路図によると GPS は、50Ωで 2端子でないとならない。

ただ、同じ回路図では、こういう記載もある。いずれにしても 2端子。そして、蓋のアンテナは 2接点あるが、ショートしているように見える。

SPFT と MtkDroidTools


SPFT と MtkDroidTools を使っていつもの。ROM0 のバックアップは OK。次に MtkDroidTools で ROM0 を処理。MtkDroidTools は、MT8312 はフェイクで MT6582 だと言ってくる。何だろう?とは思ったが、ちゃんと処理できて CWM も作成できた。これで作った autoCWM も動作を確認。

これで安心していじることが出来る。

殻割り




アンテナは、内部にあった。これが Wifi/BT/GPS 用なのだろうか?ならば蓋のやつは 3G か。
で、このアンテナが感度悪いのだろう。手持ちのジャンクアンテナをケースの外につけたりすると良くなるかも知れない。それとも、GPS に周波数が合うアンテナを買って付け替えるか。

親機のGPSを使う


... と思ったのだが、Pigu の GPS を bluetooth を通して T3(N70 3G) で使えないものか? ... 探してみるとあったのである。
『Bluetooth接続によるGPS連動』
ここの説明によると、送信側アプリ『GPS 2 Bluetooth』 と受信側アプリ『Bluetooth GPS』があれば良いとのこと。これが可能ならば、スマートに使える。

で、やろうとしたら、T3(N70 3G) では、『Bluetooth GPS』がインストールできない。apk を持ってきてもダメ。pigu は OK なのだ。何が違うのだ? -- pigu ばっかり。いっそのことカーネル以外 pigu のファイルに差し替えてやろうか。

 ・http://sourceforge.net/projects/bluegps4droid/

探していったら、これが見つかった。一応使えるみたいだ。しかし、良く使われている『Bluetooth GPS』を使いたいものだ。pigu との違いも気になるし。

ところで、『Smart Unlock』なんてものも、見つけた。連絡帳に行先登録してあるから、ログインして使うのだが、ロックなしで使うのも怖い - 良いものが見つかった。しかも XDA版は無料である。


GPS増幅器


いままで、いろいろやってみたが、どうも思ったようには行ってない。ソフトでの解決は、試行錯誤が多く時間がかかる。そのうち面倒になってくるのだ。感度が悪いだけなので、、再放射アンテナ(RA-46) とかGPSアンテナ中継器(コリドー)という名称の装置を取り付けるのも良いのではないだろうか?

GPS の室内再放射アンテナがあると便利ですね。普通のアクティブ・アンテナを外に出しておいて(当然、LNA への給電は必要)、出力にパッシブ・アンテナを着ければ出来上がり。これで、私はやっています。

さがしてみると、こんな記述を発見した。なんか簡単そう。アクティブ・アンテナ(とコネクタ)を aitendo で買って、自作してみようかと。再放射側アンテナは、近距離だし適当なやつで済ませる。

とりあえず波長λの計算。L1 は、1575.42 MHz だそうだ。計算すると 19.0 cm 。同じく aitendo で売ってる 銅基板で、1/4 λ のダイポールを作ってみよう。ケーブルは長すぎるから切って直接ハンダづけ、電源も USB ケーブル切ればいいか。

ついでだが、GPS アクティブ・アンテナの底面は磁石になっていて、アースプレートにくっつけるのがダッシュボードなどでの使い方だそうだ。70mm角でも良いが、100mm〜150mm角のほうが良いらしい。

GPS その2


色々調べたところ、GPS にはソフト的な問題もあるらしい。

 ・ How to fix poor GPS on Mediatek phones

こんなページがあって、EngineerMode に入ってごにょごにょするらしい。のだが、いきなりつまずく。"Location Based Service" が有効にならないのだ。さらに Pigu と Polasma では、なにか違う。やはり apk を持ってきてあれこれやらないとダメそうだ。

その前に、apk を移植するには、odex ファイルを apk に戻す deodex というのをやるらしい。

 ・ 
[TOOL] Kamome tool for Windows - deodex tool for 4.4 KitKat


ここにあるツールで、4.4(Kitkat) と 4.2(JB) の deodex が出来るという情報を見つけてやってみた。Pigu , Polasma, T3(N70 3G_EZ) のすべてを deodex してしまう。




さて、Polasma と T3 の GPS チップはおなじようなので、Polasma から関係しそうなものを移植してみる。(system/misc/GPS_CHIP.cfg)
system/xbin/libmnlp_mt6582
system/app/YGPS.apk
system/app/LocationEM.apk

GPS その3



aliexpress.com で、ほとんど基板レイアウトが同じタブレットを見つけた。RAM 2G/ROM 8G で 4 core の MTK8382 と書いてあるが、多分詐称が入ってる。バッテリー 3800mAH ってのも嘘っぽいし、厚さ 6mm ってのもありそうにない。



そんなことより、内部写真。右下のアンテナケーブルのところに GPS アンテナっぽい何かがある。アンテナを置ける場所は限られているし、間違いないような気がする。で、T3(N70_EZ) の場合はどうかというと、液晶コネクタのところに変な基板パターンがある。このパターンがアンテナのつもりなのか、あるべき部品が載ってないのか分からないが、テストパッドが怪しい。ちょっと調べてみたい。



USB顕微鏡で写真を撮った。6 つのパッドの上から 2 つは NC 、一番下は GND 。で 3 つは、テストパッドにつながっている。これらは、コンデンサを通して GND につながる。... コンデンサは交流を通してしまうから 高周波系ではなさそうだ。残念。デバッグ用のシリアルとか?

いや。http://cincomasapp.com/gps-chinese-mobiles-step-by-step/

ここの人の写真は、なにか似ている。コンデンサじゃないかも。3つのうち両端は GND で真ん中とつなぐみたい。

テスターで容量を測定しようとしたら、両脇はエラーになった。真ん中は測定しようとするが 0uF 。両脇はインダクタ? ならば、両脇こそがシグナルで 真ん中が GND 。回路図を見ると 両脇を接続するような気がする。


こんな写真を見つけた。これは、Colorfly G808 の内部で、配置がおなじような感じ。で、コネクタにフレキが載っている。液晶のケーブルにも見えるが、位置的に RF 関係だから GPS アンテナだと確信した。N70 3G_EZ にはあるべきものがない!


「GPS フィルムアンテナ」でググるとこんなのが沢山見つかる。3 端子で TV と GPS に対応するアンテナで、車に張るもの。ただの長い導体で、共通の端子がある。イメージから計算すると、短い方の正方形の 一辺は、31.7mm 、外周 126 mm。ショートカットは 20mm ちょっと短くなる。

とにかく、導線をつなげれば、何かアンテナになるようだ。どんなものでもないよりはマシだろう。いろいろやった人は、λ/2 ≅ 9,5 cm が良かったらしいので、それぐらいの長さで検討。
posted by すz at 23:34| Comment(0) | TrackBack(0) | android

2015年04月12日

bluetooth 子機についての調査

Polasma は、bluetooth の子機になれない。SIM がなければ、消費電力の大きい Wi-Fi で接続するしかない。Pigu をルータにするとしても、両機とも待ち受け時間が短くなってしまう。これを、なんとかしたい。

一般的には、bluetooth の子機になれるのはタブレット。スマホにはあまり例がないようだ。不思議なことに Pigu は bluetooth の子機になれる。テストには使えるのはありがたいのではあるが、ルータとして使う予定なので 子機にしたいのは、Polasma なのだ。

最初のアプローチ


子機に出来るということは、PANU プロファイルをサポートしているということ。で、Pigu は、PANU をサポートしている。同じ MTK65XX でプロトコルスタックはたぶん同じ。これがどうなっているのか調べられると、なんとかなるかも知れない。ただ、Pigu は 4.4.2 で色々変わっているかも知れない。もう少し近いものはないのかと考えたのだが、Yoga タブレットがあった。SoC は、MTK6589 で、同じ MediaTek だから、プロトコルスタックは同じだろう。これも 子機になれるらしい。幸いなことに、needrom.com に 4.2.2 の ROM があった。 ちなみに、他社の BlueTooth は、bluez を使っている場合が多いのだが、MediaTek は独自の、プロトコルスタック を使っている。で、情報が少なくどういう構造かも調べられていない。

 ・ http://www.needrom.com/download/yoga-8-b6000/

それはともかく、これである。で、ダウンロードしてみることに。

中身は、SP Flash Tool でインストールするイメージであった。system.img も含まれている。喜び勇んで Linux で mount しようとしたが出来ない。調べてみたら、ファクトリーイメージは簡単な圧縮をしている場合があるとのこと。

 ・ https://code.google.com/p/usefulshellscript/source/browse/trunk/simg2img.py

これを使ったところ、通常の ext4 のイメージに変換できた。ここまで来るのに随分と苦労したが、全部略。とにもかくにも、スタート地点に立てた。

これをどうやって調べるのであろうか? とりあえず、Polasma とファイルを比較してみよう。

diff -ru で全部を比較し、目にとまったところをピックアップ。(+ が Yoga)

/factory_init.rc:
+ # BT
chmod 0660 /dev/stpbt
chown bluetooth radio /dev/stpbt

init.charging.rc:
+ mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack
+#need to check
+# mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth
mkdir /data/misc/bluetooth 0770 system system

# for ppp options file
- mkdir /data/misc/ppp
- chmod 0777 /data/misc/ppp
+ mkdir /data/misc/ppp 0770 bluetooth net_bt

- # BT relayer mode used VCOM
- chown bluetooth radio /dev/ttyGS2
- chmod 0660 /dev/ttyGS2
-
# bluetooth
mkdir /data/@btmtk 0770 bluetooth net_bt
chown bluetooth bluetooth /dev/hid-keyboard

@@ -1183,13 +1155,13 @@
socket bt.int.adp dgram 660 bluetooth net_bt
socket bt.a2dp.stream dgram 660 bluetooth net_bt
user bluetooth
- group system net_bt bluetooth net_bt_admin sdcard_rw inet net_admin nvram net_raw
+ group net_bt bluetooth net_bt_admin sdcard_rw inet net_admin nvram net_raw

/system/build.prop:
ro.build.characteristics=default
+ro.build.characteristics=tablet

# begin mediatek build properties
-ro.mediatek.version.release=ALPS.JB5.MP.V1.5
-ro.mediatek.platform=MT6582
+ro.mediatek.version.release=ALPS.JB2.MP.V1.17
+ro.mediatek.platform=MT6589

/ueventd.rc:
#MTK BTIF driver
-/dev/btif 0660 shell system

すべてを比較してこれぐらいなのであった。
Yoga は、MT6589 で同じシリーズであった。net_bt_stack というグループがあるし、BT子機は、サポートしてそうな印象。

# bluetooth power up/down interface
chown bluetooth net_bt_stack /dev/ttyHS0
chown bluetooth net_bt_stack /proc/bluetooth/sleep/proto
chmod 0600 /dev/ttyHS0
chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state
chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type
chown bluetooth net_bt_stack /proc/bluetooth/sleep/proto

これは、多分 bluz の bluetooth だが、コメントから見るに、やっぱり子機用の group っぽい。


yoga/init.charging.rc: mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stac
yoga/init.rc: mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack
yoga/ueventd.rc:/dev/uhid 0660 system net_bt_stack
yoga/ueventd.rc:/dev/uinput 0660 system net_bt_stack

pigu/init.rc: mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack
pigu/init.rc: group system net_bt bluetooth net_bt_admin sdcard_rw inet net_admin nvram net_raw vpn net_bt_stack media_rw sdcard_r
pigu/ueventd.rc:/dev/uhid 0660 system net_bt_stack
pigu/ueventd.rc:/dev/uinput 0660 system net_bt_stack

polasma/ueventd.rc:/dev/uhid 0660 system net_bt_stack
polasma/ueventd.rc:/dev/uinput 0660 system net_bt_stack

pigu と yoga には、/data/misc/bluedroid がある。


どうやら bluedroid というのがキーワードらしい。ググると、以下の url が。

 ・ https://wiki.mozilla.org/B2G/Bluetooth-bluedroid

非常に重要なことが書いてある予感。なんでも、bluz と切り替えることも可能らしい。
Switch Bluetooth stack bewteen bluez/bluedroid
For version JB 4.2, if you want to use bluez on JB, you need to modify some files. See [Bug 911038][1]


で、bluedroid を動かすには以下のファイルが重要なようだ。

Gecko bluetotoh will run bluedroid now.

### replace_bluedroid_reply.sh
adb push audio.a2dp.default.so /system/lib/hw
adb push bt_stack.conf /system/etc/bluetooth
adb push bt_did.conf /system/etc/bluetooth
adb push stack.conf /system/etc/bluetooth
adb push auto_pair_devlist.conf /system/etc/bluetooth
adb push libbt-utils.so /system/lib
adb push libbt-hci.so /system/lib
adb push bluetooth.default.so /system/lib/hw
adb push bdt /system/bin
######## vendor #########
adb push libbt-vendor.so /system/vendor/lib


こういったファイルがあるのは、どうやら pigu のみ。ただし、全く同じというわけではない。

pigu/system/vendor/lib/hw/audio.a2dp.blueangel.so
pigu/system/vendor/lib/hw/bluetooth.blueangel.so
pigu/system/etc/bluetooth/bt_stack.conf
pigu/system/etc/bluetooth/bt_did.conf
pigu/system/etc/bluetooth/auto_pair_devlist.conf
pigu/system/lib/libbt-hci.so
pigu/system/lib/libbt-utils.so
pigu/system/lib/hw/bluetooth.default.so

bdt ってのは全くない。何かわからないが mtkbt だろうか?

strings pigu/system/bin/mtkbt |grep /dev
/data/@btmtk/devdb
/dev/uinput
/dev/uhid
/dev/socket/bt.int.adp
/dev/tun
/dev/ampc0
/dev/socket/bt.int.adp
/dev/socket/palhal
/dev/socket/paltimersock
/dev/socket/palinjectsock
/dev/socket/halpal

なにかそれっぽい。では、polasma や yoga にないかというとあるのである。

strings polasma/system/bin/mtkbt |grep /dev
/data/@btmtk/devdb
/dev/uinput
/dev/hid-keyboard
/dev/socket/bt.int.adp
/dev/btn
/dev/ampc0
/dev/socket/bt.int.adp
/dev/socket/palhal
/dev/socket/paltimersock
/dev/socket/palinjectsock
/dev/socket/halpal

strings yoga/system/bin/mtkbt |grep /dev
/data/@btmtk/devdb
/dev/uinput
/dev/hid-keyboard
/dev/socket/bt.int.adp
/dev/btn
/dev/ampc0
/dev/socket/bt.int.adp
/dev/socket/palhal
/dev/socket/paltimersock
/dev/socket/palinjectsock
/dev/socket/halpal

ただ、/dev/tun がない。/dev/uhid も。代わりに /dev/hid-keyboard , /dev/btn がある。入れ替えて動くかどうかは、非常に怪しい。また、yoga には、/dev/tun がない。やはりこれなのか?

ちなみに、ソースコードは、
 ・ mediatek/protect/external/bluetooth/blueangel/btcore/
こういうパスになっている。もし手に入るのであれば、ビルドするというのも手かも知れない。

だんだん分かってきた。blueangel とは、MediaTek 独自のプロトコルスタックでクローズソース。ファイル構造の類似性から bluedroid をベースにしているのだろう。

 ・ https://github.com/mozilla-b2g/platform_external_bluetooth_bluedroid

さて、Yoga の 4.2.2 は多分 BT子機にはなれないのではないか?
で、なんでも良いから 4.2.2 の MediaTek タブレットと思って探してみたら、Ainol があった。
ちょっと新しそうな Novo7 AX3 のファームウェアをダウンロードしてみることに。

... ダメだった。全部同じで /dev/tun を使っていない。おそらく 4.2.2 は全部ダメなのかも。 Yoga は、4.4.2 の update が出ているし、4.4.2 なら BT子機 になれるのだろう。

こうなると、Pigu の mtkbt を動かせないか? 先の B2G/Bluetooth-bluedroid ではいくつかのファイルをインストールするだけで使えるようだし、意外と依存性はないかも知れない。今のところ uhid がないだけみたいだし。uhid のカーネルモジュールを作れれば終わる話かも。

で、uhid を見てみたが、HID さえ Config されていれば良いらしい。カーネルビルド環境ないのだが、どうしよう。

gcc があるんだから、セルフで build すれば良いじゃないか ... なんてのは相当に甘かった。
いきなり grep -P なんてのでエラーになって、念のために いろいろ grep したら perl5 や python を使っている。これは無理。
posted by すz at 04:34| Comment(0) | TrackBack(0) | android

2015年03月28日

Polasma 代替バッテリー

赤 Polasma は、常時 sshd を動かしてサーバー的に使ってるわけだが、心配になるのがバッテリーの劣化。で、どうしようかと悩んでたりする。

ひとつの案として、電気二重層コンデンサを使って代替とするのはどうだろう? 充電が追い付かないような機種では不可能だが、Polasma は大丈夫そう。これが使えるとバッテリー加熱による破裂なども心配しなくて良さそうだ。ただし不格好だ。当然ながらケースには収まらない。ふたも閉められない。


 ・電気二重層コンデンサー10F2.5V 270円 (Φ10mm x 30mm)
 ・電気二重層コンデンサー10F2.7V 200円 (Φ13mm x 34mm)
 ・電気二重層コンデンサー5F5.4V 600円(10.5mm x 22mm x 33mm)
 ・電気二重層コンデンサー120F2.3V 1000円(Φ18mm x 40mm)

秋月電子には、こういったものが豊富にある。600円のやつがスマートに使うには良いような気がするが、200円 x2 でも良さそう。

ついでだが、バッテリーは大体3端子だったりする。+/− 以外の3つ目は何かというと、温度測定用のサーミスタだそうだ。温度によって抵抗値が変化する。今回は、固定の抵抗で良いわけだが、あまりデタラメな温度を検出されても困る。ちょっと調べておこう。
 ・マイナスとの間に 10.08 kΩ 、温度は Android で 25℃。
なくても大丈夫なのかも知れないが、一応。あと pigu は、12.5 kΩ

さて、10F 直列でどれぐらいの時間使えるものなのか計算しておこう。

容量は 5F 。使用する電圧範囲は 4.2V から 3.4V までとしよう。

1/2 x 5 x (4.2)^2 - 1/2 x 5 x (3.4)^2 = 15.2(J:ジュール)
15.2/3.6 = 4.22 mW・H = 4.22 mA・V・H
3.7V 定格だと、1.14 mAH 相当

正規バッテリーの 1/1000 のオーダー。もう一ケタ欲しいが ...実際どうなのか?
動作時に 500mA(1.85W) 流れているとすれば、3600*1.14/500 = 8.2秒。平滑するだけの目的なら結構いけるかも。

数字の根拠について、ちょっと。3.4V ってのは、Power_Off_Voltage/Power_Off_Voltage の値。また 500mA というのは、FG_Battery_CurrentConsumption を見てて決めた。(300mA 台のこともあるが、実質何もしてない時 )

次の問題は、Android 側の管理。
まず、0V からの充電が可能かどうか。出来ないとなるとちょっと面倒そうだ。普通ならプレチャージというのがあって、通常の 1/10 ぐらいの電流で充電しようとするのだが、こいつはどうだろう?

これをクリアできても、通常充電とトリクル充電の移行サイクルが異常に短くなる。充電ロジックが異常だと認識しないかどうか?これも心配。

別の案 -- Ni-MH x 3直列 で代替



秋月のサイトを見ていたら

 ・ニッケル水素電池パック 3.6V830mAh 150円

なんとこんなものが売っていた。なんか安いぞ。専用ケースまで作って売ってる。電子工作の電源にも良さそうだし買ってみることに。

Ni-MH だが、満充電での電圧はおおむね 1.4v 超えだったと記憶している。x3 だと 4.2v 。で過放電ぎりぎりが、0.9v とかそのあたり。Ni-MH は急速充電が可能で 1C (830mA)ぐらいは大丈夫のはず。4.2v 以上に電圧を上げないのならば、一般的な リポ電池の充電回路で充電できるはずなのだ。(確か 4.2v を超えたとしても、1/50 C トリクル充電は大丈夫。)


http://www.kansai-event.com/kinomayoi/battery4/NiMH_world_selection.html より

これこれ、3.4v/3 = 1.13v なんてのは急激に電圧が落ちるところ。満充電は、1.4v 前後ではあるが、それ以上にしてはいけないという意味ではない。たぶん大丈夫だろう。

リチウム電池の代替にメモリ効果のある Ni-MH を使うのは変な話ではあるが、付いてさえいれば良いわけで 容量が(相当に)落ちたとしてもどうということはない。また常時通電の場合、Ni-MH のほうが安心できる。

これもやってみたい。ついでに書くとサーミスタを付けてやれば完璧である。それは、たしか千石電商で合うものを扱っていたと思う。

実践編 電気二重層コンデンサー



もう、手に入れてしまった。とりあえずやってみることに。
お金をけちって、200円の電気二重層コンデンサーを2個だけ買った。ピグも一台遊んでいるわけで、バッテリーを使わないならピグも常時ON にするかと思い、ピグに付けることにした。



まぁ配線だけだし、電子工作とも言えないレベル。端子の部分だけちょっと工夫。基板を削って、一列の丸ピンソケットを嵌めている。本体の端子は 3mm ピッチ? だが、左右に少し移動するので、丸ピンソケットのくぼみに収まった。サーモスタット代替の抵抗は手持ちの 10kΩと 2.2kΩを直列にした。作ったアダプタは、本体の端子のバネだけで止まっている。これでは安定しないので、今のところテープで止めている。ダイソーとかで EVA を買ってきて、もうちょっとマシにしたい。

やってみたら、動いた ... のであるが、あらかじめ充電する必要があった。0v では電源が入らず、充電もされない。調子に乗って AnTuTu ベンチを動かしたが走り切った。

バッテリーは、3.6v 59% で始まって、4.2v 70% という変なことになった。が、ほおっておいたら 100% で落ち着いた。ただ電圧は、4.0v から 4.2v を行き来している。また、バッテリー温度は 19℃と認識された。

つぎ、充電ケーブルを抜いて、どれぐらいもつか確認。Wi-Fi オン、操作を極力しない状態で 60秒だった。しばらく 100% だったが、3.9v になったと思ったら、電源が落ちた。落ちた後のバッテリー電圧は、2.8v 。すぐケーブルを挿したのだが、0% と表示される。4% になったところで、電源を入れると起動した。で、立ち上がっても 5% と表示される。
動作させていても、60秒もつのである。スリープすれば随分と持ちそうだ。ケーブルを抜いて移動させる程度なら全く問題ない。

電源ボタン短押しで、充電のモニタが表示される。中華PMP もこういうタイプが多かったが、これらの機種は、ケーブルを挿して給電すると、とにかく起動シーケンスが動く。たぶん u-boot までは来て、充電可能であれば、短押しは出来るようになる。で、充電可能な最低電圧は 2.7v かそのあたりだろう。

バッテリーが 0v だと、短押しで何も起きない。が ... 一秒 0.001v ぐらいのペースで電圧が上がっていく。数時間放置しておいたら、電圧は 4.0v まで行って、起動可能になっていた。

もうひとつ、不具合。リブートが出来ない。どうも充電OFF になってから、立ち上げるまでのパワーがない。一回電源OFF してから、パワーを溜めて 電源ON しないとダメなようだ。


実践編 Ni-MH x 3直列



150円のニッケル水素電池パック は、ポラスマの方で使ってみる。まぁ使えなるまで使ってみて、ダメになったらそのとき考える。どれぐらいの期間使えるかはさっぱり分からない。1年かも知れないが、数年かも知れない。

まず、電子工作でも使おうと思っているので、使わなくなった、1000mAH リポ電池を使用した モバイル・バッテリーを専用充電器に仕立てる。ちゃんと充電できて、充電が自動停止したら OK だ。工作は極めて簡単。もとのリポ電池を外して、専用ホルダーのケーブルを付けるだけ。元のリポ電池は生きていて 4.0v あったのだが、保護回路が基板側についていたので、単体では使えない。



充電から2−3時間で赤から黄色になった。このときの電圧は、4.19v 。OK だ。一晩放置したが、4.10v になっている。

次に、ポラスマ。まぁ配線して、10kΩの抵抗を付けただけ。専用ホルダー使わずに 電池の電極にハンダ付けすることも出来るのだが、ホルダー買ったし。



当然のように、立ち上がる。最初は 3.6v 34% であった。温度表示は想定どおり 25℃。
で、しばらく充電していたら 3.9v 99% になっていた。今は、4.15v 100% 。大丈夫そうだ。これで運用してみる。

おわりに


今回は、正規のバッテリーを温存する目的で、物理的にバッテリーを交換してみた。そうではなくて、充電電圧を下げて、寿命を延ばす方法もある。これについても探っていきたい。

追記1 (2015/07/01)




現在のポラスマ(予備機)。ダミーバッテリーの作りかたが分かってきた。やわらかい材質の木 −ファカルタか桐ー で作ればうまく行った。電極をどうするかが問題だったのだが、ピンヘッダをコの字に曲げて木に差し込む。木の方は溝をほっておく。ケーブルをハンダづけしたら、接着剤で固定。

また、ポラスマのバッテリーには、温度計のNTCの代わりに固定抵抗が入っていた。本体の方も無視するようになっていて、NTC を接続しても温度が 25℃固定だった。



現在の Pigu (予備機)。なんとこんな形に。スマホ台を木工で作った。そこにダミーバッテリーで、Pigu を付ける。エレコムの BT キーボード を付けてデスクトップぽくしてみた。BT キーボードのバッテリーを抜いて、ケーブルで本体バッテリーに接続してある。

一応、バッテリーの温度計(NTC) もバッテリーケースに付けた。バッテリーにくぼみがあってそこに嵌る。
posted by すz at 11:15| Comment(0) | TrackBack(0) | android

2015年03月18日

C4droid(2) -- perl4

気が変わってもうすこし、tcc & gcc の整備をしようと思う。せっかくなので何かビルドしたいのだ。
... いろいろ考えたのだが、perl にしようと思う。... といっても現バージョンではない。perl 4 である。

http://www.cpan.org/src/unsupported/4.036/

元にするのは、ここのやつ。なんと日付は 1994/1/31 -- 20年以上前のものである。この 4.036 は、FreeBSD-2.2.8R にも採用されたもの。4 の最終バージョンでもある。

ftp://ftp.tw.freebsd.org/pub/releases/i386/
FreeBSD は、ここにソースを含めたものが置いてあった。なんと 1.1.5.1 まである。

何故 perl かというと、システムの api を相当数使用しているため。perl が tcc でビルドできるようになれば、tcc のために用意した include の整備が進むだろう ... というのが目論見。実際に動かすのは今のところ優先度は高くない。

そもそも ... perl4 の使い方を知ってる人は少ないかも知れない。サブセットなわけで、perl に詳しい人でも、どの機能が使えるのか分からないかも。FreeBSD の オンライン manpage はある。山のような セクションがある perl5 とは違って perl.1 のみ -- そして 、日本語に翻訳されたものもある。ただし、日本語版はダウンロードするものしか見つけられなかった。

  ・英語版 perl.1
   日本語版 http://www.jp.freebsd.org/man-jp/get.html (2.2.8 あたり)
  ・日本語版 FreeBSD ハンドブック (おまけ)

日本語版 のマニュアルがあるものの、cat した変換済みのものである。文字コードが EUC で今の一般的な環境と違う。また、漢字1文字分戻るのに ^H^H になっているようだ。perl のテスト・練習を兼ねて html 変換スクリプトを作って見るのも良いかも知れない。

実は既に tcc でビルドできるところまで行った。結構苦労したのだが、細かいところは端折ってメモを残そうと思う。

移植の手順


1) セルフの gcc でビルドできるようにする。
(Configure で作ったものから修正していく。)
2) ビルドできたら、build-gcc.sh を作成し make を使わないようにする。
3) ファイルを必要なもののみになるように整理。
4) build-tcc.sh を作成し、gcc の include を借りてビルドできるようにする。
5) tcclib/include を整備して tcc で完結するようにする。

大変だったのは、1) なのだが、基本的に エラーが起きたら削るという作業。削ったものの中には移植可能なものがあったかも知れない。

さて、ビルドの時間の比較

gcc -O2 tcc
real 1m9.300s 0m1.899s
user 1m6.610s 0m1.300s
sys 0m1.510s 0m0.280s

さすが、tcc は高速。だが、最適化なしなので、サイズは大きくなってしまっている。

gcc -O2 tcc
bytes 347483 509704

まとめ


 ・perl-4.036-android-150318.tar.gz -- perl4 ソース+バイナリ
 ・tcc-0.9.26-android-150318.tar.gz -- tcc ソース+バイナリ
 ・tcc-android-150318.tar.gz -- tcc バイナリ
 ・sqlite-bin.tar.gz -- おまけ

今日の成果物。作った perl4 は、完成度が低いと思われるので、バイナリのみは提供しない。tcc は perl4 をビルドできるよう include を足しただけ。sqlite は、拾ってきたバイナリ。perl と組み合わせて使うとなにかと便利かも。ちなみに、perl という名前で生成しているが、/system/xbin/perl4 に置くつもり。

変更元は、素の perl-4.036 でセキュリティパッチも当ててない。変更点を調べる場合は、diff を取って欲しい。あと、sys-api.txt というファイルが置いてあるが単に 外部シンボルを調べただけのもの。

おわりに


次は、vi をなんとかしたいのと、scp が欲しい。出来るかどうか分からないが。

付録 gcc 環境作成のメモ


メモだけ残しておく。とりあえず loop デバイスで /usr に mount して 使うようにした。/data/local 使うのが良いのかも知れないが、端末の初期化で消えてしまう。/usr にしても boot.img を直さない限り mountポイントを作らないとダメで面倒ではある。
今の認識では、gcc 環境は借り物で、使うときにだけあれば良い。tcc での簡易開発環境を /system に仕込むというのが目的で、公開するものは、tcc でビルド可能にすると思う。

# dd if=/dev/zero of=/sdcard/usr.img bs=1024K count=300
# losetup /dev/block/loop0 /sdcard/usr.img
losetup: /dev/block/loop0: Bad file number
# losetup /dev/block/loop7 /sdcard/usr.img
# mke2fs -T ext4 /dev/block/loop7
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19200 inodes, 76800 blocks
3840 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=79691776
3 block groups
32768 blocks per group, 32768 fragments per group
6400 inodes per group
Superblock backups stored on blocks:
32768

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount -o remount,rw / /
# mkdir /usr
# mount -o noatime -t ext4 /dev/block/loop7 /usr
posted by すz at 22:29| Comment(0) | TrackBack(0) | android

2015年03月16日

C4droid -- tcc と gcc

Android で動作する C コンパイラというか開発システム?に C4droid というのがある。有料なんだが、そんなアプリはこれしかないようなので、購入してみた。
add on には、「GCC for C4droid」、「SDL plugin for C4droid」あと関連アプリに「Ministro」というのがある。C4droid 自体は 5MB 程度なのだが、add on を適当にインストールしたら、SDカードに 257MB ものファイル群が出来上がった。

本当は、ちょっと tcc に興味を持っただけなのだ。/system にちょっとコンパイラを仕込んでみたいというだけなのだ。まぁ セルフの GCC も使ってみたい気はする... のだが、しょぼい IDE で使う気はしないので、どうしたものか。

とりあえず、ファイルに何があるかの調査。(以下、延々調査内容なので、読み飛ばしたほうが良いかも)

/sdcard/Android/data/com.n0n3m4.droidc/files/gcc

arm-linux-androideabi/ lib/ terminfo/
bin/ libexec/ tmpdir/
include/ plugin_version

こんな場所にそれらしきものが。

#ls bin
arm-linux-androideabi-ar arm-linux-androideabi-ranlib
arm-linux-androideabi-as arm-linux-androideabi-strip
arm-linux-androideabi-g++ m4
arm-linux-androideabi-gcc make
arm-linux-androideabi-ld pkg-config
arm-linux-androideabi-nm sdl-config
# ls arm-linux-androideabi/bin
ar as cc g++ gcc ld nm
ranlib strip

m4 と make も見つかった。ただ、objdump と objcopy がなく少々不便。

# ls -F lib/gcc/arm-linux-androideabi/4.9.1/
crtbegin.o* crtend.o* include-fixed/
crtbeginS.o* crtendS.o* libgcc.a*
crtbeginT.o* include/ libgcov.a*
# ls arm-linux-androideabi/lib/
crtbegin_dynamic.o libSDLmain.a libogg.a
crtbegin_so.o libandroid.so libpanel.a
crtbegin_static.o libc.so libpng.a
crtend_android.o libdl.so libsmpeg.a
crtend_so.o libform.a libstdc++.a
libEGL.so libfreetype.a libsupc++.a
libGLESv1_CM.so libjnigraphics.so libthread_db.so
libGLESv2.so libjpeg.a libtiff.a
libOpenSLES.so liblog.so libtiffxx.a
libSDL.a libm.so libvorbis.a
libSDL_image.a libmenu.a libvorbisfile.a
libSDL_mixer.a libnative_app_glue.a libz.so
libSDL_net.a libncurses++.a pkgconfig
libSDL_ttf.a libncurses.a

ライブラリは、.a のものと .so が混在。一体どれが使われるのだろう?
gcc は、相対パスで動作するので、ディレクトリを移動。qemu-user 環境を作って、/usr/local へ。
gcc を /usr/local/bin に置いた場合 include のパスは次になった。

"/usr/local/lib/gcc/arm-linux-androideabi/4.9.1/include" --(1)
"/usr/local/lib/gcc/arm-linux-androideabi/4.9.1/include-fixed"
"/usr/local/arm-linux-androideabi/sys-include"
"/usr/local/arm-linux-androideabi/include" --(2)

システムの include は(2) に、gcc の include は(1) に置いてみる。
次はライブラリのパス

-L/usr/local/lib/gcc/arm-linux-androideabi/4.9.1
-L/usr/local/lib/gcc

こうなっているのだが、.so がここにあっても困る。
collect2 のオプションが、

-dynamic-linker /system/bin/linker -X -m armelf_linux_eabi \
/usr/locallib/gcc/crtbegin_dynamic.o \
(xxx.o) -lgcc -lc -ldl -lgcc \
/usr/local/lib/gcc/crtend_android.o

/system/bin/linker を使うわけで、/system/lib の libc と libdl をリンクしたい。-L/system/lib 必須ということになった。

gcc hello.c -L/system/lib

これで、a.out が生成されるようにはなった。qemu-user 環境では動かないが、実機では動くというしろもの。この問題はおいておいて、次。tcc はどこにあるのか?

# ls -F /data/data/com.n0n3m4.droidc/files/
busybox* file.stderr indent* temp.c*
c4droid_version file.stdin tcc*
file.sh file.stdout temp*
# ls /sdcard/Android/data/com.n0n3m4.droidc/files/tcclibs/lib
fix.o libcrypt.a libm.a librt.a
libc.a libdl.a libpthread.a
# ls /sdcard/Android/data/com.n0n3m4.droidc/files/tcclibs/include/
a.out.h fpu_control.h netpacket stdlib.h
alloca.h getopt.h nl_types.h string.h
ar.h glob.h obstack.h strings.h
arpa gnu-versions.h paths.h sys
asm grp.h poll.h syscall.h
asm-generic ieee754.h protocols sysexits.h
assert.h internal pthread.h syslog.h
atomic.h inttypes.h pty.h tar.h
bits langinfo.h pwd.h tcclib.h
byteswap.h lastlog.h rdma termio.h
complex.h libgen.h regex.h termios.h
conio.h limits.h regexp.h tgmath.h
cpio.h link.h resolv.h thread_db.h
crypt.h linux sched.h time.h
ctype.h locale.h scsi ttyent.h
dirent.h malloc.h search.h ucontext.h
dlfcn.h math.h semaphore.h ulimit.h
elf.h memory.h setjmp.h unistd.h
endian.h mntent.h sgtty.h utime.h
err.h mqueue.h signal.h utmp.h
errno.h net stdarg.h values.h
error.h netax25 stdbool.h varargs.h
fcntl.h netdb.h stddef.h wait.h
features.h neteconet stdint.h wchar.h
float.h netinet stdio.h
fnmatch.h netipx stdio_ext.h

どうやら、ここら辺。
で、この tcc は、

tcc version 0.9.25 - Tiny C Compiler - Copyright (C) 2001-2006 Fabrice Bellard

こういうもので、バージョンがひとつ古い。参考にするに留めたい。
strings でパスらしき文字列を grep すると

/system/bin/linker
/usr/local/include
/usr/include
/usr/local/lib/tcc
/usr/local/lib
/etc/ld.so.cache
/lib:/usr/lib
/dev/zero
/etc/TZ
/etc/localtime
/proc/stat
/proc/cpuinfo
/sys/devices/system/cpu
/dev/null

こんな風になっている。/system/bin/linker が含まれているが、自分自身が ダイナミックリンクされているのだろう。他には実情に合わないパスが色々と。

まぁ、とりあえず最新版をビルドしてみよう。「TinyCC on ANDROID (ARM)」という ブログを見つけたので、知識を拝借させてもらう。
 1) sys/ucontext.h を拾ってくる。
 2) strtold() を strtod() で代用

long double strtold(const char *s, char **p) \
{ return (long double)strtod(s, p);}

 3) config.h を以下の内容で作成

#define CONFIG_TCCDIR "/system/xbin"
#define CONFIG_TCC_CRTPREFIX "/usr/local/lib:/data/local/lib:/sdcard/tcc/lib"
#define CONFIG_TCC_SYSINCLUDEPATHS \
"/usr/local/include:/data/local/include:/sdcard/tcc/include"
#define CONFIG_TCC_LIBPATHS "/system/lib:/usr/local/lib:/data/local/lib:/sdcard/tcc/lib"
#define CONFIG_TCC_ELFINTERP "/system/bin/linker"

#define HOST_ARM 1
#define TCC_ARM_VERSION 7
#define TCC_VERSION "0.9.26"

 4) tcc.c を以下の define でコンパイル

-DONE_SOURCE -DTCC_TARGET_ARM -DTCC_ARM_EABI -DWITHOUT_LIBTCC

うそでしょうと思うほどあっさりとビルドできた。
やっぱり qemu-user 環境で動かないので、実機で。
tcclib.h stdarg.h stddef.h
だけ用意して 実験

# ./tccwk
tcc version 0.9.26 - Tiny C Compiler - Copyright (C) 2001-2006 Fabrice Bellard
Usage: tcc [options...] [-o outfile] [-c] infile(s)...
tcc [options...] -run infile [arguments...]
General options:
(略)
# ./tccwk -I. -c hello.c
./tccwk -I. hello.c
tcc: error: file 'crt1.o' not found
tcc: error: file 'crti.o' not found
tcc: error: file 'crtn.o' not found

おしい。gcc で使った、crt を用意して

./tccwk -nostdlib -I. ./crtbegin_dynamic.o hello.c crtend_android.o -L/system/lib -lc -ldl
./a.out
hello
./tccwk -nostdlib -I. crtbegin_dynamic.o hello.c crtend_android.o -L/system/lib -lc -ldl -run
hello

えー、こんなにあっさりと動くものなのカ。ブログ主に感謝。

では、tcc 自身をビルドしてみよう。
... と include ファイルをどうするのか?という問題があった。
出来るだけコンパクトにしたいので、使っているものを調べてみる。

dlfcn.h fcntl.h math.h signal.h stdio.h
string.h unistd.h
errno.h inttypes.h setjmp.h stdarg.h stdlib.h
time.h
sys/mman.h sys/time.h sys/ucontext.h


まぁこんなものか。... なんてのは甘かった。include がネストして

tcclib/include/:
alloca.h fcntl.h math.h stddef.h sys/
android/ inttypes.h memory.h stdint.h time.h
asm/ limits.h pathconf.h stdio.h unistd.h
asm-generic/ linux/ setjmp.h stdlib.h
dlfcn.h machine/ signal.h string.h
errno.h malloc.h stdarg.h strings.h

tcclib/include/android:
api-level.h

tcclib/include/asm:
errno.h page.h siginfo.h
fcntl.h posix_types.h signal.h
mman.h sigcontext.h types.h

tcclib/include/asm-generic:
errno-base.h fcntl.h mman.h signal.h
errno.h mman-common.h siginfo.h

tcclib/include/linux:
capability.h fcntl.h stddef.h
compiler.h limits.h time.h
errno.h posix_types.h types.h

tcclib/include/machine:
_types.h kernel.h setjmp.h
internal_types.h limits.h

tcclib/include/sys:
_types.h limits.h syslimits.h ucontext.h
_wchar_limits.h mman.h sysmacros.h
cdefs.h select.h time.h
cdefs_elf.h sysconf.h types.h

整理してシンプルなものにしたいんだが、regex とか追加したいような気もする。追加する場合は、整合性上さわらない方が良いだろう。今のままだと gcc から引っ張ってきているだけなので、gcc との整合性も取れている。
さて、例のブログに tcc でコンパイルする場合の変更点が載っているので、同様に修正。
やってみたところ、sys/cdefs.h に修正が必要だった。で、

tcc: error: undefined symbol '__aeabi_lasr'
tcc: error: undefined symbol '__aeabi_d2ulz'
tcc: error: undefined symbol '__aeabi_d2lz'

出た。よくは分からないが libgcc.a のようなものが必要なのだろう。

long long __aeabi_llsr(long long, int)
-- logical shift right [1]
long long __aeabi_lasr(long long, int)
-- arithmetic shift right [1]
int __aeabi_lcmp(long long, long long)
-- signed long long comparison [3]
int __aeabi_ulcmp(unsigned long long, unsigned long long)
-- unsigned long long comparison [3]

int __aeabi_d2iz(double)
-- double to integer C-style conversion [3]
unsigned __aeabi_d2uiz(double)
-- double to unsigned C-style conversion [3]
long long __aeabi_d2lz(double)
-- double to long long C-style conversion [3]
unsigned long long __aeabi_d2ulz(double)
-- double to unsigned long long C-style conversion [3]
int __aeabi_f2iz(float)
-- float (single precision) to integer C-style conversion [3]

ぐぐったら、Run-time ABI for the ARM(R) Architecture と冠する pdf があってこんなのがいっぱいある。... 困ったどうしたものか?
あれ? コンパイルだけやって undefined をチェックすると たくさんあるうちの3つがエラーになっている。他の実体はどこに?

U __aeabi_d2lz
U __aeabi_d2ulz
U __aeabi_idiv
U __aeabi_idivmod
U __aeabi_l2d
U __aeabi_lasr
U __aeabi_ldivmod
U __aeabi_llsl
U __aeabi_llsr
U __aeabi_memcpy4
U __aeabi_memcpy8
U __aeabi_memset
U __aeabi_uidivmod
U __aeabi_ul2d
U __aeabi_uldivmod

libgcc.a みたいなものと書いたが、libgcc.a に定義されていた。... というか libc とかも gcc でコンパイルされているし .. 。でも、libgcc.a そのものを指定すると別の undefined エラーが。解決するには、collect2 が必要になってしまう。とりあえず、自己完結しているものを集めて libtcc.a を作ったところ ... tcc が、ビルドできた!

あとは、ライブラリサーチパスとか crt ファイルの変更だとかをやって整理。

config.h:
#define CONFIG_TCCDIR "/system/xbin"
#define CONFIG_TCC_CRTPREFIX "/system/tcclib/lib:/data/local/tcclib/lib:/sdcard/tcclib/lib"
#define CONFIG_TCC_SYSINCLUDEPATHS \
"/system/tcclib/include:/data/local/tcclib/include:/sdcard/tcclib/include"
#define CONFIG_TCC_LIBPATHS "/system/lib:/system/tcclib/lib:/data/local/tcclib/lib:/sdcard/tcclib/lib"
#define CONFIG_TCC_ELFINTERP "/system/bin/linker"

#define HOST_ARM 1
#define TCC_ARM_VERSION 7
#define TCC_VERSION "0.9.26"

まぁ場当たり的な修正ばかりだが、一応は動く。

まとめ


 ・tcc-0.9.26-android-150316.tar.gz ソース+バイナリ版
 ・tcc-android-150316.tar.gz バイナリ版

最初の成果物。ソース+バイナリ版は、build-tcc.sh で tcc 自身がビルドできる。
バイナリ版は、/system/xbin に tcc を /system/tcclib に include と lib を置くように作成。
もうすこし詳しく書いておく。
tcclib を置けるのは、/system /data/local /sdcard のどれかの配下。tcc コマンドはパスが通っていれば良い。
ライブラリの指定は、-lc -ldl あたりだと思うが、なしでいける場合もある。long long を使うようなコードでは、-ltcc を付けないといけない場合がある。
-run オプションも動くようだ。

おまけ GCC のビルドオプション



COLLECT_GCC=/usr/local/bin/gcc
Target: arm-linux-androideabi
Configured with: ../configure --host=arm-linux-gnueabi \
--target=arm-linux-androideabi \
--enable-static --disable-shared --enable-languages=c,c++ \
--enable-initfini-array --disable-lto --with-float=soft --with-fpu=vfp \
--with-arch=armv5te --disable-libquadmath \
--disable-multilib --disable-libgomp \
--disable-libmudflap --enable-target-optspace --enable-threads \
--disable-libatomic --disable-tls --disable-nls \
--disable-sjlj-exceptions \
--disable-libstdc++-v3 --disable-libsanitizer --disable-plugins \
--disable-libgcc --disable-libssp --disable-docs --disable-libitm \
--with-gnu-as --with-gnu-ld --prefix=/prog/c4droid/OutDir \
--with-mpc=/prog/c4droid/mpc --with-mpfr=/prog/c4droid/mpfr \
--with-gmp=/prog/c4droid/gmp
Thread model: posix

おわりに


セルフで動く tcc をビルドするという目的は、達成されてしまった。アドホックなんで不具合は出るかも知れない。優先度は高くないが、手直しはしていきたい。
さて、次は gcc をセルフで動かすように整理したい。/system ではなく loop デバイスで /usr パーティションを mount して使うのが良いかと思っている。これもボチボチやりたいが、バイナリは配布しないかも。
次は、Mediatek のカーネルについて調べてみたい。
posted by すz at 01:49| Comment(0) | TrackBack(0) | android

2015年03月14日

Pigu & Polasma

久しぶりの記事。
N-04C を長らく使ってきた。ティザリング以上の改造もせずおとなしく使っていたのだが。。。
たまたま、ポラロイド Pigu という機種が (税込送料込) 4980円 で特売されていることを知り、予備も含めて2個発注した。情報取集に努めていたところ、ポラロイド Polasma という機種が、トイザらスで特売されていることを知った。出遅れたので諦めてたのだが、妹の地元に在庫があり、頼んで2個確保してもらった。

これらを喜び勇んで購入したのは、MediaTek だからである。ファームウェアを弄っても元に戻せるとふんで、改造して遊ぶのが主目的。バッテリーがへたってきた N-04C の代わりにメインスマホとして使おうというのも目的ではある。

ファースト・インプレッション


店頭購入の Polasma を先に入手できたので、まずこれから。N-04C と比べて画面が美しくかつ広い。まずそこに感銘を受けたのだが、CPU性能が高くきびきび動く、その上消費電力が小さいようだ。N-04C では充電より消費の方が多く、充電している時でもバッテリーが減っていくということが良くあったのだが、こいつは、そんなことはない。携帯して使っても、バッテリーが持つ。これだけで、スマホも随分と実用性が上がったなぁという印象を受けた。
ただ、N-04C ほどタフではない。すぐに壊してしまいそうな .. そんな印象がある。ゴリラガラスとか強化ガラスであるとは一切説明されてないし、画面が広く筐体が薄すぎる。本当に簡単に壊してしまいそうだ。
次は、Pigu 。Polasma を入手できてしまったので、どうしたものかと思っていたのだが、意外にも良い。携帯性が良いのが理由。別にタフではないのだろうが、Polasma ほど気を使わなくとも済む。その上バッテリーの持ちが Polasma よりもさらに良い。当然ながら、筐体が小さいのも携帯性に寄与している。Polasma クラスでさえ電話のサイズではない -- 小型タブレットだろう。
Pigu の 画面は 320x480 と狭い上に液晶も青っぽくあまり良くないわけだが、携帯性のほうが優先度が高い。持ち歩きたいのは Pigu の方になった。

どう使いわけるか


4台も入手してしまってどうするの?と思われる人もいるだろうが、もともと弄るために買ったのだ。多すぎではあるが、別に困らない。

Pigu (Black) : これはいつも持ち歩く。
Polasma (Yellow) :

 Windows機の傍らに置いて、サブ機として使う。動画も専らこれ。気分によって持ち歩くが、SIM の数の問題が。もし、BT子機にできるようになったら、pigu との 2台持ちにしたい。

Polasma (Red) :

 開発機 - SSHDroid を常に起動し、専ら ssh でログインして使う。セルフコンパイル環境の C4Droid も導入。ファームウェアを弄る実験も専らこれ。

Pigu (Green) :

 予備機 -- カラーの バッテリーカバーを付けたのだが、いまのところ、単なる予備になってしまっている。


MediaTek のツールについて


SP Flash Tool (SPFT)
SP Flash Tool v5.1352.01.zip (MD5: bb3cad2ceed284651e4c494b9966b605)
MT6577 USB VCOM drivers.rar(MD5: 8e9388d06ae7e3f6bd5074f8c8e4a8e8)
まずはこれ。ROM イメージを焼くためのツール。ROM イメージを持っていれば、bootloader を壊してさえ、元に戻せる。セキュリティ上どうかと思うが、吸い出すこともできるので 後述の MtkDroidTools と合わせて完全なバックアップも作れる。Windows8 でドライバを導入するのは面倒だが、freetel nico の手順書が参考になる。

MtkDroidTools
MtkDroidTools_v253.exe(MD5: c95067099942bb3dea0acf5a5a29737a)
http://adbdriver.com/downloads/
いくつかの機能があるのだが、SPFT で 吸い出した ROM イメージを 書き戻せるような形式に変換してくれる。実機に接続する必要はあるが root 化は必要なく、stock の ROM イメージを作成することが出来る。他には CWM の自動生成にお世話になった。
困ったことに、アンチウィルスソフトに、トロイの木馬だと認識されてしまう。(AVG では最近、ウィルスとは認識しなくなったみたい)

root化


Polasma は、Framaroot で root が取れるという情報があったので、なんとか入手した。確かに root は取れた。だが、Pigu では無理であった。
しかし MediaTek の場合、SPFT + MtkDroidTools でいけるのだ。
1) SPFT で ROM を吸い出す。
2) MtkDroidTools で変換すると CWM が自動で作成される。
3) recovery_cwm.img と boot_patched.img を書き込む。
4) CWM を起動して、UPDATE-SuperSU-v2.46.zip をインストール


この手順は強力で対策不可能な感すらある。逆にこれを知ってる人間に盗まれたらやばい。重要な個人情報を扱う場合は Android の暗号化機能で、ディスクを暗号化しておいた方が良い。

root化して使いたいもの


とりあえずは、ESファイルエクスプローラでの パッケージ(APK)のバックアップ 。沢山マシンがある上に初期化も頻繁にするので、いちいちダウンロードするのはやってられない。

あと CF.lumen 。液晶の色温度を設定できるフィルターソフトで、要root + 4.4.2以上。Pigu では是非とも使いたい。

あともう一つあるが、ここではコメントを控えておこう。

さて、開発目的だと、もう root化は必須だ。変更したりできなければ話にならない。
普通は、adb で入って su するわけだが、sshd を使うことを覚えた。やっぱりこっちの方が便利。busybox の vi が使えたりするし。sshd は、SSHDroid が良いようだ。

とりあえずの ToDo


1) セルフ用 tcc をビルド
大した目的ではないが、これはクリアしておきたい。実を言うと C4Droid には、tcc のバイナリが含まれていたりする。これを参考にしてビルドに挑戦。tcc 自身で tcc も作りたいが、C4Droid の gcc も使ってみたい。もちろんコマンドラインでのビルド。gcc もファイルをピックアップして通常の tree に組み込むのだ。

2) Polasma を BT子機に
全然どうしたら良いかわからないのだが、やりたい。仕組みすら見当が付けられない。
タイムリミットは、8月あたり。現在は、SIM を2枚持っている。だいぶ前に買って眠らせていた、6か月のプリペイドが使えなくなるまでになんとかしたい。

ヒントとしては、Pigu 。なぜか対応しているのだ。バージョンが違うため流用は出来ないだろうが参考にはなるだろう。あとは、同じ MediaTek の 4.2.2 のタブレット。Lenobo の YOGA がそのひとつで、BT子機になるらしいのだが... ROM イメージをなんとか入手して調べてみたい。

おまけ1


カーネルソース
 ・https://android.googlesource.com/kernel/mediatek/ (4.4.4)
 ・https://github.com/aniruddha-adhikary/mt6572_kernel (4.2.2)
ビルドするのが目的ではなく調査用。いやモジュールぐらいは...

おまけ2


今の Polasma(yello)


少しでも安心したく、DX.com で購入した強化ガラスのスクリーンプロテクターを貼っている。専用品などないので、サイズが近い LG G2 用にした...のだが四隅がはみ出してしまった。はみだしたところは Polasma を削るしかなかった。道具に撤するので問題ないのだが、少し残念。HTC one M8 用だと長方形で、画面部分だけ覆えるのだが、それで良かったかも。ちなみに、強化ガラスは加工できないそうだ。傷が入れば割れてしまう。ダイヤモンドやすりで削ろうと思ってたのだが甘かった。

裏には、バンカーリングもどきを付けた。動画とか見るし必要だと考えた。さらに、リールクリップを付けている。余計な気もするが、落としたくない。

今の Pigu(black)


これも、リールクリップを付けている。ストラップホールなどないので、ケースに穴を開けた。内部に空間があるところに穴を開ける必要があった。ストラップは以前 DX.com で買い置きしてたもの。適度な遊びになっていて具合が良いようだ。

おまけ3


http://www.needrom.com/download/polaroid-pigu-cwm/
http://www.needrom.com/download/polaroid-pigu/
http://www.needrom.com/download/polaroid-polasma-cwm-twrp/
http://www.needrom.com/download/polaroid-polasma-shrinked-rom/

stock の ROM とかが、置いてある。ぶっ壊してもまぁなんとかなる。
そうそう、Polasma はロシア?で 「QUMO Quest 506」という製品名で売られている。これ用の TWRP なども動作する。

(追記)
ココのサイトが、Polasma の 中国国内版を見つけた。NAMO NX5 または NAMO NXPLAYER だそうだ。ボード名である「htt82_wet_jb5」が見つけるキーワードになったそうだ。で、htt82_wet_jb5 でググると Elephone P7 Mini というのもある。こっちは形も違うのだが V10 だそうだ。(Polasma は V10B)
ついでに Pigu の ボード名 hexing72_cwet_kk でググっても何も出てこない。Pigu はオリジナルではないか?
posted by すz at 21:38| Comment(2) | TrackBack(0) | android

2012年09月28日

MEDIAS N-04C覚書き

DTI の ServersMan SIM 3G 100 に加入することにした。通常 100kbps だが、速度を切替えることができる。高速時 の 転送量あたりの価格が安いのに魅力を感じたのだ。

    1GB/月 程度使っても 3100円/月 程度に抑えられる。しかもチャージの有効期間が長い。これなら、自分の使い方を調整しながら 使えそうだ。... というのが目論見だが ...

    431 : いつでもどこでも名無しさん : 2012/09/18(火) 22:01:33.14 ID:???0

    ターボ使ったことあればわかるけど、一度切断して再接続する
    これはターボ用に用意した別枠の帯域を使用するため
    ゆえに、帯域も狭いので定員制になっている。つまり抽選式ターボ

    こんな情報があった。帯域が別なのは良いことだ。二つの回線契約をしているようなものだ。ただ、抽選式か。混んでいると切り替えで待たされることもありそう。安いからトータルの帯域は狭いんだろうな。でも従量制だから使わせた方が良いはずで帯域は適切なところまでいずれは拡大されるに違いない。

    SoftBankの帯域制限の基準を見ると、高めの定額サービスでも 1,000万パケット/月(約1.2Gバイト/月)で制限かけるとか書いてある。安いやつは、なんと 300万パケット/月(約366Mバイト/月)。1Gバイト/月は多いという認識なのか ...

ところが、驚くべき事実が ...

    3G のドングルとかルータを持っているので、端末は気にしていなかったのだが ... 速度切替ができるのは、Android と iPhone(予定)のみらしい。

    b-mobile の同種のサービスでは、PC からでも変更できるようなので気にしてなかった。

3G のドングル を Paladin に付ける手もあるかも知れないのだが ... テザリング(ルータ化)することを前提に スマホを買ってみることにした。



選んだのは MEDIAS 旧機種の N-04C 。安かったし。まぁ よくわからないのでお試しのつもり。

    この機種は、
     ・ ServersMan SIM 3G 100 の 対応機器一覧
     ・ iijmio の 動作確認済み端末
    に入っている。標準SIM かつ Xi 未対応が条件? ただ、気になるのは テザリング ×。

    たとえば、b-mobile の IDEAS なら文句なしに テザリング ○ で安心なのだが、画面が しょぼすぎ。Rstrem A1 を最初に検討したのだが、すでに放出は終わっていて 安価かつ国内版(技適あり)なのは見つけられなかった。

    あと気が付いた点としては、iijmio のリスト でアンテナピクト表示○ 。セルスタンバイ問題が解消している可能性が高い。

さて、テザリングができないのは何故? というレベルから調べたのだが ...

    docomo の APN に強制的に切り替えるため!

だと分かった。docomo と直接契約している場合は、テザリングするとまずいことになるかも知れない。b-mobile, IIJmio,DTI とかは契約上の縛りはない。この仕組みも邪魔なだけ。

どうも framework-res.apk に情報があるらしく編集しなければならないらしい。そうなると root にならなければならず、さらに いじるのであれば、元に戻せるようファームウェアも入手しなければならない。

だんだん泥沼に入っていく感じがするが .. しょうがない。情報を集めてやってみることにした。

    ApnChanger
    というアプリがあるらしい。N 系ではダメだろうが、いけるやつもあるとのこと。P-01D が出来たという情報が書いてあった。これは新品でも安いらしいし、少し後悔。

adbドライバの入手

    adb というのは、Android 端末と USB でつないで Android 端末を操作するツール。Android 端末で shell が使えたり、ファイルを転送したり、アプリのインストールができたりする。普通は、汎用のドライバの inf を書き換えて使うのだが、N-04C では、なにやらうまく行かない。

    メーカサイトに adbドライバ があるので、ダウンロードしてインストール。

ファームウェアの入手

     ・ MEDIAS N-04C の OSバージョンアップ(メーカサイト)

    ここから、PC で update.dat をダウンロードできる。ただ、IMEI(製造番号) を入力しなければならないし、何のバージョンが入っているか管理しているらしく ダウンロードできるものが限られる?

    手に入ったものが何かは分かった。

    ビルド番号:A1022101 (2011/10/20 版)

    AndroidOSバージョン:2.3.3
    update.datについて:
    ファイルサイズ:180,771KB
    MD5:7E73C089F1B5C801E9393AAA15680571

    サイズから見てフルアップデート。これさえあれば心強い。

    最新バージョンは、A1030501 で差分アップデート。これは 接続後アップデートできる。A1030501 にしたとしても、A1022101には戻せる。そして 弄るのは A1022101 を使う。

      弄る対象は、もうひとつある。A1021401 という前のバージョン。2011/9月製造までの機種なら、ここまで一旦ダウングレードすると SIM フリーになるらしいのだが ...

      一応入手したのは、2011/3月製造 で可能性があるが、だいたい docomo 以外もっていないし予定もない。メモだけ。

      初期ビルド A1011001
      9/21ビルド A1021401→A1022001
      10/20ビルド A1022101→A1030401 or A1030501

      SIMフリーなのは A1021401とA1022001。

      ビルドバージョン:A1021401
      AndroidOSバージョン:2.3.3
      update.datについて:
      ファイルサイズ:180,738KB
      MD5:806DC91957CE3EEC440AF245C9EC94B5

      ビルド番号:A1022001
      update.datについて:
      対象ビルド: A1021401
      ファイルサイズ: 3,612KB
      MD5: 8A31EC7A961167CD1C3E4AC0C25EEE46

ファイルを変更できるようにする(レベル 0: 準備 )

    auto-rootkit_bh_fix.zip というファイルを入手すると必要なものが一応含まれている。後のバージョンでも良い。あと adb が必要。android sdk でも良いが、いろんなツールにも添付されている。後の目的もあるので、APK Multi-Tool のサイトから

     APK Multi-Tool Windows Version 1.0.9

    を入手することを推奨しておこう。あと xml を編集できる エディタ。SAKURAエディタ が良いようだ。

    これらを使って 手動!で やってみることにする。必要なファイルは SD に置き 端末側の shell を使う。普通のやりかたではないので、マネするのは薦めない。なにをやっているかの解説だと思って読んで欲しい。

ファイルを変更できるようにする(レベル 1: 仮 root )

    とにかく root 権限を奪取するのが第一ステップ。zergRush というツールを使うと一時的に root になれるそうだ。ただし、A1022101 (かそれより前のもの) が対象。

    $ cat 1/zergRush > /data/local/tmp/zergRush
    $ chmod 755 /data/local/tmp/zergRush
    $ /data/local/tmp/zergRush

    こんな風にする。cp は使えないので、リダイレクトでファイル生成。そして実行権を付けて実行。/data/local/tmp も意味があるようだ。ここでないと ファイルを作れない?

    [+] Killing ADB and restarting as root... enjoy!

    成功するとこんなメッセージが出て、adb が一旦終了。

    $ /data/local/tmp/sh
    #

    /data/local/tmp/sh が作られているので、実行するとプロンプトが # になる。

ファイルを変更できるようにする(レベル 2: 恒久的 root ただし /system 以外)

    reboot すると、折角得た root 権限が無効になってしまう。root 権限を常に得られるように 起動時に動かすスクリプトを仕込む。ついでに busybox も 仕込んでおく。

    # cat /2/local.prop > /data/local.prop
    # cat /2/data_local/autoexec.sh > /data/local/autoexec.sh
    # cat /2/data_local/_su > /data/local/_su
    # cat /2/data_local/su > /data/local/su
    # cat /2/data_local/busybox > /data/local/busybox
    # cat /2/data_local/libemoji-wrapper.so > /data/local/libemoji-wrapper.so
    # chmod 555 /data/local/autoexec.sh
    # /data/local/autoexec.sh
    # exit
    $ /dev/_su
    # rm /data/local/tmp/*

    /data/local.prop で autoexec.sh を実行するように指定。autoexec.sh では、su , _su を /dev にコピーして 実行権を付けている。あと、busybox も実行権を付け直す。

    autoexec.sh は、今実行して、/dev/_su が使えるか確認しておく。一旦 /data/local/tmp/sh を抜け、zergRush と生成ファイルを削除。

    最後に reboot して、/dev/_su で # になるか確認しておこう。

    ここまでやって、A1030401 にバージョンアップするのが普通らしいのだが、私はこのまま。A1030401 だと若干手順が変わる。最新の A1030501 にするとどうなるかは、分からない。

ファイルを変更できるようにする(レベル 3: /system の変更)

    これで root にはなれるようになった。だが、 /system は、ライトプロテクトがかかっているので、もう一段手順が必要。

    # cat /4/sysunlock.ko > /data/local/sysunlock.ko

    この sysunlock.ko は、カーネルモジュールで、ロードすると ライトプロテクト解除。アンロードすると ライトプロテクト しなおす。という仕組みになっている。ライトプロテクトしなおすのを忘れると 赤画面になって
    起動しなくなる(いわゆる 赤面)場合がある。そうなってもあわてることはない。A1022101 で初期化すれば普通は最初に戻る。

    /system を書けるようにする手順(A1022101)

    # insmod /data/local/sysunlock.ko
    # mount -o rw,remount /system /system

    /system を書けるようにする手順(A1030401)

    # insmod /data/local/sysunlock.ko patchaddr=0xC05C2F91
    # mount -o rw,remount /system /system

    どうもこれが正しいらしい。私は、A1022101なので上。

    元に戻す

    # mount -o ro,remount /system /system
    # rmmod sysunlock
    # lsmod

    とても重要なのに、間違った説明も見受けられる。最後に lsmod で確認したほうが良い。

不要な system アプリの削除

    /system/app に置かれたアプリは、端末上からは削除できない。たちが悪いことに、使わないのに勝手に起動したりして、メモリを圧迫したりする。メモリがなくなれば、リブートという結末になったりする。また、アップデートされると 新しいのは、/data/app にインストールされるので、アプリ用エリアを圧迫する。

    というわけで、使わないものは元から消すことにした。

      cd /system/app
      mv MyLifeLog.apk MyLifeLog.apk.org
      mv MyLifeLog.odex MyLifeLog.odex.org
      mv ScPedometer.apk ScPedometer.apk.org
      mv MediasLauncher-s.apk MediasLauncher-s.apk.org
      mv MediasNaviShortcut.apk MediasNaviShortcut.apk.org
      mv MediasNaviShortcut.odex MediasNaviShortcut.odex.org
      mv docomo_market.apk docomo_market.apk.org
      mv BeeTV.apk BeeTV.apk.org
      mv EstarAP1DL.apk EstarAP1DL.apk.org
      mv BookShelf_preset.apk BookShelf_preset.apk.org
      mv TabihikakuNet.apk TabihikakuNet.apk.org
      mv Twipple.apk Twipple.apk.org
      mv andronavi.apk andronavi.apk.org
      mv toruca.apk toruca.apk.org
      mv TravelCamera.apk TravelCamera.apk.org
      mv TrendSearch.apk TrendSearch.apk.org
      mv TrendSearch.odex TrendSearch.odex.org

    とりあえず、ひとが作ったリストを使わせてもらった。動作中のものが多々あるので、消さずに rename すること。reboot 後に *.org を消すのは問題ない。(ただし、意味もない)

    私が使いそうにないものは、まだまだある。様子を見ながらリストに追加していこうと思う。

    さらにいうと、使うものでもアップデートされるものは、/data/app に移した方が良いと思う。あとで、領域を占有されるよりはマシだろう。いざとなれば、アンインストールも出来るし。

    追加削除(候補)

      cd /system/app
      mv CarrierMailService.apk CarrierMailService.apk.org
      mv CarrierMailService.odex CarrierMailService.odex.org
      mv spmode_mail.apk spmode_mail.apk.org
      mv iD.apk iD.apk.org
      mv PhoneBookCopy.apk PhoneBookCopy.apk.org
      mv gguide.apk gguide.apk.org
      mv Evernote_launcher_docomo.apk Evernote_launcher_docomo.apk.org
      mv SyncMLApp.apk SyncMLApp.apk.org
      mv Quickoffice.apk Quickoffice.apk.org
      mv GenieWidget.apk GenieWidget.apk.org
      mv MobileFeliCaMenuApp.apk MobileFeliCaMenuApp.apk.org
      mv MobileFeliCaWebPluginBoot.apk MobileFeliCaWebPluginBoot.apk.org
      mv ManualDownloaderN04C.apk ManualDownloaderN04C.apk.org

framework-res.apk の編集(の準備)

    まずは、ツールを入手。APK Multi-Tool のサイトから

     APK Multi-Tool Windows Version 1.0.9

    を入手する。

    これを使って framework-res.apk を解凍して、書き換えたものから、再構成。

framework-res.apk の編集(する内容)

    framework-res.apk/res/values/strings.xml の config_tether_apndata を変更する。

    標準ではspモードの

     docomo tethering,dcmtrg.ne.jp,,,,,,,,,440,10,0,*

    になっているが、例えば b-mobile U300 だと

     bmobile tethering,dm.jplat.net,,,bmobile@u300,bmobile,,,,,440,10,0,*

    に変更する。DTI でどうなるかは分からない。SIM の台紙に書かれているそうだ。

     DTI tethering,ynmbl.net,,,user@3gd.ynmbl.net,3gd,,,,,440,10,0,*

    拾った情報だとこうなのだが、来ない事には確認できない。

    パラメータは、名前,APN,プロキシ,ポート,ユーザー名,パスワード,サーバー,MMSC,MMSプロキシ,MMSポート,MCC,MNC,認証タイプ,APNタイプ だそうだ。

    この方法以外に、

     bools.xmlの config_tether_dun_required を false にする。

    という手があるらしい。これでいけるのなら、個別の設定をせずに済む。

    884 : SIM無しさん : 2011/11/06(日) 18:56:57.97 ID:t60u1rWb [5/6回発言]
    A1022001でconfig_tether_dun_requiredをfalseに設定すると、
    bmobileもsoftbankもスリープ不要で1分以内にテザリング開始する。
    APNの強制書き換えはされるけど効いてない。
    ネックは/systemの変更が必要になるとこだけだな。

    こんな情報は見つけた。A1022101 もいけるかも知れない。

    メモ:

      /system/etc/customization/settings/com/android/settings/custom_settings.xml
      ここに上記の設定が入っている端末もあるらしい。最終的に settings.db に入るデータが本物であり、他は デフォルト値。そして settings.db自体を書き換えてしまうわざもあるらしい。書き換えないにしても、settings.db をチェックして、別のファイルの設定になっていないかチェックしたほうが良いかもしれない。Settings.apk というのを持っている機種もある。

      さらに、Settings.Secure.TETHER_DUN_REQUIRED というのがあって、こちらの方が settings.db より強い。これは、どこに設定すべきものだろう? ひょっとして initrd の方だったりして。実は initrd をいじった方が楽?

      Xperia 2011 の Android 2.3.4 root 関連情報:Android 2.3.4でのテザリングについて
      docomo 公式テザリングの仕組み

framework-res.apk の編集(手順)


     APK Multi-Tool Windows Version 1.0.9

    の使い方ということになる。.. のだが バージョンが違うと手順は微妙に変わる。やったことを列挙するに留めたい。

    コマンドプロンプトで Script.bat を実行。

      20 Clean Files/Folders
      7. Clean All Folders/Files

    これを実行するとディレクトリが出来る。 place-apk-here-for-modding に framework-res.apk をコピー。

      24 Set current project
      Choose the app to be set as current project?
      set INPUT=Enter It's Number:
      1
      9 Decompile apk

    これで中身が展開されるので、
     projects/framework-res.apk/res/values/strings.xml
     projects/framework-res.apk/res/values/bools.xml
    を編集

      21 Select compression level for apk's
      Enter Compression Level (0-9) :
      0
      11 Compile System APK files
      Aside from the signatures, would you like to copy
      over any additional files that you didn't modify
      from the original apk in order to ensure least
      # of errors (y/n)
      y

    「続行するには何かキーを入力してください」が出るが、キーを押すまえにやることがある。

        keep/resources.arsc の削除

    これが重要。

    キーを押すと
     place-apk-here-for-modding/System_framework-res.apk
    が作成される。これが、編集したもの。

他の話題

    L-04C

    【L-04C】 文鎮化してしまった時の初期化の方法

    これは! リスクなしに自由にいじれる!こっちのほうが良かったか。

    N-04C も同じメーカの SoC なので、本来は 同じ機能を持っているはず。
    ... そういえば、リカバリのとき 音声ボタン(大) を触ってしまったのだが、変になった。バッテリーを外したが、実は USB からブートしようとしていたりするのかも。(USB をつなげて見ればなにか分かる?)

追記: 削除プリインストール アプリ 候補

    (方針)/system/app のアプリは 端末からアンインストールできない。アンインストールする可能性があるものは、一旦消す。使ってみたいものがあれば、取り出して 通常アプリとしてインストール。

    消したとしても /system の領域が減るだけで /data が増えるわけではない。GMail とか Google 系は、古くても基本消さない。

    # からはコメント。拡張子(apk) は省略 odex ファイルがあるものはそれも削除
    この情報をもとに 削除するスクリプトは作れる。(実際は削除じゃなくて mv(rename))

    # 携帯機能
    ManualDownloaderN04C # 取説
    # install_flash_player # FlashPlayerのショートカット
    MyLifeLog # Days
    ServiceTwitter # twitter連携
    ServiceMixi # mixi連携
    ServiceFacebook # Facebook連携

    # Google
    # Maps # Googleマップ(古い)
    # Gmail # Gmailアプリ(古い)
    # YouTube
    # Email # Emailアプリ(使い勝手悪い)
    # Vending # マーケット
    # MarketUpdater # マーケット更新ツール
    # Browser # 標準ブラウザ(使い勝手悪い?)
    # DownloadProviderUi   # ダウンロード
    # Mms  # メッセージ

    # MEDIAS
    # MEDIAS # MEDIAS?
    MediasLauncher-s
    MediasNaviShortcut # MEDIAS NAVI

    # docomo1
    iD # iD
    toruca # トルカ
    PhoneBookCopy # 電話帳コピー
    spmode_mail # spモードメール
    CarrierMailService
    docomo_market # docomoマーケット

    # docomo2
    BeeTV # BeeTV
    gguide # Gガイド
    EstarAP1DL # E★エブリスタ
    BookShelf_preset # BookShelf
    TabihikakuNet # 旅比較ねっと
    Evernote_launcher_docomo # Evernoteインストーラ

    # biglobe
    Twipple # Tripple
    andronavi # andronavi

    GenieWidget # ニュースと天気
    Quickoffice # QuickOffice
    TravelCamera # ソトメモ
    TrendSearch # Topics
    MobileFeliCaMenuApp # おサイフケータイ
    MobileFeliCaWebPluginBoot # おサイフケータイ Webプラグイン

    ScPedometer # 歩数計
    SyncMLApp # 電話帳バックアップ

おまけ:とりあえず、入れたいアプリ

    ・ Quickoffice

      削除の後、あらためて インストール。

      Quickoffice.apk.org を SD カードに Quickoffice.apk にコピーしてリネーム。で、ファイルブラウザとか のツールでファイルを指定して インストール

    以下 Google Play から
    注意: デザリングを有効にすると ダウンロードが開始されない場合がある。一旦開始されたら デザリングを有効にしても、ダウンロードは中止されない。(複数のファイルでも止まらない)

    Advanced Task Killer

      タスクキラーは、Android 2.x では入れないと不安。

    ZDbox

      いわゆるツールボックス。便利そう。Optimize ToolBox を愛用してたのだが.. 乗り換えるか。

      本体の調子が悪い。勝手にリブートしたり。これ入れたせいかも。使用停止して様子み。

    ES ファイルエクスプローラー

      とりあえず定番ファイルブラウザ。-- Google Play を見ると定番という感じはしないが ... Paladin とか中華アンドロイド機にプリインストールされていたりするので、なじみがある。

    ツールボックス

      カメラとか 各種センサとかを利用したツール。ちょっと入れてみよう。

    トラフィックの統計情報

      3G/Wifi 別に 今日と今月の 通信量が分かる。

      これみて、使い方を検討しよう。

    ServersMan SIM 3G Unlimited

      これは、書いておかないと。これ目的で N-04C を買ったわけだから。

      レビュー見ると辛辣なレビューがある。が、このアプリに関係ない DTI への不満だったりする。だが有用な情報も含んでいる -- (割り当て待ちで) 切り替えに時間がかかることがあるらしい。これは覚えておこう。また、切り替えても遅いらしい。ユーザが急に増えれば対応が遅れる場合もあるだろう。従量制なんだから いずれは解決すると思いたい。


    以下、Google Play 以外から

    AndroidOptimizer (Optimizer Tool Box)

      愛用しているんだが、中華アンドロイド機に付いてきたものを使い回している。Google Play にはない。

      ここに v2.7.0 があるが ... 動かしてみたら DX Tool Box という違うアプリだった。中国語版で良くわからないのでパス。

      今使っているのは、英語版 2.0.8 。独自のアップデートパスを持っているみたいで、アップデートしてみたところ 2.3.0 になった。だが、やはり中国語版で良くわからない。

      ただ、URL は分かった。http://www.dashi.com 探せば英語版があるのかも知れないが とりあえずパス。

    MCpuMon

      developer.mips.com にあるツール。CPU 使用量のグラフを見ることが出来る。

      起動すると、タスクバーに登録される。バックグラウンドで動かしておいて後でチェックも出来る。

充電について

    買った時に付いてきたケーブルを PC につないで使ってきた。充電しながら使い続けられる。これは、なにげに嬉しかったりする。Android タブレットのなかには、消費電流の方が充電電流より多いものもあるのだ。ただ、CPU 100% になったりすると 温度が上がって充電が止められる。

    で、使っているうちにケーブルが断線したっぽい。ときどき接続が切れていたから、間違いなさそうだ。そうなると充電すらできない。mini-B のケーブルは沢山あるんだが、micro-B は持っていない。困ったことだ。

    100 均にいって、充電ケーブルを入手してみたら ちゃんと使えた! 通信もできる。とりあえず事なきを得た。



    ものは、ローソン100 の 『スマートフォン 充電・転送ケーブル』 。このケーブルは、micro USB プラグのところが はめ込み式のケースになっていて分解出来る。だから、充電専用ケーブルにも改造できる。

    xperia充電用ケーブル改造 その2

    ここが参考になる。ただやるなら自己責任で。



    ちょっと補足。micro B コネクタは、後ろから見てこういう配置になっている。#4 は ID なので、これだけ結線されていない。

    #2 と #3 を切って それ同士を結線しているわけだ。実際にやってみると、#3 の線をむいて #2 の端子にハンダ付けするのが楽だった。

    ただ、電源が #1,#5 に配線されているので、ショートするとたいへんまずい。ハンダ付けの経験がなかったり、自信のないひとはやめておいたほうが無難。

おわりに

    なにも考えず買ってしまった N-04C だが 望みどおりの使い方が出来るようになった。機種解析をした方々、情報をまとめた方々には感謝する。ありがとう。

付録:情報元
posted by すz at 23:23| Comment(1) | TrackBack(0) | 日記

2012年06月01日

GCW Zero

(DATE: 06/01/2012 00:29:01)
Jz4770 でググってみると GCW Zero ってのが見つかった。



http://boards.dingoonity.org/other-game-systems/gcw-zero/
http://obscurehandhelds.wordpress.com/tag/gcw-zero/

Jz4770 採用の ゲームコンソールだそうだ。Android 不採用 、320x240 (640 x 480 になるかも ) ってすごい割り切り。

The tentative release for the console is Mid July to Early August 2012. Final Cost for GCW Zero Special Edition $110.00 to $120.00.

8 月には、出るってことか。ちなみに Special Edition は、RAM 512MB Flash 16 GB で 無印 の 256MB/4 GB と比べてグレードアップされている。開発者向け?

ゲームコンソールでは、Jz4740 採用の A320 というのが有名だが、それの後継機を目指しているかんじ。それにしても Jz4770 とは ... 5 倍ぐらいは高速だろう -- そんなに性能が必要なんだろうか?

    Jz4770 は、800 MHz で駆動するようだ。それでも 4 倍か。x2 は二次キャッシュで性能向上の分。
    クロックダウンしているのは、熱のため? それとも 1/2 , 1/4 なら 周波数変更が簡単なため?

    Dingoo Linux 用のアプリが動く。

    Special Edition で $110-$120 だから 無印はもっと安いはず。$70-$80 とか?

    追記: 2番目の記事をよく読めば ... pre-order では deposit $65 って書いてあった。またプロトタイプでは、Gemei A330 のシェルを使っているようだ。

    Gemei A330 を流用すれば、基板を作るだけでプロトタイプにはなるだろうが ... その後はどうするんだろうか? A330 の シェルと互換なのを作る?

    追記: 2012/09/13

    MIPS系Jz4770搭載のポータブルゲーム機GCW-Zero発売日決定』の記事で進展があったのを知った。10/1 らしい。

    Sneak Peek at GCW-Zeroに開発中の筐体写真があるとのことなので見てみた。




    ちゃんとケースも金型から作っているみたい。同人ハードかと思っていたが、本格的な製品らしい。基板を見ても手慣れた印象がある。

    内蔵 FLASH は、microSD が使われているが、basic/paladin の様に コントローラ + NAND FLASH チップのパターンも付いている。チップの劣化を考えると 交換できる microSD のほうが嬉しい。外部ストレージも microSD で、左下にスロットがある。

    Wifi は、USB 接続タイプのようだ。右上の青いのは、FM ラジオモジュール。その下の チップは、basic/paladin などと同じ型番の電源IC のように思える。下のほう USB mini-B の 上と右に大きめのチップがあるが、デカップリング用のコンデンサのはず。

MISPベースのスティックAndroid ippea TV (旧 PEA-887)



    http://www.ippea.com/

    JZ4770 を使っているそうだ。802.11b/g/n WIFI と USB HOST も付いている。RAM は 512 MB 。

    http://www.linuxpilot.com/industry/news/20120606iPPea

    こちらに分解写真。四方に足があるゲジゲジ付きだから Paladin などと同じ SD インターフェイスの内蔵 FLASH 。

    こういうのが出てくるのは、嬉しい。

      MIPS Jz4770 1.2G
      mini USB 2.0 port (OTG, 640Mbps)
      標準 USB 2.0 ports (12Mbps)
      MicroSD slot
      内蔵 FLASH 4GB(SD interface) / RAM 512MB;
      IEEE 802.11 b/g/n (Blutooth T.B.D.)
      HDMI 出力
      3D Air KeyMouse

    スペックを拾って訂正するとこんなところか。Blutooth が、T.B.D(定義すべき) になっているのは、BroadCom の チップだからだろう。ファームウェアとドライバの両方が必要だからメジャーな型番であることを願う。

    で、3D Air KeyMouse って何? 中段の写真にキーボードのようなものが見えるけど。まさか。

    よく見ると、中段・下段の写真は、基板のコネクタ配置と合わない。-- 関係ないのか -- 紛らわしい。... というか、ケースはまだ出来ていないのかも。

    追記:(2012/7/12) なんか紹介されている。

     http://gpad.tv/tv/mips-ippea-tv/

    そして、買えるようになったようだ。メーカの eStore で買える。$50 + 送料 $15 の合計 $65 。Paypal が 82円/ドルとして、5300 円 ぐらい。ただし、出荷は7月末。もうすぐとは言え未発売。

    追記: 2012/09/13

    使う予定もないのだが、ポチってしまった。送料込み $65 。現在 香港から 輸送中。

    記録
     12/09/02 09:40 Receipt for Your Payment to iPPea Limited service-jp@paypal.com
     12/09/02 09:43 Purchase Receipt info@ippea.com
     12/09/11 18:19 Shipping confirmation for your order cs@ippea.com
     12/09/11 18:27 More details on your shipment service-jp@paypal.com
     9月11日 16:09 引受 HONG KONG
     9月12日 15:06 国際交換支店から発送

    paypal から Shipping のお知らせが来ている! で、すぐに 引受/発送 のトラッキングが出来ている。EMS ?



    追記: 2012/09/16 : 受け取り

    現物は、確かに上のイラストの通りだった。買ったのは Black で色は違う。緑帯に黒。付属品は、micro USB OTG ケーブル(HOST) と、電源ケーブル (USB) 。電源ケーブルは、例の細いタイプ。

    かなり華奢な印象。乱暴に扱うと簡単に壊れてしまうかもしれない。

    PC と接続するには、micro USB ケーブルが別途必要。(もってないや)

      上海問屋の 299円のHUB (3port + micro USB) あたりを買っておくと、なにかと捗るかも。

    まだ使う予定がないので、そっとしまう。

    ちょっとメモ



    ・『AndroidOS4.0MiniPC YouTube動画比較テスト アンドロイド搭載スティック型
    ・『USBtypePCアンドロイド4.0USBスティックタイプミニPCでインターネット・動画

    動画でレビューしているサイトを発見。モニタによってはこんなに綺麗に収まるのかと感心した。サイドのコネクタが気になっていたのだが、電源ケーブルが干渉しても、反対側の micro USB から給電できそうだし、あまり困らないのかも。

    つなげるのはマウスのみが普通なのか ...

    同じスティックタイプの AK-212MiniPC(Allwinner A10 1GHz)とあまり変わらないそうだ。どちらも大したことがないという意味だろう。ただ消費電力的には ippea TV の方が有利なはずで、それゆえにコンパクトに仕上がっている(と思う)。 コンパクトにできたおかげてモニタの裏に収まるとか ... バランスは良いと思う。
posted by すz at 00:29| Comment(2) | TrackBack(0) | 日記

2012年03月29日

Jz4770 アンドロイドカーネルソース(ICS)

ICS 対応の新しい アンドロイドカーネルソース が手に入った。

例によって、linux オリジナルに対する 新規ファイル と 差分に分けて整理しておく

ほかに、Toolchain のバイナリもあるが、大きいので割愛。

ちょっと覗いてみる。

  • まずは、defconfig のチェック。

    npm701_ab_defconfig
    npm702_defconfig
    npm702_pinkflozd_defconfig

    一応 paladin 用と basic 用の両方があるようだ。あと、jz4770 のみが対応で他の jz47xx は削除されている。当然 defconfig もない。

    あぁ Jz4760/B は見捨てられたのか ... 2.x 用のソースコードはあるとは言えマージするのは相当に面倒に思える。

    あと、pinkflozd 氏は、様々なチューニングをしている。 大雑把に言うと I/O の効率化? と ライブラリ関数の差し替え が主。バグ修正のような変更はないようだ。

    このカーネルなら、確実に現行のファームウェアのカーネルと差し替えられる。

改造したいところと重なってないことを確認して、usb gadget を見てみる。


    drivers/usb/gadget/android.c:

    static struct android_usb_function *supported_functions[] = {
    &adb_function,
    &acm_function,
    &mtp_function,
    &ptp_function,
    &rndis_function,
    &mass_storage_function,
    &accessory_function,
    NULL
    };

    こんな定義がある。実際に使っていると思われる mass_storage を見ると ...

    static int mass_storage_function_init(struct android_usb_function *f,
    struct usb_composite_dev *cdev)
    {
    :
    :
    nluns = CONFIG_USB_NLUNS_NUM;

    config->fsg.nluns = nluns;
    for (i = 0; i < nluns; i++){
    config->fsg.luns[i].removable = 1;

    /*add by bcjia to use cdrom to lun2*/
    if(i == 2){
    config->fsg.luns[i].cdrom = 1;
    }
    }
    :

    なにやらまさに 2 つの removable + cdrom を作るコードがある。

    イーサネットは、こっち rndis 。

    static int rndis_function_init(struct android_usb_function *f, struct usb_composite_dev *cdev)
    {
    f->config = kzalloc(sizeof(struct rndis_function_config), GFP_KERNEL);
    if (!f->config)
    return -ENOMEM;
    return 0;
    }

    static int rndis_function_bind_config(struct android_usb_function *f,
    struct usb_configuration *c)
    {
    :
    if (rndis->wceis) {
    /* "Wireless" RNDIS; auto-detected by Windows */
    rndis_iad_descriptor.bFunctionClass =
    USB_CLASS_WIRELESS_CONTROLLER;
    rndis_iad_descriptor.bFunctionSubClass = 0x01;
    rndis_iad_descriptor.bFunctionProtocol = 0x03;
    rndis_control_intf.bInterfaceClass =
    USB_CLASS_WIRELESS_CONTROLLER;
    rndis_control_intf.bInterfaceSubClass = 0x01;
    rndis_control_intf.bInterfaceProtocol = 0x03;
    }
                   :

    なんだかよくわからないがコードは入っているようだ。.... 要するに board でデバイスを定義すると 構成される? それはどうやってやるのだろう?

    ... というか、これって ジェネリックなコードだろうから ググると出てきたりする?

    まぁ、これで PC と接続すると 高速に通信できそうなのは分かったので、一安心。

    その前に ... config できになる点が ...

    CONFIG_USB_MUSB_OTG=y
    CONFIG_USB_GADGET_MUSB_HDRC=y
    CONFIG_USB_MUSB_HDRC_HCD=y
    CONFIG_MUSB_PIO_ONLY=y

    CONFIG_USB_GADGET_DUALSPEED=y

    CONFIG_MUSB_PIO_ONLY .. ってことは、オーバヘッドが大きそうな ... 。ただ、ネットワークはオフロードできる要素がないから、DMA 使っても あまり差がないはず。むしろ 影響があるのは MASS STORAGE 。ファイル転送などで CPU 負荷が上がっていたのはこれのせいだったのか。

最初のビルドを試す。

    pinkflozd 氏 の git には、toolchain の Linux バイナリも含まれるようになった。これでビルドすれば同じものが出来るはず。

    まずは、gcc -v

    Target: mips-linux-gnu
    Configured with: /home/fu/dev/gcc44/gcc/configure --target=mips-linux-gnu \
    --prefix=/home/fu/dev/gcc44/build-linux/tools \
    --with-sysroot=/home/fu/dev/gcc44/build-linux/sysroot \
    --enable-__cxa_atexit --disable-libssp --disable-libgomp --disable-libmudflap \
    --enable-languages=c,c++ --with-mpfr=/home/fu/bin --with-gmp=/home/fu/bin \
    --with-llsc --disable-decimal-float --disable-fixed-point --with-mips-plt \
    --with-arch=mips32r2
    Thread model: posix
    gcc version 4.4.3 20100121 (prerelease) [gcc-4_4-branch revision 156102] (GCC)

    --with-llsc , --disable-decimal-float と --with-mips-plt は知らなかったオプション。

    ちなみに multilib は、soft-float と mips32 ( +soft-float/mips32 ) が含まれている。

    次に ベース (Ingenic-Linux 3.0.8 r1123) をビルドしてみる。

    # cp arch/mips/configs/npm702_defconfig .config
    # make

    これだけで zImage まで ビルドしてくれた。

    途中で board の選択メニューが出るのだが ...

    7. Ingenic JZ4770 NPM703 board (JZ4770_NPM703)
    :
    10. Ingenic JZ4770 AURORA board (JZ4770_AURORA)

    興味深いことに AURORA がある。AURORA が MIPS になる可能性はやはりあったようだ。NPM703 は何だろう? NPM701 が basic で NPM702 は paladin ... MIPS 版 elf ( = swordman) あたり?

    これらの選択枝は、Kconfig 上だけの話で、arch/mips/jz4770/boards には、npm702 しかない。(npm701 すら存在していない)

    あと、作られるモジュールは、
     drivers/scsi/scsi_wait_scan.ko
    のみ。

    さて、mxu_as はどこで動くのか? arch/mips/process.c が まず MXU 命令を使っているのだが、調べていくと ... mips-linux-gnu-as で MXU 命令入りのコードが通る。

    57c: 24020003 li v0,3
    580: 7002042f s32i2m xr16,v0
    584: 3c028000 lui v0,0x8000

    objdump -d でも 対応している。これは! ちゃんと対応して、もはや mxu_as は使わなくなったということか。

    次に 3.0.23 を試す。

    # cp arch/mips/configs/npm702_pinkflozd_defconfig .config
    # make

    これも無事終わる。作られるモジュールは、以下のもの。

    drivers/scsi/scsi_wait_scan.ko
    fs/btrfs/btrfs.ko
    fs/exportfs/exportfs.ko
    fs/jfs/jfs.ko
    fs/reiserfs/reiserfs.ko
    fs/xfs/xfs.ko

    CIFS は =y (モジュールではなく組み込み)

    ところで Wifi はどうしているのだろう? 公式ファームウェアでは唯一の モジュールで
     lib/wifi/modules/iw/dhd.ko
    にあるわけだが ...


    CONFIG_WIFI_BRCM=y

    config WIFI_BRCM
    bool "Broadcom"
    depends on JZSOC
    select WIRELESS_EXT
    select WEXT_PRIV
    select FW_LOADER
    help
    This option contains static memory allocation for 4319 and 4329

    BCM4319 あるいは 4329 だったっけ? それだと CONFIG_BCM4329 が別にあるのだが ... これは使えないのだろうか?

    Wireless LAN (WLAN) [Y/n/?] y
    USB ZD1201 based Wireless device support (USB_ZD1201) [N/m/y/?] n
    Enable WiFi control function abstraction (WIFI_CONTROL_FUNC) [N/y/?] n
    Broadcom 4329 wireless cards support (BCM4329) [M/n/y/?] m
    Firmware path (BCM4329_FW_PATH) [/system/etc/firmware/fw_bcm4329.bin] (NEW)
    NVRAM path (BCM4329_NVRAM_PATH) [/proc/calibration] (NEW)
    Broadcom 4329/30 wireless cards support (BCMDHD) [N/m/y/?] n
    IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) (HOSTAP) [N/m/y/?] n
    Broadcom (WIFI_BRCM) [Y/n/?] y


    そういえば .. fw_xxx.bin は 次のものだった。
     lib/wifi/firmware/iw8101/fw_iw8101.bin

    iw8101 とは何? ここらをクリアしないと いつまでも dhd.ko に縛られることになる。

    ちなみに dhd.ko を strings で見てみると...

    license=GPL v2
    Compiled in .../work/npm702-4.0.3-1230/nda/wifi/broadcom/5.90.125.69/open-src/..

    NDA と open-src , GPL v2 という矛盾した 文字列が見える。

    あと、http://linuxwireless.org/en/users/Drivers/brcm80211 ここにあるのは何?

    brcm80211でサポートしている SDIO チップは、BCM4329/BCM4330 。BCM4329 は、Wi-Fi(a/b/g/n) とBluetooth あと FM ラジオとトランスミッタの機能がある。「Nexus One」や「iPad」も採用とのこと。

    config WIFI_BRCM が =y になっているのだから BCM4329 かそのあたりのチップのはず。いっそのこと BCM4329 そのものだと面白いのだが...

    http://forum.xda-developers.com/archive/index.php/t-906628.html

    このあたりを見ると ... やっぱり BCM4329 という気がしてくる。ちなみに DHD は Dongle Host Driver の略のようだ。

    [DHD] DHD: dongle ram size is set to 245760(orig 245760)
    [DHD] load firmware from /system/lib/wifi/firmware/iw8101/fw_iw8101.bin
    [DHD] dhdsdio_download_nvram: nvram_path=/system/lib/wifi/firmware/iw8101/nvram_iw8101.txt
    Dongle Host Driver, version 5.90.125.69

    これは、basic の dmesg なのだが、BCM4329 と ram size が違う (BCM4329 は、294912) 。

    http://nv-tegra.nvidia.com/gitweb/?p=android/platform/system/wlan/broadcom.git

    ちょっとバージョンが古いが、ここにもそれらしきドライバーがある。BCM4325 というチップにも対応しているようだ。BCM4325 は、a/b/g 対応なのが違いらしい。paladin の spec を見なおしたら a/b/g/n 対応らしい。--- ということは BCM4329 以降?

    意外にも高機能なチップを使っているようだ。その割に 調子が悪いのだが ... 。

    brcm80211 ドライバは次のところにあるという説明がある。

    git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

    これは、https://git.kernel.org からもたどれるのだが、コードを見ると確かに BCM4329/BCM4330 にしか対応していない。そして、ramsize は、いずれも 0x48000 = 294912 。(245760 は、0x3c000)

    で、一体どんなチップなのか? 途方にくれたのだが .... すなおに iw8101 を検索したら BCM4336 とのこと。で、BCM4336 のコードは、どこにもないようだ。Dongle Host Driver の version 5.x が手に入ることがあれば、なんとかなりそうだが ... まぁ無理だろう。dhd.ko を使っていく他なさそうだ。

    追記: カーネルソースに dhd ドライバが含まれていた。下記参照。

これで何をするのか?

    とりあえず、USB でつなぎっぱなしにして、Host から ssh でログインできるものが欲しい。共有ファイルシステムは、CIFS よりは NFS が使いたい。

    swap も必須。ログインしているときは、Android 側は、swap に行って欲しい。... これを、ちゃんと実現するには、Android 側に スリープしていると錯覚させる仕組みが必要か?

    あとは、バッテリーをフル充電しない仕組みをなんとかする。充電を切ることができる インターフェイスがあれば .. ログインして使うのを前提に、普通の実行ファイルで作れそう。

    で、作っていた RHEL6 もどきの続きをするのだ。

    あとは、スターンドアローンで使うときの不具合なんかの修正。

    custom ROM 0.8 でスリープが具合悪いらしい。... というか、正規のファームウェアでも具合が悪いバージョンが 多々あるような。一旦ホーム画面にしてスリープしないとサウンドがなり続けたり。

    こういうことを考えると ... custom ROM 0.8 ベースが良いかも知れない。

    ちなみに、Windows でも USB gadget の network が、標準ドライバで使える。ルーティングも Windows 側がルータになる設定が可能らしい。Windows で ssh も問題なく使えるから Host を Linux に限定することはないかも知れない。CIFS は、ファイル置き場には使える。ワークファイルは、microSD にせざるを得ないが、2000 円ほどの microSD (たぶん SanDisk OEM) は幸いなことに小I/O が速い。

おまけ(2012/4/2)

    カーネルをビルドまでして使うなら、開発機がいつまで入手可能なのかが気になるところ。

    赤札天国では、basic (白/黒)、paladin(白)が売り切れで、paladin(黒)のみ。値段を 7980円に下げての販売で 売り切りっぽい。
    pandawill も basic (白/黒)、paladin(黒)が売り切れで、paladin(白)のみ。価格は、99.99 ドル。

    paladin が入手可能な (ほぼ)唯一の Jz4770 機で、ICS 対応の (ほぼ)唯一の MIPS 機なのだから、末永く売ってもらいたいこころなのだが....

    ちなみに、DealExtreame , focalprice でも 取り扱いはある。

    追記: ここ (UNICONE というショップ) でも取り扱っている。2012/5/21 までの取り扱いだが、送料無料で 8600円と 結構安い。過去に Ronzi A3 も取り扱っていたようだ。

github.com/naobsd/ingenic_android-3.0

    これを精査してみることに。

    基本は、最初に載せた ベース (Ingenic-Linux 3.0.8 r1123) と同じものではあるのだが... 微妙な違いがある。

    まず、最初のは 改行が CR+LF になっている点。統一されていないという点であまり良くない。

    arch/mips/configs/npm701_ab_defconfig
    arch/mips/jz4770/boards/npm701
    drivers/net/wireless/bcmdhd/dhd_cfg80211.c
    drivers/net/wireless/bcmdhd/dhd_cfg80211.h
    drivers/net/wireless/bcmdhd/wl_linux_mon.c
    include/trace/events/cpufreq_interactive.h

    次に以上のファイル(/dir) が 追加になっている。

    で、よくよく見ると drivers/net/wireless/bcmdhd が ingenic 版と AOSP では全く違う。
    ingenic 版は、古いものをベースとしているようだ。

      先に書いておくが、

      AOSP 版 Dongle Host Driver, version 5.90.195.46
      ingenic 版 Dongle Host Driver, version 5.90.125.94

      だった。上で思い悩んでいたのは何だったのだろう?

    いま一度整理してみることにした。

  • android-linux-3.0.8.tar.gz
  • android-linux-3.0.8.patch.gz
  • android-linux-3.0.8-bcmdhd.tar.gz
  • android-linux-3.0.8-bcmdhd.patch.gz

    ここまでが、AOSP (+MIPS)

  • android-linux-3.0.8-ingenic.tar.gz
  • android-linux-3.0.8-ingenic.patch.gz
  • android-linux-3.0.8-vivante.tar.gz
  • android-linux-3.0.8-vivante.patch.gz
  • android-linux-3.0.8-bcmdhd-ingenic.tar.gz
  • android-linux-3.0.8-bcmdhd-ingenic.patch.gz

    ここまでが Ingenic r1123 。android-linux-3.0.8-bcmdhd.tar.gz を 再度上書きすれば、 AOSP 版 に戻せるようにしている。

    -vivante は、GC860 ドライバ -- 規模を見るために分離してみた。(bcmdhd と vivante が AOSP / ingenic の修正それぞれの半分ぐらい占める。-- でかいから分離独立。)

    さて、興味があるのは、bcmdhd ドライバ。2 つあるわけだが、これらが実際にビルドできるのか?ちなみに、両方ともに BCM4336 をサポートしているような ...


    # CONFIG_WIFI_CONTROL_FUNC is not set
    # CONFIG_BCM4329 is not set
    CONFIG_BCMDHD=m
    CONFIG_BCMDHD_FW_PATH="/system/etc/firmware/fw_bcmdhd.bin"
    CONFIG_BCMDHD_NVRAM_PATH="/system/etc/wifi/bcmdhd.cal"
    # CONFIG_BCMDHD_WEXT is not set
    # CONFIG_DHD_USE_STATIC_BUF is not set
    # CONFIG_HOSTAP is not set
    CONFIG_WIFI_BRCM=y

    とりあえず AOSP 版を これでやってみると ...

    ERROR: "wlcfg_drv_priv" [drivers/net/wireless/bcmdhd/bcmdhd.ko] undefined!
    ERROR: "wl_dbg_level" [drivers/net/wireless/bcmdhd/bcmdhd.ko] undefined!

    zImage が出来た後 module のビルドで こんなエラーが出た。まぁこの程度なら調べる気も起きる。

      Makefile を見てみたが、dhd_cfg80211.o が余計なような ...

    ingenic 版は、drivers/net/wireless/bcmdhd/bcmdhd.ko がちゃんと出来上がった。ただし、動かすためには、firmware が必要。

    /system/lib/wifi/firmware/iw8101/fw_iw8101.bin (FW)
    /system/lib/wifi/firmware/iw8101/nvram_iw8101.txt (NVRAM)

    オリジナルはここにあるわけだから、少なくとも パスを変更する必要がある。-- ただ これが bcmdhd ドライバと互換性があるのかどうかは不明。違う名前なのだから ID ぐらい違うかも知れない。

usb gadget の件

    コードを見ていたら /sys/class/android_usb/android0/ というインターフェイスになっているので、ググってみたら ...

  • Androidのadbのメモ(10) adbdの起動のトリガー

    こんな記事がみつかった。... なるほど sys.usb.config に rndis,adb とでも書けば良さそうな .... カーネルビルドの必要ないのか

      ちなみに、sys.usb.config は、initramfs の default.prop に記述されるもの


      on property:sys.usb.config=rndis
      write /sys/class/usb_composite/rndis/enable 1
      setprop sys.usb.state $sys.usb.config

      on property:sys.usb.config=rndis,adb
      write /sys/class/usb_composite/rndis/enable 1
      write /sys/class/usb_composite/adb/enable 1
      start adbd
      setprop sys.usb.state $sys.usb.config

      on property:sys.usb.config=mass_storage,rndis,adb
      write /sys/class/usb_composite/usb_mass_storage/enable 1
      write /sys/class/usb_composite/rndis/enable 1
      write /sys/class/usb_composite/adb/enable 1
      start adbd
      setprop sys.usb.state $sys.usb.config

      ググるとこんな記述が見つかるのだが、paladin の init.rc はこんな風になっていない。
      簡単に対応できるようなものではなさそう。

    CONFIG_USB_NLUNS_NUM=2

    ちなみに、CDROM を出さないようにするには、カーネルビルドが必要になる。

充電を止めるには?

    #define GPIO_CHARG_SET GPF13
    #define GPIO_CHARG_DETE GPF14

    npm701.h/npm702.h ともにこういう定義はある。だが、使っていない。

    あと、npm702-pm.c

    {32 * 5 + 13, GSS_INPUT_PULL}, /* NC */
    {32 * 5 + 14, GSS_INPUT_NOPULL}, /* CHARG_STAT_N */
    {32 * 5 + 15, GSS_INPUT_PULL}, /* NC, CHARG_CURENT_SET */

    GSS_INPUT_PULL となっているが pull-up なのか pull-down なのかは、ピンによって決まっている。確かデータシートには書いてあったはず。

      確認した。いずれも pullup で 8mA のドライブ能力。

    さて、充電用 IC が 定番の LTC4054(互換) だとすると ... STAT 端子が CHARG_STAT_N に接続されていることになる。

    あと PROG 端子と GND の間にいれる抵抗の値によって最大充電電流が決まる。FET を使って AC 電源時の充電電流を変える回路は簡単で実際に良く使われている。ソフトでも制御できるような回路になっていて GPF15 に接続されている可能性はある。

    PROG 端子を FET を使って抵抗から切り離せば、充電禁止。LTC4054 を使ってできる制御はこれぐらいなのだが ... うまく当てはまりそうな ... 。だとすると GPF13 を出力 L で 充電禁止にできるかも。 NC とも書いてあるから、出来なくともやむを得ないが ...

    ただ、sleep 時には、充電禁止が解除されるし、それが正しい制御だろう。これを踏まえて充電禁止のコードを作るのは、少々面倒かも。

basic のビルド

    basic のビルドもやってみることにした。

    実際にやってみるとコンパイルエラーになる。調べてみると AT070TN93 ドライバの不整合が原因のようだ。

  • 02_npm701-AT070TN93.patch

    とりあえずパッチを作ってみた。

  • 01_distclean-fix.patch

    ついでなのだが、このパッチは、boards の Makefile から存在しないディレクトリのものを削除するもの。こうしておかないと Make distclean とかでエラーになってしまう。

    あと config 。paladin とは、入れているドライバが随分違うようなので、趣味が大分入っているが 合わせた config を作ってみた。

  • npm701_suz_defconfig (basic)
  • npm702_suz_defconfig (paladin)

      CONFIG_VT=y
      CONFIG_CONSOLE_TRANSLATIONS=y
      CONFIG_VT_CONSOLE=y
      CONFIG_HW_CONSOLE=y

    気になるのは、これ 。basic に入っていたので、VT_CONSOLE=y としてみたが... 意味あるのかどうか。

      CONFIG_USB_ACM=m
      CONFIG_USB_SERIAL_CP210X=m
      CONFIG_USB_SERIAL_FTDI_SIO=m
      CONFIG_USB_SERIAL_PL2303=m

      CONFIG_BINFMT_MISC=m

      CONFIG_BCMDHD=m
      CONFIG_BCMDHD_FW_PATH="/system/lib/wifi/firmware/iw8101/fw_iw8101.bin"
      CONFIG_BCMDHD_NVRAM_PATH="/system/lib/wifi/firmware/iw8101/fw_iw8101.bin"

    趣味で入れたのは大体 =m (モジュール)にしている。

      # CONFIG_NTFS_FS is not set
      # CONFIG_NFS_FS is not set
      # CONFIG_NFSD is not set
      # CONFIG_CIFS is not set

    こういうのも入れておきたいが未だ。CONFIG_BT も入れたい。そういえば CONFIG_NLS_CODEPAGE もデフォルトのままだ。ちなみに CONFIG_FUSE_FS=y となっていて、NTFS は FUSE 版が入っているはず。

      CONFIG_USB_NLUNS_NUM=3

    これも 2 に変更したいが、ユーザランドとの整合性があるし未だ。

サスペンド時の リフレッシュレート 変更

    どうやって設定すべきなのか調べていないが、ToDo のひとつとしてあげておこう。

    サスペンドでは、たぶん DRAM のリフレッシュが 消費電流の支配的要因のひとつ。Jz47xx は、たしかセルフリフレッシュと メモリコントローラによるリフレッシュが選べたはず。どっちを使っているかもチェックが必要。

    たぶん保証外な リフレッシュレート にすることになると思うが、うまくいけば待機時間を 2 倍ほどに伸ばせるかも知れない。

      arch/mips/jz4770/common/pm.c: jz_pm_do_sleep()
      が sleep というか、サスペンドの処理だった。

      で、みてみると ... PLL まで止める。 DRAM は、セルフリフレッシュモードになる。クロックを供給しないから、設定できる要素はない ... はず。

      セルフリフレッシュモードでの消費電流は、ISSI の DDR2 2Gb(256MB) は、12 mA。ただし 512 MB では 2 個使うし、電源電圧は、1.8V 。スイッチングレギュレータで降圧しているので、バッテリーの電圧では、10数 mA になりそう。一方 paladin の実測値はスリープ時 12.2 mA だそうだ。

      追記: Paladin は、H5PS1G83EFR (1Gb = 128MB, DDR2-800) x4 だった。データシートは入手できていない。basic は、HY5PS1G831CFP x4 でひとつ 8mA (Max) LFP なら 5mA(Max) 。ちなみに、動作時の消費電流は 225mA(IDD4W,IDD4W) (Max) 。どうもかなりの部分が DRAM で消費されるみたいだ。

      jzsoc_do_sleep() で、on-board modules を停止させているらしいが、本当にすべてなのかどうかは不明。LCD やタッチパネル、アンプを Off しているのかどうか? 大丈夫だとは思うがチェックはしておきたい。

      ついでに idle のコードチェック

      arch/mips/kernel/cpu-probe.c: cpu_wait = JZ4770_wait_irqoff;

      r4k_wait から変更になったようだ。ただ、CPU クロックを低くしたりはしていない。そんなことは不要なのかどうか?

      あと Android のスリープ状態とは何だろう? 2 段階あるのは分かるが、浅いほうは、ただの idle ?

      ところで、 サスペンドのコードを見ていると ...

      arch/mips/jz4770/include/mach/chip-misc.h cache_prefetch(label) というのがあった。

      これは、label から 128 キャッシュライン (4KB ?) コードをキャッシュにロードするもの。
      で、jz_set_div() という関数で これを使っている。

      どうも PLL を設定しているようだ。この間メモリにはアクセスできないということ。

      もちろん DMA 等もダメだから、サスペンドからの復帰でしか使えないわけだが ... サスペンドからの復帰なら PLL を含むクロックの変更が可能ということ。1GHz から 1.2 GHz にするようなことが、このポイントなら出来るかも知れない。

    ついでなので ... jz4770 には、BDMA という インテリジェントDMA 機能がある。この機能は、Linux では DMA_ENGINE として実装するもののようだ。Programmers Manual は入手できていないが、jz4760 にも同じ機能があるので実装できる可能性がある。 ただキャッシュコヒーレンシがあるのが前提だろうから、ただ移植すれば良いものではないかも知れない。

    BDMA の定義自体は、ヘッダファイルには、きっちり入っている。ただし、BDMAC (BCH & NAND DMA Controller) という説明。BDMA は、デスクリプタも使えて、メモリコピーにも使えるのだが ...

    NAND を直接使っていないから もちろん使ってはいないのだが、勝手に使って良いものかどうか。3CH あるから、1つ2つ DMA_ENGINEに回しても 問題はなさそうだが..

    ちょっと調べたのだが、 デスクリプタの構造が定義されていないような ... jz4760_pm にはちゃんと書いてあったので簡単に説明すると 4-word または 8-word の 2 種類のデスクリプタが選べるが デスクリプタをチェーンする場合は 8-word になる。その場合 32 バイト境界でないといけない。Stride という概念があって、二次元の矩形データを他の二次元データに書き込むような目的に使える。(ただし、DMA_ENGINEはそんな機能はサポートしてないはず)

usbboot-tool

    usbboot on Ronzi A3 という記事で Linux 用 usbboot-tool のアナウンスが。Qt を使った GUI 版もあるそうだ。

    ソースコードは、ここ 。Ronzi A3 用のように書いてあるが、Ingenic のコードを移植したなら、全ての Jz47xx に対応しているはず。

    まったく関係ないのだが、USBBOOT つながりで。Allwinner A10 のブートシーケンスが ここに に書いてあった。

    どうも、sdcard slot 0 → nand flash → sdcard slot 2 の順番でスキャンするらしい。A10 には、USBBOOT のようなツールがあるのだが、nand flash が壊れてしまうと 動かないはず。sdcard にブートローダを仕込めばなんとかなりそうだが、やり方は多分知られていない。

      訂正: これだいぶ間違っていた。sdcard のブートに行く前に USB からの BOOT をするかどうかの判断が入る。要するに Jz47xx と同様 USB からブートできる。USB からのブートでは、ボタンを数回押すという変なオペレーションになっているが、これが BROM でサポートしているとは思なかったので誤解していた。

      ところで A10 の カーネルソースコードも入手してみた。A10の機種は NAND FLASH を直に接続しているようなのだが、どういう制御を しているか興味があったため。

      みてみると、mtd は使っておらず drivers/block/sun4i_nand という独自のドライバーを使っていた。WEAR_LEVELLING もサポートしているようで、SDカードを直に使うような使い勝手になっている模様。MTD+UBI よりは随分使いやすそうだ。ただ、再インストールで書き込み回数の情報はどうなってしまうのか? このあたりがきになる。いずれ調査してみよう。

      A10 用の 新しいソースコードが出ている。linux-3.0.8 になって Ingenic のカーネルとの比較がしやすくなった。見てみると 追加になったドライバーが膨大で tar+gzip で 35MB にものぼる。 そのなかで興味深いのは、drivers/block の NAND 関係、sun5i_nand/ が追加になっている。

    最近話題になっている FT701W も USBBOOT が出来るようだ。『FT701Wでomap4bootに成功!』なんて記事がある。ただこれは、どっちの方式だろう? A10方式かも。

    こういうのを見てもわかるように、USBBOOT は便利なのだ。特に カーネル開発者にとっては。さらに カーネルは、Windows ではビルドできないので Linux で USBBOOT が動くのは 嬉しかったりする。

ちょっとビルドしてみる。

    どうも jzboot , xbboot あたりの ファイルが足りない。

    しょうがないので、
  • http://projects.qi-hardware.com/index.php/p/xburst-tools/downloads/

    ここから xburst-tools_201105.tar.bz2 を取ってきて足りない ファイルを埋める。(jzboot 全部, xbboot 全部)

    基本的に

    ./autogen.sh
    ./configure --enable-firmware CROSS_COMPILE=mipsel-linux- --prefix=/usr --sysconfdir=/etc

    とするようだ。

    さて、最初に引っかかるのは、libconfuse 。confuse-2.7.tar.gz これをインストールして再挑戦。

    次に引っかかるのが、 libusb の 1.x 。これはパッケージがあったので、devel をインストール。

    バイナリの作成に カーネル作成で使った Toolchain (mips-linux-gnu- ) を使ってみたのだが ... gcc のオプションに -EL を指定しないと Bigendian になってしまうようで 具合が悪い。

    ここを直しても xburst_stage2 のビルドで nrecognized option `-call_nonpic' なんて言われてしまう。

    configure で --disable-firmware とすると xburst_stage1 , xburst_stage2 を作らないらしいので、これで ビルドしてみたら とりあえずツールだけを作成して正常終了する。

    qt 版は、usbboot の下にある QtUSBBoot , configure 未対応だから qt4 環境を用意して手動でビルド。

追記: ACT8600

    PMU (Power Managiment Unit) として ACT8600 というチップが使われているのだが、思いついて ググってみたら データシート が見つかった。

    よくよく見れば ... Advanced PMU for Ingenic JZ4760/60B/70 と書いてある。なんと専用!

    ... ほかのプロセッサ専用の チップもあるから、専用といっても 最適化したという意味でしかない。I2C で 電圧をプログラミング可能な Step-down 3ch と Step-up 1ch の DC-DC コンバーター や 数 ch の レギュレータ、 バッテリー充電の機能まである。... なるほど こいつが充電していたのか。

    さて、充電のための ピンは、

    nSTAT : 充電中 on になる Open Drain 出力 (基本LED用 , 状態はレジスタでも読める)
    ISET : GND との間に入れる抵抗値で充電電流を設定
    CHGLEV : 充電電流の制御 L: 75mA H: 450mA or 900mA (最大)

    CHGLEV が充電電流を制御できるピンなのだが、充電自体を Off にはできないようだ。たぶん L が USB 充電 + フル動作の設定で、H は、AC アダプタ または USB 充電 時の充電設定。

    その他に機能はないか 調べてみると... レジスタでいくつか設定できる項目が ...

    APCH 0xA1 bit 7 に SUSCHG という 項目がある。これは 1 で充電を サスペンドするもの。

    ついに充電停止のやりかたを見つけたようだ。

    さて、もうすこし調べてみる。充電を停止するだけでは、バッテリーを減らすことはできない。無理やり 50% などにすることが出来そうかどうか ...

    よくわからないのだが ... ONQ3(OTG 0xB0 bit5) というレジスタがある。これは、USB を 外部電源として 使うかどうかの制御のようなのだ。USB は OTG もサポートしているから、電源があっても使わない設定が 出来るに違いなく それはこれではないか と思える。

    これらのことが分かったので、USB でホストと常時接続しても バッテリーを 50% に押さえるような使い方はできそうだ。ところで、サスペンド時はどう設定できるのか? ACT8600 はたぶん生きているので、そのまま という設定は可能なような気がする。だが、外部電源があれば、サスペンドそのものをしない(スリープはする) という やりかたはできる。そうであれば、サスペンド時は、デフォルトの動作(= 充電する)ということでも良いのかも知れない。あと電源 Off 時。このときの動作の設定は無理そう。やれるのかも知れないが ... デフォルトの動作(= 充電する)で良さそう。

    以上考察してみたが ... これは Paladin と Basic のみが関係する。Philips の 機種でも 適用できそうではあるが、Ronzi A3 は 関係ない。Ronzi A3 だと ACT8600 は使っていない。

    ACT8600 関係のコードを見てみる

    drivers/power/act8600_power.c
    drivers/power/jz47xx_battery/act8600_interface.c
    include/linux/act8600_interface.h
    include/linux/act8600_power.h

    関係ありそうなのはこのあたり。act8600_interface.c が、android としてのインターフェイスを 受け持つのだろう。ちょっと見てみる。

    act8600_read_reg(ACT8600_APCH_INTR1,&intr1);
    act8600_read_reg(ACT8600_OTG_CON,&otg_con);

    こんな感じで I2C の先のレジスタを制御している。( 書き込む場合は act8600_write_reg()) 。

    config 関係は、

    CONFIG_ACTBAT_DC
    CONFIG_ACTBAT_USB
    CONFIG_ACT8600_HAS_CHARGE_LED

    ACTBAT_DC は、AC アダプタからの 充電サポート。ACTBAT_USB は、USB からの充電サポートということらしい。ACT8600_HAS_CHARGE_LED は LED のありなしで制御をちょっと変えている -- 意味がわからない。

    さて、上記の制御関係。

    case ACT8600_APCH_STAT_STATE_SUSPEND:
    :
    act8600_set_q3(1);
    :

    なんて 関係ありそうなコードが。充電のサスペンド状態を見つけると 無条件に外部電源を enable にするような雰囲気。ここは変えないと。

    次に act8600_power.c

    probe で、 act8600_set_q3(1) をやっている。それ以外には、boards/npm702/npm702-misc.c 。(0) としているところはない。

    ちなみに 充電のサスペンドは、バッテリーが抜かれたり、電源異常? でも起きる。バッテリーをわざと消費したいのでなければ、外部電源にすみやかにするわけだ。

    制御的には、バッテリーをわざと消費したい という状態を作って act8600_set_q3(0) とするとともに 充電をサスペンドすれば良さそう。 で、状態をアプリから設定できるようにする 。そのために /proc に制御用のエントリを作ったりしてインターフェイスを作る。

    こんなところか。

    ところで ... RTC が結構ずれる。10 分とか平気で。

    /*new cpu need rtc power 3.3v , use pmu default value */
    if(strcmp(jz4770_cpu_version,JZ4770_V1)) {
    /** change rtc power to 2.35V **/
    act8600_write_reg(0x91,0xd0);
    act8600_write_reg(0x90,0x17);
    act8600_write_reg(0x91,0xc0);

    こんなコードがあるのだが ... 電圧を変えたらずれも少しは変わるのかなと思ってみたり。
    試してみたいような ...
posted by すz at 18:27| Comment(9) | TrackBack(0) | Jz47xx(Linux)