パスワードを忘れた? アカウント作成
6589513 journal
日記

bhindの日記: MK808にadb shell接続してみた(ただし、firmup禁止しばりで)

日記 by bhind

一部で高速なRK3066を搭載しLinuxがはしると噂されているMK808について、練習がてらにadb接続してみた。
といいつつ、既に先人の助けがあったのだが、どうしてもstock ROMを残しながらやりたいという縛りで挑戦してみた。(ちなみに、なんとかゾンに注文したSDカードが出荷されて3日たってもこないので、SDカード経由のfirmupができないという理由も)結論だけ先に言うと、「USB経由でadb tcpipをたたき、ネットワーク経由で入れた(ただし、mac以外はできた 下部追伸参照のこと)」

・Macがたまたま起動してたのでそのまま作業開始(他の選択肢としてWinXPやFedora)
・ダメもとで普通にUSB(OTG)ポートに接続
 ⇛$ adb devicesでnot foundでNG
 ⇛電源のUSBポートにつながなくてもOTGポートから電源とれることが判明。ここからはすべてOTGポートのみ接続
 ⇛書かないけど毎回sudo ./adb kill-server/statrt-serverは実行している
・ですよねーと思いながらandroid側の設定の[開発者向けオプション]から[USBデバッグ]をオンにして接続
 ⇛$ adb devicesでnot foundでNG
・ああそういえばとandroid側設定の[USB]から[Connect to PC]をオンに
 ⇛androidの通知領域に「デバッグモードで接続」がへんてこなJelly Beanのアイコンとともに表示されたのでフライングで勝利宣言
 ⇛ところが$ adb devicesでnot foundでNG
・マジすかとUG802でなんか書いてあったんで一回USBを抜いて電源リフレッシュして実行
 ⇛やっぱり$ adb devicesでnot foundでNG
・えーーー_(:3」∠)_と思いながらFlash Rom Modeでは?と思いペーパークリップを伸ばして筐体の穴からリセットボタンを押しながらUSB接続(このときHDMI出力はブランク)
 ⇛残念ながら$ adb devicesでnot foundでNG
・万策尽きたよねーと思いながらダメもとで~/.android/adb_usb.iniを作成し中身に「0x2207」と記載(値はsystem_profiler SPUSBDataTypeで確認(Macの場合。LinuxだったらlsusbでOK)して実行
 ⇛なかばあきらめかけてたら$ adb devicesで
0123456789.... device
と表示。表示。_〆(・ω・` )ん?なんかDeviceIDがふざけとる
まあいいやと$ adb shellでシェル起動確認。確実に勝利宣言した瞬間にlsしたら切断された。え?と言いながら$ adb devicesするとnot foundでNG
・もう端末を◯◯したろかいな思いながらふとかのPOSTでtcpipリモート接続してるのを思い出し
$ adp tcpip [port number]
restarting in TCP mode port: [port number]

...ぉ?プロンプトがかえってこん。
しかたなくもう一枚ターミナル起動し
$ adp connect [ip address]
$ adp -s [ip address]:[port number] shell
としたら...
root@android:/ # ls
...
切断されない!(普通あたりまえだけどね)
。。。ん?
と言ってたら、deviceがofflineのまま復帰しなくなりました。。。
$ adb devices
0123456789.... offline
めんどいけど一回電源切入で復帰です。

で、ってちょとまって「root@android:/ #」てもうrootedされてるし。
。。。あれ?てことは?
・android marketでandroid terminal emulatorをダウンロード・インストール
・プロンプト上でsu
・adb shell
root@android:/ #
2分で入れた
。。。さぁて、firmupでもすっかなー(´・ω・`)

おまけ:
いままで電源を切る手段がUSB抜くだけだったけど、今日から# busybox poweroff -fでソフトシャットダウンができるように!

追伸 2012-11-17 22:45
Windows XPだと普通にadb shellできた。。。
もしかして、彼の人も~/.android/adb_usb.iniを追加したらできたかも?(´・ω・`)
Fedoraででもやってみようか。。。

追伸 2012-11-18 0:09
(日付かわっとる。。。)
Linuxでもadb shellできた。
ただ、Fedoraなのでrestart udevがなかったり、64bit版のせいでglibc.i686,libstdc++.i686,ncurses-devel.i686をいれさせられたり、adbをroot権限(もちろんlinuxのほう)で実行しないと???????????? no permissionsとださなくてもよい疑問符の数でプレッシャーかけられたりした。

Macだけだめな原因は不明だけど、なにかadbのconfigurationで回避できないか調べてみよう(`・ω・´)
にしても、メール問い合わせしたなんとかゾンからは全く音さたがない。。。

追伸 2012-11-18 23:03
本当は日記を分けたいのだけど、昨日の深夜に変更かけてしまったのでそのまま追記に。。。
macだけUSB経由でのadb shellが途中で切れてしまう原因について、振る舞いから追求するのは無理っぽかったので、下記でadbのdebugログのログレベルを開放状態に
$ sudo enc ADB_TRACE=1 adb start-server
/tmp/adb.logをtailするとなんか色々でてくるようになるのを確認。
それで、USB接続のdeviceに対し$ adb shellで接続後、lsあたりをたたいてみると、、、

remote usb: check_data failed
adb: offline

え?どゆこと?(´・ω・`)
仕方ないので、adbのソースをみてみると。。。
static int remote_read(apacket *p, atransport *t)
内で


if(check_data(p)) {
        D("remote usb: check_data failed\n");
...

check_dataの本体はtransport.cで


count = p->msg.data_length;
x = p->data;
sum = 0;
while(count-- > 0) {
        sum += *x++;
}
if(sum != p->msg.data_check) {
        return -1;
....

送り側でdata_checkがあってないのは致命的すぎるのでありえない(他のOSでも動かないはず)。電気的なデータ化けだったら、たまにはcheck_headerの方でもひっかかったりするはずだし。。。一応USBの線や差すMac側のポートも変えてみたけど変化なし。。。
あと、fix_endiansを見つけたときはこれか?と思ったけどもちろんintel macですし(恥ずかしい勘違い)。。。
とりあえず、次の週末に持ち越し。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...