• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GPIBドライバIC uPD7210を使用したGPIBカードをFreeBSD7.0(?)で使用するには?)

GPIBドライバIC uPD7210を使用したGPIBカードをFreeBSD7.0(?)で使用するには?

このQ&Aのポイント
  • GPIBドライバIC uPD7210を使用したGPIBカードをFreeBSD7.0(?)で使用するためにはカーネルを再構築してmakeを実行しますが、多くのエラーが発生して困っています。
  • C言語の知識が乏しいため、ネットの情報を参考にして試していますがうまくいきません。
  • 目的はgpibを使った計測システム作成で、ver.4の場合は問題なく使えるため、ver.7でも同様に使えるようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • fmysh
  • ベストアンサー率79% (27/34)
回答No.5

今回の再質問を眺めると、どうやら upd7210.txt で説明しているカーネルへ静的にリンクする方法ではなく、カーネールモジュールとして動的にリンクする方法へ私が変更したことに起因する疑問ばかりのようで、余計なことをして混乱させたと後悔しています。ビルドの手間を省くつもりで、新たに理解すべき事をたくさん拵えてしまった。 静的リンクの方法へ戻られてはどうでしょう。

noname#79743
質問者

お礼

カーネルへ静的にリンクする方法ではなく、カーネールモジュールとして動的にリンクする方法の方が便利かなと思ったのと、Makefileのことさえわかればこの質問に関しては解決できそうなので、なんとかしたいです。すみませんが教えていただきたいです。前回の質問のあとに自分で調べて結構理解できたと思うので、質問を絞らせてもらいます。これだけなんとかお答えいただければと思います。 SRCS に含めている xxx_if.h のあたりは、読んでみるとcreate from…と書いてあったのでなんとなくはわかりました。ただ MFILESの働きがよくわからないです…。KMOD,SRCSの意味というか書き方などは見つけたのですが、MFILESがなかなかみつからな くて困っています。FILEを生成するという意味でしょうか? また、SRCSにxxx_if.h を含むのはなぜでしょう?含まずにやろうとしたら @/sys/bus.h:517:23: error: device_if.h: No such file or directory @/sys/bus.h:518:20: error: bus_if.h: No such file or directory こんな感じのメッセージがでてきたからテキトーにつけたしてみた、という感じで大丈夫でしょうか? また、CFLAGS(Cコンパイラ・フラグ)にGPIB_DEBUG、GPIB_CONTEC_PCこの二つを選ぶ理由はなぜでしょうか? これでたぶん解決できると思うのでなんとかよろしくお願いします。

noname#79743
質問者

補足

解決できました。いままで大変ありがとうございました。

その他の回答 (4)

  • fmysh
  • ベストアンサー率79% (27/34)
回答No.4

