2009年9月24日木曜日

Debian で Ethernet が繋がるようになった

今日の作業で、ようやく、BeagleBoard 上の Debian ARM で TCP/IP できるようになりました。これで、今後はシリアルケーブルなしにデバッグができるようになります。つーか、ネットワーク繋がらなくちゃ何もできないのですが。

先日までのトライで、lenny/v2.6.29-58cf2f1-oer44.1 を起動できるようになったものの、BeagleBoard (リビジョン B6)で USB (ハブ)を認識できないという問題を抱えていました。今日は、とりあえず、片っ端からいろいろなカーネルを立ち上げ、問題の切り分けをしてみました。(もしかすると、USB OTG ケーブルの問題なのかも知れませんが、極細の IC クリップがないとテスタを当てられないので、放置しています。いずれ余裕ができたら、もうちょっと切り分けしてみようと思います。)

まずは、Lenny 最新の v2.6.31-52a962f-ang3.1 を試してみます。しかし、カーネルの起動途中で固まってしまう現象にぶつかりました。今度は少し戻って、v2.6.29-58cf2f1-oer45.1。これは、上記 oer44.1 とほぼ同じ動作になります。

ここで、かなり行き詰まりを感じたのですが、v2.6.28 系列も試してみることにしました。これが少し億劫だったのは、上記サイトに、もはや v2.6.28 系列が置かれていないということです。アーカイブを探したところ、こちらのサイトに古いバージョンが置かれていることが分かりました。問題は(大したことではないが)、そこに uImage は置かれておらず、.deb ファイルから vmlinuz を展開し、そこから U-Boot の mkimage で uImage を生成しなくてはいけないという点です。以下、備忘録です。

まず、lenny/v2.6.28-79d042a-oer23 の .deb ファイルをダウンロードします。ここから入手できます。次に、これを展開します。.deb ファイルは(私の知る限り) ar フォーマットになっているので、次のように展開します。

$ ar xf linux-image*.deb
中から data.tar.gz というファイルが出てくるので、そこからさらに boot/vmlinuz-2.6.28-oer23 というファイルを取り出します。

ここからは、U-Boot の mkimage というツールが必要です。ここの説明にあるように QEMU 上で Debian を動かし、そこで mkimage するのが簡単ですが、QEMU と実世界(?)の間でファイル交換が必要になります。私は、QEMU 上の Debian から、ホストに sftp をかけてファイルを交換しました。mkimage が使えるようになったら、次のようにします。

$ mkimage -A arm -O linux -T kernel -C none -a 0x80008000 \
-e 0x80008000 -n "Linux" -d ./vmlinuz-2.6.28* uImage
できた uImage は、sftp で再び実世界に戻し、何らかの方法で SD カードの VFAT パーティションに書き込みます。(パーティションの作成やフォーマットには、ここにある video tutorial を見て、GParted を使うのが簡単です。慣れれば、例えば VFAT のフォーマットには mkdosfs -F32 -v /dev/sdf1 (注意: デバイス名は、作業環境に依存します)とかすれば、OK です。)

私の場合は、これで無事に USB ハブと USB-Ether アダプタ LUA-U2-KTX を認識できました。以下に、関連する dmesg を示します。

Linux version 2.6.28-oer23 (root@debian-armel) (gcc version 4.3.2 (Debian 4.3.2-
1.1) ) #1 Wed Apr 8 15:30:01 UTC 2009
CPU: ARMv7 Processor [411fc082] revision 2 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 Beagle Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 ES2.1
SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000
(略)
musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92
(略)
musb_hdrc musb_hdrc: MUSB HDRC host driver
musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 2
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
(略)
musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
musb_hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine (X), bulk split (X),
 HB-ISO Rx (X), HB-ISO Tx (X), SoftConn)
musb_hdrc: MHDRC RTL version 1.400 
musb_hdrc: setup fifo_mode 4
musb_hdrc: 29/31 max ep, 16384/16384 memory
musb_hdrc: hw_ep 0shared, max 64
musb_hdrc: hw_ep 1tx, max 512
musb_hdrc: hw_ep 1rx, max 512
musb_hdrc: hw_ep 2tx, max 512
musb_hdrc: hw_ep 2rx, max 512
musb_hdrc: hw_ep 3tx, max 512
musb_hdrc: hw_ep 3rx, max 512
musb_hdrc: hw_ep 4tx, max 512
musb_hdrc: hw_ep 4rx, max 512
musb_hdrc: hw_ep 5tx, max 512
musb_hdrc: hw_ep 5rx, max 512
musb_hdrc: hw_ep 6tx, max 512
musb_hdrc: hw_ep 6rx, max 512
:musb_hdrc: hw_ep 7tx, max 512
musb_hdrc: hw_ep 7rx, max 512
musb_hdrc: hw_ep 8tx, max 512
musb_hdrc: hw_ep 8rx, max 64
musb_hdrc: hw_ep 9tx, max 512
musb_hdrc: hw_ep 9rx, max 64
musb_hdrc: hw_ep 10tx, max 512
musb_hdrc: hw_ep 10rx, max 64
musb_hdrc: hw_ep 11tx, max 256
musb_hdrc: hw_ep 11rx, max 256
musb_hdrc: hw_ep 12tx, max 256
musb_hdrc: hw_ep 12rx, max 256
musb_hdrc: hw_ep 13tx, max 256
musb_hdrc: hw_ep 13rx, max 4096
musb_hdrc: hw_ep 14shared, max 1024
musb_hdrc: hw_ep 15shared, max 1024
musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92
USB-Ethernet のほうは、こんな感じです。

eth0: register 'asix' at usb-musb_hdrc-1.1, ASIX AX8817x USB 2.0 Ethernet,
00:07:40:xx:xx:xx
udev: renamed network interface eth0 to eth1
明日以降、今度は USB Wi-Fi に挑戦し、それがうまく行っても行かなくても、本筋の作業に戻ろうと思います。さて、寝るとするか…。

0 件のコメント:

コメントを投稿

フォロワー