[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 09:40 / Filesize : 265 KB / Number-of Response : 871
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ディバイスドライバをハックしよう!



1 名前:login:Penguin [02/01/31 01:14 ID:t3s191ys]
ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。


138 名前:login:Penguin mailto:sage [03/02/16 03:44 ID:tbT/WrCe]
>>137
スピンしっぱなしになる

ちなみに超電磁スピンはこれの応用

139 名前:login:Penguin mailto:sage [03/02/16 23:53 ID:7J4Y8mCH]
>>138
ああ、そっか。てことは攻撃中にspin_unlock()されるとマズー?


140 名前:login:Penguin [03/02/20 22:11 ID:+wCEK+nh]
>>137
デッドロックが起きる。
spinlock を獲得したままスリープすると、そのプロセスが目覚めるまで
同じ spinlock を獲得しようとするプロセスがビジーウェイトし続ける。

141 名前:137 [03/02/21 03:18 ID:qmT4Thn5]
>> 140
どうもです。
自作基板に載っているPCIバスブリッジのDMAを叩くのに、複数プロセスからDMA転送を
同時に行うことはできないのでspinlockにぎらせてwait_event_interruptibleか何かを
コールしようとたくらんでました。
DMA転送が終われば必ず割り込みで叩き起こされるのでそこでspin_unlockすれば
問題ないかなと思ったのですが、間違いですか?
その間ビジーウェイトし続けるのがもったいないということであればsemaphoreで
ブロックするべきでしょうか。

142 名前:login:Penguin mailto:sage [03/02/21 05:38 ID:wCxVa5I1]
>>141
だめ。
プロセスAのカーネル内: 獲得 -> sleep
プロセスBのカーネル内: 獲得に失敗してビジーウェイト
なのだけど、カーネル内では、ページフォルトとか明示的にschedule()呼ぶと
かしないとスイッチはおこらないので、単一プロセッサシステムだと絶対死亡。
SMPだとか、2.5のプリエンプションカーネルだと、大丈夫かもね。
終了割込みで起こされる処理なら、sleep と wakeupを使うのが普通じゃない?


143 名前:bluehat [03/02/27 02:47 ID:2xZ0HU3V]
デバドラをアクセス(介する?)することで、ファイルを暗号化して保存&
ファイルを複号化して取得、ってな事ってできんのか?
おめーだったらどうやって実現するよ?教えろ!ゴルァ!



144 名前:login:Penguin mailto:sage [03/02/27 03:04 ID:1e6KPqQp]
普通loopだろう。

145 名前:bluehat [03/02/28 03:17 ID:5YDI7es3]
>>144
却下。普通じゃだめぽ。デバドラで実現しる!

146 名前:login:Penguin mailto:sage [03/02/28 07:13 ID:0bshxi8O]
>>145
んー、何をもってデバドラというのかよーわからんが、狭義な,
ハードウェアを制御するドライバのことなら

「オマエラ、おつむ悪すぎなので出直して下さい。」



147 名前:login:Penguin mailto:sage [03/02/28 12:21 ID:oFO1qwF8]
>>145
んと、loopは広義のデバドラですよ。メジャー番号7のブロックデバイスです。

148 名前:login:Penguin mailto:age [03/03/06 14:51 ID:NOJmB8ay]
kernel-2.5 でデバドラのインターフェースが大幅に変わるという話を
きいたがおまえら知っているか?


149 名前:login:Penguin mailto:sage [03/03/06 22:23 ID:33Ph63nv]
>>148
プリエンプティブカーネルになるってのはどっかで見たが・・・
I/F というと、エントリーポイントの仕様でも変わるのか?
それとも、カーネルがエクスポートするルーチンの仕様変更?

150 名前:login:Penguin mailto:sage [03/03/06 23:24 ID:gj2ir03d]
>>148
モジュールまわりの仕様が変わるというのはあるが、
モジュール自体に影響ないはずだし…
構造体とかカーネル側の関数が変更されるのはよくあることだし…

その話の出所はどこよ?


151 名前:148 mailto:age [03/03/07 00:48 ID:2S2Wvrkx]
struct file_operations つくって register_chrdrv()するだろ。
そのやりかたが変わるとか聞いたんだが。


152 名前:login:Penguin mailto:sage [03/03/07 04:37 ID:2ohbwA9F]
>>151
(゚∀゚)んなこたーない

153 名前:148 [03/03/07 13:38 ID:2S2Wvrkx]
>>152
安心したよ
>>149
カーネルプリエンプションに関しては大問題だ。
ドライバかなり書き直さなくてはいかんのぉ。


154 名前:login:Penguin mailto:sage [03/03/08 00:05 ID:l6jbsomd]
2.5のソース読んでからまた来い

155 名前:login:Penguin mailto:sage [03/03/08 00:53 ID:dd9ui0La]
>>153
その様子では 2.5のカーネルプリエンプションを理解するのが先です。
名前から想像するものとはちょっと違うものです。

156 名前:login:Penguin [03/03/17 00:55 ID:POpqK4+0]
デバイスドライバを書いてる人って 日本に何人いるんだろう
hello.o くらいだったら1万人くらいいるのかな?



157 名前:login:Penguin [03/03/21 01:19 ID:4f4NMJji]
3000人くらい

158 名前:LINUX初心者 [03/03/22 00:33 ID:c2EgVY2O]
 ご質問があります。

 IDEのDVD-ROMから、暗号無しのDVDデータを取り出すソフトが必要になり
 まして、MT.FUJIの仕様書とcdrom.cを読んでいます。どうやら、DVDの
 情報はIOCTLを通して取り出せるみたいなのですが、データ(2Kバイト)の
 データの取り出しは、IOCTL経由では出来ないように見えます。その割には
 CD-ROMのモード1と2、CDオーディオのデータはIOCTLで読み出せます。

 フリーのソフトを見るとpf_readで実行しているようですが、どうやれば
 良いのでしょうか? 出来たらIOCTLを使いたいのですが・・・・

 よろしくお願いします。

159 名前:名無しさん@Emacs mailto:sage [03/03/22 11:15 ID:j2wJcuTQ]
>158

www.linuxvideo.org/docs/Linux-DVD-HOWTO/ja/DVD-Playing-HOWTO-Nihongo.html
ここを読んだだけだけど、、、
DVDでioctlを使うには、カーネルで、それようの設定をして
コンパイルが必要みたい?

160 名前:login:Penguin [03/04/13 20:50 ID:Z3+MYXr2]
USBドライバの開発の参考って何かないですか?

161 名前:あぼーん mailto:あぼーん [03/04/13 20:51 ID:fhD9Fsc5]
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
ttp://saitama.gasuki.com/wara/

162 名前:login:Penguin [03/04/13 22:03 ID:Z3+MYXr2]
kill -9 161

163 名前:login:Penguin mailto:sage [03/04/13 22:08 ID:ecu8jjet]
>>160
定番は、似たようなのを見る だろ。なお、クラス(ってかベンダ)ドライバな
ら、一番簡単なのは、scanner.c 。バグありだけどね。



164 名前:login:Penguin [03/04/13 22:16 ID:Z3+MYXr2]
>>163
ありがとうございます。

ところで、カーネルに組み込まれているデバイスドライバのソースをモジュール化するのに定番の手法とかって
ないでしょうか?

カーネルがROM化されているので、モジュールにする必要があるもので。

165 名前:login:Penguin mailto:sage [03/04/13 22:25 ID:ecu8jjet]
>>164
手法って、なにも特別なことはないとおもうんだけど...

make modules 以外でコンパイルするっていみ? それなら -DMODULE がみそ。
カーネル関連のソース内部でも、ドライバでも、これを ifdef とかで見る。

それともmodule対応じゃないドライバを対応に書き直す方法? こっちなら、
適当な初期化/後かたづけ処理を module_init()とmodule_exit()で登録すればいい。




166 名前:login:Penguin [03/04/13 22:33 ID:Z3+MYXr2]
>>165
>module対応じゃないドライバを対応に書き直す方法
こちらの方です。ありがとうございます。意外と簡単なんですね。
早速、明日試してみます。

デスクトップで動いているドライバを組み込みLinuxに移植しようとしてるんですが、
ドライバを作るのははじめてなので、馬本で勉強してます。まだ2章目ですが




167 名前:開発メモ mailto:sage [03/04/14 14:29 ID:Y6l/xCVk]
Warning: loading module.o will taint the kernel: no license

がでたときは、
#include <linux/module.h>

MODULE_LICENSE("GPL");


printk の出力はdmesgで見ることができる。

168 名前:login:Penguin mailto:sage [03/04/14 22:12 ID:ktmIntrh]
>>160
こんなんが参考になるかも・・・
www-online.kek.jp/~yasu/Kenshu/usb-driver.html


>>167
> printk の出力はdmesgで見ることができる。

cat /proc/kmsg
としても見れます。

カーネルバッファにメッセージが追加される度にコンソールに表示されます。
でも表示内容の文頭に <4> というようなログレベルが付いてまうけど・・・

169 名前:login:Penguin mailto:sage [03/04/16 10:03 ID: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

というメッセージがでます。
カーネルのバージョン管理だと小間生のですが、カーネルの再構築をせずにすり抜ける
ことは不可能でしょうか?


170 名前:山崎渉 mailto:(^^) [03/04/17 11:54 ID:KRn99/cy]
(^^)

171 名前:login:Penguin mailto:sage [03/04/18 01:19 ID:HcWYqirI]
>>169
>>167 ?

172 名前:山崎渉 mailto:(^^)sage [03/04/20 06:14 ID:xFRXxEWb]
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

173 名前:login:Penguin [03/04/21 11:26 ID: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

174 名前:login:Penguin mailto:sage [03/04/21 11:35 ID:TzNUZhnB]
>>173
カーネルのバージョンとtest.cがわからないとちゃんと答えられない


175 名前:login:Penguin mailto:sage [03/04/21 11:37 ID:65INoG+s]
>>173
find ライブラリのありそうなパス -exec grep -l "remap_page_range" {} \;
とかやってみるとか?


176 名前:login:Penguin mailto:sage [03/04/21 12:03 ID:UyUiMYQq]
>>173
MODVERSIONSでせう。
test.cコンパイルするときに-DMODVERSIONSつけてみ。
当然includeはカーネルと同じものを使うこと。




177 名前:173 [03/04/21 12:48 ID:dxqbEfvS]
カーネルは、2.4.20 です。

ソースはこれです。usbカメラのドライバです。
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カメラを使えるようにしようと思ったのですが・・・

ちなみに、同じソースをカーネルに組みこめば動作するのは確認しました。


178 名前:login:Penguin mailto:sage [03/04/21 19:06 ID:UyUiMYQq]
>>177
そのカーネルの.configは?
CONFIG_MODVERSIONS=nのときに-DMODVERSIONS付けても同じ事になったような気がするが。


179 名前:うまうま mailto:sage [03/04/22 01:26 ID:0SpJ1zOH]
>>177
お馬さん本2巻目の
「11.3.1 モジュールでバージョンサポートを使う」
「11.3.2 バージョン付きシンボルのエクスポート」
あたりをみたらどうよ? サンプルコードもあったよ
健闘を祈る!

180 名前:177 [03/04/23 19:22 ID:TY1i8cop]
みなさん、ありがとうございます。

--static を外したら、うまく出来ました。

>>178
組込みのLinuxなんですが、開発元がソースをよこしてくれないので不明です。
GPL的にいいのだろうか・・・

181 名前:login:Penguin [03/04/23 21:19 ID:DUkd9IIg]
linkあげ
・カーネル2.6のドライバ・モデル
ttp://japan.linux.com/kernel/03/04/14/0833230.shtml

182 名前:login:Penguin [03/04/24 12:36 ID:LW5TaSjX]
Linux で USB制御とかを学ぶのに便利な電子工作キットのおすすめってありません?

できるだけ安いの。

183 名前:うまうま [03/04/25 12:03 ID:HCQr+NWK]
>>182
モルフィー企画のUSBキットはいかが?
www.morphyplanning.co.jp/

確かLinuxドライバを開発しているサイトがあった気がする。

184 名前:bloom [03/04/25 12:26 ID:1KQi+Ees]
homepage.mac.com/ayaya16/

185 名前:login:Penguin [03/05/02 11:48 ID: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はどこからとってくればいいのでしょうか?

186 名前:login:Penguin mailto:sage [03/05/02 12:21 ID:5kcklCyp]
>>183
モルフィー企画は、5/1 千葉地裁に破産申し立てを行った模様。
やっと終わったようですね、夢が・・・




187 名前:login:Penguin mailto:sage [03/05/02 13:17 ID:8SKdq5Sf]
>>185
それはモジュールの初期化に失敗した時のメッセージでつ。
だまされないように。


188 名前:login:Penguin mailto:sage [03/05/02 14:02 ID:fxkN+fN8]
>>185
それは、init_moduleがretun 0;以外で終了した場合のメッセージですよ。
普通、デバイスが見付からないときは -ENODEVとかでかえすでしょ?
返り値を確認汁。

ISAのデバイスでは、IOとかIRQの設定が違うと見付からないことが多いので、
insmodが、ヒントのために、IOとかIRQはどうよ? って書くことになってるだけ。


189 名前:185 [03/05/02 14:12 ID:LZsBxbHZ]
>>187
>>188
ありがとうございます。
probe の処理のところへ devfs 関係の処理を移したらinsmod できるようになりました。


190 名前:login:Penguin mailto:sage [03/05/02 14:25 ID:fxkN+fN8]
あぁ、すまん。よく読まずに答えた。USBなのね。
USBの場合は、usb_driver.probe() が NULL で帰った時がそのエラーですね。
で、probeのところでdevfs関係やるので正解です。


191 名前:login:Penguin [03/05/02 15:56 ID:gUkzFRNW]
モニタのドライバディスクっていうのはあるんでしょうか?
当方モニタを認識できないのですが・・・。

192 名前:login:Penguin mailto:sage [03/05/02 17:25 ID:MBGKHtnA]
>>191
周波数や解像度を設定すれば済むだろ。

193 名前:185 [03/05/02 18:18 ID:LZsBxbHZ]
>>190
insmod はできるようになったのですが、devfs関係の処理がうまくいきません。

devfs_mk_dir と devfs_register がNULL しか返さないのですが・・・



194 名前:login:Penguin mailto:sage [03/05/02 18:33 ID:ntJpWIhT]
>>193
カーネルがまずい

195 名前:185 [03/05/02 19:13 ID:LZsBxbHZ]
>>194
了解っす。さっそく、カーネルを再コンパイルします。

196 名前:ドライバ初心者 [03/05/07 14:44 ID:8SxzL6UK]
ううう、USB器機との通信方法がよくわからん。

0x07 を送ると 0x1f を返すというUSB器機との通信でどうやるの?

キャラクタデバイス作って、それをread, write するでいいの?



197 名前:bloom [03/05/07 15:13 ID:dAUH81mE]
homepage.mac.com/ayaya16/

198 名前:login:Penguin mailto:sage [03/05/07 18:18 ID:xHs+a1Ja]
>>196
??? どのレベルでわからないんだろう。ユーザアプリから機器を操作するのは、
すべからくデバイスドライバを通してopen/close/read/write/ioctl 等です。

でも、0x07 を送ると 0x1fを返すとうUSB機器なら、デバドラいらないじゃん。っ
ていうか、機器もいらないじゃん。「0x07を送ると0x1fを返す」ダミーの関数
かませればいいじゃん。たぶん、その質問はなにか省略しすぎで返事がしにくい。


199 名前:ドライバ初心者 mailto:sage [03/05/07 23:02 ID:Sh0BeBWS]
>>198
分かりにくくてすいません。

USB機器に、データ確認コマンド(0x07のバイト列)を送る。
USB機器にデータがあるなら、(0x01)が返ってくる。
(0x01)が返ってきたのを確認したら、データ取得コマンド(0x0a)を送る。
USB機器からデータ(20バイト)が返ってくる。

上記の仕様で、USB機器にバイト列を送ったり、USB機器が返すバイト列を受け取るにはどうすればいいのかが分からないのです。
urb構造体を使うのでしょうか?

200 名前:login:Penguin mailto:sage [03/05/07 23:47 ID:ppjtoJvG]
>>199
USBのドライバは書いた事ないのでアドバイス出来んが、
ttp://www.narimatsu.net/nari_page/musbio.html
にあるドライバが多分近いので、読んで見ると参考になるかも。


201 名前:login:Penguin mailto:sage [03/05/08 02:33 ID: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あたりでのリソースの解放順序にバグがあるので、気を
つけてね。




202 名前:ドライバ初心者 [03/05/08 18:46 ID:01Q6DwzH]
>>200
>>201
アドバイスありがとうございます。 非常に助かりました。

とりあえず、morphy と scanner の両方をコンパイルして試してみました。
morphy の方は、何とかデバイスをopenできるように改造できました。
scannerの方は。 カーネルがdevfsを使えないのと、今回のUSB器機からendpoint の取得がうまくできないようです。

/dev/usb のスペシャルファイルの取得はmorphy を参考に、read write はscanner を参考に、 ハンドシェイクは >>201 の方法でやってみます。



203 名前:ドライバ初心者 [03/05/09 19:55 ID: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, のどれかの値が入るようなのですが・・・

204 名前:login:Penguin mailto:sage [03/05/09 23:43 ID:ZjYTJvxM]
>>203
相手側の仕様にあわせてください。
仕様書ぐらいあるよね?


205 名前:ドライバ初心者 mailto:age [03/05/10 00:57 ID:5c13M/Uv]
>>204
それが、>>201 に書いたようなコマンドのやりとりのはしご図しかありません。

206 名前:login:Penguin mailto:sage [03/05/10 18:30 ID:+67eyGUg]
>>205
たぶん、1にかいて、2を読むんだとおもうけど、そんな状態でコーディングを
すすめちゃだめです。仕様書をもらって、それをもとに設計してから書くの。




207 名前:うまうま mailto:sage [03/05/11 02:10 ID:sP9foAmw]
>>203
ひょっとして未公開プロトコルをハックしてlinux用にドライバ
作ってんの?

lsusbの表示について
デバイスからデータを読むためのエンドポイントは IN になって
いるはずだよ。そのようなエンドポイントがひとつしかないなら
その番号でOKだと思う。
逆に、デバイスへデータを書き込むためのエンドポイントは OUT

そのターゲットデバイスにはエンドポイントが複数あるっぽいけど、
それだったらコマンドやりとり時、どのエンドポイントが使われて
いるのか調べる必要がある。

208 名前:206 mailto:sage [03/05/11 02:28 ID:+b1ggx7/]
あう。よく読まず1,2を逆にかいてしまいました。つことで>>206に惑わされないで2がOUTね。>>205




209 名前:ドライバ初心者 mailto:age [03/05/12 22:03 ID:fBjjjcco]
>>206
組み込み用のLinuxにUSB機器をつなげてアレコレしようという計画がありまして。
ところが、社内でC言語の経験があるのは私だけ。とりあえず研究開発名目で、USBドライバを
作ってみろと白羽の矢が立ちました。

うまうまさんのアドバイスでwriteができるようになりました。ありがとうございました。
あとはreadだけです。

210 名前:ドライバ初心者 [03/05/15 18:21 ID:QUGfuS7s]
read するとタイムアップになってしまう・・・。何が悪いのでしょうか。

キューのクリアとか必要ですか?



211 名前:login:Penguin mailto:sage [03/05/16 16:21 ID:yZKduc9i]
初歩的な質問ですみませんが、導師のみなさま、お導きを。

write()されたデータを一時的に保持して、次のread()で保持した値を返す
ようなキャラクタデバドラがあるとします。

アクセスする側が単独のプロセスの場合、実装は簡単ですが、複数のプロセスが
上記デバドラにアクセスする場合はセマフォを使っての排他制御が必要となります。

これをアクセス側にセマフォを設けないで、上記デバドラ側で同等の機構を
実現するにはどのように実装すればいいのでしょうか?




212 名前:login:Penguin mailto:sage [03/05/16 16:44 ID:0mzALYCZ]
>>211
プロセス別にキューを持てばいいんでは?
openされたら新しいキューを割り当てて、
closeされたら開放。


213 名前:211 mailto:sage [03/05/16 18:32 ID:g3wElzO+]
>>212
では、同一プロセスの複数スレッドまで考慮しなければならない場合、
どうすればいいのでしょうか?

214 名前:212 mailto:sage [03/05/16 19:18 ID:0mzALYCZ]
>>213
スレッドじゃなくても、二つ以上開いたら破綻しますな。
→お手軽コース:1回だけオープンできるようにする。
→まじめに作る:複数キューを持てるようにする。file.private_dataにキューのポインタ入れるのが簡単かな?
というところで。


215 名前:うまうま mailto:sage [03/05/17 03:23 ID:WAKxeCTB]
>>210
readしたとき、とりあえず何バイトか読み出してる?
デバイスが返しうるバイト数よりも多く読み出そうとして待ち
続けているという可能性はない?

216 名前:ドライバ初心者 mailto:age [03/05/18 01:04 ID:2usiGwhL]
>>215
>readしたとき、とりあえず何バイトか読み出してる?
その通りです! すっと、返されるはずのバイト数よりも多いバイト数で読み出していました!
今はハードが手元に無いので月曜日に試してみます。ありがとうございました。



217 名前:動画直リン [03/05/18 01:11 ID:pMLvChGr]
homepage.mac.com/hitomi18/

218 名前:login:Penguin mailto:sage [03/05/18 21:07 ID:sDNMC/v5]
猿でもわかるように書かれたデバドラ作成解説ページってある?

219 名前:ドライバ初心者 mailto:sage [03/05/19 19:00 ID: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
www.atomised.org/docs/linux-2.4.19-drivers/usb_8c.html


220 名前:login:Penguin mailto:sage [03/05/19 19:13 ID:Q6lDTR8l]
>>218
デバドラの前に、まずはRFC2795から行ってみよう。

221 名前:login:Penguin mailto:sage [03/05/19 22:53 ID:808Vam9H]
>>220
英語読むのめんどくせ
猿にハムレット歌わせるんだっけ?

222 名前:ドライバ初心者 mailto:sage [03/05/20 18:31 ID: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



223 名前:山崎渉 mailto:(^^) [03/05/22 01:55 ID:p4opmoqv]
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

224 名前:ドライバ初心者 mailto:sage [03/05/22 16:32 ID:7jvNN9yz]
>>222
仕様書のコマンドが入れ換わっていた!というわけで自己解決しますた。

north.hokkai.net/~nsawa/piece-lab/usb/20011231.html
ここのソースも参考にして完成です。アドバイスをくれたみなさん、あ
りがとうございました。

225 名前:login:Penguin [03/05/27 12:06 ID:VgmJadOg]
あまりにも便利なので上げさせてください

226 名前:login:Penguin mailto:sage [03/05/28 14:11 ID:2En7vxAz]
insmod するとこんなエラーが出てきたのですがどうすればいいでしょう?

couldn't find the kernel version the module was compiled for





227 名前:山崎渉 mailto:(^^) [03/05/28 16:42 ID:3t6i6zxR]
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

228 名前:login:Penguin [03/05/28 16:55 ID:3qAfQe3K]
>>226
そのドライバを今のカーネルでコンパイルし直してください。
もしくは -f オプションで insmod してください。なんちって

229 名前:login:Penguin mailto:sage [03/05/28 23:40 ID:z1beycbb]
>>226
なにをいれた? 「実はモジュールじゃない」ってときもそれ。

230 名前:226 mailto:sage [03/05/29 18:33 ID:FeUqO3hy]
>>228
>>229
MIPS で動いているLinux に、Redhat7.2 のUSBデバイスドライバです。

ソースのコンパイルはちゃんと通るのですが。
あと、Hello World を出力するだけのデバドラの動作は確認済。

231 名前:login:Penguin mailto:sage [03/05/29 21:59 ID:5gpS9IGq]
>>230
archがあってないとか。

$ file vmlinux
$ file そのモジュール
の結果を見てみたい所ですね。


232 名前:226 mailto:sage [03/05/30 10:13 ID: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



233 名前:login:Penguin mailto:sage [03/05/31 15:40 ID:pCrUKetP]
>>232
あってるねえ。謎だなあ。
init_moduleがエラーを返してるって事はないよね?


234 名前:226 mailto:sage [03/06/02 11:33 ID: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 はどこのライブラリにあるのでしょうか?

235 名前:login:Penguin mailto:sage [03/06/03 01:50 ID:iocW6lsY]
>>234
そんな関数見たことないなー。
別なモジュールに依存してるとかないの?
カーネル絡みはlibgcc以外のライブラリ使わないよ。


236 名前:コピペ mailto:sage [03/06/03 13:33 ID:9FZ3sCry]
(゚∀゚) ?
Insmod が _gp_disp シンボルが未定義だと文句を言います

(゚∀゚) !
_gp_disp は MIPS の PIC コード中で使われているマジックシンボルです。
このエラーは、システムをクラッシュから救ってくれたため、むしろ有り難いものです。
この場合の問題の要点は、カーネル作成時の Makefile のオプションと、
カーネルモジュール作成時のオプションは同じにすべきだということです。
特に、オプション -mno-pic -mno-abicalls -G 0 が重要です。



237 名前:login:Penguin mailto:sage [03/06/03 13:34 ID:9FZ3sCry]
まあなんか知らんけどgoogleって便利ってのはわかった
意味まではわかんないけど

238 名前:login:Penguin mailto:sage [03/06/03 14:40 ID:iocW6lsY]
>>236
へぇ、MIPSのPICは変わっていると聞いたことがあるが…
そんな事もやってるのか。
ひとつ賢くなったような気がする。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<265KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef