2011年6月5日

AccessoryChatとaccessorychat

f_accessoryを動かすとして、どうやって確認したらいいのか困っていた。
しかしそこは見抜かれていたようで、サンプルがあった。

frameworks/base/libs/usb/test/AccessoryChat/README.txt
Androidアプリとして「AccessoryChat」を、Linux用として「accessorychat」を用意してあるらしい。

よくわからんが、ビルドすればわかるんじゃなかろうか。
あら、Linux向けのビルドってどうやるんだろう?
こういうときに「mmm」を使うのか?

と、まったく何も考えずにmmmとすると・・・なんかあれこれビルドを始めた・・・。
Tests関係のものがすべてビルドされているみたい。
あちゃー。

でも、helpには
- mmm:     Builds all of the modules in the supplied directories.

ってあるではないか。
frameworks/base/libs/usb/test/AccessoryChatでmmmしてるのに、なんでCtsAppSecurityTestsみたいなものまでビルドされているんだ?

よくわからんが、ここはいつものmmでいいや。
Androidアプリはdata/app/AccessoryChat.apk、コマンドはout/host/linux-x86/bin/accessorychatにできる。

Linuxでaccessorychatを動かすと、待ち状態になる。
そこにBeagleBoardを挿すと、認識して、失敗した。

Found possible android device - attempting to switch to accessory mode
failed to read protocol version

Android側でAccessoryChatを起動すると、すぐに落ちた。


I/dalvikvm( 1118): Could not find method com.android.future.usb.UsbManager.openAccessory, referenced from method com.android.accessorychat.AccessoryChat.openAccessory

すまん。。。
気を取り直してもう一度AccessoryChatを起動。
今度はちゃんと起動した。
出てきたのは、EditTextがあるだけの画面。
これに文字を入れるのだろう。
BeagleBoardをPCに接続すると・・・やっぱりaccessorychatはfailedだ。

ここは、やはりkernelでしょうな。。。
lsusbで見ると、
Bus 001 Device 008: ID 18d1:9018 Google Inc.
ってことで、AccessoryのプロダクトIDではない。
うーむ。

2011年6月4日

rowboat-kernel + 2.3.4でadbが動いた

ようやく、BeagleBoard C4で、rowboat-kernel + android2.3.4でadbが使えるようになった。

TI提供の環境(お、韻を踏んでる)で、どのbranchを使っているかわからんかった。
調べる方法があるのかな?
私は、commit logを見ていって探していった。
なんか、まぬけだ。

今回から、ALSAをなくした。
今まで、使ってもいないのにALSA関係でけっこう面倒だったのだ。
なんでこだわっていたのかよくわからない。。。

でも、カメラはUSBカメラ、しかもBayerのやつでOpenCVライブラリありの構成だ。
使ってないのだけど、使うかもしれないし。

f_accessoryを入れ込んだけど、動いているかどうかわからん。
今は、adbが動いている。
adb devices、とすると見えてるし。
これにいろいろやると、AAPできるようになるのかしら。

さあ、やってみよう。

TI-kernelで自分ビルド環境が立ち上がったが、固まった

タイトルどおりだ。

前回、BatteryService側を変更して、強制的にフル充電状態を作り出した。
そうすると、いままでandroid起動アニメーションから抜けられなかったものが、とうとうHOME画面まで到達した。
もちろん表示されたのは、DisplayLink側だ。



したのだが、真っ暗になってしまった。
kernelがpanicも出さずに固まったようだ。
最後にログが出ている。


/SurfaceFlinger( 845): About to give-up screen, flinger = 0x94670
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.01 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Suspending console(s) (use no_console_suspend to debug)


これはどうも、電力管理のような気がする。
うん、Androidのバックライト消灯時間を長くすると、同じ時間では落ちない。
困ったことに、復旧はしてくれないが、まあいいや。

仮想バッテリードライバがなかった

my-kernel(TI提供)、my-androidで起動しないので、logcatを見た。