> 先生に相談したところ、ver.4では何かがあったときに保証?がないとかセキュリティ上の問題うんぬんでver.7でやりたいと説明されました。 FreeBSD 4.x は 2006年にサポートが終了しています。これを利用するとなると、セキュリティ上の問題はおろか単なる不具合も全て自分で対応しなければならないで、通常はお勧めしません。7.x でがんばって開発をされるのならば、そのほうが正道でしょう。 さて、本題です 1. どうやって修正内容を知ったか 申し訳ないのですが、どこをどう探したかの具体的な経緯は、もう忘れてしまいました。 i. 未定義や型不一致のエラーがずらずら出たので、それらを定義しているインクルードファイル の内容が変わったのだろうと見当をつけました。 ii. CVS からソースツリーをチェックアウトして、エラー箇所の定義(nopollなど)を含むインクルードファイルを見つけ出しました。grep もしました。 iii. CVS ログをたぐって 4.x から 7.x の間の仕様変更を追いかけます。ソースのコメント、マニュアルページ、ハンドブックも役に立ちます。 iv. 現状が把握できたら 7.x での書きっぷりに改めます。 参考: http://www.jp.freebsd.org/cgi/cvsweb.cgi/ http://www.freebsd.org/doc/en/books/handbook/anoncvs.html http://www.freebsd.org/doc/en/books/developers-handbook/ http://www.freebsd.org/doc/en/books/arch-handbook/driverbasics.html 2. Makefile の書き方 単なる make の使い方、Makefile の書き方はマスターしたとします。 kernel module をビルドするための本質はこの3行 (http://www.freebsd.org/doc/en/books/arch-handbook/driverbasics-kld.html 参照): KMOD= gpib SRCS= upd7210.c upd7210_pci.c .include <bsd.kmod.mk> 他に、足りないものを付け足していって、最後にはこうなりました。 KMOD= gpib SRCS= upd7210.c device_if.h bus_if.h MFILES= kern/bus_if.m kern/device_if.m SRCS+= upd7210_pci.c pci_if.h MFILES+= dev/pci/pci_if.m CFLAGS+= -DGPIB_DEBUG -DGPIB_CONTEC_PC .include <bsd.kmod.mk> SRCS に含めている xxx_if.h は、初め @/sys/bus.h:517:23: error: device_if.h: No such file or directory @/sys/bus.h:518:20: error: bus_if.h: No such file or directory といったエラーが出たので、これらのファイルを探しましたが、 MFILES へ元になる.m ファイルを指定して生成する仕組みが判ったので追加しました。 CFLAGS は デバッグスイッチと、ボード種別の定義です。upd7210.c を読めばあります。 最後の .include <bsd.kmod.mk> で、処理の本体をシステムに任せます。/usr/share/mk/bsd.kmod.mk が実体ですが、そこから更にインクルードしている /usr/src/sys/conf/kmod.mk に各変数の説明コメントがあるので、これが参考になります。 3. コメントアウトして済ませました upd7210.txt によると、CFLAGS で定義したシンボルを gpib.h に書くのが本来のスタイルでしょうね。 以上、お役に立つでしょうか。

noname#79743
質問者

お礼

毎回回答ありがとうございます。何回も申し訳ありませんが、再度質問させていただきます。 2. Makefile の書き方 についてです。Makefile内での+=はどのような意味を持つのでしょうか。 kernel module をビルドするための本質はこの3行 KMOD= gpib SRCS= upd7210.c upd7210_pci.c .include <bsd.kmod.mk> というのはわかりますが、ここから SRCS = upd7210.c と SRCS += upd7210_pci.c とで分ける理由がよくわかりません。MFILE +=,CFLAGS+=などについても同様で、+=の働きについて教えていただきたいです。 SRCS に含めている xxx_if.h のあたりは、読んでみるとcreate from…と書いてあったのでなんとなくはわかりました。ただMFILESの働きがよくわからないです…。KMOD,SRCSの意味というか書き方などは見つけたのですが、MFILESがなかなかみつからなくて困っています。FILEを生成するという意味でしょうか? また、CFLAGSはCコンパイラ・フラグとあったのですがあっていますか?upd7210.cにGPIB_DEBUG、GPIB_CONTEC_PCがあるのは見つけたのですがCFLAGS += にこの二つを書くのはなぜでしょうか? upd7210.cで #if~ と書いてあったのでこちらを使ってコンパイルするということでしょうか? 本で #~ という記述は分割コンパイルを表すとかなっていたのでそうなのかなと思ったのですがいかがでしょうか?それかPCI版だけコンパイルできるようにしたというあたりが関係していますか? あと、3.についてですがこのやり方だと、upd7210.txtの手順(4),(5)あたりは必要なくなるのでしょうか?というかupd7210.txtの手順を実行する必要がないのかなとも思うのですがいかがでしょう? また、gpib.hの中身をみたいのですがどこにあるかわかりません。僕の勘違いかも知れませんが、upd7210.txtのやり方の場合、自分でgpib.hを作ってCFLAGSで定義したシンボル(?)を書くということでしょうか?それで今回はやり方が違うのでincludeすること自体が必要ないのでコメントアウトということでしょうか? 自分で調べた知識なので間違いが多いかもしれないですし、自分でもはっきりとわかっていないまま文章にしているので大変わかりづらい質問内容だとは思いますが、お答えいただければ嬉しいです。  

  • fmysh
  • ベストアンサー率79% (27/34)
