2011年5月31日

今回のno vmaはアクセス権の問題ではないようだ

no vmaについて少し検索すると、アクセス権が足りてない、というような記述がちょっとあった。
では、ちょっと試してみよう。

$ chmod 0777 -R data

だめ。

$ chmod 0777 *

だめ。

$ chmod -R 0777 *

だめ。

というわけで、今回はアクセス権の問題ではないようだ。
次いってみよう。

ASHMEMがないんじゃないの、というのもあったが、それは大丈夫だ。

ashmem: initialized

no vmaなどといわれる

DisplayLinkの件は、適当に片付けることにした。
「どうせデフォルトで/dev/graphics/fb0を使ってるんだったら、fb1にすればいいじゃないの」ということだ(なぜ女言葉・・・)。
copybitとかないので、ここだけでよさそうだ。

hardware/libhardware/modules/gralloc/framebuffer.cpp

この中で、device_template[]を使ってフレームバッファのデバイス名を探すところがあるのだが、0を使っているので1にするだけ。
とりあえずこれで、起動アニメーションが出てきた。
よかったよかった。。。あれ?

binder: 904: binder_alloc_buf, no vma
binder: 915:921 transaction failed 29201, size 64-0

起動アニメーションを再起動している。。。
メモリが足りない系統っぽいが、fb1にすることで何かやってしまったのかな?

せっかくコメントがついた日くらいはがんばりたいところだが、緊急目標として「しばらくは1時半までに寝る」を設定してしまったので、寝よう。
昼間が眠いのよ。。。

2011年5月30日

同じバージョンなのにいままでのと全然違う

今まで使っていたkernelと、rowboatのkernel。
バージョンはどちらも2.6.32。
ならば移植は簡単だろうと思っていたのだが・・全然だめだ。

drivers/usbを置きかえ、コンパイルエラー。
では、とinclude/linux/usbも置きかえ、やっぱりコンパイルエラー。
あちこちつぎはぎして、今度はttyエラー。
「これではビルドが通っても正しく動かないかも」と思うような修正をしたら、今度はi2cが。
ヘッダのファイル名が変わってるし、APIも追加されてる。。。

というところで、今一息ついたところだ。
同じものでは・・・ないのか?
違うといえば、バージョンも正確には、2.6.32.9、となっている。
この「.9」がこの差を生んでいるのだろうか。

うーん、我慢強い方だと思っていた私だが、さすがに音を上げそうだ。
rowboatベースでDisplayLinkを動かせるようにした方が早いのかもしれない。
試しにやってみるか。

kernelを変更して困ったことが2つ

さて、adbも動いたし、あとはAPPを載せて動作確認するだけ、と思ったが、そうはいかなかった。
今まで使用していたkernelからrowboatのkernelになったことで、困ったことが2つ出てきたのだ。

1つは、mediaserverが再起動を繰り返すようになったこと。
差分がどこにあるか分からないけど、init.rcとかasound.confあたりで済めばありがたい。
それにまあ、再起動しているだけなので、無視していればいい、ということもある。

問題は2つめだ。
DisplayLink側に表示してくれない。
起動すると画面が1色で塗りつぶされているので、ドライバの初期化は呼ばれている。
しかし、そこから変化なし。
おそらく、強制的にDVI側に出しているんじゃないだろうか。
まいったなぁ。。。


TIのAndroid環境は以下の特長があるとかかれている。
The following features from previous release are provided:
  • Fastboot
  • WLAN (WL1271) on AM37x EVM
  • NAND UBIFS booting
  • UI and video on S-video
  • Adobe Flash 10
  • USB Mass Storage
  • Audio Record feature in Android
  • Bluetooth connectivity for OPP, A2DP profiles
  • Camera Image capture on Beagle XM
  • Performance measurements using RowboPERF, 0xbench and rowboatbench
  • Media clips for Audio, Video and JPEG
  • Keypad support on AM35x EVM
  • Hardware accelerated dynamic rotation for Video pipeline.

このあたりが影響を受けているような気がする。
それならいっそのこと、Android環境もTIのものに置き換えればいいのだがちょっと気力が沸かない。

TIの環境が劣っているとか、そんなことはないのだ。
むしろ優れている。
いやがっているのは、せっかくgithubで作ってきた環境がつかえなくなること。
OESFさんの環境をcloneしているのを、rowboatさんので置きかえていけばいいんだろうけど、repoでとってくるタイプになるので、全部cloneしていくのがめんどくさい。

うーん、どうしたものか。。。

2011年5月29日

あっさりadbが動いた。。