I/SystemServer(  870): Battery Service
W/dalvikvm(  870): No implementation found for native Lcom/android/server/BatteryService;.native_update ()V
W/dalvikvm(  870): threadid=9: thread exiting with uncaught exception (group=0x40015560)
I/Process (  870): Sending signal. PID: 870 SIG: 9
E/AndroidRuntime(  870): *** FATAL EXCEPTION IN SYSTEM PROCESS: android.server.ServerThread
E/AndroidRuntime(  870): java.lang.UnsatisfiedLinkError: native_update
E/AndroidRuntime(  870):     at com.android.server.BatteryService.native_update(Native Method)

そういえば、BeagleBoardにはバッテリーがないから、仮想バッテリードライバがあるといいよ、という記述を読んだ記憶がある。
使っていたkernelは、それが入っていたのだろうが、TI環境ではAndroidからバッテリーチェックをはずしているのだろう。
うんうん、きっとそうだ。

こちらを見ながら変更。
http://d.hatena.ne.jp/bs-android/20090603/1244043649

・・・変わらん。
と思ってlogcatを見直すと、これがあった。

W/dalvikvm(  830): No implementation found for native Lcom/android/server/BatteryService;.native_update ()V


なんでこれが出るかというと、これだ。

E/BatteryService(  866): Could not open /sys/class/power_supply

JNI登録の前でエラーがあるため、できてないのだ。
これはkernelのせいで、おそらく私がオプションを外したのだろう。
CONFIG_POWER_SUPPLYか。

では、有効にして置きかえると・・・・
あ、起動した!!
TIカーネルで自ビルドAndroidが起動できましたわ。
やっt・・・・・

あれ、モニタが消えた。。。(つづく)

SurfaceFlingerが落ちるとmediaserverが落ちる

今、手元で実現できる構成は、こうなっている。
  1. TI-kernel, TI-android : 起動する(DVI)
  2. my-kernel, my-android : 起動する(DisplayLink)
  3. TI-kernel, my-android : 起動しない
  4. my-kernel, TI-android : 起動しない
4は、mediaserverが再起動を繰り返しているためだ。

# ps
media     828   1     16908  4772  ffffffff afd0b6fc S /system/bin/mediaserver

init: untracked pid 828 exited


しかしlogcatを見ると、どうもframebufferまわりらしい。
SurfaceFlingerがエラーを出したら、mediaserverが落ちるんだ、という認識がなかった。

I/SurfaceFlinger(  876): SurfaceFlinger is starting
I/SurfaceFlinger(  876): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
E/FramebufferNativeWindow(  876): couldn't open framebuffer HAL (No such device)



つまりTI-android環境は、SGXを動かさないと起動しないようなのだ。
mediaserver=ALSA、だと思っていたので、こっちを気にしていたのだ。

Unable to attach mixer to device AndroidPlayback: No such file or directory
Unable to attach mixer to device AndroidCapture: No such file or directory

しかしこいつは、TI環境でも出ていて、ちゃんと起動して動いている。
なので、関係ないようだ。


でもなあ・・・ソースを見ると、単にfb0をオープンしているだけっぽいんだが。
ものはあるし、崩れてはいるがdroid氏もDisplayLinkに出ている(何の画面だ?)。
そしてinit.rcでSGXを起動しないようにしていると、TI-kernelでも同じ現象なのだ。

# ls -l /dev/graphics/fb0

crw-rw---- root graphics 29, 0 2000-01-01 00:00 fb0

つまり、fb0以外のものも使っているということか。
SGXありとなしで/devを比較すると、違いはこれだ。

crw-rw-rw- root     root     250,   0 1970-01-01 00:00 pvrsrvkm

これがないので、SurfaceFlingerが落ちているのだな。

omapfbを無効にしても起動した

前回のコメントで、TI環境のkernelでomapfbを無効にすると起動しない、と書いたが、なぜか今は起動している。
なんでだ??
という気はするものの、おそらくどこか設定がおかしかったのだろう。
すまなかった。。。。

だからといって、DisplayLinkにちゃんと出るわけでもないんだけどね。
・・・と思ったら、前回fb1に出力するようにしたままだった。
そこを戻すと表示されたが、またno vmaが出るようになった。
もちろん、起動アニメーションから抜けられない。

わかったのは、no vmaエラーが出るのはAndroid側でDisplayLink側に表示することがトリガとなっている、ということだ。
まあ、Android側に非はないので、そこはkernelとかで吸収すべきだろう。
因果関係がわかったのは収穫としてよかろう。

kernel optionはDocumentation/kernel-parameters.txtにある

はい、タイトルどおりです。

カーネルのオプションはいろいろありそうだけど、どこに一覧があるのだろう?と思っていた。
Documentation/kernel-parameters.txt にあるとのこと。

テキストファイルで、2800行くらいある。
全部は載せられないので、今回使っているTI-2.6.32での部類だけ載せておこう。


    ACPI    ACPI support is enabled.
    AGP    AGP (Accelerated Graphics Port) is enabled.
    ALSA    ALSA sound support is enabled.
    APIC    APIC support is enabled.
    APM    Advanced Power Management support is enabled.
    AVR32    AVR32 architecture is enabled.
    AX25    Appropriate AX.25 support is enabled.
    BLACKFIN Blackfin architecture is enabled.
    DRM    Direct Rendering Management support is enabled.
    EDD    BIOS Enhanced Disk Drive Services (EDD) is enabled
    EFI    EFI Partitioning (GPT) is enabled
    EIDE    EIDE/ATAPI support is enabled.
    FB    The frame buffer device is enabled.
    GCOV    GCOV profiling is enabled.
    HW    Appropriate hardware is enabled.
    IA-64    IA-64 architecture is enabled.
    IMA     Integrity measurement architecture is enabled.
    IOSCHED    More than one I/O scheduler is enabled.
    IP_PNP    IP DHCP, BOOTP, or RARP is enabled.
    ISAPNP    ISA PnP code is enabled.
    ISDN    Appropriate ISDN support is enabled.
    JOY    Appropriate joystick support is enabled.
    KVM    Kernel Virtual Machine support is enabled.
    LIBATA  Libata driver is enabled
    LP    Printer support is enabled.
    LOOP    Loopback device support is enabled.
    M68k    M68k architecture is enabled.
            These options have more detailed description inside of
            Documentation/m68k/kernel-options.txt.
    MCA    MCA bus support is enabled.
    MDA    MDA console support is enabled.
    MOUSE    Appropriate mouse support is enabled.
    MSI    Message Signaled Interrupts (PCI).
    MTD    MTD (Memory Technology Device) support is enabled.
    NET    Appropriate network support is enabled.
    NUMA    NUMA support is enabled.
    GENERIC_TIME The generic timeofday code is enabled.
    NFS    Appropriate NFS support is enabled.
    OSS    OSS sound support is enabled.
    PV_OPS    A paravirtualized kernel is enabled.
    PARIDE    The ParIDE (parallel port IDE) subsystem is enabled.
    PARISC    The PA-RISC architecture is enabled.
    PCI    PCI bus support is enabled.
    PCIE    PCI Express support is enabled.
    PCMCIA    The PCMCIA subsystem is enabled.
    PNP    Plug & Play support is enabled.
    PPC    PowerPC architecture is enabled.
    PPT    Parallel port support is enabled.
    PS2    Appropriate PS/2 support is enabled.
    RAM    RAM disk support is enabled.
    S390    S390 architecture is enabled.
    SCSI    Appropriate SCSI support is enabled.
            A lot of drivers has their options described inside of
            Documentation/scsi/.
    SECURITY Different security models are enabled.
    SELINUX SELinux support is enabled.
    SERIAL    Serial support is enabled.
    SH    SuperH architecture is enabled.
    SMP    The kernel is an SMP kernel.
    SPARC    Sparc architecture is enabled.
    SWSUSP    Software suspend (hibernation) is enabled.
    SUSPEND    System suspend states are enabled.
    FTRACE    Function tracing enabled.
    TS    Appropriate touchscreen support is enabled.
    UMS    USB Mass Storage support is enabled.
    USB    USB support is enabled.
    USBHID    USB Human Interface Device support is enabled.
    V4L    Video For Linux support is enabled.
    VGA    The VGA console has been enabled.
    VT    Virtual terminal support is enabled.
    WDT    Watchdog support is enabled.
    XT    IBM PC/XT MFM hard disk support is enabled.
    X86-32    X86-32, aka i386 architecture is enabled.
    X86-64    X86-64 architecture is enabled.
            More X86-64 boot options can be found in
            Documentation/x86/x86_64/boot-options.txt .
    X86    Either 32bit or 64bit x86 (same as X86-32+X86-64)

    BUGS=    Relates to possible processor bugs on the said processor.
    KNL    Is a kernel start-up parameter.
    BOOT    Is a boot loader parameter.

