ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
ディバイスドライバをハックしよう!
■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
02/01/31 01:14ID:t3s191ys03/02/07 20:36ID:0UoE11AV
133
03/02/07 21:50ID:VKdRg4g703/02/07 22:07ID:nu9G29ZI
135133
03/02/11 02:29ID:/akGZqt4136login:Penguin
03/02/11 03:04ID:bsSBCYyf137login:Penguin
03/02/14 03:21ID:vgGnuLAo お馬さんの本にspinlockにぎったままsleepしちゃいかん、
って書いてあるんですがどんな困ったことが起こるのか教えて欲しい
今日この頃…
って書いてあるんですがどんな困ったことが起こるのか教えて欲しい
今日この頃…
03/02/16 03:44ID:tbT/WrCe
03/02/16 23:53ID:7J4Y8mCH
140login:Penguin
03/02/20 22:11ID:+wCEK+nh141137
03/02/21 03:18ID:qmT4Thn5 >> 140
どうもです。
自作基板に載っているPCIバスブリッジのDMAを叩くのに、複数プロセスからDMA転送を
同時に行うことはできないのでspinlockにぎらせてwait_event_interruptibleか何かを
コールしようとたくらんでました。
DMA転送が終われば必ず割り込みで叩き起こされるのでそこでspin_unlockすれば
問題ないかなと思ったのですが、間違いですか?
その間ビジーウェイトし続けるのがもったいないということであればsemaphoreで
ブロックするべきでしょうか。
どうもです。
自作基板に載っているPCIバスブリッジのDMAを叩くのに、複数プロセスからDMA転送を
同時に行うことはできないのでspinlockにぎらせてwait_event_interruptibleか何かを
コールしようとたくらんでました。
DMA転送が終われば必ず割り込みで叩き起こされるのでそこでspin_unlockすれば
問題ないかなと思ったのですが、間違いですか?
その間ビジーウェイトし続けるのがもったいないということであればsemaphoreで
ブロックするべきでしょうか。
03/02/21 05:38ID:wCxVa5I1
>>141
だめ。
プロセスAのカーネル内: 獲得 -> sleep
プロセスBのカーネル内: 獲得に失敗してビジーウェイト
なのだけど、カーネル内では、ページフォルトとか明示的にschedule()呼ぶと
かしないとスイッチはおこらないので、単一プロセッサシステムだと絶対死亡。
SMPだとか、2.5のプリエンプションカーネルだと、大丈夫かもね。
終了割込みで起こされる処理なら、sleep と wakeupを使うのが普通じゃない?
だめ。
プロセスAのカーネル内: 獲得 -> sleep
プロセスBのカーネル内: 獲得に失敗してビジーウェイト
なのだけど、カーネル内では、ページフォルトとか明示的にschedule()呼ぶと
かしないとスイッチはおこらないので、単一プロセッサシステムだと絶対死亡。
SMPだとか、2.5のプリエンプションカーネルだと、大丈夫かもね。
終了割込みで起こされる処理なら、sleep と wakeupを使うのが普通じゃない?
143bluehat
03/02/27 02:47ID:2xZ0HU3V デバドラをアクセス(介する?)することで、ファイルを暗号化して保存&
ファイルを複号化して取得、ってな事ってできんのか?
おめーだったらどうやって実現するよ?教えろ!ゴルァ!
ファイルを複号化して取得、ってな事ってできんのか?
おめーだったらどうやって実現するよ?教えろ!ゴルァ!
03/02/27 03:04ID:1e6KPqQp
普通loopだろう。
145bluehat
03/02/28 03:17ID:5YDI7es3 >>144
却下。普通じゃだめぽ。デバドラで実現しる!
却下。普通じゃだめぽ。デバドラで実現しる!
03/02/28 07:13ID:0bshxi8O
03/02/28 12:21ID:oFO1qwF8
>>145
んと、loopは広義のデバドラですよ。メジャー番号7のブロックデバイスです。
んと、loopは広義のデバドラですよ。メジャー番号7のブロックデバイスです。
03/03/06 14:51ID:NOJmB8ay
kernel-2.5 でデバドラのインターフェースが大幅に変わるという話を
きいたがおまえら知っているか?
きいたがおまえら知っているか?
03/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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「習氏より先に言うとは…」 トランプ氏同盟国発言、日本政府内に困惑 [蚤の市★]
- 第2次大戦に触れトランプ氏「米中は同盟国」、当時は中華民国…「抗日」巡る中国の言説補強する恐れ ★7 [蚤の市★]
- 「習氏より先に言うとは…」 トランプ氏同盟国発言、日本政府内に困惑 ★2 [蚤の市★]
- 高市総理「日米は非常に強い絆で結ばれた同盟国」 トランプ大統領の“中国は同盟国だった”発言受け [首都圏の虎★]
- 【野球】広島東洋カープの矢野雅哉・前川誠太選手を書類送検 ゾンビたばこを巡る容疑 広島県警 [Ailuropoda melanoleuca★]
- 「暗い未来に子供を産みたくない…」それでも左派よりも右派の方が「たくさん子供を産む」のはなぜか【米研究】 [首都圏の虎★]
- ガールズ&パンツァー第9話「絶対絶命です!」実況スレ🏡21時スタート
- ハッタショって人から「ハッタショ」と指摘されるのはめちゃくちゃ嫌がるよな
- 毎日毎日似たようなスレに吸い込まれて似たようなレスしてるキチおるやん?
- 【画像】品格、高市惨敗wwwwwwwwwwwwwwwwwwww [668024367]
- 【高市日本】高市と石破、それぞれの訪米の時のおやびんがこちら [165981677]
- 【同時視聴】博衣こよりのえちえち初配信 Part2