回答No.3

> %kldload gpib.ko > を実行しようとしたところ以下のようにエラーがでてしまいました。 > kldload: can't load gpib.ko: Operation not permitted kldload: gpib.ko をロードできません: その操作は許可されていません モジュールをロードするというのは、動いているカーネルに手を加えることです。一般ユーザーが勝手にカーネルに手を入れられるとなると無法地帯になるので、許可されていません。こういった重要な操作には管理者権限が必要です。root になってロードしましょう。 > それとできればなのですが、なぜこのような修正が必要なのかも教えていただければうれしいです。 FreeBSD は日々改良されていますから、時間が経つにつれ仕様が変わってゆく部分があります。 今回の修正はすべて、現在のFreeBSDでの書き方へ合わせるための、単なる書き換えです。ドライバの本質的な修正は行っていません。 開発しようとされている計測システムの要件に応じたドライバの修正は、他ならぬ御自身の課題となります。 これは余計なお世話かもしれませんが、 GPIBで値を拾うためのプラットフォームが何でもよいのならば、実績のあるFreeBSD 4.x で済ましてしまい、 本来の研究のテーマである計測システムの開発の方に注力すべきだと思います。 そうではなくて、既存の計測システムをFreeBSD 7.x で稼働させることにこそ意義があり、評価対象になるということならば、 それをやり遂げるためには、Unix の基礎、プログラム開発、FreeBSD 等についてのしっかりした訓練が必要だと思います。 ネット上のQ&Aでなんとかなる程度のボリュームではないはずだ、と思うのです。

noname#79743
質問者

お礼

返事が遅くなって申し訳ありません。ご指摘ありがとうございます。しかし、ver.7のコンパイルはうまくいったということでとりあえずver.7でやってみたいと思います。 先生に相談したところ、ver.4では何かがあったときに保証?がないとかセキュリティ上の問題うんぬんでver.7でやりたいと説明されました。そこら辺の説明がいまいちわからなかったのですが、せっかくご指摘いただいたにもかかわらずとりあえずver.7でやりたいと思います。時間も自分の時間を削ればもっと時間がありますし。 そこで、最後にお聞きしたいことがあります。面倒かもしれませんがよろしくお願いします。 1.今回の修正についてなのですが、現在のFreeBSDでの書き方へ合わせるための単なる書き換え、とのことでしたがそれはどうやって調べられたのでしょうか?grepなどでdeviceの中から似たようなものを参考に調べるという方法で大丈夫でしょうか? 2.Makefileの作り方みたいなものはありますでしょうか?調べてわかる部分もあったのですが大半がわかりませんでした。できればMakefileの各文の説明などをお願いします。2.が一番知りたいです。 3.upd7210_var.hの #include "gpib.h"  → //#include "gpib.h" この部分の修正がわかりません。コメントアウトではないですよね?

  • fmysh
  • ベストアンサー率79% (27/34)
回答No.2