2011年6月3日

TIのGingerbreadはちゃんと動く

当たり前の報告かもしれないが、TIさんのGingerbreadは、うちのBeagleBoard C4で見事に動いた。
自分でビルドしたものでなく、pre-build版だ。
そりゃ動くよなぁ。

では自分ビルドkernelが動くか、というのを試したいところだが、ぐっと我慢してログを眺めよう。
ログが逃げるわけではないが、今日は動かす前に調べたい気分なのだ。


まず気になったのは、kernel option。

わし:
console=ttyS2,115200n8 noinitrd init=/init root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait nohz=off


TI:
console=ttyS2,115200n8 androidboot.console=ttyS2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off mpurate=720 omap_vout.vid1_static_vrfb_alloc=y


私のは、おそらくどこかのを真似たのだと思う。ファイルシステムが違う以外は、そんなに特徴がない。
TIさんのを見ていこう。
  • androidboot.console。これは、どうやってか忘れたが、initで使えるパラメータになってたと思う。
  • mem。システムに、メモリ量を教える。 256MBあるよ、と教えているのだろう。

    わし:
    Memory: 128MB 128MB = 256MB total
    Memory: 254592KB available (3988K code, 780K data, 160K init, 0K highmem)
    TI:
    Memory: 256MB = 256MB total
    Memory: 249856KB available (4532K code, 825K data, 172K init, 0K highmem)

    どちらも256MBとは思ってくれているようだが、よくわからん。
それ以外のものは、どうでもいいような気がする。



omapdss DPI: Could not find exact pixel clock. Requested 23500 kHz, got 24000 kHz

omapdssは動いていないようだから、気にすまい。


それ以外は、よくわからんなぁ。
というのも、pre-built版はDVI-D出力になり、うちにはDVI-Dモニタは1つしかなく、必然的に今使っているモニタに出力させざるを得ない、となる。
dmesgとかとればよかったんだろうけど、やっぱりねぇ。。。


まあ、明日はkernel optionだけ合わせて試してみよう。

no vmaは出なくなったが、netdが再起動する

omap2のフレームバッファを削ると、no vmaが出なくなっていた。
うーん、あのときはなぜkernel panicが出たんだ。。。。

解せないが、眠たいので。

でもその次には、mediaserverとnetdの再起動が発生している。
うーん。。。

2011年6月1日

no vma、今日は解決できず

no virtual memory allocate、とかか?
とにかく、今日は解決できなかった。

まず、fb1を見ていた部分をfb0に戻してみた。
関係なし。

DisplayLinkを抜いてみた。
関係なし。

dmesgを見た。
あやしそうなところを列挙しておこう。

<3>omapdss DPI error: display already enabled
<4>omap_vout omap_vout: 'dvi' Display already enabled
<3>omapdss DPI error: display already enabled
<4>omap_vout omap_vout: 'dvi' Display already enabled
<6>omap_vout omap_vout: Buffer Size = 3686400
<6>omap_vout omap_vout: : registered and initialized video device 0
<6>omap_vout omap_vout: Buffer Size = 3686400
<6>omap_vout omap_vout: : registered and initialized video device 1

どうだ?

そうそう、こちらのパッチも当ててみたけど、やはりだめでした。
https://groups.google.com/forum/?hl=ja#!topic/android-kernel/XTqkkBxRmjI