TIのAndroid環境、しかもGingerbreadだ。
環境としては、1.0と2.0があるけど、BeagleBoard(ノーマル)は1.0だ。

ダウンロードできるものはいろいろあるのだが、私が欲しいのはkernelだけ。
だけなのだが、よくわからないのでTI_Android_GingerBread_2_3_Sources.tar.gzをまるまるダウンロードした。
解凍させてlsで見ても、ファイルがなにもない。。。
127GBもダウンロードしたのに!と思ったら、「.repo」ができていた。
これをrepo syncして、最新版もとってきつつファイルにした。
これはこれで、けっこう時間がかかった。

kernelは、2.6.32。
私はext4を使っているので、そこだけチェックしてビルド。
uImageを入れ替えると。。。動いた。
まあ、動くのは当たり前として、adbだ。
USBを挿すとPCのほうは。。。

[40495.340367] usb 1-4.4: new high speed USB device using ehci_hcd and address 61

おっ、エラーっぽいのが出ない。
lsusbすると、

Bus 001 Device 061: ID 18d1:9018 Google Inc.

おおっ、それっぽい。いや、ほとんど間違いない。
では、最後に、

$ adb kill-server
$ adb start-server
$ adb devices
List of devices attached
20100720    device

あっさりですな。。。
どうやら、rowboatベースらしい。
そうか、そっちを見ていくのがいいんですな。
ありがとうみなさん、また一つ勉強しました。

g_etherはよかったが、g_androidはだめだった

g_android(Gadget Android)はだめだった。
しかし、今回はg_ether(Gadget Ether)との比較ができる。


<7>twl4030_usb twl4030_usb: HW_CONDITIONS 0xd0/208; link 2
<7>musb_interrupt 1536: ** IRQ peripheral usb0001 tx0000 rx0000
<7>musb_stage2_irq 816: SUSPEND (b_idle) devctl 99 power e0
<7>musb_stage2_irq 820: state (1) active (0)
<7>musb_interrupt 1536: ** IRQ peripheral usb0004 tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0x4
<7>musb_stage0_irq 647: BUS RESET as b_idle
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa55da4
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8ccc00
<7>musb_g_giveback 144: ep0 done request cf8bd6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage idle
<7>musb_interrupt 1536: ** IRQ peripheral usb000c tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_g_disconnect 1939: devctl 99

ここまでは、一緒。
では、次。

<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa55d0c
<7>musb_read_setup 562: SETUP req00.05 v002c i0000 l0
<7>service_zero_data_request 237: bRequest (05)
<7>musb_g_ep0_irq 811: handled 1, csr 0001, ep0stage in/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage in/status

あら、一緒ですな。
アドレスはもらったようだ。


<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 44, ep0stage idle
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfaffcac
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l18
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8ccc00
<7>musb_g_giveback 144: ep0 done request cf8bd6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 44, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 44, ep0stage idle

明確な違いはない。
そして次で終わる。

<7>musb_interrupt 1536: ** IRQ peripheral usb0009 tx0000 rx0000
<7>musb_stage2_irq 816: SUSPEND (b_peripheral) devctl 99 power f0
<7>musb_stage2_irq 820: state (3) active (1)
<7>musb_g_suspend 1903: devctl 99
<7>android_usb gadget: suspend composite
<7>musb_stage2_irq 843: otg (0) hnp(0)

PC側は、こうなった。

[22707.780482] usb 1-4.4: new high speed USB device using ehci_hcd and address 44
[22707.890447] usb 1-4.4: no configurations
[22707.890457] usb 1-4.4: can't read configurations, error -22
[22707.980467] usb 1-4.4: new high speed USB device using ehci_hcd and address 45
[22708.090434] usb 1-4.4: no configurations
[22708.090444] usb 1-4.4: can't read configurations, error -22
[22708.180455] usb 1-4.4: new high speed USB device using ehci_hcd and address 46
[22708.210655] usb 1-4.4: no configurations
[22708.210664] usb 1-4.4: can't read configurations, error -22
[22708.300446] usb 1-4.4: new high speed USB device using ehci_hcd and address 47
[22708.330649] usb 1-4.4: no configurations
[22708.330658] usb 1-4.4: can't read configurations, error -22
[22708.340143] hub 1-4:1.0: unable to enumerate USB device on port 4

リトライしてあきらめた、というところだろう。
違いは、g_etherかg_androidかなので、g_androidの対応が足りていないということか。
あるいは、その下のFunctionか。

<6>f_adb init
<6>android_register_function adb

として、今回はADBを登録していた。
うーん、よくわからないなぁ。
ADBなんかも、BeagleBoard用に手を加えないといけないとか?


