1 名前:login:Penguin [02/01/31 01:14 ID:t3s191ys] ディバイスドライバの改造、製作にまつわる情報交換、質問、 噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
335 名前:login:Penguin mailto:sage [04/04/09 15:39 ID:dsP5+/oo] 2次キャッシュを UBS mem に格納して使いたし。可能?
336 名前:login:Penguin mailto:sage [04/04/09 21:34 ID:/keZpBhh] >>335 CPUの2次キャッシュをUSBメモリにやらせるってこと?
337 名前:login:Penguin [04/04/10 01:41 ID:04yJkWho] AGE
338 名前:login:Penguin [04/04/13 23:49 ID:bzoEXS/o] USBのデバイスドライバ作る時のTIPSを教えてください
339 名前:login:Penguin mailto:sage [04/04/14 15:26 ID:XimV19c+] デバイスを破壊出来るデバイスドライバーの作り方教えてください
340 名前:login:Penguin mailto:sage [04/04/14 23:18 ID:QKI6oVKA] >>339 1.どこからかゴルフのドライバーを手に入れる。 2.ドライバーのフェイスにデバイスを貼り付ける(ガムテープでも可) しかる後にドライバーを振りかぶり、路面、ブロック塀etc.にぶつけること。
341 名前:login:Penguin mailto:sage [04/04/15 10:49 ID:D/fT1Zhi] >>340 ( ´д)ヒソ(´д`)ヒソ(д` )
342 名前:login:Penguin mailto:sage [04/04/19 20:10 ID:TjHP8JDs] >>340 ( ´д)チョメ(´д`)チョメ(д` )
343 名前:login:Penguin mailto:age [04/04/27 21:12 ID:ftQXOuAJ] v2.6.x 用の module (.ko) の作り方ってどっかに落ちてませんか? v2.4.x だと gcc -c するだけで insmod できるイメージができましたが、 v2.6.x だとなんか後工程があるんですよね?
344 名前:login:Penguin [04/04/27 21:18 ID:VEIU93yI] >>339 FDDにアクセスして、その音で音楽を鳴らす。 CDDのトレイを頻繁に出し入れする。 ってトレイは入れられたっけ?
345 名前:login:Penguin mailto:sage [04/04/28 09:36 ID:r7A4ZD5z] >>344 出し入れ可能だけど、作り方は教えられないのでは? もう既に完成してしまっているし ソース嫁としか言えないと思う
346 名前:login:Penguin mailto:sage [04/04/29 22:03 ID:ugZV/Avt] >>344 CDDのトレイを開け閉めする位ならioctlで……
347 名前:login:Penguin [04/05/05 09:59 ID:IcDQ6/Fz] v2.4でUSBキーボードドライバにRAWレベルアクセスする方法知りませんか? usb/usbkbd.cを単品でモジュール化してみたけど、プログラムからのアクセス 方法がわからない・・・ usb_register時にマイナーバージョンの情報を登録してないみたいだけど デバイスファイルでアクセスしようと思うと無理なのかな〜・・・
348 名前:login:Penguin [04/07/17 17:55 ID:z93SFsgN] 落ちそう・・・見込みなさそうだけど上げ
349 名前:login:Penguin [04/07/18 17:33 ID:qhsm/Ia2] >>343 linuxdevices.com/articles/AT4389927951.html とか lwn.net/Articles/driver-porting/ とかではどう?
350 名前:login:Penguin [04/07/27 03:02 ID:AwmCdxXP] Moz2chで見てると レスがだんだん右にずれていくます。
351 名前:login:Penguin [04/07/27 03:08 ID:AwmCdxXP] USBに2台のWebカメラをつなげてまちゅが May 30 08:31:05 localhost kernel: usb-uhci.c: interrupt,status 3, frame# 1728 しばらく動いた後に/var/log/messageに出力されてカメラがハングしてちまいます。 USBのデバイスドライバは何を言ったのでしょうか?おちえてください。
352 名前:login:Penguin mailto:sage [04/07/27 03:23 ID:7ve9Hskt] >>351 要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。 status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。 # IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。
353 名前:login:Penguin [04/08/02 14:39 ID:QD1yhPkc] チップセットのドライバって具体的にはどんなことやってるの?
354 名前:login:Penguin [04/08/02 16:42 ID:4u8OC/CN] すごく恥かしいあんなことやこんなこと
355 名前:login:Penguin [04/08/02 17:48 ID:Wbtl3uph] >>354 激しく気になります。
356 名前:login:Penguin mailto:sage [04/08/03 23:29 ID:HnnAhZGX] 突然ですが、デバドラのioctlからpollやselectって呼べるかどなたか知ってますか? pollやselectの引数の構造体に何を入れていいのかわかりません。
357 名前:login:Penguin mailto:sage [04/08/03 23:47 ID:0P3Qaw2+] >>356 ioctlのハンドラからsys_selectとか呼びたいって事ですか? 呼べないことはないと思うけど… なんでそんな変な事をする必要があるのか興味がありますな。 引数は普通にselectに食わせているものを同じように渡せば良いはず。
358 名前:login:Penguin mailto:sage [04/08/04 09:37 ID:NoJQortH] >>357 3つのCPUおよびOSがある組込み系のデバドラを考えてます。 普通はioctlやselectをモジュール側に個別に書くのでしょうが、 それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。 ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を 考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
359 名前:login:Penguin mailto:sage [04/08/04 10:00 ID:H7hK0Jjq] >>358 >ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。 ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?
360 名前:login:Penguin mailto:sage [04/08/04 10:24 ID:AG/Dol7k] 一般に、デバドラ内部からシステムコールやライブラリ関数は呼べないよ。 書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを 自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。 カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから 各バージョンすべてで動作する共通コードを書くのは結構大変 泣ける マジで
361 名前:login:Penguin mailto:sage [04/08/04 14:21 ID:NoJQortH] >>359 モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。 表現が下手ですね。文章もあまりうまくないのでごめんなさい。 ライブラリ側では、whileループでバッファの中身をチェックしています。 バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。
362 名前:login:Penguin mailto:sage [04/08/04 14:35 ID:NoJQortH] >>360 ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。 今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、 poll(select)の関数を指すようにしてやっています。 そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。
363 名前:login:Penguin mailto:sage [04/08/04 14:40 ID:+wO9AS9w] >>356 の言う「モジュール」=「ライブラリのソース」は「ユーザランドの アプリケーションが使うライブラリ」かな?
364 名前:login:Penguin mailto:sage [04/08/04 15:22 ID:NoJQortH] はい。そうです。 わかりにくくてすいません。
365 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll] >>362 なんか、あさっての方向に走ってないか? - poll() したいなら poll() を実装する - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て やりたいことを確認したほうがいいぞ。 - なにをどう待ちたい? - 付加的にやりたいことは何? 後者は、 > なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。 がわからんかったって話。
366 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll] あうあ - - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て + - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て
367 名前:login:Penguin mailto:sage [04/08/05 00:45 ID:CMe3HEND] 大丈夫か!? >>364 よ!! がんばれよ! 見守ってるからさ!
368 名前:login:Penguin [04/08/05 12:51 ID:dMydmJ+4] 書いてあることだけじゃいまいち要領を得ないが アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である ようなデバイスで ・ノンブロックでアクセス処理したい ・複数のプロセスから同時にアクセスされる状況に対応したい ・複数のデバイスを一元的に管理したい (リソース管理など) こんな条件だと勝手に仮定すると たしかに大きいデバイスドライバを書いて、そこですべて管理するのも ひとつの解決法ではある。 でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を 実装することも出来るし、唯一の解でもない。 まぁ、情報が出せないというよりは、状況を理解してないので うまく説明できないって感じなので、もうちょっと頭を使って 問題を整理してから、もう一回質問するがよかろう
369 名前:login:Penguin [04/10/29 11:01:48 ID:rDkd0V/P] lsusbだとデバイス名が把握できてるということは、 個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか? linux-2.6において usbcore uhci_hcd cdc_acm という三つのドライバにより動かしたいハードウェアがあるんですが、 cdc_acmをロードしてもうんともすんとも言いません
370 名前:login:Penguin mailto:sage [04/10/31 20:53:26 ID:fFX2rhTr] .netとかjavaみたいなバイトコードなドライバーでハードウェア を制御する環境を作るって可能ですか?
371 名前:login:Penguin mailto:sage [04/10/31 21:36:34 ID:uzVMAm7i] >>369 まあそうでしょうな。 lsusbはハード的につながっていれば見えるし。 >>370 そりゃ作れん事は無いが… 速度が厳しくないかい?
372 名前:login:Penguin mailto:思っただけで、実現する技術が無いので sage [04/11/01 02:36:54 ID:dfNRJQ4+] >>371 JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが 速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と 何にしてもバイナリの非互換性がどうにかならんかなぁと。 カーネル毎にコンパイルはダリ
373 名前:login:Penguin mailto:sage [04/11/01 06:48:36 ID:IqBdvM7D] >>370 Kernelから呼び出すような仕組みにしても、 Javaで言うnativeなのが無いと駄目じゃない? レジスタとかメモリ領域さわれないし。 結局そこ(nativeなモジュール)で非互換性が出る気がする。
374 名前:login:Penguin mailto:sage [04/11/01 15:55:17 ID:lkrLxjNC] >>373 そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。 PCIあたりならかなりの所まで出来そうな気がするなあ。 そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?
375 名前:login:Penguin mailto:sage [04/11/01 22:34:23 ID:dfNRJQ4+] 成るほど・・・ >>373 やっぱりそういうところで不備が出てきますか。。。言語拡張で・・・となると Javaじゃなくなるし、コンパイラーも自前に用意しなきゃならなくなるし。。。 >>374 漏れもそんな感じの考えでいたんだけど、やっぱそれが難しいんでしょうね。 とはいえ、可能性があることはわかりました。ありがとうございます。 >>OpenFirmware 調べてみましたが上の考えのBIOS版みたいなもんでしょうか? とりあえず、神が現れることを祈りつつ作れる作れない、作る作らないは別として 自分でも調べてみようと思います。厨の妄想に付き合っていただきありがとうございました。
376 名前:login:Penguin mailto:sage [04/11/02 12:28:29 ID:lgEgFui9] カーネルのバージョンによってカーネルが持つ構造体が微妙に違うことがよくある。 (メンパが増えてるとか) 現状のinsmodによるデバイスドライバのダイナミックリンクは その手の構造体の違いを解決してくれないので、原則的に カーネルバージョンに依存したドライバしかリンクできない。 強制的に違うバージョンのドライバをinsmodすることも可能だが 正常に動く保証はない。たまたま動くことはあるけれども。
377 名前:login:Penguin mailto:sage [04/11/02 18:53:41 ID:chaRCRYs] まあソース見て「あーこれなら動くな」と思ったら 迷わず-f
378 名前:login:Penguin mailto:sage [04/11/03 13:41:27 ID:1PHyje+L] ドライバのソースがあるならリビルドする方がいいような気がするのう。 いっぱいコンパイラに怒られたりすると直す気が失せるが…
379 名前:login:Penguin mailto:sage いやしかし勉強になる。。。 [04/11/06 23:30:41 ID:9J0OxvoL] >>376 なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。 いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから んし(嫌味とかじゃなくて本当にわからんのです。) って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・
380 名前:login:Penguin mailto:sage [04/11/07 08:11:19 ID:/P0s9FI4] >>636 > 昨日Linuxにふれたものですから であり、(非常に一般的なやりかたにもかかわらず)やりかたがわからないとい う人が tamagoをいれたい理由はなにかしら? 特に強い理由がないなら、「いれるな」が正しいガイドだと思うのですよ。 >>635 つかいかたは man xmodmap でみるといい。 キーコードは xev で調べられます。使いかたは man xev でみるといい。
381 名前:login:Penguin mailto:sage [04/11/08 12:46:18 ID:ir5Tmuq8] Xサーバはroot権限のユーザランドプロセスで /dev/ioとか /dev/memに 直接アクセスしてビデオチップを制御する。 Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。
382 名前:login:Penguin mailto:sage [04/11/09 23:51:44 ID:+nDFjkMc] ユーザ空間からmmapでマッピングしてデバイスいじくるときって、 アプリがマッピング先のメモリに書き込む動作と同時に デバイスにデータって書きこまれるんでしょうか? バッファリングみたいのって気にしなくてもいいの?
383 名前:login:Penguin mailto:sage [04/11/10 01:00:51 ID:8UeNJl+2] >>382 デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、 ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。 類似のがある場合はあって、それはキャッシュなのです。 /dev/fb* は通常キャッシュが抑止されています。 /dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。
384 名前:login:Penguin mailto:sage [04/11/10 07:34:29 ID:WP1ExQ+t] PCIデバイスの場合 各共有メモリ空間ごとにprefetchableビットが定義されている ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる
385 名前:login:Penguin mailto:sage [04/11/10 14:40:19 ID:OHaab6bm] >>383 >>384 CPUキャッシュですか。 環境にもよるのでしょうけど、基本的にはあまり気にしなくてもいいのですね。 実は、drivers/char/mem.c みたんですけど、mmap システムコールを呼んだときと、 そこにアクセスした時のコードの流れがよくわからないのでちょっと???でした。 あとは、コンパイラのオプティマイズも気にしておいたほうがいいのでしょうね。
386 名前:login:Penguin mailto:sage [04/11/10 18:01:50 ID:MrVsce1+] >>385 CPUキャッシュはユーザー空間から叩く手段がないので、 カーネルとハードウエア側の制御にお任せするしかないです。 最適化の方はvolatile付けておけば大丈夫でしょう。 なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
387 名前:login:Penguin mailto:sage [04/11/10 23:54:53 ID:8UeNJl+2] >>385 キャッシュは気にしてください。キャッシュがあると . 書き込みがキャッシュが溢れるまでなされない。 . 読みだしも同様。 . 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう という、デバイスの制御にとっては致命的なことがいろいろ。
388 名前:382 385 mailto:sage [04/11/11 00:27:04 ID:95L6p31P] すみません。 キャッシュを気にししなくてもよいと書いたのは、 キャッシュが働かないので、気にしなくても良いという意味で 書いていました。 387さんのおっしゃるとおり、デバイスアクセスでキャッシュが 働いてしまうと、ひどい目にあいますね。 ところで、mmapのキャッシュ無効化ってmem.cの noncached_address を修正すれば有効無効をユーザで 任意に操作可能になるんですかね? ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
389 名前:login:Penguin mailto:sage [04/11/12 00:12:24 ID:nxDtrzpb] >>388 抑止の方は O_SYNC でできますよ。その行の後半の条件がそうでしょ?
390 名前:login:Penguin [04/11/14 11:26:16 ID:ZhMJfRu+] USBサブシステムを読んでいるんですが、 デバイス、バス、ドライバの三つの関係のイメージを 教えてください。なんだかソース読んでいてもよく分かりません。 またxxx_probeという関数に渡ってくるstruct usb_interfaceとは どこで確保されいてる構造体なんでしょうか?
391 名前:login:Penguin [04/11/21 11:06:40 ID:RzBM8DsM] technokitのUSB-IOをFedora Core 3に接続したら、/dev/hiddev0が勝手にできたので、 これに対しCでプログラムを作って、 fd = open("/dev/hiddev0", O_WRONLY); して、 write(fd, command, 8); した。commandは0x01FF00000000。けど全然反応が無い。 USB-IOのエンドポイント0には、0x01FFを送ったら、ポート0が反転するはずなんだけどなあ。 hid使わずに、ちゃんと専用ドライバ使わないとだめなの?
392 名前:login:Penguin mailto:sage [04/11/21 17:22:45 ID:fkgrUhvM] デバイスドライバはカーネルメモリを消費するらしいのですが、 現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
393 名前:391 [04/11/21 17:37:11 ID:RzBM8DsM] >390 /usr/include/usb.h
394 名前:login:Penguin mailto:age [04/12/12 18:20:03 ID:fch5Qtg6] Linuxデバイスドライバの勉強を始めました。 がまずは、オライリーの本で解説してる、 サンプルコードから入ろうと思ったんですが、 asm/system.hをincludeしているコードは、 /usr/src/linux/include/asm/system.h: 関数 `__set_64bit_var' 内: /usr/src/linux/include/asm/system.h:190: 警告: dereferencing type-punned pointer will break strict-aliasing rules と警告を出されてしまいます。 同じ現象に遭遇した香具師いませんか? コンパイラはgcc3.3、kernel2.4.26。 ちなみに、警告された部分は、 #define ll_low(x) *(((unsigned int*)&(x))+0) #define ll_high(x) *(((unsigned int*)&(x))+1) static inline void __set_64bit_var (unsigned long long *ptr, unsigned long long value) { __set_64bit(ptr,ll_low(value), ll_high(value)); //190行目 }
395 名前:394 mailto:sage [04/12/12 18:22:17 ID:fch5Qtg6] あ、マシンは i686です。
396 名前:login:Penguin mailto:sage [04/12/14 01:02:15 ID:bnBNd/cw] たしか-fno-strict-aliasingだったかな。それつけれ。 より詳細が知りたいときはググれ。
397 名前:394 mailto:sage [04/12/14 02:47:39 ID:iNH7gUWs] 産休です>>396 小細工ですが、 (unsigned int*)&(x)を、(unsigned int*)(void*)&(x)に書き換えると、 警告を封じることができますた。 勉強がんばります。
398 名前:login:Penguin [04/12/14 11:29:27 ID:HO3MDnt+] モジュールでmallocを使うと implicit declaration of function `malloc' なる警告が出ました。 正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。 何かヘッダをincludeすればいいのでしょうか。
399 名前:login:Penguin mailto:sage [04/12/14 11:44:22 ID:vlh4D4yl] >>398 kmalloc() or vmalloc()
400 名前:login:Penguin mailto:sage [04/12/14 11:54:53 ID:HO3MDnt+] >>399 感謝.あとは調べます.
401 名前:login:Penguin [04/12/14 15:55:34 ID:ScDxM3L+] 【序 論】 オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。 統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。 日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。 一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、 後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。 もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。 宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。 そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、 北の現体制を維持するための、CIAの有難い配慮だったわけです。 なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。 麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。 今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。 尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。 mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100
402 名前:login:Penguin mailto:sage [04/12/14 17:02:39 ID:WBCZfumK] 国際金融資本と無関係な人はいません。ここが大事なところです。 国際金融資本とダーティーな勢力になんらかの関係があるというのなら、 全ての人間がダーティーな勢力と関係があるということです。
403 名前:login:Penguin [04/12/16 00:42:54 ID:HSUTNn3s] <linux/errno.h>をincludeしているのに、errnoが宣言されていないとエラーが出ます。 なぜですか?
404 名前:login:Penguin [04/12/16 00:52:12 ID:fnG8qWZe] #include <asm/errno.h>
405 名前:login:Penguin mailto:sage [04/12/16 03:08:53 ID:L4JhEJTY] デバイスドライバーをイジルとハードが壊れます
406 名前:login:Penguin mailto:sage [05/01/13 20:25:56 ID:5Qhjx5GH] jiffies の質問です。jiffies がオーバーフローする時の挙動を確かめ たく、下記のようなモジュールを作成してロードしたのですが、モジュー ルのロードに非常に時間がかかります。 #define __KERNEL__ #define MODULE #include <linux/module.h> #include <linux/sched.h> #include <linux/delay.h> MODULE_LICENSE("GPL"); int init_module(void) { jiffies = 4294961296UL; return 0; } void cleanup_module(void) { return; } 即座に jiffies 値を変更するためには、何か工夫が必要なのでしょう か?
407 名前:login:Penguin mailto:sage [05/01/13 21:59:07 ID:b26g+4JK] >>406 jiffesの値が飛ぶせいじゃないの? 初期値をいじる方がいいと思うが。
408 名前:login:Penguin mailto:sage [05/01/13 22:21:10 ID:5Qhjx5GH] やっぱりそれしか方法ないでしょうかね。カーネルコンパイルが億劫で まだ試していませんでした。 例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、 jiffies += 8640000; にすると、より多くの時間がかかるようです。仮 想マシン環境で実験しているのですが、その間、仮想マシンのプロセス の CPU 使用率は高いままでした。
409 名前:login:Penguin mailto:sage [05/01/14 02:03:54 ID:PSu0RjKD] ん? 何書いてたんだ、俺 >408 は、正しくは以下です。 例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、 jiffies += 864000000; にすると、より多くの時間がかかるようです。
410 名前:login:Penguin [05/02/06 11:19:02 ID:+OMlHKxZ] mmapによるデバイスアクセスについてご教授ください。 16bitアクセス限定のデバイスに対して、 mmapによるアクセスを試行しているのですが、 どうも挙動が怪しくて困っています。 アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、 そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか? なにか考慮が不足してるのでしょうか。
411 名前:login:Penguin mailto:sage [05/02/06 14:33:57 ID:JfjjYGk4] >>410 アーキテクチャわかんないので、過去の経験より。 ・D cache ・コンパイラが勝手に最適化 そういう制限がある場合は、おとなしく専用ドライバ書くのが 近道のような気がしますな。
412 名前:login:Penguin [05/02/10 21:10:10 ID:oT40ukFS] gcc 3.3.5(gentoo) で作成したモジュールを gcc 3.4.2(FC3) のPCへ 組み込もうとするとエラーで組み込めません。 どちらも kernel-2.6.10 です。 insmod: error inserting 'hoge.ko' : -1 Invalid module format kernel config (General setup, Loadable module) は同じにしてあります。 同じバージョンの gcc で作成したシステムでないと無理なのでしょうか。
413 名前:login:Penguin mailto:sage [05/02/12 01:22:07 ID:QcR6E3eX] >>410 >>411 の言うとおりアーキテクチャが分からないのでなんともいえないけど・・・ /dev/memをmmapでshortアクセスしたら、普通はshortで触ってくれるでしょう。 でも、触ってるデバイスが * 例えば32bit PCI * にぶら下がってたりしたら 32bit で触りに行っちゃうこともありますよ。 っていうか、PCIの向こうにいるデバイスに届くまでに余計な16bitが増えてたりする。 それでも、読みにいくときには多分shortで行っても多分大丈夫。 書き込みをshortでやったりすると、残りの16bitにゴミが乗っかっちゃうとか、 そんなんじゃないでしょうか? そうならば、shortで書きに行くときには、最初にデバイスから32bit分持ってきて、 それに16bit分上書きして、32bit書き戻すとかするしかないのでは。 (16bitアクセス限定でも、読みに行くときは16bit×2で32bit分をうまく返してくれることを かってに期待して書いてますけど) それから、32bitでアクセスするときにも触りに行くアドレスに注意が必要ですよ、多分。 32bitアラインメントじゃないとダメな予感がします。 もしそうならば、アラインメントの境界をまたいじゃうような16bitの書き込みをする場合、 両側の32×2 = 64bit分を持ってきて16bit書いて戻す、とかしないとダメですよね。 もちろんこれは、PCI上でうまく振舞うように作られていないデバイスの話で、 たとえ16bitアクセス限定デバイスでもそうならないようにつくることは可能だと思います。 ところどころ言ってるかもしれませんけどね・・・
414 名前:413 mailto:sage [05/02/12 01:24:29 ID:QcR6E3eX] 早速、間違えてました(w >ところどころ言ってるかもしれませんけどね・・・ ところどころ * うそ * 言ってるかもしれませんけどね・・・
415 名前:410 mailto:sage [05/02/16 00:46:02 ID:E/KjMwKc] いろいろ情報ありがとうございます。 もともとドライバ経由でアクセスしていたのですが、 パフォーマンス的な問題でmmapでを使用したかったという経緯があります。 ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。 ですので、単純にmmapでの処理の問題かと思っていました。 時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。
416 名前:login:Penguin [05/02/16 22:28:50 ID:mypLuczy] www.netfort.gr.jp/~matsu/lcd_pc/lcd_pc.html これカコイイ
417 名前:login:Penguin mailto:sage [05/02/20 21:06:04 ID:0sjUjbHi] 現在、デバイスドライバ作成(とりあえずキャラクタ型)の勉強しているのですが、 2.4.30-pre1上で作成したテストドライバでモジュールのロードは成功したと思われる のですが(lsmodで存在を確認)、実際にドライバを使用する為に作成したテストツールから 呼び出す(ioctlを使用する箇所で)と失敗しました。 $ ls -l /dev/testdev crw-rw-rw- 1 root root 60, 0 2月 20日 20:11 /dev/testdev $ ./testtool ioctl: Inappropriate ioctl for device <-- perrorで表示させてみたところ
418 名前:417 mailto:sage [05/02/20 21:09:12 ID:0sjUjbHi] つづき そこで、さらに詳細に状況を確認するためにstraceを使用してみました。 $ strace ./testtool execve("./testtool", ["./testtool"], [/* 52 vars */]) = 0 brk(0) = 0x8049a6c open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=62075, ...}) = 0 old_mmap(NULL, 62075, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40013000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0DU\1\000"..., 1024) = 1024 fstat64(3, {st_mode=S_IFREG|0755, st_size=1333605, ...}) = 0 old_mmap(NULL, 1145796, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000 mprotect(0x40134000, 27588, PROT_NONE) = 0 old_mmap(0x40134000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x110000) = 0x40134000 old_mmap(0x40139000, 7108, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40139000 close(3) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4013b000 munmap(0x40013000, 62075) = 0 open("/dev/testdev", O_RDWR) = 3 ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device) fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40013000 write(1, "errno = 25\n", 11errno = 25 ) = 11
419 名前:417 mailto:sage [05/02/20 21:10:12 ID:0sjUjbHi] つづき dup(2) = 4 fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR) brk(0) = 0x8049a6c brk(0x804aa6c) = 0x804aa6c brk(0) = 0x804aa6c brk(0x804b000) = 0x804b000 fstat64(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(4, 0, 0xbfffef50, SEEK_CUR) = -1 ESPIPE (Illegal seek) write(4, "ioctl: Inappropriate io"..., 47ioctl: Inappropriate ioctl for device ) = 38 close(4) = 0 munmap(0x40014000, 4096) = 0 close(3) = 0 munmap(0x40013000, 4096) = 0 exit_group(1) = ? $ 結果を見ていると実行したおぼえのない以下の行がありました。 ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device) この現象はどこにエラーがある場合におこり得ますか? 知ってる方お願いします。m(_ _)m
420 名前:login:Penguin mailto:sage [05/02/20 21:38:19 ID:uvzGFsyf] 結果じゃなくてソースだそうよ
421 名前:417 mailto:sage [05/02/20 21:48:59 ID:0sjUjbHi] >>420 Please wait for a moment...
422 名前:417 mailto:sage [05/02/20 22:06:08 ID:0sjUjbHi] #define MODULE #define __KERNEL__ #include <linux/module.h> #include <linux/kernel.h> #include <linux/sched.h> #include <linux/fs.h> #include <linux/string.h> static int devmajor=60; static char *devname="testdev"; MODULE_PARM(devmajor, "i"); MODULE_PARM(devname, "s"); #include <asm/uaccess.h> static int devtest_open(struct inode * inode, struct file * file){ MOD_INC_USE_COUNT; return 0; } static int devtest_close(struct inode * inode, struct file * file){ MOD_DEC_USE_COUNT; return 0; } static int devtest_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg){ int i; printk("testdev: ioctl: cmd=%04X\n",cmd); switch(cmd) { case 1: printk("Driver testing\n"); return 0; } return -EINVAL; }
423 名前:417 mailto:sage [05/02/20 22:07:26 ID:0sjUjbHi] つづき static struct file_operations devtest_fops = { ioctl: devtest_ioctl, open: devtest_open, release: devtest_close, }; int init_module(void){ printk("install '%s' into major %d\n",devname,devmajor); if(register_chrdev(devmajor,devname,&devtest_fops)){ printk("device registration error\n"); return -EBUSY; } return 0; } void cleanup_module(void){ printk("remove '%s' from major %d\n",devname,devmajor); if (unregister_chrdev(devmajor,devname)) { printk ("unregister_chrdev failed\n"); } };
424 名前:417 mailto:sage [05/02/20 22:10:07 ID:0sjUjbHi] デバドラ呼び出し部 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <string.h> #include <unistd.h> #include <errno.h> extern int errno; int main(void){ int fd, ret; fd=open("/dev/testdev",O_RDWR); if(fd<0){ fprintf(stderr,"cannot open device\n"); return 1; } errno = 0; ret = ioctl(fd,1); if(ret == -1){ printf("errno = %d\n", errno); perror("ioctl"); } close(fd); return 0; }
425 名前:417 mailto:sage [05/02/20 22:11:43 ID:0sjUjbHi] 以上で全部です。
426 名前:login:Penguin mailto:sage [05/02/20 23:44:25 ID:Ia/OzVXx] >>417 コピペしたら動いたぞ。 2.6.10 でだけど・・・ カキコしたソースで動かしてみそ。
427 名前:417 mailto:sage [05/02/21 00:06:03 ID:bwxnTums] >>426 マジ?しかも、2.6? このソースでコンパイル通った? そして実行結果キボンヌ
428 名前:login:Penguin mailto:sage [05/02/21 00:25:27 ID:PN7I+gvx] >>427 # uname -r 2.6.10-gentoo-r6 /var/log/messages より Feb 20 23:41:06 XXXXX testdev: ioctl: cmd=0001 Feb 20 23:41:06 XXXXX Driver testing 変更点は /dev/wrkdev にしただけ。
429 名前:417 mailto:sage [05/02/21 00:37:25 ID:bwxnTums] >>428 Thanks! こちらもたった今2.6で動作確認したところです。 う〜む、何故2.4ではエラーなんだろ。 もうちょっと自分で調べてみます。 テストしてくれてありがとう >>426 & >>428
430 名前:login:Penguin mailto:sage [05/03/06 13:19:22 ID:PjCVkwmZ] 何気に良スレ みんな頑張れ お気に入りに追加しますた。
431 名前:login:Penguin mailto:sage [2005/03/29(火) 16:05:44 ID:lbUCJwgD] ドライバのread、write関数でminor番号取得する方法ってないんですか? 2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、 片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。 まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。
432 名前:login:Penguin mailto:sage [2005/03/29(火) 23:34:47 ID:ChOvrjsk] private_data を使う、かな?
433 名前:login:Penguin mailto:sage [2005/03/30(水) 11:17:39 ID:tWHa73x6] >>432 サンクス! open時に file->private_data にポインタ突っ込んでおくってことですね。 取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。 修行が足りぬ…orz
434 名前:login:Penguin mailto:sage [2005/04/16(土) 06:28:18 ID:R/hasO1P] usb-hid についての質問です. usb 接続の joypad を,hid-input 経由ではなく, (drivers/usb/usb-skeleton.c のような) usb のデバイスドライバで処理したいと考えています. 問題は,joypad の挿入時に hid-core の probe 関数が呼ばれてしまい, 自作 usb デバイスドライバの probe 関数が呼ばれないことです. 上記の解決策はあるのでしょうか. 自作 usb デバイスドライバ内では, joybad のベンダーID,プロダクトIDを usb_device_id 構造体に設定しています. kernel は 2.6.10 です. よろしくお願いします.
435 名前:434 mailto:sage [2005/04/16(土) 08:17:16 ID:R/hasO1P] 自己レスです. 解決法を見付けたので,書き込みます. drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に, joypad のベンダIDとプロダクトIDを加えることで,解決しそうです. スレ汚し失礼しました.