Armadilloフォーラム

USB2RS485ドライバについて

izawa

2014年10月6日 18時54分

イットーソフトウェアの伊澤です。
今日は質問を。

動作確認済みデバイス(http://armadillo.atmark-techno.com/node/781)に載っているドライバで、
MOXAのUSB2RS485の変換器を使えないかと試してみました。

・現状
メーカーサイトからダウンロードしたソース(driv_linux_uport1p_v1.3_build_12071316.tgz)を
現行版(linux-2.6.26-at20.tar.gz)のソースを使ってビルド、できたモジュール(mxu11x0.ko)を
Armadilloにコピー。ロードしようとすると以下のエラーでロードに失敗します。

mxu11x0: Unknown symbol usb_register_driver
mxu11x0: Unknown symbol usb_clear_halt     
mxu11x0: Unknown symbol usb_bulk_msg  
mxu11x0: Unknown symbol usb_serial_disconnect
mxu11x0: Unknown symbol usb_submit_urb       
mxu11x0: Unknown symbol usb_match_id  
mxu11x0: Unknown symbol usb_control_msg
mxu11x0: Unknown symbol usb_deregister 
mxu11x0: Unknown symbol usb_kill_urb  
mxu11x0: Unknown symbol usb_serial_probe
mxu11x0: Unknown symbol usb_serial_register
mxu11x0: Unknown symbol usb_serial_deregister
insmod: cannot insert `mxu11x0.ko': Unknown symbol in module (-1): No such file or directory

ビルドに問題があると思うのですが、カーネルコンフィギュレーションも含めて
必要な設定についての情報はありませんでしょうか。

コメント

y.nakamura

2014年10月6日 23時19分

中村です。

> mxu11x0: Unknown symbol usb_serial_disconnect
> mxu11x0: Unknown symbol usb_serial_probe
> mxu11x0: Unknown symbol usb_serial_register
> mxu11x0: Unknown symbol usb_serial_deregister

この4つはカーネルコンフィグレーションでCONFIG_USB_SERIALを
enableすれば解決すると思うのですが・・・・
(Device Drivers -> USB support -> USB Serial Converter support です)

> mxu11x0: Unknown symbol usb_register_driver
> mxu11x0: Unknown symbol usb_clear_halt
> mxu11x0: Unknown symbol usb_bulk_msg
> mxu11x0: Unknown symbol usb_submit_urb
> mxu11x0: Unknown symbol usb_match_id
> mxu11x0: Unknown symbol usb_control_msg
> mxu11x0: Unknown symbol usb_deregister
> mxu11x0: Unknown symbol usb_kill_urb

これらは、たしかusbcore(drivers/usb/core)の関数です。
コンフィグレーションでUSBそのものをOFFにしちゃっているとか?

--
なかむら

izawa

2014年10月7日 10時12分

中村様、回答ありがとうございます。

CONFIG_USB_SERIALをチェックしてある筈なんですけどね。
勿論、USBも有効にしてあるし。
# 実際、USBメモリはちゃんとマウントできているので……

取り敢えず、もう一度確認してみます。

y.nakamura

2014年10月7日 13時07分

中村です。

> CONFIG_USB_SERIALをチェックしてある筈なんですけどね。
> 勿論、USBも有効にしてあるし。

CONFIG_USB_SERIALはともかく、usbcoreのがNGってことで、
どこか他に問題があるとは思うのですが・・・

Armadillo用にコンパイルするmakefileをみせていただくことはできますか?

--
なかむら

izawa

2014年10月7日 18時55分

伊澤です。

只今ATDE環境にアクセスできない状況なのでMakefileは貼れませんが、「atmark-dist 開発者ガイド」
(atmark-dist_developers_guide_ja-1.0.10.pdf)のP52にあるものが元になっている筈です。
# ディレクトリとかコンパイルオプションの違い位でしょうかね。
単体のドライバ開発にはこれで事が足りていたので、何も考えずにそのまま流用しています。
依頼元も、どうやらArmadilloではビルドしてないようですし、何か分かれば大変助かります。
お手数お掛けしますが、宜しくどうぞ。

y.nakamura

2014年10月7日 21時09分

中村です。

> 只今ATDE環境にアクセスできない状況なのでMakefileは貼れませんが、「atmark-dist 開発者ガイド」
> (atmark-dist_developers_guide_ja-1.0.10.pdf)のP52にあるものが元になっている筈です。
> # ディレクトリとかコンパイルオプションの違い位でしょうかね。
> 単体のドライバ開発にはこれで事が足りていたので、何も考えずにそのまま流用しています。

私もいつもこれです。

最新のArmadilloのソースを使ってやってみました。
機材は今回は都合によりA460ですが、本件に関しては420/440と違いはないでしょう。

A460には事前にArmadilloのwebサイトからダウンロードした次のカーネルと
ユーザランドを入れておきました。どちらも最新のものです。
linux-a460-1.04.bin.gz
romfs-a460-1.03.img.gz

ドライバのコンパイルに使ったArmadilloのソースは、これも最新の次のものです。
atmark-dist-20140602
linux-2.6.26-at20

atmark-dist開発者ガイドのMakefileからの変更は次の2か所のみです。
MODULES = mxu11x0.o
ROOTDIR ?= ../../atmark-dist-20140602

ATDE3でカーネルとユーザランドのtarボールを展開してまっさらな状態で、
プロダクトとしてArmadillo-460を選択して一旦make。
mxu11x0のソースを展開して、mxu11x0/driver/Makefileを上に書いたものに入れ替え。

この状態でmxu11x0/driverで"make modules"すると、次の警告が出ます。

WARNING: "usb_serial_disconnect" [/home/nakamura/tmp/mxu11x0/driver/mxu11x0.ko] undefined!
WARNING: "usb_serial_probe" [/home/nakamura/tmp/mxu11x0/driver/mxu11x0.ko] undefined!
WARNING: "usb_serial_register" [/home/nakamura/tmp/mxu11x0/driver/mxu11x0.ko] undefined!
WARNING: "usb_serial_deregister" [/home/nakamura/tmp/mxu11x0/driver/mxu11x0.ko] undefined!

警告が出ますが.koはできましたので、ftpでA460に転送してinsmodすると、
案の定、次のエラーでロードできません。

[root@armadillo460-0 (ttymxc1) ~]# insmod /home/ftp/pub/mxu11x0.ko
Using /home/ftp/pub/mxu11x0.ko
mxu11x0: Unknown symbol usb_serial_disconnect
mxu11x0: Unknown symbol usb_serial_probe
mxu11x0: Unknown symbol usb_serial_register
mxu11x0: Unknown symbol usb_serial_deregister
insmod: cannot insert `/home/ftp/pub/mxu11x0.ko': Unknown symbol in module (-1): No such file or directory

次に、カーネルコンフィグレーションでUSB-serialを有効にしてビルドし直し、
A460のlinuxカーネルのみ、これに入れ替えました。
また、mxu11x0も一度cleanしてmake modulesしなおしたところ、
上に書いた警告は出なくなりました。

その.koファイルをA460にftpで転送してinsmodすると、ロードできました。

[root@armadillo460-0 (ttymxc1) ~]# insmod /home/ftp/pub/mxu11x0.ko
Using /home/ftp/pub/mxu11x0.ko
usbserial: USB Serial support registered for MOXA UPort 1110
usbserial: USB Serial support registered for MOXA UPort 1130
usbserial: USB Serial support registered for MOXA UPort 1150
usbserial: USB Serial support registered for MOXA UPort 1150I
usbserial: USB Serial support registered for MOXA UPort 1130I
usbcore: registered new interface driver mxusb
mxu11x0: MOXA UPort 11x0 USB to Serial Hub Driver 1.3.0

MOXAのその機材がないので動作の確認はできませんが、
insmodによるドライバのロードはできたようです。

--
なかむら

izawa

2014年10月9日 17時21分

毎度お世話様、伊澤@ITTOです。

WARNINGが出た件は、コンフィギュレーションでは盛大に勘違いをしておりました。
USB Serial Converter supportではなくUSB Gadget SupportのSerialGadgetをオンにしていました。
それを修正してビルド、ドライバーもビルドし直したところ、無事にinsmodによるロードまで行きました。
ありがとうございます。

しかし、MOXAのマニュアルにあるような/dev/ttyUSB0のようなデバイスエントリができず、
その為にsetserialで設定するところまでいきませんでした。
果てさて、次はどこの問題なんでしょうかね(苦笑

at_hanada

2014年10月9日 17時21分

花田です。

> しかし、MOXAのマニュアルにあるような/dev/ttyUSB0のようなデバイスエントリができず、

まずは…

> MOXAのUSB2RS485の変換器を使えないかと試してみました。

の型番はなんですか?

ソース見ればわかる通り、MOXAのUSB to Serialコンバーターは
モデルにより一つ一つ認識IDが異なります。

#define MXU1_VENDOR_ID 0x110a
#define MXU1_1110_PRODUCT_ID 0x1110
#define MXU1_1130_PRODUCT_ID 0x1130
#define MXU1_1150_PRODUCT_ID 0x1150
#define MXU1_1151_PRODUCT_ID 0x1151
#define MXU1_1131_PRODUCT_ID 0x1131

プロダクトIDが一致するものがこの中にあれば、ドライバがデバイスをProbeするはずですが。
cat /proc/bus/usb/devices
してみて、IDがどうなっているか、上記にあるならドライバに紐つけられているかどうか確認してみてください。

izawa

2014年10月9日 18時26分

毎度お世話様、伊澤@ITTOです。

こちらの問題も、カーネルのコンフィギュレーションのミスだったようです。
# usb_serialを解決しようとするうちに何か必要なものを落としたか……

無事、/dev/ttyUSB0を介して通信できました。お騒がせしました。