などと思って検索していると、TIのAndroid環境があった。
そんなものが!
・・・いや、以前にも目にしたことがあるのだが「自分でやるんだ!」と切り捨てていたのだ。
ああ、私にはまだ先生が必要なのですな。

OTGじゃなくてPeripheralでよいのでは?

BeagleBoardのDisgnostic Kernelを入れると、PCはBeagleBoardをEtherカードとして認識してくれる。
そのソースがgitoriousにあるので、自分でビルドして確かめようとした。

しかし・・・ビルドが通らない・・・。
初出の変数があるのだが、それがどっからどうすべきものかがわからず。。。
それはあきらめ、defconfigを見ることにした。

そうするとですな、OTGはOFFになっているのだ。
Gadgetは有効になってて、MUSBも有効にしてある。
ああ、こういう方法もあるんだ。。。。。

最近、EHCIポートが使えることに気づいたので、OTGポートはPeripheral専用にしてしまって問題ないのだ。
ではやってみよう、と設定をいじっていたが、なかなかうまくいかん。
kernelのバージョンによって、設定が少しずつ違っているのだ。
それに、BeagleBoardは基板の版によってハードウェア構成が異なるため、ある設定では動いてもある設定では動かない、ということがあるように思うのだ(私はC4版)。
特にUSB周りは変更がいろいろとあったようなので、混乱している。

今さっき、ようやくPCが認識してくれた。

Bus 001 Device 043: ID 0525:a4a2 Netchip Technology, Inc. Linux-USB Ethernet/RNDIS Gadget

いきなりAndroidのではわからないので、Diagnostic Kernelでも動いていたネットワークのGadgetにしてみたのだ。
おとなしく書いているが、非常にうれしい。

さて、BeagleBoard側のログだ。
まず、挿してから認識後のRESETまで。
そうなのだ、やはりRESETはしているのだ。

<7>twl4030_usb twl4030_usb: HW_CONDITIONS 0xd0/208; link 2
<7>musb_interrupt 1536: ** IRQ peripheral usb0001 tx0000 rx0000
<7>musb_stage2_irq 816: SUSPEND (b_idle) devctl 99 power e0
<7>musb_stage2_irq 820: state (1) active (0)
<7>musb_interrupt 1536: ** IRQ peripheral usb0004 tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0x4
<7>musb_stage0_irq 647: BUS RESET as b_idle
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'g_ether'
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage idle
<7>musb_interrupt 1536: ** IRQ peripheral usb000c tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'g_ether'
<7>musb_g_disconnect 1939: devctl 99

最初にRESETしてるのはいいとして、今回も接続後にRESETしているのだ。
ep0stageで、setupステージ後のout/statusステージで何も送信していなさそうなのも、同じ。
前回と違うのは、ここからリトライにならず、次に進んだこと。
次のログを載せよう。

<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req00.05 v002b i0000 l0
<7>service_zero_data_request 237: bRequest (05)
<7>musb_g_ep0_irq 811: handled 1, csr 0001, ep0stage in/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage in/status


またSETUPから始まるのか、と思わせたが、in/statusステージになっている。
前はreq80.06なので、GET_DESCRIPTOR。
ここはreq00.05なので、SET_ADDRESS。
そう、ようやくアドレスが取得できたのだ。

もう2つ先まで載せよう。

<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 43, ep0stage idle
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l18
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage idle



<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 43, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cf82bd34
<7>musb_read_setup 562: SETUP req80.06 v0200 i0000 l9
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=9
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 9 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  9/9
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage idle

まだ続くけど、ここまで。


.configで目立った変更は、こんなところか。

CONFIG_USB_MUSB_PERIPHERAL
CONFIG_USB_GADGET_MUSB_HDRC
CONFIG_USB_ETH
CONFIG_USB_ETH_RNDIS

Peripheralにしているので、OTG関係の設定が出てこなかった。
他にも関係あるのかもしれないが、これで続けてみよう。

SmartQ5のソースファイル

なにげなくSmartQ5掲示板を見ていたら、昔の投稿が目に付いた。
どういうことかというと、SmartQ5の掲示板はスパムしか目に付かず、本当に内容があるものはごくわずかだからだ。

2月の投稿で、Coviaの人が「今月中にはcode.googleにソースをアップできます」みたいなことが書かれていた。
ソースファイルが出たなんていうアナウンスはなかったような・・・と検索すると、あった。

http://code.google.com/p/covia-opensource-smartq5-android-froyo/