あら、ごめんなさい。 /***** Local headers ********************************************************/ #include <upd7210.h> #include <upd7210_var.h> は、元のままがよかったかもしれませんね。 私は upd7210.txt の説明のように /usr/src/sys 以下にはファイルを配置していませんでしたので、余計な差分が混じってしまったようです。 ドライバの開発で、いちいちカーネルを再コンパイル、再起動していては面倒なので、デバイスを動的なローダブルモジュールとしてビルドし、kldload(8), kldunload(8) するのが楽でしょう。 具体的には upd7210-2.1.tgz を展開したところに以下のパッチに含まれるMakefile を置いて、gpib.ko をビルドしてみました。 pci 版だけコンパイルできるようにしてあります。 diff -uNr upd7210_2.1.orig/Makefile upd7210_2.1/Makefile --- upd7210_2.1.orig/Makefile 1970-01-01 09:00:00.000000000 +0900 +++ upd7210_2.1/Makefile 2008-10-27 23:32:37.000000000 +0900 @@ -0,0 +1,7 @@ +KMOD= gpib +SRCS= upd7210.c device_if.h bus_if.h +MFILES= kern/bus_if.m kern/device_if.m +SRCS+= upd7210_pci.c pci_if.h +MFILES+= dev/pci/pci_if.m +CFLAGS+= -DGPIB_DEBUG -DGPIB_CONTEC_PC +.include <bsd.kmod.mk> diff -uNr upd7210_2.1.orig/upd7210.c upd7210_2.1/upd7210.c --- upd7210_2.1.orig/upd7210.c 2003-11-03 21:40:48.000000000 +0900 +++ upd7210_2.1/upd7210.c 2008-10-27 22:14:58.000000000 +0900 @@ -29,8 +29,8 @@ /***** Local headers ********************************************************/ -#include <dev/upd7210/upd7210.h> -#include <dev/upd7210/upd7210_var.h> +#include <upd7210.h> +#include <upd7210_var.h> /***** Depend on expansion board ********************************************/ @@ -70,20 +70,13 @@ static struct cdevsw gpib_cdevsw = { - gpib_open, /* open */ - gpib_close, /* close */ - gpib_read, /* read */ - gpib_write, /* write */ - gpib_ioctl, /* ioctl */ - nopoll, - nommap, - nostrategy, - DRIVER_NAME, /* pointer of driver name */ - CDEV_MAJOR, - nodump, - nopsize, - 0, /* flags */ - -1, /* bmaj */ + .d_name = "gpib", + .d_version = D_VERSION, + .d_open = gpib_open, /* open */ + .d_close = gpib_close, /* close */ + .d_read = gpib_read, /* read */ + .d_write = gpib_write, /* write */ + .d_ioctl = gpib_ioctl, /* ioctl */ }; @@ -130,7 +123,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_open( dev_t dev, int flag, int mode, struct proc *p ) +static int gpib_open( struct cdev *dev, int flag, int mode, struct thread *p ) { int unit, gpibadrs; @@ -156,7 +149,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_close( dev_t dev, int flag, int mode, struct proc *p ) +static int gpib_close( struct cdev *dev, int flag, int mode, struct thread *p ) { int unit, gpibadrs; @@ -183,7 +176,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_read( dev_t dev, struct uio *uio, int flag ) +static int gpib_read( struct cdev *dev, struct uio *uio, int flag ) { GPIB_SOFTC *psc; int unit, gpibadrs; @@ -250,7 +243,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_write( dev_t dev, struct uio *uio, int flag ) +static int gpib_write( struct cdev *dev, struct uio *uio, int flag ) { GPIB_SOFTC *psc; int unit, gpibadrs; @@ -310,7 +303,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_ioctl( dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p ) +static int gpib_ioctl( struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *p ) { GPIB_PACKET *ppkt; GPIB_SOFTC *psc; @@ -373,7 +366,7 @@ case GPIB_TALK: ppkt->errno = gpib_talk( psc, ppkt ); break; case GPIB_LISTEN: ppkt->errno = gpib_listen( psc, ppkt ); break; case GPIB_SP: ppkt->errno = gpib_sp( psc, ppkt ); break; - case GPIB_REQ: + case GPIB_REQ: break; } psc->inuse = 0; diff -uNr upd7210_2.1.orig/upd7210_pci.c upd7210_2.1/upd7210_pci.c --- upd7210_2.1.orig/upd7210_pci.c 2003-11-03 21:40:49.000000000 +0900 +++ upd7210_2.1/upd7210_pci.c 2008-10-27 23:15:29.000000000 +0900 @@ -19,13 +19,13 @@ #include <machine/bus.h> #include <machine/resource.h> #include <sys/rman.h> -#include <pci/pcireg.h> -#include <pci/pcivar.h> +#include <dev/pci/pcireg.h> +#include <dev/pci/pcivar.h> /***** Local headers ********************************************************/ -#include <dev/upd7210/upd7210.h> -#include <dev/upd7210/upd7210_var.h> +#include <upd7210.h> +#include <upd7210_var.h> /***** Constat values *******************************************************/ @@ -69,7 +69,7 @@ device_printf( dev, "==GPIB:PCI== probe()\n" ); { u_long start, count; - bus_get_resource( dev, SYS_RES_IOPORT, PCIR_MAPS, &start, &count ); + bus_get_resource( dev, SYS_RES_IOPORT, PCIR_BARS, &start, &count ); device_printf( dev, "IOPORT=0x%lx-%lx, IRQ=%d\n", start, start+count, (int)bus_get_resource_start( dev, SYS_RES_IRQ, 0 ) ); } @@ -105,7 +105,7 @@ * allocate resource. (i/o port, irq) */ psc = device_get_softc( dev ); - psc->rid = PCIR_MAPS; + psc->rid = PCIR_BARS; psc->res = bus_alloc_resource( dev, SYS_RES_IOPORT, &psc->rid, 0, ~0, USED_IO_SPACE, RF_ACTIVE ); if( psc->res == NULL ) return ENXIO; @@ -117,7 +117,7 @@ psc->irq = bus_alloc_resource( dev, SYS_RES_IRQ, &psc->irqid, 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE ); if( psc->irq == NULL ) return ENXIO; - bus_setup_intr( dev, psc->irq, INTR_TYPE_MISC, gpib_interrupt, psc, &psc->irqhandle ); + bus_setup_intr( dev, psc->irq, INTR_TYPE_MISC, NULL, gpib_interrupt, psc, &psc->irqhandle ); gpib_attach_common( psc ); #ifdef GPIB_DEBUG diff -uNr upd7210_2.1.orig/upd7210_var.h upd7210_2.1/upd7210_var.h --- upd7210_2.1.orig/upd7210_var.h 2003-11-17 23:11:02.000000000 +0900 +++ upd7210_2.1/upd7210_var.h 2008-10-25 04:48:15.000000000 +0900 @@ -25,7 +25,7 @@ /***** System headers *******************************************************/ /***** Local headers ********************************************************/ -#include "gpib.h" +//#include "gpib.h" /***** Depend on expansion board ********************************************/ $ make Warning: Object directory not changed from original /home/fmysh/upd7210_2.1 awk -f @/tools/makeobjops.awk @/kern/device_if.m -h awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h cc -O2 -fno-strict-aliasing -pipe -march=pentium4 -DGPIB_DEBUG -DGPIB_CONTEC_PC -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -ffreestanding -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -c upd7210.c cc -O2 -fno-strict-aliasing -pipe -march=pentium4 -DGPIB_DEBUG -DGPIB_CONTEC_PC -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -ffreestanding -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -c upd7210_pci.c ld -d -warn-common -r -d -o gpib.kld upd7210.o upd7210_pci.o :> export_syms awk -f /sys/conf/kmod_syms.awk gpib.kld export_syms | xargs -J% objcopy % gpib.kld ld -Bshareable -d -warn-common -o gpib.ko gpib.kld objcopy --strip-debug gpib.ko

