- 1 名前:login:Penguin [02/01/31 01:14 ID:t3s191ys.net]
- ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
- 358 名前:login:Penguin mailto:sage [04/07/27 03:23 ID:7ve9Hskt.net]
- >>351
要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。 status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。 # IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。
- 359 名前:login:Penguin [04/08/02 14:39 ID:QD1yhPkc.net]
- チップセットのドライバって具体的にはどんなことやってるの?
- 360 名前:login:Penguin [04/08/02 16:42 ID:4u8OC/CN.net]
- すごく恥かしいあんなことやこんなこと
- 361 名前:login:Penguin [04/08/02 17:48 ID:Wbtl3uph.net]
- >>354
激しく気になります。
- 362 名前:login:Penguin mailto:sage [04/08/03 23:29 ID:HnnAhZGX.net]
- 突然ですが、デバドラのioctlからpollやselectって呼べるかどなたか知ってますか?
pollやselectの引数の構造体に何を入れていいのかわかりません。
- 363 名前:login:Penguin mailto:sage [04/08/03 23:47 ID:0P3Qaw2+.net]
- >>356
ioctlのハンドラからsys_selectとか呼びたいって事ですか? 呼べないことはないと思うけど… なんでそんな変な事をする必要があるのか興味がありますな。 引数は普通にselectに食わせているものを同じように渡せば良いはず。
- 364 名前:login:Penguin mailto:sage [04/08/04 09:37 ID:NoJQortH.net]
- >>357
3つのCPUおよびOSがある組込み系のデバドラを考えてます。 普通はioctlやselectをモジュール側に個別に書くのでしょうが、 それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。 ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を 考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
- 365 名前:login:Penguin mailto:sage [04/08/04 10:00 ID:H7hK0Jjq.net]
- >>358
>ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。 ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?
- 366 名前:login:Penguin mailto:sage [04/08/04 10:24 ID:AG/Dol7k.net]
- 一般に、デバドラ内部からシステムコールやライブラリ関数は呼べないよ。
書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを 自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。 カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから 各バージョンすべてで動作する共通コードを書くのは結構大変 泣ける マジで
- 367 名前:login:Penguin mailto:sage [04/08/04 14:21 ID:NoJQortH.net]
- >>359
モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。 表現が下手ですね。文章もあまりうまくないのでごめんなさい。 ライブラリ側では、whileループでバッファの中身をチェックしています。 バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。
- 368 名前:login:Penguin mailto:sage [04/08/04 14:35 ID:NoJQortH.net]
- >>360
ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。 今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、 poll(select)の関数を指すようにしてやっています。 そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。
- 369 名前:login:Penguin mailto:sage [04/08/04 14:40 ID:+wO9AS9w.net]
- >>356 の言う「モジュール」=「ライブラリのソース」は「ユーザランドの
アプリケーションが使うライブラリ」かな?
- 370 名前:login:Penguin mailto:sage [04/08/04 15:22 ID:NoJQortH.net]
- はい。そうです。
わかりにくくてすいません。
- 371 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll.net]
- >>362
なんか、あさっての方向に走ってないか? - poll() したいなら poll() を実装する - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て やりたいことを確認したほうがいいぞ。 - なにをどう待ちたい? - 付加的にやりたいことは何? 後者は、 > なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。 がわからんかったって話。
- 372 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll.net]
- あうあ
- - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て + - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て
- 373 名前:login:Penguin mailto:sage [04/08/05 00:45 ID:CMe3HEND.net]
- 大丈夫か!? >>364よ!!
がんばれよ! 見守ってるからさ!
- 374 名前:login:Penguin [04/08/05 12:51 ID:dMydmJ+4.net]
- 書いてあることだけじゃいまいち要領を得ないが
アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である ようなデバイスで ・ノンブロックでアクセス処理したい ・複数のプロセスから同時にアクセスされる状況に対応したい ・複数のデバイスを一元的に管理したい (リソース管理など) こんな条件だと勝手に仮定すると たしかに大きいデバイスドライバを書いて、そこですべて管理するのも ひとつの解決法ではある。 でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を 実装することも出来るし、唯一の解でもない。 まぁ、情報が出せないというよりは、状況を理解してないので うまく説明できないって感じなので、もうちょっと頭を使って 問題を整理してから、もう一回質問するがよかろう
- 375 名前:login:Penguin [04/10/29 11:01:48 ID:rDkd0V/P.net]
- lsusbだとデバイス名が把握できてるということは、
個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか? linux-2.6において usbcore uhci_hcd cdc_acm という三つのドライバにより動かしたいハードウェアがあるんですが、 cdc_acmをロードしてもうんともすんとも言いません
- 376 名前:login:Penguin mailto:sage [04/10/31 20:53:26 ID:fFX2rhTr.net]
- .netとかjavaみたいなバイトコードなドライバーでハードウェア
を制御する環境を作るって可能ですか?
- 377 名前:login:Penguin mailto:sage [04/10/31 21:36:34 ID:uzVMAm7i.net]
- >>369
まあそうでしょうな。 lsusbはハード的につながっていれば見えるし。 >>370 そりゃ作れん事は無いが… 速度が厳しくないかい?
- 378 名前:login:Penguin mailto:思っただけで、実現する技術が無いので sage [04/11/01 02:36:54 ID:dfNRJQ4+.net]
- >>371
JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが 速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と 何にしてもバイナリの非互換性がどうにかならんかなぁと。 カーネル毎にコンパイルはダリ
- 379 名前:login:Penguin mailto:sage [04/11/01 06:48:36 ID:IqBdvM7D.net]
- >>370
Kernelから呼び出すような仕組みにしても、 Javaで言うnativeなのが無いと駄目じゃない? レジスタとかメモリ領域さわれないし。 結局そこ(nativeなモジュール)で非互換性が出る気がする。
- 380 名前:login:Penguin mailto:sage [04/11/01 15:55:17 ID:lkrLxjNC.net]
- >>373
そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。 PCIあたりならかなりの所まで出来そうな気がするなあ。 そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?
- 381 名前:login:Penguin mailto:sage [04/11/01 22:34:23 ID:dfNRJQ4+.net]
- 成るほど・・・
>>373 やっぱりそういうところで不備が出てきますか。。。言語拡張で・・・となると Javaじゃなくなるし、コンパイラーも自前に用意しなきゃならなくなるし。。。 >>374 漏れもそんな感じの考えでいたんだけど、やっぱそれが難しいんでしょうね。 とはいえ、可能性があることはわかりました。ありがとうございます。 >>OpenFirmware 調べてみましたが上の考えのBIOS版みたいなもんでしょうか? とりあえず、神が現れることを祈りつつ作れる作れない、作る作らないは別として 自分でも調べてみようと思います。厨の妄想に付き合っていただきありがとうございました。
- 382 名前:login:Penguin mailto:sage [04/11/02 12:28:29 ID:lgEgFui9.net]
- カーネルのバージョンによってカーネルが持つ構造体が微妙に違うことがよくある。
(メンパが増えてるとか) 現状のinsmodによるデバイスドライバのダイナミックリンクは その手の構造体の違いを解決してくれないので、原則的に カーネルバージョンに依存したドライバしかリンクできない。 強制的に違うバージョンのドライバをinsmodすることも可能だが 正常に動く保証はない。たまたま動くことはあるけれども。
- 383 名前:login:Penguin mailto:sage [04/11/02 18:53:41 ID:chaRCRYs.net]
- まあソース見て「あーこれなら動くな」と思ったら
迷わず-f
- 384 名前:login:Penguin mailto:sage [04/11/03 13:41:27 ID:1PHyje+L.net]
- ドライバのソースがあるならリビルドする方がいいような気がするのう。
いっぱいコンパイラに怒られたりすると直す気が失せるが…
- 385 名前:login:Penguin mailto:sage いやしかし勉強になる。。。 [04/11/06 23:30:41 ID:9J0OxvoL.net]
- >>376
なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。 いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから んし(嫌味とかじゃなくて本当にわからんのです。) って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・
- 386 名前:login:Penguin mailto:sage [04/11/07 08:11:19 ID:/P0s9FI4.net]
- >>636 > 昨日Linuxにふれたものですから
であり、(非常に一般的なやりかたにもかかわらず)やりかたがわからないとい う人が tamagoをいれたい理由はなにかしら? 特に強い理由がないなら、「いれるな」が正しいガイドだと思うのですよ。 >>635 つかいかたは man xmodmap でみるといい。 キーコードは xev で調べられます。使いかたは man xev でみるといい。
- 387 名前:login:Penguin mailto:sage [04/11/08 12:46:18 ID:ir5Tmuq8.net]
- Xサーバはroot権限のユーザランドプロセスで /dev/ioとか /dev/memに
直接アクセスしてビデオチップを制御する。 Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。
- 388 名前:login:Penguin mailto:sage [04/11/09 23:51:44 ID:+nDFjkMc.net]
- ユーザ空間からmmapでマッピングしてデバイスいじくるときって、
アプリがマッピング先のメモリに書き込む動作と同時に デバイスにデータって書きこまれるんでしょうか? バッファリングみたいのって気にしなくてもいいの?
- 389 名前:login:Penguin mailto:sage [04/11/10 01:00:51 ID:8UeNJl+2.net]
- >>382
デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、 ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。 類似のがある場合はあって、それはキャッシュなのです。 /dev/fb* は通常キャッシュが抑止されています。 /dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。
- 390 名前:login:Penguin mailto:sage [04/11/10 07:34:29 ID:WP1ExQ+t.net]
- PCIデバイスの場合 各共有メモリ空間ごとにprefetchableビットが定義されている
ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる
- 391 名前:login:Penguin mailto:sage [04/11/10 14:40:19 ID:OHaab6bm.net]
- >>383
>>384 CPUキャッシュですか。 環境にもよるのでしょうけど、基本的にはあまり気にしなくてもいいのですね。 実は、drivers/char/mem.c みたんですけど、mmap システムコールを呼んだときと、 そこにアクセスした時のコードの流れがよくわからないのでちょっと???でした。 あとは、コンパイラのオプティマイズも気にしておいたほうがいいのでしょうね。
- 392 名前:login:Penguin mailto:sage [04/11/10 18:01:50 ID:MrVsce1+.net]
- >>385
CPUキャッシュはユーザー空間から叩く手段がないので、 カーネルとハードウエア側の制御にお任せするしかないです。 最適化の方はvolatile付けておけば大丈夫でしょう。 なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
- 393 名前:login:Penguin mailto:sage [04/11/10 23:54:53 ID:8UeNJl+2.net]
- >>385
キャッシュは気にしてください。キャッシュがあると . 書き込みがキャッシュが溢れるまでなされない。 . 読みだしも同様。 . 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう という、デバイスの制御にとっては致命的な
- 394 名前:アとがいろいろ。
[] - [ここ壊れてます]
- 395 名前:382 385 mailto:sage [04/11/11 00:27:04 ID:95L6p31P.net]
- すみません。
キャッシュを気にししなくてもよいと書いたのは、 キャッシュが働かないので、気にしなくても良いという意味で 書いていました。 387さんのおっしゃるとおり、デバイスアクセスでキャッシュが 働いてしまうと、ひどい目にあいますね。 ところで、mmapのキャッシュ無効化ってmem.cの noncached_address を修正すれば有効無効をユーザで 任意に操作可能になるんですかね? ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
- 396 名前:login:Penguin mailto:sage [04/11/12 00:12:24 ID:nxDtrzpb.net]
- >>388
抑止の方は O_SYNC でできますよ。その行の後半の条件がそうでしょ?
- 397 名前:login:Penguin [04/11/14 11:26:16 ID:ZhMJfRu+.net]
- USBサブシステムを読んでいるんですが、
デバイス、バス、ドライバの三つの関係のイメージを 教えてください。なんだかソース読んでいてもよく分かりません。 またxxx_probeという関数に渡ってくるstruct usb_interfaceとは どこで確保されいてる構造体なんでしょうか?
- 398 名前:login:Penguin [04/11/21 11:06:40 ID:RzBM8DsM.net]
- 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使わずに、ちゃんと専用ドライバ使わないとだめなの?
- 399 名前:login:Penguin mailto:sage [04/11/21 17:22:45 ID:fkgrUhvM.net]
- デバイスドライバはカーネルメモリを消費するらしいのですが、
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
- 400 名前:391 [04/11/21 17:37:11 ID:RzBM8DsM.net]
- >390 /usr/include/usb.h
- 401 名前:login:Penguin mailto:age [04/12/12 18:20:03 ID:fch5Qtg6.net]
- 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行目 }
- 402 名前:394 mailto:sage [04/12/12 18:22:17 ID:fch5Qtg6.net]
- あ、マシンは i686です。
- 403 名前:login:Penguin mailto:sage [04/12/14 01:02:15 ID:bnBNd/cw.net]
- たしか-fno-strict-aliasingだったかな。それつけれ。
より詳細が知りたいときはググれ。
- 404 名前:394 mailto:sage [04/12/14 02:47:39 ID:iNH7gUWs.net]
- 産休です>>396
小細工ですが、 (unsigned int*)&(x)を、(unsigned int*)(void*)&(x)に書き換えると、 警告を封じることができますた。 勉強がんばります。
- 405 名前:login:Penguin [04/12/14 11:29:27 ID:HO3MDnt+.net]
- モジュールでmallocを使うと
implicit declaration of function `malloc' なる警告が出ました。 正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。 何かヘッダをincludeすればいいのでしょうか。
- 406 名前:login:Penguin mailto:sage [04/12/14 11:44:22 ID:vlh4D4yl.net]
- >>398
kmalloc() or vmalloc()
- 407 名前:login:Penguin mailto:sage [04/12/14 11:54:53 ID:HO3MDnt+.net]
- >>399
感謝.あとは調べます.
- 408 名前:login:Penguin [04/12/14 15:55:34 ID:ScDxM3L+.net]
- 【序 論】
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。 統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。 日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。 一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、 後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。 もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。 宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。 そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、 北の現体制を維持するための、CIAの有難い配慮だったわけです。 なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。 麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。 今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。 尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。 mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100
- 409 名前:login:Penguin mailto:sage [04/12/14 17:02:39 ID:WBCZfumK.net]
- 国際金融資本と無関係な人はいません。ここが大事なところです。
国際金融資本とダーティーな勢力になんらかの関係があるというのなら、 全ての人間がダーティーな勢力と関係があるということです。
- 410 名前:login:Penguin [04/12/16 00:42:54 ID:HSUTNn3s.net]
- <linux/errno.h>をincludeしているのに、errnoが宣言されていないとエラーが出ます。
なぜですか?
- 411 名前:login:Penguin [04/12/16 00:52:12 ID:fnG8qWZe.net]
- #include <asm/errno.h>
- 412 名前:login:Penguin mailto:sage [04/12/16 03:08:53 ID:L4JhEJTY.net]
- デバイスドライバーをイジルとハードが壊れます
- 413 名前:login:Penguin mailto:sage [05/01/13 20:25:56 ID:5Qhjx5GH.net]
- 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 値を変更するためには、何か工夫が必要なのでしょう か?
- 414 名前:login:Penguin mailto:sage [05/01/13 21:59:07 ID:b26g+4JK.net]
- >>406
jiffesの値が飛ぶせいじゃないの? 初期値をいじる方がいいと思うが。
- 415 名前:login:Penguin mailto:sage [05/01/13 22:21:10 ID:5Qhjx5GH.net]
- やっぱりそれしか方法ないでしょうかね。カーネルコンパイルが億劫で
まだ試していませんでした。 例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、 jiffies += 8640000; にすると、より多くの時間がかかるようです。仮 想マシン環境で実験しているのですが、その間、仮想マシンのプロセス の CPU 使用率は高いままでした。
- 416 名前:login:Penguin mailto:sage [05/01/14 02:03:54 ID:PSu0RjKD.net]
- ん? 何書いてたんだ、俺
>408 は、正しくは以下です。 例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、 jiffies += 864000000; にすると、より多くの時間がかかるようです。
- 417 名前:login:Penguin [05/02/06 11:19:02 ID:+OMlHKxZ.net]
- mmapによるデバイスアクセスについてご教授ください。
16bitアクセス限定のデバイスに対して、 mmapによるアクセスを試行しているのですが、 どうも挙動が怪しくて困っています。 アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、 そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか? なにか考慮が不足してるのでしょうか。
- 418 名前:login:Penguin mailto:sage [05/02/06 14:33:57 ID:JfjjYGk4.net]
- >>410
アーキテクチャわかんないので、過去の経験より。 ・D cache ・コンパイラが勝手に最適化 そういう制限がある場合は、おとなしく専用ドライバ書くのが 近道のような気がしますな。
- 419 名前:login:Penguin [05/02/10 21:10:10 ID:oT40ukFS.net]
- 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 で作成したシステムでないと無理なのでしょうか。
- 420 名前:login:Penguin mailto:sage [05/02/12 01:22:07 ID:QcR6E3eX.net]
- >>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アクセス限定デバイスでもそうならないようにつくることは可能だと思います。 ところどころ言ってるかもしれませんけどね・・・
- 421 名前:413 mailto:sage [05/02/12 01:24:29 ID:QcR6E3eX.net]
- 早速、間違えてました(w
>ところどころ言ってるかもしれませんけどね・・・ ところどころ * うそ * 言ってるかもしれませんけどね・・・
- 422 名前:410 mailto:sage [05/02/16 00:46:02 ID:E/KjMwKc.net]
- いろいろ情報ありがとうございます。
もともとドライバ経由でアクセスしていたのですが、 パフォーマンス的な問題でmmapでを使用したかったという経緯があります。 ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。 ですので、単純にmmapでの処理の問題かと思っていました。 時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。
- 423 名前:login:Penguin [05/02/16 22:28:50 ID:mypLuczy.net]
- www.netfort.gr.jp/~matsu/lcd_pc/lcd_pc.html
これカコイイ
- 424 名前:login:Penguin mailto:sage [05/02/20 21:06:04 ID:0sjUjbHi.net]
- 現在、デバイスドライバ作成(とりあえずキャラクタ型)の勉強しているのですが、
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で表示させてみたところ
- 425 名前:417 mailto:sage [05/02/20 21:09:12 ID:0sjUjbHi.net]
- つづき
そこで、さらに詳細に状況を確認するために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
- 426 名前:417 mailto:sage [05/02/20 21:10:12 ID:0sjUjbHi.net]
- つづき
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
- 427 名前:login:Penguin mailto:sage [05/02/20 21:38:19 ID:uvzGFsyf.net]
- 結果じゃなくてソースだそうよ
- 428 名前:417 mailto:sage [05/02/20 21:48:59 ID:0sjUjbHi.net]
- >>420
Please wait for a moment...
- 429 名前:417 mailto:sage [05/02/20 22:06:08 ID:0sjUjbHi.net]
- #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; }
- 430 名前:417 mailto:sage [05/02/20 22:07:26 ID:0sjUjbHi.net]
- つづき
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,
- 431 名前:&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"); } }; [] - [ここ壊れてます]
- 432 名前:417 mailto:sage [05/02/20 22:10:07 ID:0sjUjbHi.net]
- デバドラ呼び出し部
#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; }
- 433 名前:417 mailto:sage [05/02/20 22:11:43 ID:0sjUjbHi.net]
- 以上で全部です。
- 434 名前:login:Penguin mailto:sage [05/02/20 23:44:25 ID:Ia/OzVXx.net]
- >>417
コピペしたら動いたぞ。 2.6.10 でだけど・・・ カキコしたソースで動かしてみそ。
- 435 名前:417 mailto:sage [05/02/21 00:06:03 ID:bwxnTums.net]
- >>426
マジ?しかも、2.6? このソースでコンパイル通った? そして実行結果キボンヌ
- 436 名前:login:Penguin mailto:sage [05/02/21 00:25:27 ID:PN7I+gvx.net]
- >>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 にしただけ。
- 437 名前:417 mailto:sage [05/02/21 00:37:25 ID:bwxnTums.net]
- >>428
Thanks! こちらもたった今2.6で動作確認したところです。 う〜む、何故2.4ではエラーなんだろ。 もうちょっと自分で調べてみます。 テストしてくれてありがとう >>426 & >>428
- 438 名前:login:Penguin mailto:sage [05/03/06 13:19:22 ID:PjCVkwmZ.net]
- 何気に良スレ
みんな頑張れ お気に入りに追加しますた。
- 439 名前:login:Penguin mailto:sage [2005/03/29(火) 16:05:44 ID:lbUCJwgD.net]
- ドライバのread、write関数でminor番号取得する方法ってないんですか?
2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、 片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。 まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。
- 440 名前:login:Penguin mailto:sage [2005/03/29(火) 23:34:47 ID:ChOvrjsk.net]
- private_data を使う、かな?
- 441 名前:login:Penguin mailto:sage [2005/03/30(水) 11:17:39 ID:tWHa73x6.net]
- >>432
サンクス! open時に file->private_data にポインタ突っ込んでおくってことですね。 取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。 修行が足りぬ…orz
- 442 名前:login:Penguin mailto:sage [2005/04/16(土) 06:28:18 ID:R/hasO1P.net]
- 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 です. よろしくお願いします.
- 443 名前:434 mailto:sage [2005/04/16(土) 08:17:16 ID:R/hasO1P.net]
- 自己レスです.
解決法を見付けたので,書き込みます. drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に, joypad のベンダIDとプロダクトIDを加えることで,解決しそうです. スレ汚し失礼しました.
- 444 名前:login:Penguin mailto:sage [2005/05/17(火) 18:53:06 ID:CbytfkQn.net]
- 2.6 kernel(2.6.11.x)上でデバドラ書く場合、
MOD_INC_USE_COUNT MOD_DEC_USE_COUNT を使用する事ってobsolete?
- 445 名前:login:Penguin [2005/05/18(水) 01:07:17 ID:2baf1QgQ.net]
- >>436
れがし
- 446 名前:login:Penguin mailto:sage [2005/05/19(木) 23:52:14 ID:m1yq1rQI.net]
- カーネル2.6.8(turbolinux10Server)でデバイスドライバを開発しています。
ドライバAでエクスポートしたシンボルをドライバBでコールしたいのですが、 ドライバBのinsmod時に"Unknown symbol"エラーが出てしまいます。 そこで、単純なソースで確認してみたのですが、同様の状態でした。 同様のソースをカーネル2.4.18(turbolinux8Server)でコンパイルしてinsmod したところ上手く動作したのですが、カーネル2.6では何か手続きが必要 なのでしょうか? 確認したソースは以下の通りです ==ドライバA== #include <linux/module.h> #include <linux/kernel.h> #include <linux/version.h> int __init test_init_module (void) { printk("test : init_module\n"); s_print(); return 0; } void __exit test_cleanup_module (void) { printk("test : cleanup_module\n"); return 0; } void s_print(void) { printk("Hello, World!\n"); } module_init(test_init_module) module_exit(test_cleanup_module)
- 447 名前:login:Penguin [2005/05/19(木) 23:52:48 ID:m1yq1rQI.net]
- ==ドライバB==
#include <linux/module.h> #include <linux/kernel.h> extern void s_print(); int __init test2_init_module (void) { printk("test2 : init_module\n"); s_print(); return 0; } void __exit test2_cleanup_module (void) { printk("test2 : cleanup_module\n"); return 0; } module_init(test2_init_module) module_exit(test2_cleanup_module)
- 448 名前:login:Penguin [2005/05/19(木) 23:57:30 ID:m1yq1rQI.net]
- ==コンパイル手順==
cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__ -DMODULE -DKBUILD_MODNAME=test initial.c /usr/src/linux/scripts/mod/modpost initial.o cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__-DMODULE -DKBUILD_MODNAME=test -c -o initial.mod.o initial.mod.c ld -r -o test.ko initial.o initial.mod.o ==動作確認== # insmod test.ko // シンボルのエクスポートを確認 # cat /proc/kallsyms | grep s_print f8xxxxxx T s_print [test] # insmod test2.ko test2 : Unknown symbol in module 's_print' となります。実機が側にないので出力メッセージは大体こんな感じということで。 よろしくお願いします。
- 449 名前:login:Penguin mailto:sage [2005/05/20(金) 03:04:35 ID:Ds9MyJAI.net]
- >>440
カーネルソースんとこでs_printグレップしようぜ 具烈婦 レップってすごいなコレ。どういう意味だ
- 450 名前:login:Penguin [2005/05/20(金) 08:58:08 ID:zG+tsX8i.net]
- >>441
烈婦ワロタ レスありがとうございます。 s_printでgrepしてみたのですが、同名のシンボルは無いようでした。 念のため、ドライバAに EXPORT_SYMBOL(s_print); を追加しても'Unknown symbol'になってしまいます。 ドライバ間の依存関係をどこかで明示する必要があるのでしょうか?
- 451 名前:login:Penguin mailto:sage [2005/06/07(火) 10:17:39 ID:6uaL4exB.net]
- 普通はそんなことはできないんじゃない?
誰かができると言ったのかな? デバイスファイル開いてioctlをコールが普通じゃねぇの?
- 452 名前:login:Penguin mailto:sage [2005/06/17(金) 18:54:11 ID:9kSGojSd.net]
- www.oreilly.com/catalog/linuxdrive3/book/index.csp
Linux Device Drivers, Third Edition
- 453 名前:login:Penguin mailto:sage [2005/06/18(土) 19:13:08 ID:Uc6V46BE.net]
- >>444
chapter1まで読んだ。 Policy-free driversの意味がまったく分からない。 うえーん
- 454 名前:login:Penguin mailto:sage [2005/06/19(日) 15:13:18 ID:f3bsYXGy.net]
- the role of a device driver is providing mechanism, not policy.
これが、policy-free
- 455 名前:login:Penguin mailto:sage [2005/06/19(日) 15:19:24 ID:f3bsYXGy.net]
- ここでのfreeはduty freeのfreeと同じ使われ方。
policyがないdriver
- 456 名前:login:Penguin [2005/06/29(水) 18:33:32 ID:hcN+gVRw.net]
- カーネル2.4.28を使用して、EZ USB FX2のドライバを作成しています。
USBを4つさし、ここに、デバイスドライバを作成します。デバイスドライバは、 カーネルにあるusb-skelton.cを使って作成しました。3つまでさして、制御した場合、 動作したのですが、4つさし、アプリを動かずとドライバが死にます。 4つとも、ここにドライバを作成し、メジャー番号180 で、それぞれ、 マイナー番号を100 120 140 160としました。 open / closeのみを行うプログラムを作成し、何回か行いました。 何回かおこなうと、ドライバが死にます。 ドライバソースを追っていったのですが、open時に dev = minor_table[minor] という行でdevが0になっていました。 minor_tableは、probe関数で取得しているのですが、なぜNULLになったのか なぞです。どなたかわかる方いらっしゃいますか?
- 457 名前:login:Penguin [2005/06/29(水) 18:42:20 ID:Cc/icRgl.net]
- Linux のドライバのプログラミングの
良い入門書があったらおしえてください
- 458 名前:login:Penguin mailto:sage [2005/06/29(水) 22:17:33 ID:OM3Tds/i.net]
- >>448
Kernel2.4.27のソースしか見てないので違ったら失礼。 >マイナー番号を100 120 140 160としました。 これがよくわからん。デフォでは192から16個を順番に割り当てるようになってるが、それをわざわざいじったってことか? そうなると、スケルトンをあちこち変更してあるのだろうから、さすがにソース無いとなんも判らん。
|

|