- PR -

MOXA C168H/PCIのドライバインストール

1
投稿者投稿内容
rumpleteazer
会議室デビュー日: 2007/03/12
投稿数: 16
お住まい・勤務地: 東京都
投稿日時: 2008-06-24 11:42
rumpleteazerと申します。

MOXA増設シリアルカード(PCI)を使用する為にドライバを組み込んだのですが、
正常に動作していない様子です。
無事にインストール出来た方、環境等教えていただけないでしょうか?

検索や過去logも見たつもりなのですが、ドライバのインストールは初めて
なのでどこを確認していいのか解らずはまっています。

<環境>
Linux:Omoikane GNU/Linux 1.1 (Debian系 カーネルVer2.2.17)
増設シリアルカード:MOXA C168H/PCI (8ch)
ドライバ:mxser_1.7.tgz (カーネル Ver2.2.x用 webサイトより入手)

<エラー内容>
insmodを行うと以下のメッセージが出ます。
[root@table1 driver]# insmod mxser
mxser.o: unresolved symbol schedule_timeout
mxser.o: unresolved symbol request_region
mxser.o: unresolved symbol __wake_up
以下30行程度同様のエラーメッセージが表示されます。
lsmodで確認するとmxserは表示されません。

$ cat /proc/ksyms |grep __wake_up
すると、"__wake_up"はみつからず、"__wake_up_なんたら"が表示されます。
これを同じ物と認識しない事が原因でしょうか?

/--------
<行った作業手順>

・カーネルソースを展開する
# cd /usr/src
# tar -Ixvf kernel-source-2.2.17.tar.bz2
# ln -sf kernel-source-2.2.17 linux
・MOXAドライバの作成
# cd /
# mkdir moxa
# cd /moxa
・ftp等で/moxaへmxser_1.7.tgzを転送する
・ドライバファイルを展開する
# tar xvfz mxser_1.7.tgz
・カーネルにあるビルトインドライバをバックアップする
# cd /usr/src/linux/drivers/char
# mv mxser.c mxser.c.old
・リンクを作成する
# ln -sf /moxa/mxser/driver/mxser.c mxser.c
・ドライバソースをmakeする
# cd /moxa/mxser
# make clean; make install
※makeをかけるとmodsetvar.hが見つからないと怒られるので以下の操作を行う
# cd /usr/src/kernel-source-2.2.17/include/linux/
# ln -sf ./modsetver.h ./modversions.h
以上でドライバのmakeは通る
ここでinsmod mxserを実行すると上記エラーが出る。
modprobe mxserでも同様。

この辺りで挫折しました。
よろしくお願いします。
_________________
rumpleteazer
rumpleteazer
会議室デビュー日: 2007/03/12
投稿数: 16
お住まい・勤務地: 東京都
投稿日時: 2008-06-24 16:44
補足ですが、TurboLinux8 Workstationではインストールできました。
実際に/dev/ttyM0~M7が使用可能でした。

使用したドライバは、最新のmxser_1.12.tgz(カーネルVer2.4用)です。

_________________
rumpleteazer
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2008-06-24 21:00
とりあえず気になるのはカーネルソースを展開した後、make menuconfig等の
おまじないを唱えていないことです。
make menuconfigじゃなくてもmake xmenuconfigでも、なんならmake configでも
いいんですが、このあたりをどれか一度は実行しておかないとカーネルまわりの
コンパイルに必要ないくつかのファイルが作成されないので。
modsetvar.hもそのタイミングで作成されなかったかしら。どうだったかな。
rumpleteazer
会議室デビュー日: 2007/03/12
投稿数: 16
お住まい・勤務地: 東京都
投稿日時: 2008-06-26 17:47
ぽんすさんフォローありがとうございます。

make menuconfigは使用している環境でなぜか動作せず、仕方なくmake configを実行して以下の項目をYesとしてみました。
* Character devices
*
Non-standard serial port support (CONFIG_SERIAL_NONSTANDARD) [N/y/?] y
Moxa SmartIO support (CONFIG_MOXA_SMARTIO) [N/y/m/?] (NEW) y