noname#79743
質問者

お礼

コンパイルはおそらくうまくいきました。ただ、 %kldload gpib.ko を実行しようとしたところ以下のようにエラーがでてしまいました。 kldload: can't load gpib.ko: Operation not permitted 記述の方法になにか問題がありますでしょうか? それとできればなのですが、なぜこのような修正が必要なのかも教えていただければうれしいです。自分でも調べるつもりなので簡単な説明でもいいのでお願いします。 発表のときにネットで聞いてそのままやったらできましたというわけにもいかないので(汗)

  • fmysh
  • ベストアンサー率79% (27/34)
回答No.1

upd7210.c だけ、7.x で警告、エラー無しにコンパイルできるように修正。 実機がないので、検証はできません。 --- upd7210.c.orig 2008-10-25 05:23:38.000000000 +0900 +++ upd7210.c 2008-10-25 05:24:20.000000000 +0900 @@ -29,8 +29,8 @@ /***** Local headers ********************************************************/ -#include <dev/upd7210/upd7210.h> -#include <dev/upd7210/upd7210_var.h> +#include <upd7210.h> +#include <upd7210_var.h> /***** Depend on expansion board ********************************************/ @@ -70,20 +70,13 @@ static struct cdevsw gpib_cdevsw = { - gpib_open, /* open */ - gpib_close, /* close */ - gpib_read, /* read */ - gpib_write, /* write */ - gpib_ioctl, /* ioctl */ - nopoll, - nommap, - nostrategy, - DRIVER_NAME, /* pointer of driver name */ - CDEV_MAJOR, - nodump, - nopsize, - 0, /* flags */ - -1, /* bmaj */ + .d_name = "gpib", + .d_version = D_VERSION, + .d_open = gpib_open, /* open */ + .d_close = gpib_close, /* close */ + .d_read = gpib_read, /* read */ + .d_write = gpib_write, /* write */ + .d_ioctl = gpib_ioctl, /* ioctl */ }; @@ -130,7 +123,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_open( dev_t dev, int flag, int mode, struct proc *p ) +static int gpib_open( struct cdev *dev, int flag, int mode, struct thread *p ) { int unit, gpibadrs; @@ -156,7 +149,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_close( dev_t dev, int flag, int mode, struct proc *p ) +static int gpib_close( struct cdev *dev, int flag, int mode, struct thread *p ) { int unit, gpibadrs; @@ -183,7 +176,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_read( dev_t dev, struct uio *uio, int flag ) +static int gpib_read( struct cdev *dev, struct uio *uio, int flag ) { GPIB_SOFTC *psc; int unit, gpibadrs; @@ -250,7 +243,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_write( dev_t dev, struct uio *uio, int flag ) +static int gpib_write( struct cdev *dev, struct uio *uio, int flag ) { GPIB_SOFTC *psc; int unit, gpibadrs; @@ -310,7 +303,7 @@ * ret: int *-------------------------------------------------------------------------- */ -static int gpib_ioctl( dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p ) +static int gpib_ioctl( struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *p ) { GPIB_PACKET *ppkt; GPIB_SOFTC *psc; @@ -373,7 +366,7 @@ case GPIB_TALK: ppkt->errno = gpib_talk( psc, ppkt ); break; case GPIB_LISTEN: ppkt->errno = gpib_listen( psc, ppkt ); break; case GPIB_SP: ppkt->errno = gpib_sp( psc, ppkt ); break; - case GPIB_REQ: + case GPIB_REQ: break; } psc->inuse = 0;

