Armadilloフォーラム

USB-LANアダプタのドライバ組込み方法について

taniguchi

2014年8月5日 15時27分

taniguchiです。

Armadillo-440に、ロジテックのUSBハブ搭載LANアダプタ LAN-TX/U2H3Bを使用したいのですが、
ドライバの組込み方法を教えていただけないでしょうか。

環境はatmark-dist-20110704で、
ASIX社のドライバは、v4.13.0です。

宜しくお願いいたします。

コメント

y.nakamura

2014年8月9日 7時49分

中村です。

ただ「教えてくれ」ではなくて、自分でどこまで調べたのか?
何をやってみたのか?、何がうまくいかないのか?
などを書けば、もう少し反応がよくなると思いますよ。

何もない状態で「教えて」では、どこから説明をしたらいいのか
わかりませんから。

ドライバをビルドする方法はいろいろとありますが、
「Atmark-dist開発者ガイド」のドライバのビルドのところは
読みましたか?

簡単なのは、「Atmark-dist開発者ガイド」の
11.1. Out of Tree コンパイル
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1…
を真似することです。

> ASIX社のドライバは、v4.13.0です。

この中に入っているMakefileは使いません。捨ててください。
あるいは".orig"などをつけてrenameしてください。
でもって、
11.1.2. ソースコードの用意
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1…
に出てくるMakefileをasxiに合わせて修正したものを
そのドライバソースのディレクトリに入れます。

修正箇所は
MODULES = message.o
をasxi.oに変更し、
INSTALL_MOD_DIR=kernel/drivers/char
はkernel/drivers/net/usbにでもすればいいと思います。

次の2行がエラーになるかもしれません。
$(ROOTDIR)/user/busybox/examples/depmod.pl -b \
$(ROMFSDIR)/lib/modules/$(KERNELRELEASE) &> /dev/null
そのときは、この2行は消してしまって大丈夫です。

それから、makeで
make: arm-linux-gcc: コマンドが見つかりませんでした
というメッセージが何度もでてくるかもしれません。
これは無視してください。
linux-2.6.26-atXX/Makefileの538行目あたりにある
# arch Makefile may override CC so keep this after arch Makefile is included
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
CHECKFLAGS += $(NOSTDINC_FLAGS)
が表示しているようですが、悪影響はなさそうです。

LAN-TX/U2H3Bを持っていないので動作の確認はできませんが、
上の説明のようにやって、ビルドはできました。

--
なかむら

at_daisuke.sasaki

2014年8月11日 19時47分

佐々木大輔です。

中村さんが回答してくださったように、ドライバをクロスビルドする事で組み込みは可能です。

ASIX社のチップを搭載したUSB LANアダプタについては、カーネル2.6.26-atに古いドライバが組み込まれています。
そのため、ドライバを差し替える形でも組み込めます。

1. {linux-2.6.26-at*}/drivers/net/usb 以下に
ASIX社からダウンロードしたドライバをコピー

2. 以下のカーネルコンフィギュレーションを有効化

 -> Device Drivers
   -> Network device support (NETDEVICES [=y])
     -> USB Network Adapters
       -> <*> Multi-purpose USB Networking Framework (USB_USBNET [=y])
          <*>   ASIX AX88xxx Based USB 2.0 Ethernet Adapters

3. ビルド

尚、asix.c内に記述されている「static const struct usb_device_id products[]」に
使用するデバイスが定義されている必要があります。
※使用されるLAN-TX/U2H3Bについては、最新のドライバに組み込まれていました。

接続されたUSB LANアダプタのVendor IDとProduct IDは、ATDEでlsusbを行う事で確認できます。

[Vendor ID/Product IDの確認方法]

[ATDE5 ~] lsusb
(省略)
Bus 002 Device 008: ID 0b95:772a ASIX Electronics Corp. 

[asix.c内のLAN-TX/U2H3Bの定義部分]

}, {
        /* ASIX AX88772A 10/100 */
        USB_DEVICE(0x0b95, 0x772A),
        .driver_info = (unsigned long) &ax88772a_info,
}, {

y.nakamura

2014年8月11日 21時10分

佐々木さん、
中村です。

> 1. {linux-2.6.26-at*}/drivers/net/usb 以下に
> ASIX社からダウンロードしたドライバをコピー
>
> 2. 以下のカーネルコンフィギュレーションを有効化

私も先にこの方法をやってビルドできることは確認したのですが、
次の理由から、この方法を案内するのはやめました。

入れ替えるasix.cや他のソースを眺めてみたところ、

> -> <*> Multi-purpose USB Networking Framework (USB_USBNET [=y])
> <*> ASIX AX88xxx Based USB 2.0 Ethernet Adapters

ここでASIX...の上にあるMulti-purpose...のUSB_USBNETが気になりました。
このディレクトリのKconfigでは、ASIXのドライバはUSB_USBNETに依存していて、
元から入っているasix.cはusbnet.cを使っています。

ところが、チップメーカからダウンロードできるソースはusbnet.cを使わずに、
自前のaxusbnet.cを使っています。

とりあえず動かすならこれでもいいですけど、ちゃんと修正しようとすると、
asix.cを入れ替えてしまう(asix.h,axusbnet.c,axusbnet.hも追加する)のならば、
KconfigでのUSB_USBNETの依存関係なども修正したくなります。

こういう説明をしたくなかったので、out-of-treeの方法にしました。

ですが、out-of-treeだと組み込みにできない(モジュールになってしまう)ので、
組み込みにしたいならば、linux/driver/...の下に入れないとならないですね。
その場合は、既存のasixのソースを入れ替えるのではなくて、
「Atmark-dist開発者ガイド」の
11.2. driversディレクトリへのマージ
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1…
で説明されている方法でやるのがいいのではないかと思います。

細かい話ですが・・・

--
なかむら

at_daisuke.sasaki

2014年8月12日 18時41分

佐々木大輔です。

> 私も先にこの方法をやってビルドできることは確認したのですが、
> 次の理由から、この方法を案内するのはやめました。

中村さん、コメントありがとうございます。
詳細確認できていなかったので、弊社でも確認してみます。

ありがとうございました。

taniguchi

2014年8月21日 10時36分

taniguchiです。

中村様、佐々木様、ご返信ありがとうございます。

質問の仕方についてのご指摘もありがとうございました。
現状をしっかり伝えたうえで質問するよう、改善したいと思います。

Out of Treeコンパイルを試したところ、
ビルドが正常にでき、実機での動作を確認することができました。

丁寧に教えていただきありがとうございました。
また疑問点などあれば、フォーラムを活用することがあると思いますので、
今後ともどうぞ、よろしくお願いいたします。