ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
ディバイスドライバをハックしよう!
■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
02/01/31 01:14ID:t3s191ys03/03/06 22:23ID:33Ph63nv
03/03/06 23:24ID:gj2ir03d
151148
03/03/07 00:48ID:2S2Wvrkx struct file_operations つくって register_chrdrv()するだろ。
そのやりかたが変わるとか聞いたんだが。
そのやりかたが変わるとか聞いたんだが。
03/03/07 04:37ID:2ohbwA9F
>>151
(゚∀゚)んなこたーない
(゚∀゚)んなこたーない
03/03/08 00:05ID:l6jbsomd
2.5のソース読んでからまた来い
03/03/08 00:53ID:dd9ui0La
156login:Penguin
03/03/17 00:55ID:POpqK4+0 デバイスドライバを書いてる人って 日本に何人いるんだろう
hello.o くらいだったら1万人くらいいるのかな?
hello.o くらいだったら1万人くらいいるのかな?
157login:Penguin
03/03/21 01:19ID:4f4NMJji 3000人くらい
158LINUX初心者
03/03/22 00:33ID:c2EgVY2O ご質問があります。
IDEのDVD-ROMから、暗号無しのDVDデータを取り出すソフトが必要になり
まして、MT.FUJIの仕様書とcdrom.cを読んでいます。どうやら、DVDの
情報はIOCTLを通して取り出せるみたいなのですが、データ(2Kバイト)の
データの取り出しは、IOCTL経由では出来ないように見えます。その割には
CD-ROMのモード1と2、CDオーディオのデータはIOCTLで読み出せます。
フリーのソフトを見るとpf_readで実行しているようですが、どうやれば
良いのでしょうか? 出来たらIOCTLを使いたいのですが・・・・
よろしくお願いします。
IDEのDVD-ROMから、暗号無しのDVDデータを取り出すソフトが必要になり
まして、MT.FUJIの仕様書とcdrom.cを読んでいます。どうやら、DVDの
情報はIOCTLを通して取り出せるみたいなのですが、データ(2Kバイト)の
データの取り出しは、IOCTL経由では出来ないように見えます。その割には
CD-ROMのモード1と2、CDオーディオのデータはIOCTLで読み出せます。
フリーのソフトを見るとpf_readで実行しているようですが、どうやれば
良いのでしょうか? 出来たらIOCTLを使いたいのですが・・・・
よろしくお願いします。
159名無しさん@Emacs
03/03/22 11:15ID:j2wJcuTQ >158
http://www.linuxvideo.org/docs/Linux-DVD-HOWTO/ja/DVD-Playing-HOWTO-Nihongo.html
ここを読んだだけだけど、、、
DVDでioctlを使うには、カーネルで、それようの設定をして
コンパイルが必要みたい?
http://www.linuxvideo.org/docs/Linux-DVD-HOWTO/ja/DVD-Playing-HOWTO-Nihongo.html
ここを読んだだけだけど、、、
DVDでioctlを使うには、カーネルで、それようの設定をして
コンパイルが必要みたい?
160login:Penguin
03/04/13 20:50ID:Z3+MYXr2 USBドライバの開発の参考って何かないですか?
161あぼーん
03/04/13 20:51ID:fhD9Fsc5 ______________
/:\.____\
|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
ttp://saitama.gasuki.com/wara/
/:\.____\
|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
ttp://saitama.gasuki.com/wara/
162login:Penguin
03/04/13 22:03ID:Z3+MYXr2 kill -9 161
03/04/13 22:08ID:ecu8jjet
164login:Penguin
03/04/13 22:16ID:Z3+MYXr2 >>163
ありがとうございます。
ところで、カーネルに組み込まれているデバイスドライバのソースをモジュール化するのに定番の手法とかって
ないでしょうか?
カーネルがROM化されているので、モジュールにする必要があるもので。
ありがとうございます。
ところで、カーネルに組み込まれているデバイスドライバのソースをモジュール化するのに定番の手法とかって
ないでしょうか?
カーネルがROM化されているので、モジュールにする必要があるもので。
03/04/13 22:25ID:ecu8jjet
>>164
手法って、なにも特別なことはないとおもうんだけど...
make modules 以外でコンパイルするっていみ? それなら -DMODULE がみそ。
カーネル関連のソース内部でも、ドライバでも、これを ifdef とかで見る。
それともmodule対応じゃないドライバを対応に書き直す方法? こっちなら、
適当な初期化/後かたづけ処理を module_init()とmodule_exit()で登録すればいい。
手法って、なにも特別なことはないとおもうんだけど...
make modules 以外でコンパイルするっていみ? それなら -DMODULE がみそ。
カーネル関連のソース内部でも、ドライバでも、これを ifdef とかで見る。
それともmodule対応じゃないドライバを対応に書き直す方法? こっちなら、
適当な初期化/後かたづけ処理を module_init()とmodule_exit()で登録すればいい。
166login:Penguin
03/04/13 22:33ID:Z3+MYXr2 >>165
>module対応じゃないドライバを対応に書き直す方法
こちらの方です。ありがとうございます。意外と簡単なんですね。
早速、明日試してみます。
デスクトップで動いているドライバを組み込みLinuxに移植しようとしてるんですが、
ドライバを作るのははじめてなので、馬本で勉強してます。まだ2章目ですが
>module対応じゃないドライバを対応に書き直す方法
こちらの方です。ありがとうございます。意外と簡単なんですね。
早速、明日試してみます。
デスクトップで動いているドライバを組み込みLinuxに移植しようとしてるんですが、
ドライバを作るのははじめてなので、馬本で勉強してます。まだ2章目ですが
167開発メモ
03/04/14 14:29ID:Y6l/xCVk Warning: loading module.o will taint the kernel: no license
がでたときは、
#include <linux/module.h>
MODULE_LICENSE("GPL");
printk の出力はdmesgで見ることができる。
がでたときは、
#include <linux/module.h>
MODULE_LICENSE("GPL");
printk の出力はdmesgで見ることができる。
03/04/14 22:12ID:ktmIntrh
>>160
こんなんが参考になるかも・・・
http://www-online.kek.jp/~yasu/Kenshu/usb-driver.html
>>167
> printk の出力はdmesgで見ることができる。
cat /proc/kmsg
としても見れます。
カーネルバッファにメッセージが追加される度にコンソールに表示されます。
でも表示内容の文頭に <4> というようなログレベルが付いてまうけど・・・
こんなんが参考になるかも・・・
http://www-online.kek.jp/~yasu/Kenshu/usb-driver.html
>>167
> printk の出力はdmesgで見ることができる。
cat /proc/kmsg
としても見れます。
カーネルバッファにメッセージが追加される度にコンソールに表示されます。
でも表示内容の文頭に <4> というようなログレベルが付いてまうけど・・・
03/04/16 10:03ID:Rj9RiWI4
#define MODULE
#include <linux/module.h>
int init_module(void){ printk("<1>こんにちは\n"); return 0;}
void cleanup_module(void){ printk("さやうなら\n");}
を gcc -c hello.c でコンパイル
insmod ./hello.o で組みこもうとすると
./hello.o: Note: modules without a GPL compatible license cannot use GPLONLY_ symbols
というメッセージがでます。
カーネルのバージョン管理だと小間生のですが、カーネルの再構築をせずにすり抜ける
ことは不可能でしょうか?
#include <linux/module.h>
int init_module(void){ printk("<1>こんにちは\n"); return 0;}
void cleanup_module(void){ printk("さやうなら\n");}
を gcc -c hello.c でコンパイル
insmod ./hello.o で組みこもうとすると
./hello.o: Note: modules without a GPL compatible license cannot use GPLONLY_ symbols
というメッセージがでます。
カーネルのバージョン管理だと小間生のですが、カーネルの再構築をせずにすり抜ける
ことは不可能でしょうか?
170山崎渉
03/04/17 11:54ID:KRn99/cy (^^)
03/04/18 01:19ID:HcWYqirI
172山崎渉
03/04/20 06:14ID:xFRXxEWb ∧_∧
( ^^ )< ぬるぽ(^^)
( ^^ )< ぬるぽ(^^)
173login:Penguin
03/04/21 11:26ID:dxqbEfvS insmod test.o をするとこんなエラーがでます。
どんなライブラリをリンクすればいいのでしょうか?
./test.o: unresolved symbol remap_page_range
./test.o: unresolved symbol __wake_up
./test.o: unresolved symbol schedule
./test.o: unresolved symbol kmalloc
./test.o: unresolved symbol vfree
./test.o: unresolved symbol usb_deregister
./test.o: unresolved symbol video_register_device
./test.o: unresolved symbol remove_wait_queue
./test.o: unresolved symbol video_unregister_device
./test.o: unresolved symbol usb_free_urb
./test.o: unresolved symbol usb_alloc_urb
./test.o: unresolved symbol usb_register
./test.o: unresolved symbol __pollwait
./test.o: unresolved symbol kfree
./test.o: unresolved symbol usb_string
./test.o: unresolved symbol add_wait_queue
./test.o: unresolved symbol usb_submit_urb
./test.o: unresolved symbol usb_control_msg
./test.o: unresolved symbol __vmalloc
./test.o: unresolved symbol printk
./test.o: unresolved symbol usb_set_interface
./test.o: unresolved symbol vmalloc_to_page
./test.o: unresolved symbol __generic_copy_to_user
./test.o: unresolved symbol usb_unlink_urb
どんなライブラリをリンクすればいいのでしょうか?
./test.o: unresolved symbol remap_page_range
./test.o: unresolved symbol __wake_up
./test.o: unresolved symbol schedule
./test.o: unresolved symbol kmalloc
./test.o: unresolved symbol vfree
./test.o: unresolved symbol usb_deregister
./test.o: unresolved symbol video_register_device
./test.o: unresolved symbol remove_wait_queue
./test.o: unresolved symbol video_unregister_device
./test.o: unresolved symbol usb_free_urb
./test.o: unresolved symbol usb_alloc_urb
./test.o: unresolved symbol usb_register
./test.o: unresolved symbol __pollwait
./test.o: unresolved symbol kfree
./test.o: unresolved symbol usb_string
./test.o: unresolved symbol add_wait_queue
./test.o: unresolved symbol usb_submit_urb
./test.o: unresolved symbol usb_control_msg
./test.o: unresolved symbol __vmalloc
./test.o: unresolved symbol printk
./test.o: unresolved symbol usb_set_interface
./test.o: unresolved symbol vmalloc_to_page
./test.o: unresolved symbol __generic_copy_to_user
./test.o: unresolved symbol usb_unlink_urb
03/04/21 11:35ID:TzNUZhnB
03/04/21 11:37ID:65INoG+s
03/04/21 12:03ID:UyUiMYQq
177173
03/04/21 12:48ID:dxqbEfvS カーネルは、2.4.20 です。
ソースはこれです。usbカメラのドライバです。
http://www.smcc.demon.nl/webcam/pwc-8.10.tar.gz
このソースの *.c を
INCLUDEDIR = /usr/src/linux/include/
CFLAGS = -O2 -DMODULE -D__KERNEL__ -static -Wall -Wstrict-prototypes -DMODVERSIONS -I$(INCLUDEDIR) -DEXPORT_SYMTAB
でコンパイルしてできた、*.o を、
ld -o test.o -r ./*.o でリンク。insmod test.o で、173のメッセージがでます。
ROM化されたカーネルに、モジュールをいれてusbカメラを使えるようにしようと思ったのですが・・・
ちなみに、同じソースをカーネルに組みこめば動作するのは確認しました。
ソースはこれです。usbカメラのドライバです。
http://www.smcc.demon.nl/webcam/pwc-8.10.tar.gz
このソースの *.c を
INCLUDEDIR = /usr/src/linux/include/
CFLAGS = -O2 -DMODULE -D__KERNEL__ -static -Wall -Wstrict-prototypes -DMODVERSIONS -I$(INCLUDEDIR) -DEXPORT_SYMTAB
でコンパイルしてできた、*.o を、
ld -o test.o -r ./*.o でリンク。insmod test.o で、173のメッセージがでます。
ROM化されたカーネルに、モジュールをいれてusbカメラを使えるようにしようと思ったのですが・・・
ちなみに、同じソースをカーネルに組みこめば動作するのは確認しました。
03/04/21 19:06ID:UyUiMYQq
179うまうま
03/04/22 01:26ID:0SpJ1zOH >>177
お馬さん本2巻目の
「11.3.1 モジュールでバージョンサポートを使う」
「11.3.2 バージョン付きシンボルのエクスポート」
あたりをみたらどうよ? サンプルコードもあったよ
健闘を祈る!
お馬さん本2巻目の
「11.3.1 モジュールでバージョンサポートを使う」
「11.3.2 バージョン付きシンボルのエクスポート」
あたりをみたらどうよ? サンプルコードもあったよ
健闘を祈る!
180177
03/04/23 19:22ID:TY1i8cop みなさん、ありがとうございます。
--static を外したら、うまく出来ました。
>>178
組込みのLinuxなんですが、開発元がソースをよこしてくれないので不明です。
GPL的にいいのだろうか・・・
--static を外したら、うまく出来ました。
>>178
組込みのLinuxなんですが、開発元がソースをよこしてくれないので不明です。
GPL的にいいのだろうか・・・
181login:Penguin
03/04/23 21:19ID:DUkd9IIg linkあげ
・カーネル2.6のドライバ・モデル
ttp://japan.linux.com/kernel/03/04/14/0833230.shtml
・カーネル2.6のドライバ・モデル
ttp://japan.linux.com/kernel/03/04/14/0833230.shtml
182login:Penguin
03/04/24 12:36ID:LW5TaSjX Linux で USB制御とかを学ぶのに便利な電子工作キットのおすすめってありません?
できるだけ安いの。
できるだけ安いの。
183うまうま
03/04/25 12:03ID:HCQr+NWK184bloom
03/04/25 12:26ID:1KQi+Ees185login:Penguin
03/05/02 11:48ID:LZsBxbHZ USB デバイスを/dev 以下のデバイスノードに割りあてるにはどうすればいいのでしょうか?
馬本を見ながら、
devfs = devfs_mk_dir(NULL, "matsu", NULL);
if(!devfs)
return -EBUSY;
devfs_register(devfs, "nt401", DEVFS_FL_AUTO_DEVNUM, 0, 0,
S_IFCHR | S_IRUGO | S_IWUGO,
&scull_fops,
sampleDevice
);
とやっているのですが、indmod すると
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters
IOやIRQはどこからとってくればいいのでしょうか?
馬本を見ながら、
devfs = devfs_mk_dir(NULL, "matsu", NULL);
if(!devfs)
return -EBUSY;
devfs_register(devfs, "nt401", DEVFS_FL_AUTO_DEVNUM, 0, 0,
S_IFCHR | S_IRUGO | S_IWUGO,
&scull_fops,
sampleDevice
);
とやっているのですが、indmod すると
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters
IOやIRQはどこからとってくればいいのでしょうか?
03/05/02 12:21ID:5kcklCyp
03/05/02 13:17ID:8SKdq5Sf
03/05/02 14:02ID:fxkN+fN8
>>185
それは、init_moduleがretun 0;以外で終了した場合のメッセージですよ。
普通、デバイスが見付からないときは -ENODEVとかでかえすでしょ?
返り値を確認汁。
ISAのデバイスでは、IOとかIRQの設定が違うと見付からないことが多いので、
insmodが、ヒントのために、IOとかIRQはどうよ? って書くことになってるだけ。
それは、init_moduleがretun 0;以外で終了した場合のメッセージですよ。
普通、デバイスが見付からないときは -ENODEVとかでかえすでしょ?
返り値を確認汁。
ISAのデバイスでは、IOとかIRQの設定が違うと見付からないことが多いので、
insmodが、ヒントのために、IOとかIRQはどうよ? って書くことになってるだけ。
189185
03/05/02 14:12ID:LZsBxbHZ03/05/02 14:25ID:fxkN+fN8
あぁ、すまん。よく読まずに答えた。USBなのね。
USBの場合は、usb_driver.probe() が NULL で帰った時がそのエラーですね。
で、probeのところでdevfs関係やるので正解です。
USBの場合は、usb_driver.probe() が NULL で帰った時がそのエラーですね。
で、probeのところでdevfs関係やるので正解です。
191login:Penguin
03/05/02 15:56ID:gUkzFRNW モニタのドライバディスクっていうのはあるんでしょうか?
当方モニタを認識できないのですが・・・。
当方モニタを認識できないのですが・・・。
03/05/02 17:25ID:MBGKHtnA
>>191
周波数や解像度を設定すれば済むだろ。
周波数や解像度を設定すれば済むだろ。
193185
03/05/02 18:18ID:LZsBxbHZ03/05/02 18:33ID:ntJpWIhT
>>193
カーネルがまずい
カーネルがまずい
195185
03/05/02 19:13ID:LZsBxbHZ >>194
了解っす。さっそく、カーネルを再コンパイルします。
了解っす。さっそく、カーネルを再コンパイルします。
196ドライバ初心者
03/05/07 14:44ID:8SxzL6UK ううう、USB器機との通信方法がよくわからん。
0x07 を送ると 0x1f を返すというUSB器機との通信でどうやるの?
キャラクタデバイス作って、それをread, write するでいいの?
0x07 を送ると 0x1f を返すというUSB器機との通信でどうやるの?
キャラクタデバイス作って、それをread, write するでいいの?
197bloom
03/05/07 15:13ID:dAUH81mE03/05/07 18:18ID:xHs+a1Ja
>>196
??? どのレベルでわからないんだろう。ユーザアプリから機器を操作するのは、
すべからくデバイスドライバを通してopen/close/read/write/ioctl 等です。
でも、0x07 を送ると 0x1fを返すとうUSB機器なら、デバドラいらないじゃん。っ
ていうか、機器もいらないじゃん。「0x07を送ると0x1fを返す」ダミーの関数
かませればいいじゃん。たぶん、その質問はなにか省略しすぎで返事がしにくい。
??? どのレベルでわからないんだろう。ユーザアプリから機器を操作するのは、
すべからくデバイスドライバを通してopen/close/read/write/ioctl 等です。
でも、0x07 を送ると 0x1fを返すとうUSB機器なら、デバドラいらないじゃん。っ
ていうか、機器もいらないじゃん。「0x07を送ると0x1fを返す」ダミーの関数
かませればいいじゃん。たぶん、その質問はなにか省略しすぎで返事がしにくい。
199ドライバ初心者
03/05/07 23:02ID:Sh0BeBWS >>198
分かりにくくてすいません。
USB機器に、データ確認コマンド(0x07のバイト列)を送る。
USB機器にデータがあるなら、(0x01)が返ってくる。
(0x01)が返ってきたのを確認したら、データ取得コマンド(0x0a)を送る。
USB機器からデータ(20バイト)が返ってくる。
上記の仕様で、USB機器にバイト列を送ったり、USB機器が返すバイト列を受け取るにはどうすればいいのかが分からないのです。
urb構造体を使うのでしょうか?
分かりにくくてすいません。
USB機器に、データ確認コマンド(0x07のバイト列)を送る。
USB機器にデータがあるなら、(0x01)が返ってくる。
(0x01)が返ってきたのを確認したら、データ取得コマンド(0x0a)を送る。
USB機器からデータ(20バイト)が返ってくる。
上記の仕様で、USB機器にバイト列を送ったり、USB機器が返すバイト列を受け取るにはどうすればいいのかが分からないのです。
urb構造体を使うのでしょうか?
03/05/07 23:47ID:ppjtoJvG
>>199
USBのドライバは書いた事ないのでアドバイス出来んが、
ttp://www.narimatsu.net/nari_page/musbio.html
にあるドライバが多分近いので、読んで見ると参考になるかも。
USBのドライバは書いた事ないのでアドバイス出来んが、
ttp://www.narimatsu.net/nari_page/musbio.html
にあるドライバが多分近いので、読んで見ると参考になるかも。
03/05/08 02:33ID:XzMiCqqd
>>199
なんか、道が遠いな。がんばれー。
> urb構造体を使うのでしょうか?
まぁ、正解なんだけど。なにしろ最終的には全部usb_submit_urb()だから...
実際には usb_bulk_msg()とか、その類を使うの。
その前に基本設計。ハンドシェイクのようなものがあるのよね。それをどうする?
ドライバを一番簡単にするなら、ドライバは、ただデータの横流しをするだけにして、
ハンドシェイクをアプリにさせたらいい。
アプリが /dev/それ をopenして
アプリが 0x07をwriteして
アプリが readでまって、0x01がかえったら
アプリが 0x0aをwriteして
アプリが readする
これが一番簡単だろ。ドライバのデバッグより、アプリのデバッグのほうが簡
単だから、ドライバを簡単にするのは意味がある。
もし、これにするなら、カーネルに標準でついてるdrivers/usb/scanner.c を
参考にしたらいい。はっきりいって、本当に横流ししかしないドライバなので、
参考にして書き直す必要スラなくて、idさえ指定すればスキャナじゃなくても
ナンデモ操作できます。おすすめ。
あ、でもclose/unloadあたりでのリソースの解放順序にバグがあるので、気を
つけてね。
なんか、道が遠いな。がんばれー。
> urb構造体を使うのでしょうか?
まぁ、正解なんだけど。なにしろ最終的には全部usb_submit_urb()だから...
実際には usb_bulk_msg()とか、その類を使うの。
その前に基本設計。ハンドシェイクのようなものがあるのよね。それをどうする?
ドライバを一番簡単にするなら、ドライバは、ただデータの横流しをするだけにして、
ハンドシェイクをアプリにさせたらいい。
アプリが /dev/それ をopenして
アプリが 0x07をwriteして
アプリが readでまって、0x01がかえったら
アプリが 0x0aをwriteして
アプリが readする
これが一番簡単だろ。ドライバのデバッグより、アプリのデバッグのほうが簡
単だから、ドライバを簡単にするのは意味がある。
もし、これにするなら、カーネルに標準でついてるdrivers/usb/scanner.c を
参考にしたらいい。はっきりいって、本当に横流ししかしないドライバなので、
参考にして書き直す必要スラなくて、idさえ指定すればスキャナじゃなくても
ナンデモ操作できます。おすすめ。
あ、でもclose/unloadあたりでのリソースの解放順序にバグがあるので、気を
つけてね。
202ドライバ初心者
03/05/08 18:46ID:01Q6DwzH203ドライバ初心者
03/05/09 19:55ID:ye3nMZo+ open,close,probe,disconnect はうまく動くようになりました。
read の実装に入ったのですが、 usb_bulk_msg で
#define RD_NAK_TIMEOUT (10*HZ)
usb_bulk_msg(dev, usb_rcvbulkpipe(dev, endpoint), buffer, 20, &partial, RD_NAK_TIMEOUT);
usb_rcvbulkpipe へ渡すパラメータの endpoint にはどんな値を渡せばいいのでしょうか?
lsusb で以下のように表示されている 2 とかでいいのでしょうか?
bEndpointAddress 0x02 EP 2 OUT
scanner.c のソースを読むと、1,2,3, のどれかの値が入るようなのですが・・・
read の実装に入ったのですが、 usb_bulk_msg で
#define RD_NAK_TIMEOUT (10*HZ)
usb_bulk_msg(dev, usb_rcvbulkpipe(dev, endpoint), buffer, 20, &partial, RD_NAK_TIMEOUT);
usb_rcvbulkpipe へ渡すパラメータの endpoint にはどんな値を渡せばいいのでしょうか?
lsusb で以下のように表示されている 2 とかでいいのでしょうか?
bEndpointAddress 0x02 EP 2 OUT
scanner.c のソースを読むと、1,2,3, のどれかの値が入るようなのですが・・・
03/05/09 23:43ID:ZjYTJvxM
03/05/10 18:30ID:+67eyGUg
207うまうま
03/05/11 02:10ID:sP9foAmw >>203
ひょっとして未公開プロトコルをハックしてlinux用にドライバ
作ってんの?
lsusbの表示について
デバイスからデータを読むためのエンドポイントは IN になって
いるはずだよ。そのようなエンドポイントがひとつしかないなら
その番号でOKだと思う。
逆に、デバイスへデータを書き込むためのエンドポイントは OUT
そのターゲットデバイスにはエンドポイントが複数あるっぽいけど、
それだったらコマンドやりとり時、どのエンドポイントが使われて
いるのか調べる必要がある。
ひょっとして未公開プロトコルをハックしてlinux用にドライバ
作ってんの?
lsusbの表示について
デバイスからデータを読むためのエンドポイントは IN になって
いるはずだよ。そのようなエンドポイントがひとつしかないなら
その番号でOKだと思う。
逆に、デバイスへデータを書き込むためのエンドポイントは OUT
そのターゲットデバイスにはエンドポイントが複数あるっぽいけど、
それだったらコマンドやりとり時、どのエンドポイントが使われて
いるのか調べる必要がある。
209ドライバ初心者
03/05/12 22:03ID:fBjjjcco >>206
組み込み用のLinuxにUSB機器をつなげてアレコレしようという計画がありまして。
ところが、社内でC言語の経験があるのは私だけ。とりあえず研究開発名目で、USBドライバを
作ってみろと白羽の矢が立ちました。
うまうまさんのアドバイスでwriteができるようになりました。ありがとうございました。
あとはreadだけです。
組み込み用のLinuxにUSB機器をつなげてアレコレしようという計画がありまして。
ところが、社内でC言語の経験があるのは私だけ。とりあえず研究開発名目で、USBドライバを
作ってみろと白羽の矢が立ちました。
うまうまさんのアドバイスでwriteができるようになりました。ありがとうございました。
あとはreadだけです。
210ドライバ初心者
03/05/15 18:21ID:QUGfuS7s read するとタイムアップになってしまう・・・。何が悪いのでしょうか。
キューのクリアとか必要ですか?
キューのクリアとか必要ですか?
03/05/16 16:21ID:yZKduc9i
初歩的な質問ですみませんが、導師のみなさま、お導きを。
write()されたデータを一時的に保持して、次のread()で保持した値を返す
ようなキャラクタデバドラがあるとします。
アクセスする側が単独のプロセスの場合、実装は簡単ですが、複数のプロセスが
上記デバドラにアクセスする場合はセマフォを使っての排他制御が必要となります。
これをアクセス側にセマフォを設けないで、上記デバドラ側で同等の機構を
実現するにはどのように実装すればいいのでしょうか?
write()されたデータを一時的に保持して、次のread()で保持した値を返す
ようなキャラクタデバドラがあるとします。
アクセスする側が単独のプロセスの場合、実装は簡単ですが、複数のプロセスが
上記デバドラにアクセスする場合はセマフォを使っての排他制御が必要となります。
これをアクセス側にセマフォを設けないで、上記デバドラ側で同等の機構を
実現するにはどのように実装すればいいのでしょうか?
03/05/16 16:44ID:0mzALYCZ
214212
03/05/16 19:18ID:0mzALYCZ >>213
スレッドじゃなくても、二つ以上開いたら破綻しますな。
→お手軽コース:1回だけオープンできるようにする。
→まじめに作る:複数キューを持てるようにする。file.private_dataにキューのポインタ入れるのが簡単かな?
というところで。
スレッドじゃなくても、二つ以上開いたら破綻しますな。
→お手軽コース:1回だけオープンできるようにする。
→まじめに作る:複数キューを持てるようにする。file.private_dataにキューのポインタ入れるのが簡単かな?
というところで。
215うまうま
03/05/17 03:23ID:WAKxeCTB216ドライバ初心者
03/05/18 01:04ID:2usiGwhL >>215
>readしたとき、とりあえず何バイトか読み出してる?
その通りです! すっと、返されるはずのバイト数よりも多いバイト数で読み出していました!
今はハードが手元に無いので月曜日に試してみます。ありがとうございました。
>readしたとき、とりあえず何バイトか読み出してる?
その通りです! すっと、返されるはずのバイト数よりも多いバイト数で読み出していました!
今はハードが手元に無いので月曜日に試してみます。ありがとうございました。
217動画直リン
03/05/18 01:11ID:pMLvChGr03/05/18 21:07ID:sDNMC/v5
猿でもわかるように書かれたデバドラ作成解説ページってある?
219ドライバ初心者
03/05/19 19:00ID:r7lftq4x >>215
タイムアウトは無くなりましたが、こんどはusb-uhci.c 内でエラーになってしまいました。
/proc/kmsg の出力は
usb-uhci.c: ENXIO c0010200, flags 0, urb de96cbe0, burb de96cbe0
usb_bulk_msg の使い方がまずいのでしょうか・・・
usb_bulk_msg(scn->dev, usb_rcvbulkpipe(scn->dev, M_READ), ibuf,
count, &partial, RD_NAK_TIMEOUT);
USBデバドラ開発に役立ちそうなページ
usb.c File Reference
http://www.atomised.org/docs/linux-2.4.19-drivers/usb_8c.html
タイムアウトは無くなりましたが、こんどはusb-uhci.c 内でエラーになってしまいました。
/proc/kmsg の出力は
usb-uhci.c: ENXIO c0010200, flags 0, urb de96cbe0, burb de96cbe0
usb_bulk_msg の使い方がまずいのでしょうか・・・
usb_bulk_msg(scn->dev, usb_rcvbulkpipe(scn->dev, M_READ), ibuf,
count, &partial, RD_NAK_TIMEOUT);
USBデバドラ開発に役立ちそうなページ
usb.c File Reference
http://www.atomised.org/docs/linux-2.4.19-drivers/usb_8c.html
03/05/19 19:13ID:Q6lDTR8l
>>218
デバドラの前に、まずはRFC2795から行ってみよう。
デバドラの前に、まずはRFC2795から行ってみよう。
03/05/19 22:53ID:808Vam9H
222ドライバ初心者
03/05/20 18:31ID:oatjLeiG >>219 は私のバグでした。
しかしながら。タイムアウトは解決しないままです。
Windows用のドライバではちゃんと読みこめているようなのですが・・・
lsusb で 下のようにでているのと関係があるのか・・・
unknown descriptor type: 05 24 00 10 01
unknown descriptor type: 04 24 02 06
unknown descriptor type: 05 24 06 00 01
unknown descriptor type: 05 24 01 03 01
しかしながら。タイムアウトは解決しないままです。
Windows用のドライバではちゃんと読みこめているようなのですが・・・
lsusb で 下のようにでているのと関係があるのか・・・
unknown descriptor type: 05 24 00 10 01
unknown descriptor type: 04 24 02 06
unknown descriptor type: 05 24 06 00 01
unknown descriptor type: 05 24 01 03 01
223山崎渉
03/05/22 01:55ID:p4opmoqv ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
224ドライバ初心者
03/05/22 16:32ID:7jvNN9yz >>222
仕様書のコマンドが入れ換わっていた!というわけで自己解決しますた。
http://north.hokkai.net/~nsawa/piece-lab/usb/20011231.html
ここのソースも参考にして完成です。アドバイスをくれたみなさん、あ
りがとうございました。
仕様書のコマンドが入れ換わっていた!というわけで自己解決しますた。
http://north.hokkai.net/~nsawa/piece-lab/usb/20011231.html
ここのソースも参考にして完成です。アドバイスをくれたみなさん、あ
りがとうございました。
225login:Penguin
03/05/27 12:06ID:VgmJadOg あまりにも便利なので上げさせてください
03/05/28 14:11ID:2En7vxAz
insmod するとこんなエラーが出てきたのですがどうすればいいでしょう?
couldn't find the kernel version the module was compiled for
couldn't find the kernel version the module was compiled for
227山崎渉
03/05/28 16:42ID:3t6i6zxR ∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
228login:Penguin
03/05/28 16:55ID:3qAfQe3K03/05/28 23:40ID:z1beycbb
>>226
なにをいれた? 「実はモジュールじゃない」ってときもそれ。
なにをいれた? 「実はモジュールじゃない」ってときもそれ。
230226
03/05/29 18:33ID:FeUqO3hy03/05/29 21:59ID:5gpS9IGq
232226
03/05/30 10:13ID:Mg17snq6 >>231
$file vmlinux
./vmlinux: ELF 32-bit LSB mips-2 executable, MIPS R3000_LE [bfd bug], version 1, statically linked, not stripped
$file test.o
./test.o: ELF 32-bit LSB mips-2 relocatable, MIPS R3000_LE [bfd bug], version 1, not stripped
$file vmlinux
./vmlinux: ELF 32-bit LSB mips-2 executable, MIPS R3000_LE [bfd bug], version 1, statically linked, not stripped
$file test.o
./test.o: ELF 32-bit LSB mips-2 relocatable, MIPS R3000_LE [bfd bug], version 1, not stripped
03/05/31 15:40ID:pCrUKetP
234226
03/06/02 11:33ID:O0kbkjww >>233
cc に渡すパラメータに -DCONFIG_MODVERSIONS を付け加えたら無くなりました。
ところが今度は、insmod するとこんなエラーが・・・
./test.o: unresolved symbol _gp_disp
./test.o: Note: modules without a GPL compatible license cannot use GPLONLY_ symbols
_gp_disp はどこのライブラリにあるのでしょうか?
cc に渡すパラメータに -DCONFIG_MODVERSIONS を付け加えたら無くなりました。
ところが今度は、insmod するとこんなエラーが・・・
./test.o: unresolved symbol _gp_disp
./test.o: Note: modules without a GPL compatible license cannot use GPLONLY_ symbols
_gp_disp はどこのライブラリにあるのでしょうか?
03/06/03 01:50ID:iocW6lsY
236コピペ
03/06/03 13:33ID:9FZ3sCry (゚∀゚) ?
Insmod が _gp_disp シンボルが未定義だと文句を言います
(゚∀゚) !
_gp_disp は MIPS の PIC コード中で使われているマジックシンボルです。
このエラーは、システムをクラッシュから救ってくれたため、むしろ有り難いものです。
この場合の問題の要点は、カーネル作成時の Makefile のオプションと、
カーネルモジュール作成時のオプションは同じにすべきだということです。
特に、オプション -mno-pic -mno-abicalls -G 0 が重要です。
Insmod が _gp_disp シンボルが未定義だと文句を言います
(゚∀゚) !
_gp_disp は MIPS の PIC コード中で使われているマジックシンボルです。
このエラーは、システムをクラッシュから救ってくれたため、むしろ有り難いものです。
この場合の問題の要点は、カーネル作成時の Makefile のオプションと、
カーネルモジュール作成時のオプションは同じにすべきだということです。
特に、オプション -mno-pic -mno-abicalls -G 0 が重要です。
03/06/03 13:34ID:9FZ3sCry
まあなんか知らんけどgoogleって便利ってのはわかった
意味まではわかんないけど
意味まではわかんないけど
03/06/03 14:40ID:iocW6lsY
239()
03/06/03 18:52ID:U5Cecnio Windowsで動いているUSBデバイスドライバを、Linux へ移植しようとしています。デバイスの認識、open, write, close はうまく出来ているようなのですがreadがうまく行きません。 -75 のエラーが usb_bulk_msg() から返って来ます。-EOVERFLOW のエラーのようです。
ところが、一度、Windowsに認識させてから、そのデバイスをLinux につなぎ直してreadするとうまく行きます。
何らかの初期化をしているようなのですが、Linux ではどのようにすればいいのでしょうか? sniffer Tool の出力には
0000027510:31:13>>>>>>> URB 4 going down...
0000027610:31:13-- URB_FUNCTION_CLASS_INTERFACE:
0000027710:31:13 TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT, ~USBD_SHORT_TRANSFER_OK)
0000027810:31:13 TransferBufferLength = 00000008
0000027910:31:13 TransferBuffer = 81406fd0
0000028010:31:13 TransferBufferMDL = 00000000
0000028110:31:13
0000028210:31:13 0000:
0000028310:31:13 80
0000028410:31:13 25
0000028510:31:13 00
0000028610:31:13 00
0000028710:31:13 00
0000028810:31:13 02
0000028910:31:13 08
0000029010:31:13 00
0000029110:31:13
0000029210:31:13 UrbLink = 00000000
0000029310:31:13 RequestTypeReservedBits = 00
0000029410:31:13 Request = 20
0000029510:31:13 Value = 0000
0000029610:31:13 Index = 0000
とでていたので、usb_ctrl_msg()を使うのかと思ったのですが。
#define EPIPE32/* Broken pipe */
のエラーを返してしまいます。どうやればいいのでしょうか?
ちなみにチップは、日立の38K0です。
ところが、一度、Windowsに認識させてから、そのデバイスをLinux につなぎ直してreadするとうまく行きます。
何らかの初期化をしているようなのですが、Linux ではどのようにすればいいのでしょうか? sniffer Tool の出力には
0000027510:31:13>>>>>>> URB 4 going down...
0000027610:31:13-- URB_FUNCTION_CLASS_INTERFACE:
0000027710:31:13 TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT, ~USBD_SHORT_TRANSFER_OK)
0000027810:31:13 TransferBufferLength = 00000008
0000027910:31:13 TransferBuffer = 81406fd0
0000028010:31:13 TransferBufferMDL = 00000000
0000028110:31:13
0000028210:31:13 0000:
0000028310:31:13 80
0000028410:31:13 25
0000028510:31:13 00
0000028610:31:13 00
0000028710:31:13 00
0000028810:31:13 02
0000028910:31:13 08
0000029010:31:13 00
0000029110:31:13
0000029210:31:13 UrbLink = 00000000
0000029310:31:13 RequestTypeReservedBits = 00
0000029410:31:13 Request = 20
0000029510:31:13 Value = 0000
0000029610:31:13 Index = 0000
とでていたので、usb_ctrl_msg()を使うのかと思ったのですが。
#define EPIPE32/* Broken pipe */
のエラーを返してしまいます。どうやればいいのでしょうか?
ちなみにチップは、日立の38K0です。
240login:Penguin
03/06/04 10:07ID:RzUG7kJc デバドラ開発超初心者です。
誰か教えてちょーだい!!
カーネルモジュールでぬるぽ等による例外が起きてoopsが出た後って
リブートしなくちゃいけないの?
rmmodするとリソースbusyと言われて出来ないし。
簡単にやり直せる方法はないのでしょうか?
kdbとかを使うと出来るのでしょうか?
小さなドライバなので出来ればprintkだけでデバッグ
済ませてしまいたいです。
誰か教えてちょーだい!!
カーネルモジュールでぬるぽ等による例外が起きてoopsが出た後って
リブートしなくちゃいけないの?
rmmodするとリソースbusyと言われて出来ないし。
簡単にやり直せる方法はないのでしょうか?
kdbとかを使うと出来るのでしょうか?
小さなドライバなので出来ればprintkだけでデバッグ
済ませてしまいたいです。
03/06/04 15:22ID:miGkoc0u
03/06/04 15:58ID:YRPx8Qpb
243240
03/06/04 18:14ID:RzUG7kJc244うまうま
03/06/04 23:56ID:yoK8ZXbv >>239
ドライバの移植?なかなかおもしろそうだね
read, writeのコマンドシーケンスは合ってる?
ひょっとして、readする前にデバイスに対し的確なコマンドを
writeしてあげないといけないのでは?
そのsnifferログは、OSから8バイトのデータをデバイスに送っている
点や、URB番号が若い点からして、USBデバイスからディスクリプタを
読み出そうとしているところと見た。それはWindowsでもLinuxでもデバイスを
繋いだらUSBホスト側が自動的に行う部分。いわゆる初期化処理。
今回のreadできない問題に関係あるとは思えないな。
ドライバの移植?なかなかおもしろそうだね
read, writeのコマンドシーケンスは合ってる?
ひょっとして、readする前にデバイスに対し的確なコマンドを
writeしてあげないといけないのでは?
そのsnifferログは、OSから8バイトのデータをデバイスに送っている
点や、URB番号が若い点からして、USBデバイスからディスクリプタを
読み出そうとしているところと見た。それはWindowsでもLinuxでもデバイスを
繋いだらUSBホスト側が自動的に行う部分。いわゆる初期化処理。
今回のreadできない問題に関係あるとは思えないな。
245239
03/06/09 11:05ID:FPzn7DZy >>244
write シーケンスの前にあるこの処理が妖しいとは思うのですが、Linux でどうやって実現したらいいのか・・・
0000037010:31:29>>>>>>> URB 7 going down...
0000037110:31:29-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
0000037210:31:29 PipeHandle = 814d7b1c
0000037310:31:29 TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
0000037410:31:29 TransferBufferLength = 00001000
0000037510:31:29 TransferBuffer = 8140c000
0000037610:31:29 TransferBufferMDL = 00000000
0000037710:31:29 UrbLink = 00000000
0000037810:31:29B133TN: m_Endpoint1IN.SubmitUrb status ==>
0000037910:31:290x00000103
0000038010:31:29
0000038110:31:29B133TN: B133TNDevice::Create Status
0000038210:31:290x00000000
0000038310:31:29
0000038410:31:29B133TN: Entering B133TNDevice::Device Control,
0000038510:31:29IRP: Major=0xe
0000038610:31:29 Minor=0x0 Flags=0x30
0000038710:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000038810:31:29B133TN:
0000038910:31:29B133TN: Entering B133TNDevice::IOCTL_B133TN_COMMAND_OUT_Handler,
0000039010:31:29IRP: Major=0xe
0000039110:31:29 Minor=0x0 Flags=0x30
0000039210:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000039310:31:29B133TN:
0000039410:31:29B133TN: FIFO ReservedDataSize=>
0000039510:31:290x00000000
0000039610:31:29
0000039710:31:29UsbSnoop - IRP_MJ_INTERNAL_DEVICE_CONTROL, IOCTL_INTERNAL_USB_SUBMIT_URB
0000039810:31:29
write シーケンスの前にあるこの処理が妖しいとは思うのですが、Linux でどうやって実現したらいいのか・・・
0000037010:31:29>>>>>>> URB 7 going down...
0000037110:31:29-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
0000037210:31:29 PipeHandle = 814d7b1c
0000037310:31:29 TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
0000037410:31:29 TransferBufferLength = 00001000
0000037510:31:29 TransferBuffer = 8140c000
0000037610:31:29 TransferBufferMDL = 00000000
0000037710:31:29 UrbLink = 00000000
0000037810:31:29B133TN: m_Endpoint1IN.SubmitUrb status ==>
0000037910:31:290x00000103
0000038010:31:29
0000038110:31:29B133TN: B133TNDevice::Create Status
0000038210:31:290x00000000
0000038310:31:29
0000038410:31:29B133TN: Entering B133TNDevice::Device Control,
0000038510:31:29IRP: Major=0xe
0000038610:31:29 Minor=0x0 Flags=0x30
0000038710:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000038810:31:29B133TN:
0000038910:31:29B133TN: Entering B133TNDevice::IOCTL_B133TN_COMMAND_OUT_Handler,
0000039010:31:29IRP: Major=0xe
0000039110:31:29 Minor=0x0 Flags=0x30
0000039210:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000039310:31:29B133TN:
0000039410:31:29B133TN: FIFO ReservedDataSize=>
0000039510:31:290x00000000
0000039610:31:29
0000039710:31:29UsbSnoop - IRP_MJ_INTERNAL_DEVICE_CONTROL, IOCTL_INTERNAL_USB_SUBMIT_URB
0000039810:31:29
246239
03/06/10 11:06ID:3w0EVlGb ttp://www.xlsoft.com/jp/products/windriver/windriver.html
ここにある、winDrive の体験版でハードを調査したところ、インターフェースが活性化されていないのが原因のようです。
usb_set_interface() を使えばいいのだろうけど、パラメータがよくわからない。
ここにある、winDrive の体験版でハードを調査したところ、インターフェースが活性化されていないのが原因のようです。
usb_set_interface() を使えばいいのだろうけど、パラメータがよくわからない。
03/06/13 16:03ID:pewsS0ej
cat /proc/bus/usb/devices で表示されるインターフェースの中から
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=piece
E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl= 16ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
のデバイスを活性化するにはどうすればいいのでしょうか?
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=piece
E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl= 16ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
のデバイスを活性化するにはどうすればいいのでしょうか?
248247
03/06/13 18:44ID:pewsS0ej ここを読んだら自己解決しますた。
USB通信プログラミングテクニック
ttp://www.picfun.com/usb00.html
USB通信プログラミングテクニック
ttp://www.picfun.com/usb00.html
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】 高市首相 「円の過小評価は問題だ」 ★2 [お断り★]
- 第2次大戦に触れトランプ氏「米中は同盟国」、当時は中華民国…「抗日」巡る中国の言説補強する恐れ ★3ーう0 [蚤の市★]
- 【東京】ウズベキスタン国籍のフードデリバリー配達員を逮捕 配達先の女子小学生にキスや体を触るなどわいせつ行為か [煮卵★]
- 69歳男性、29歳女性と結婚 「正気になって!」と訴えた40代独身娘 「44歳で弟が爆誕…?」 [お断り★]
- 【速報】 トランプ米大統領、日米首脳会談で高市首相に円安の懸念を伝える [お断り★]
- 【TBS】「意図しない形で拡散され遺憾」波紋呼んだ『ひるおび』冠水中継で女性の太もも「20秒ズーム」に示した“見解” [Ailuropoda melanoleuca★]
- お前らなんで普通にごめんなさいって言えないの?
- なんで外食に行くの?楽しい?付き合い?時間ない?料理下手?高市どうなの? [457294144]
- 【悲報】高市「うーんこの演説、なんか足りないわね…🫪!敵国条項削除っと」自ら原稿に加筆していた😨 [359965264]
- マジ髭っていらなすぎないか?
- NHK「アメリカと同盟国だったのは中華民国であり今の中国ではありません。これは問題発言です」 [931948549]
- 何の歌か当てるスレ