noname#79743
質問者

お礼

大変ありがとうございます。月曜にでも試してみます。

noname#79743
質問者

補足

../../../dev/upd7210/upd7210.c: Infunction 'upd7210_initialize': ../../../dev/upd7210/upd7210.c:64: error: storage class specified for parameter 'gpib_open' ../../../dev/upd7210/upd7210.c:65: error: storage class specified for parameter 'gpib_close' ../../../dev/upd7210/upd7210.c:66: error: storage class specified for parameter 'gpib_read' ../../../dev/upd7210/upd7210.c:67: error: storage class specified for parameter 'gpib_write' ../../../dev/upd7210/upd7210.c:68: error: storage class specified for parameter 'gpib_ioctl' ../../../dev/upd7210/upd7210.c:70: error: storage class specified for parameter 'gpib_cdevsw' ../../../dev/upd7210/upd7210.c:70: error: parameter 'gpib_cdevsw' is initialized ../../../dev/upd7210/upd7210.c:96: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:126: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:151: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:178: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:245: error: expected '=', ',', ';', 'asm' or '__attribute__' ../../../dev/upd7210/upd7210.c:305: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:388: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:504: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:532: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:563: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:588: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:606: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:624: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:647: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:669: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:701: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:721: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:751: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:799: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:846: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:907: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:936: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:964: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:1007: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:1047: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token ../../../dev/upd7210/upd7210.c:1074: error: old-style parameter declarations in prototyped function definition ../../../dev/upd7210/upd7210.c:1074: error: expected '{' at end of input *** Error code 1