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
ビルドに問題があると思うのですが、カーネルコンフィギュレーションも含めて
必要な設定についての情報はありませんでしょうか。
コメント
izawa
y.nakamura
izawa
伊澤です。
只今ATDE環境にアクセスできない状況なのでMakefileは貼れませんが、「atmark-dist 開発者ガイド」
(atmark-dist_developers_guide_ja-1.0.10.pdf)のP52にあるものが元になっている筈です。
# ディレクトリとかコンパイルオプションの違い位でしょうかね。
単体のドライバ開発にはこれで事が足りていたので、何も考えずにそのまま流用しています。
依頼元も、どうやらArmadilloではビルドしてないようですし、何か分かれば大変助かります。
お手数お掛けしますが、宜しくどうぞ。
y.nakamura
中村です。
> 只今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
毎度お世話様、伊澤@ITTOです。
WARNINGが出た件は、コンフィギュレーションでは盛大に勘違いをしておりました。
USB Serial Converter supportではなくUSB Gadget SupportのSerialGadgetをオンにしていました。
それを修正してビルド、ドライバーもビルドし直したところ、無事にinsmodによるロードまで行きました。
ありがとうございます。
しかし、MOXAのマニュアルにあるような/dev/ttyUSB0のようなデバイスエントリができず、
その為にsetserialで設定するところまでいきませんでした。
果てさて、次はどこの問題なんでしょうかね(苦笑
at_hanada
花田です。
> しかし、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
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にしちゃっているとか?
--
なかむら