make depも実行してみたのですが、modversions.hが作成された形跡はありません。

ドライバのMakefileですが、コンパイルオプションは以下の通りです。
OPTS=-DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \\
-fomit-frame-pointer -pipe -m486 -I/usr/src/linux-2.4/include \\
-I/usr/src/linux/include
ifeq ($(MAKECMDGOALS), install)
OPTS+=-DMODVERSIONS
endif

ifeq "$(findstring SMP, $(shell uname -a))" "SMP"
OPTS+=-D__SMP__
endif

しばらく悩んでみます
_________________
rumpleteazer
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2008-06-26 22:33
ちょっとだけ.
引用:

rumpleteazerさんの書き込み (2008-06-26 17:47) より:

ドライバのMakefileですが、コンパイルオプションは以下の通りです。
OPTS=-DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \
-fomit-frame-pointer -pipe -m486 -I/usr/src/linux-2.4/include \
-I/usr/src/linux/include


/usr/src/linux-2.4/include の 2.4 は誤記ですか?
rumpleteazer
会議室デビュー日: 2007/03/12
投稿数: 16
お住まい・勤務地: 東京都
投稿日時: 2008-07-11 19:08
kazさん、ありがとうございます。
投稿頂いていたのに返信が遅くなり申し訳ありません。
引用:

kazさんの書き込み (2008-06-26 22:33) より:
/usr/src/linux-2.4/include の 2.4 は誤記ですか?


Makefileから抜き出したので誤記ではありません。
webを検索すると、カーネルソースの置き場を/usr/src/linux-2.4/
としている場合と、/usr/src/linux/としている場合がありました。
良く解らないのでそれぞれにリンクを張って試してみました。

条件によってコンパイルオプションを変えている様子です。
長いですが、Makefile全て引用します。
引用:

CC=gcc -c
ARCH=$(shell uname -m | sed s/i.86/i86/)
ifeq ($(ARCH),i86)
OPTS=-DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \\
-fomit-frame-pointer -pipe -m486 -I/usr/src/linux-2.4/include \\
-I/usr/src/linux/include
else
OPTS=-DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \\
-fomit-frame-pointer -pipe -I/usr/src/linux/include -ffixed-8
endif

ifeq ($(MAKECMDGOALS), install)
OPTS+=-DMODVERSIONS
endif

ifeq "$(findstring SMP, $(shell uname -a))" "SMP"
OPTS+=-D__SMP__
endif

all: module
module : mxser.o
installmod: install
install: module
mkdir -p /lib/modules/$(shell uname -r)/kernel/drivers/char/
cp -f ./mxser.o /lib/modules/$(shell uname -r)/kernel/drivers/char/
mkdir -p /lib/modules/$(shell uname -r)/misc/
cp -f ./mxser.o /lib/modules/$(shell uname -r)/misc/
clean :
rm -f *.o
mxser.o : mxser.c
$(CC) $(OPTS) mxser.c
dummy:


同じヘッダファイル名でも環境によって内容が違うようで、
その辺り調べているのですが、なかなか正解にたどり着きません。
引き続き何かアドバイスありましたらよろしくお願いします。

_________________
rumpleteazer
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2008-07-12 22:03
make menuconfigが使えないのは、ncursesがインストールされて
いないからではないかと思います。menuconfigのほうが格段に楽で、
見落とし等が発生する可能性も少なくなるのでオススメです。

/usr/include/linuxや/usr/include/asmは、展開したカーネルソースツリーの
中を指していますか?

あとは、動いているカーネルとソースツリーとが合っているのかどうか
という点が気になります。tarで展開しているということは、それは
おそらくディストリビューション標準のパッケージ等ではないのでは
ないかと思いますが、どうなんでしょう。
ソースツリーからカーネルを構築し、そのカーネルで起動した状態で
ドライバをmakeするとどうでしょうか。
1