えー、もうちょっと大きくアナウンスしてくれよ~。
あるいは・・・偽物なのか??
わざわざ偽物を作るほどのものではないと思うが、そう思わせるのも作戦のうちとか。。。

twitterにはアナウンスされてた・・・。
ひどい。。。掲示板に書いたものは掲示板でアナウンスしてくれよ。。。

2011年5月28日

USBのログをまた見直す

だめだ、わからん。
わからないときは、現場に戻るべし。
カーネルのログを見てみよう。


<7>musb_interrupt 1536: ** IRQ peripheral usb0001 tx0000 rx0000
<7>musb_stage2_irq 816: SUSPEND (b_idle) devctl 99 power e0
<7>musb_stage2_irq 820: state (1) active (0)
<7>musb_interrupt 1536: ** IRQ peripheral usb0004 tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0x4
<7>musb_stage0_irq 647: BUS RESET as b_idle
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'

ここは、まだアイドル状態。
USBをPCに挿した直後というところか。
まずここでRESETしている。


<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf c0473ecc
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 810: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 916: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf904c00
<7>musb_g_giveback 144: ep0 done request cf8fd680,  18/18

ここがSETUPステージ。
countが8ってのは、デバイスリクエストのみでデータサイズ0のことだろう。


<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage out/status

OUTステージか、STATUSステージか。
Interface誌の特集では、データステージかステータスステージになる、とある。
OUTってのは、データステージのことか?
SETUPステージで、80.06という要求が来ている。
これは、GET_DESCRIPTOR要求で、deviceが返さなくてはならない。
返すときは、ログが出ないのか?

と思ったが、SETUPステージの最後でqueueして、FIFOに積めて、done、とまでいっている。
さすがに送っているだろう。
問題は何を送っているかだ。
細かく言えば、SETUPでディスクリプタ要求されても、まずはハンドシェイクパケットを送ることになっている。
ディスクリプタを返すのは、次にHostからINトークンパケットが来た後だ。
18byteって大きいから、ハンドシェークパケットではなさそうだ。


<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage idle

アイドルになった。


<7>musb_interrupt 1536: ** IRQ peripheral usb000c tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'

リセットがかかった。


うーん、ハンドシェークパケットを送っていないのが問題なのか?
DMA転送がうまくいってないかも、とPIO設定にしてみたが、特に変化なし。
うーむ。。。。。。。

MUSBのSUSPENDとRESETを無効にしてみるが、そういう問題ではない

理由は不明だが、SETUPトークンの次にUSB HostからRESET/SUSPENDが来ることがあるようなので、MUSBのSUSPENDを無効にしてみよう。

<7>musb_interrupt 1530: ** IRQ peripheral usb000c tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_g_disconnect 1939: devctl 99


・・・単にSUSPENDしないだけで、その次にRESETされてるのを忘れていた。
では、毒喰らわば、ということで、リセットも無効にしてみた。
しかし、単にリセットしないだけで、結局SETUPからリトライされている。
しまいには「peripheral reset irq lost!」なんて怒られてしまった。

Host側のdmesgは、こうなっていた。

[25684.100447] usb 1-4.4: new high speed USB device using ehci_hcd and address 105
[25684.210418] usb 1-4.4: no configurations
[25684.210428] usb 1-4.4: can't read configurations, error -22
[25684.300428] usb 1-4.4: new high speed USB device using ehci_hcd and address 106
[25684.410404] usb 1-4.4: no configurations
[25684.410414] usb 1-4.4: can't read configurations, error -22
[25684.500423] usb 1-4.4: new high speed USB device using ehci_hcd and address 107
[25684.530485] usb 1-4.4: no configurations
[25684.530495] usb 1-4.4: can't read configurations, error -22
[25684.620363] usb 1-4.4: new high speed USB device using ehci_hcd and address 108
[25684.650607] usb 1-4.4: no configurations
[25684.650617] usb 1-4.4: can't read configurations, error -22
[25684.660101] hub 1-4:1.0: unable to enumerate USB device on port 4

うん、昔から変わってない。
「unable to enumeration」だ。



「peripheral reset irq lost!」が気になったので、追ってみた。
これは、SETUPパケットを読んだ後、通信速度が未定だった場合に出ている。
ということは、あのRESETには通信速度を決める意味があるのか?

確かに、musb_g_reset()内でmusb->g.speedを決める処理があった。
決める箇所は、ここか、「reset irq lost!」のところだけだ。
通信速度g.speedは、状態を見極める意味で使われているところがままある。

もしや、と、通信速度が決定したらRESETさせない、とすると・・・同じだった。
うーん、どうもそういう問題ではないようだ。