ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
ディバイスドライバをハックしよう!
■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
02/01/31 01:14ID:t3s191ys04/01/16 19:15ID:JS8EwlnL
とりあえず、lspci -vvv を晒してみたらどうでしょう。
もちろんデバイス指定でね。
それを見て私が答えられるかどうかはまた別の話ですけど。
もちろんデバイス指定でね。
それを見て私が答えられるかどうかはまた別の話ですけど。
299login:Penguin
04/01/16 19:52ID:ZUOtu/O9 lspci -vvvで次のような表示になりました。
00:11.0 Class ff00: Altera Corporation: Unknown device 1998 (rev 07)
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 16
Region 0: Memory at dffe0000 (32-bit, non-prefetchable) [size=64K]
00:11.0 Class ff00: Altera Corporation: Unknown device 1998 (rev 07)
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 16
Region 0: Memory at dffe0000 (32-bit, non-prefetchable) [size=64K]
300298
04/01/16 20:57ID:JS8EwlnL FPGAですね。
私もそんなに知っているわけではないので、
あまりあてにはしないで欲しいのですけれど…
lspciの結果は特に変なところは無いと思います。
Class ff00はどのクラスにも属さないと言うことだと思うのでちょっと気にはなりますが、
読み書きぐらいはできるでしょうね、きっと。
だとすると、あとはドライバのソースでチョンボがあるか
FPGAの中で書きこみ禁止になっているとかですかね。
FPGAにどんなipが載っているのか分からないので、あくまで推測ですけど。
あんまり力になれなくてごめんね。
私もそんなに知っているわけではないので、
あまりあてにはしないで欲しいのですけれど…
lspciの結果は特に変なところは無いと思います。
Class ff00はどのクラスにも属さないと言うことだと思うのでちょっと気にはなりますが、
読み書きぐらいはできるでしょうね、きっと。
だとすると、あとはドライバのソースでチョンボがあるか
FPGAの中で書きこみ禁止になっているとかですかね。
FPGAにどんなipが載っているのか分からないので、あくまで推測ですけど。
あんまり力になれなくてごめんね。
04/01/18 02:27ID:+zT3hNOG
>>298
read/writeのかわりに
ioremap_nocache()で対象アドレスのページを取得して、
ポインタで直接参照してみたら?
よみたい物理アドレスが
(unsigned int) p_adr
だとしたら
unsigned char p_read(unsigned int p_adr){
unsigned int v_page,v_offset;
unsigned char ret;
v_offset=p_adr&0x0fff;
v_page=ioremap_nocache(p_adr&0xfffff000, 0x1000);
ret=*((unsigned char *)(v_page + v_offset));
iounmap(v_page);
return (ret);
}
適当だけどこんな感じで。ページサイズが4K決め打ちだけど。
read/writeのかわりに
ioremap_nocache()で対象アドレスのページを取得して、
ポインタで直接参照してみたら?
よみたい物理アドレスが
(unsigned int) p_adr
だとしたら
unsigned char p_read(unsigned int p_adr){
unsigned int v_page,v_offset;
unsigned char ret;
v_offset=p_adr&0x0fff;
v_page=ioremap_nocache(p_adr&0xfffff000, 0x1000);
ret=*((unsigned char *)(v_page + v_offset));
iounmap(v_page);
return (ret);
}
適当だけどこんな感じで。ページサイズが4K決め打ちだけど。
302login:Penguin
04/01/18 02:28ID:+zT3hNOG あ>>299のマチガイだ。
04/01/19 07:32ID:kPFQP2Tn
PCIバスアナライザで観測しながらアクセスしてみそ
04/01/22 14:27ID:O8v9hJ5s
305login:Penguin
04/01/28 10:42ID:N5b+GE5n マジレスすれば
ロジアナでPCIバスを観測するか、PCIバスアナライザを使うか
どっちかしないと、PCIデバイス/ドライバの開発は無理だろう
ロジアナでPCIバスを観測するか、PCIバスアナライザを使うか
どっちかしないと、PCIデバイス/ドライバの開発は無理だろう
04/01/28 12:46ID:OnT2yC/X
んなこたーない!
297 が FPGA開発を同時にやってるならまだしも・・・
あったほうが楽なのは確かだが、無理ではない。
ハード屋さんはバスレベルで確認して提出するはず。
read/write 出来ないのはドライバの不具合。
>>297 は pci_find_device 関数など、基本から勉強したほうがよさそう。
297 が FPGA開発を同時にやってるならまだしも・・・
あったほうが楽なのは確かだが、無理ではない。
ハード屋さんはバスレベルで確認して提出するはず。
read/write 出来ないのはドライバの不具合。
>>297 は pci_find_device 関数など、基本から勉強したほうがよさそう。
307305
04/01/28 15:27ID:N5b+GE5n 無理ではないって言っても、そんなマゾプレイみたいなコトしたくないよ
目隠しして半田付けしろっていうのに近いな
PCIのロジックって複雑だから、実機でバグが露呈するのはよくあること
430FXで動いたからって 875Pでは動かないとか余裕であるよ
市場に流通してるチップセットすべてで確認しないと市販は無理
名の通った枯れてるチップならまだしも、実機の動作チェックもしてない
FPGAの回路をつかったPCIカードなら、最初から疑ってかからなきゃダメだと思います
> ハード屋さんはバスレベルで確認して提出するはず。
PCIバスの全パターンをシミュレーションできる検証ツールってすごく高いよ
特にFPGAの開発のために検証環境買うのはコストにあわない
PCIバスアナライザがある環境で実機試験して、少しずつ直すほうが早くて安い
目隠しして半田付けしろっていうのに近いな
PCIのロジックって複雑だから、実機でバグが露呈するのはよくあること
430FXで動いたからって 875Pでは動かないとか余裕であるよ
市場に流通してるチップセットすべてで確認しないと市販は無理
名の通った枯れてるチップならまだしも、実機の動作チェックもしてない
FPGAの回路をつかったPCIカードなら、最初から疑ってかからなきゃダメだと思います
> ハード屋さんはバスレベルで確認して提出するはず。
PCIバスの全パターンをシミュレーションできる検証ツールってすごく高いよ
特にFPGAの開発のために検証環境買うのはコストにあわない
PCIバスアナライザがある環境で実機試験して、少しずつ直すほうが早くて安い
04/01/28 18:36ID:XM3JMqvR
04/01/28 19:09ID:ceOaOw14
> そーゆーのはハード屋さんの仕事じゃないかと。
おれもそう思う。
でも、実際はソフト組み込んだらなんかおかしくて、
実は結局、微妙にハードが悪かったなんて事は良くある話だね。
きっと >>305 は苦い思いをしたんだろうよ。
おれもそう思う。
でも、実際はソフト組み込んだらなんかおかしくて、
実は結局、微妙にハードが悪かったなんて事は良くある話だね。
きっと >>305 は苦い思いをしたんだろうよ。
04/01/29 18:47ID:ci1wDtTm
>実は結局、微妙にハードが悪かったなんて事は良くある話だね。
ハード絡みやってりゃ必ずあるね。
慣れてくればハード、ソフトどっちが悪いか何となくわかるようになるけど。
制御チップ動かす時なんかはオシロ、ロジアナの出番が増える。
さすがに PCI制御用FPGAまで計測器突っ込んだ亊はないけどね・・・
そこまで行くと スレ違いですね >> 307
ハード絡みやってりゃ必ずあるね。
慣れてくればハード、ソフトどっちが悪いか何となくわかるようになるけど。
制御チップ動かす時なんかはオシロ、ロジアナの出番が増える。
さすがに PCI制御用FPGAまで計測器突っ込んだ亊はないけどね・・・
そこまで行くと スレ違いですね >> 307
311307
04/01/30 07:19ID:tIkj6Ynv 私はPWBAからASIC/FPGA デバイスドライバ アプリ まで全部自分で開発する
ある意味何でも屋です
FPGAの検証を実機でやるときにデバイスドライバを作ってるはずだから
バスレベルで動作検証済なら、そのとき使ったドライバをハード屋さんから
もらってくればいいんだと思います
もちろんLinuxじゃない別のOSで検証してる場合もあるだろうけど
今の時代はLinuxでやってるケースがほとんどではないかなぁ
Linuxは
1. ソースが公開されてて、ドキュメントも多くドライバ書くのが楽
2. CDからブートしてRAMDISKだけで動くシステムを簡単に作れる
等の利点があって、特に2が重要
PCIバスのハードのデバッグだとしばしばフリーズするので
正しくshutdownしないままリセットすることが頻発する。
winだろうがlinuxだろうがHDDにOSが入ってるシステムだと、
リセット連発していると、次の起動時に時間がかかるし
そのうちHDDの内容が不整合を起こしてくる。
1CD ramdiskオンリー システムだと、気軽にリセットできて楽なんだ。
まぁlinuxじゃなくてFreeBSDでもいいんだけど。
私は5〜6年くらい前はFreeBSD(2.x/3.xの時代)でPCIカードのハードのデバグ
やってたけど、今世紀に入ってからLinux(2.2の頃から)でやるようになった。
時代の流れで、商品としてlinuxへの対応が必要ってことになったので
最初からlinux用のドライバ書いておけば後が楽になるからね。
スレ違いだったかな
駄文失礼
ある意味何でも屋です
FPGAの検証を実機でやるときにデバイスドライバを作ってるはずだから
バスレベルで動作検証済なら、そのとき使ったドライバをハード屋さんから
もらってくればいいんだと思います
もちろんLinuxじゃない別のOSで検証してる場合もあるだろうけど
今の時代はLinuxでやってるケースがほとんどではないかなぁ
Linuxは
1. ソースが公開されてて、ドキュメントも多くドライバ書くのが楽
2. CDからブートしてRAMDISKだけで動くシステムを簡単に作れる
等の利点があって、特に2が重要
PCIバスのハードのデバッグだとしばしばフリーズするので
正しくshutdownしないままリセットすることが頻発する。
winだろうがlinuxだろうがHDDにOSが入ってるシステムだと、
リセット連発していると、次の起動時に時間がかかるし
そのうちHDDの内容が不整合を起こしてくる。
1CD ramdiskオンリー システムだと、気軽にリセットできて楽なんだ。
まぁlinuxじゃなくてFreeBSDでもいいんだけど。
私は5〜6年くらい前はFreeBSD(2.x/3.xの時代)でPCIカードのハードのデバグ
やってたけど、今世紀に入ってからLinux(2.2の頃から)でやるようになった。
時代の流れで、商品としてlinuxへの対応が必要ってことになったので
最初からlinux用のドライバ書いておけば後が楽になるからね。
スレ違いだったかな
駄文失礼
04/02/03 23:12ID:j9rA+N1w
>駄文失礼
気にしなくていいぜ。(w
気にしなくていいぜ。(w
313login:Penguin
04/02/09 07:11ID:7h6uvjnn すいません、どうしようもない質問なんですが、
実験的にカーネルパニックを発生させるドライバを作るのには
どうすればよいでしょうか?
カーネル関数panic()を使っても
ハングするだけでパニックしないんです。。。
どうか教えてください。
実験的にカーネルパニックを発生させるドライバを作るのには
どうすればよいでしょうか?
カーネル関数panic()を使っても
ハングするだけでパニックしないんです。。。
どうか教えてください。
04/02/09 20:13ID:oe9mNV77
このスレは俺に勇気をくれた。
04/02/10 00:02ID:0xm4A1oM
04/02/10 00:52ID:4iNUE3rF
>>313->panic();
317login:Penguin
04/02/10 21:13ID:WwFCucZO >>315−316
返信ありがとうございます!
単純にパニックするよりoops画面が表示するようにしたいのです。
mmapあたりをいじくるドライバを作れば、
oops画面を表示させることは可能ですか?
返信ありがとうございます!
単純にパニックするよりoops画面が表示するようにしたいのです。
mmapあたりをいじくるドライバを作れば、
oops画面を表示させることは可能ですか?
319login:Penguin
04/02/11 00:21ID:QfDGoor4 >>318
似たようなので、
x=0;
x=x/x;
ってのをやってみたのですがダメですた。
やっぱLinuxって頑強だと思いますた。
mmapも見てみたらカーネル空間でなく補助記憶空間に
マップするだけのようですし・・・
アドレス例外でoopsできるような方法とかあるのですかね??
似たようなので、
x=0;
x=x/x;
ってのをやってみたのですがダメですた。
やっぱLinuxって頑強だと思いますた。
mmapも見てみたらカーネル空間でなく補助記憶空間に
マップするだけのようですし・・・
アドレス例外でoopsできるような方法とかあるのですかね??
04/02/11 17:17ID:ViS2X9Xm
Oopsとpanicを混同しているような気がしないでもない。
321login:Penguin
04/02/12 00:21ID:9Bh5Rhh+04/02/14 07:34ID:kX0ZpYOB
linuxはsolarisみたいにクラッシュダンプ取れますか??
04/02/16 00:01ID:dUYGf/LZ
04/02/19 02:35ID:tYIYueC9
Linuxでのデバイス・ノード管理は現在
従来の/dev以下のデバイス・ノードファイル、devfs、udevが
存在しているようですが、デバイスドライバを書くような
デバドラ開発者にはこの状態は影響するのでしょうか?
従来の/dev以下のデバイス・ノードファイル、devfs、udevが
存在しているようですが、デバイスドライバを書くような
デバドラ開発者にはこの状態は影響するのでしょうか?
325login:Penguin
04/02/19 10:34ID:iwEBqmwA 私は従来の/dev以下のデバイス・ノードファイルを使ってます
devfsに対応するのも簡単だけど優先度低いから先送り
devfsに対応するのも簡単だけど優先度低いから先送り
04/02/24 22:37ID:BGHqYIMS
modpostについて詳しく解説している文書をご存知でしたら教えて下さい。
04/03/17 23:57ID:P4QfZyWd
データシートをどうやって手に入れるか
それが問題だ
それが問題だ
04/03/18 10:56ID:WBeyRceU
何のデータシート?
329login:Penguin
04/04/08 16:25ID:E32BiKCa mmapについて質問させてください。
メモリデバイスをmmapするとき、ページサイズを4096Byteとした場合、
mmapされたデバイスの先頭からの"物理アドレス"と
mmapしたプロセスのデバイスに割り当てられた"仮想アドレス"の
下位12bit(2^12 = 4096)は一致するのでしょうか?
mmapではプロセスの仮想空間にページサイズ単位で
ファイルやデバイスを割り当てることが出来るわけですよね。
ページサイズが関係してくると言うことはMMUのようなものが
作用して、この割り当てを管理しているのですよね。
(あるいはMMUそのものなんですか?そこが分かってないのですが)
もしも、MMUの管理下にあるならば、実空間と仮想空間のアドレスの
下位12bitは一致するはずです。
MMUはページサイズ以下のアドレスを知らないはずですから。
ここまでは私の理解に間違えはないですよね。
でも、mmapが実際にどんな風に動いているか良く分からないので、
上のような疑問が沸いてしまったのです。
どなたかお分かりいになる方がいましたら教えてください。
メモリデバイスをmmapするとき、ページサイズを4096Byteとした場合、
mmapされたデバイスの先頭からの"物理アドレス"と
mmapしたプロセスのデバイスに割り当てられた"仮想アドレス"の
下位12bit(2^12 = 4096)は一致するのでしょうか?
mmapではプロセスの仮想空間にページサイズ単位で
ファイルやデバイスを割り当てることが出来るわけですよね。
ページサイズが関係してくると言うことはMMUのようなものが
作用して、この割り当てを管理しているのですよね。
(あるいはMMUそのものなんですか?そこが分かってないのですが)
もしも、MMUの管理下にあるならば、実空間と仮想空間のアドレスの
下位12bitは一致するはずです。
MMUはページサイズ以下のアドレスを知らないはずですから。
ここまでは私の理解に間違えはないですよね。
でも、mmapが実際にどんな風に動いているか良く分からないので、
上のような疑問が沸いてしまったのです。
どなたかお分かりいになる方がいましたら教えてください。
04/04/08 17:57ID:/VjqMrH1
>>329
つ[ mmap.c ]
つ[ mmap.c ]
331login:Penguin
04/04/09 00:53ID:E9wQ2At3 いいなこのスレ
04/04/09 00:58ID:ImS0ZAox
>>330
ha?
ha?
04/04/09 00:59ID:ImS0ZAox
あぁソース嫁ってことかw
04/04/09 14:52ID:8RpqlllW
04/04/09 15:39ID:dsP5+/oo
2次キャッシュを UBS mem に格納して使いたし。可能?
04/04/09 21:34ID:/keZpBhh
>>335
CPUの2次キャッシュをUSBメモリにやらせるってこと?
CPUの2次キャッシュをUSBメモリにやらせるってこと?
337login:Penguin
04/04/10 01:41ID:04yJkWho AGE
338login:Penguin
04/04/13 23:49ID:bzoEXS/o USBのデバイスドライバ作る時のTIPSを教えてください
04/04/14 15:26ID:XimV19c+
デバイスを破壊出来るデバイスドライバーの作り方教えてください
04/04/14 23:18ID:QKI6oVKA
>>339
1.どこからかゴルフのドライバーを手に入れる。
2.ドライバーのフェイスにデバイスを貼り付ける(ガムテープでも可)
しかる後にドライバーを振りかぶり、路面、ブロック塀etc.にぶつけること。
1.どこからかゴルフのドライバーを手に入れる。
2.ドライバーのフェイスにデバイスを貼り付ける(ガムテープでも可)
しかる後にドライバーを振りかぶり、路面、ブロック塀etc.にぶつけること。
04/04/15 10:49ID:D/fT1Zhi
>>340
( ´д)ヒソ(´д`)ヒソ(д` )
( ´д)ヒソ(´д`)ヒソ(д` )
04/04/19 20:10ID:TjHP8JDs
04/04/27 21:12ID:ftQXOuAJ
v2.6.x 用の module (.ko) の作り方ってどっかに落ちてませんか?
v2.4.x だと gcc -c するだけで insmod できるイメージができましたが、
v2.6.x だとなんか後工程があるんですよね?
v2.4.x だと gcc -c するだけで insmod できるイメージができましたが、
v2.6.x だとなんか後工程があるんですよね?
344login:Penguin
04/04/27 21:18ID:VEIU93yI04/04/28 09:36ID:r7A4ZD5z
04/04/29 22:03ID:ugZV/Avt
>>344
CDDのトレイを開け閉めする位ならioctlで……
CDDのトレイを開け閉めする位ならioctlで……
347login:Penguin
04/05/05 09:59ID:IcDQ6/Fz v2.4でUSBキーボードドライバにRAWレベルアクセスする方法知りませんか?
usb/usbkbd.cを単品でモジュール化してみたけど、プログラムからのアクセス
方法がわからない・・・
usb_register時にマイナーバージョンの情報を登録してないみたいだけど
デバイスファイルでアクセスしようと思うと無理なのかな〜・・・
usb/usbkbd.cを単品でモジュール化してみたけど、プログラムからのアクセス
方法がわからない・・・
usb_register時にマイナーバージョンの情報を登録してないみたいだけど
デバイスファイルでアクセスしようと思うと無理なのかな〜・・・
348login:Penguin
04/07/17 17:55ID:z93SFsgN 落ちそう・・・見込みなさそうだけど上げ
349login:Penguin
04/07/18 17:33ID:qhsm/Ia2350login:Penguin
04/07/27 03:02ID:AwmCdxXPMoz2chで見てると
レスがだんだん右にずれていくます。
351login:Penguin
04/07/27 03:08ID:AwmCdxXPUSBに2台のWebカメラをつなげてまちゅが
May 30 08:31:05 localhost kernel: usb-uhci.c: interrupt,status 3, frame# 1728
しばらく動いた後に/var/log/messageに出力されてカメラがハングしてちまいます。
USBのデバイスドライバは何を言ったのでしょうか?おちえてください。
04/07/27 03:23ID:7ve9Hskt
>>351
要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。
status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。
# IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。
要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。
status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。
# IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。
353login:Penguin
04/08/02 14:39ID:QD1yhPkc チップセットのドライバって具体的にはどんなことやってるの?
354login:Penguin
04/08/02 16:42ID:4u8OC/CN すごく恥かしいあんなことやこんなこと
355login:Penguin
04/08/02 17:48ID:Wbtl3uph >>354
激しく気になります。
激しく気になります。
04/08/03 23:29ID:HnnAhZGX
突然ですが、デバドラのioctlからpollやselectって呼べるかどなたか知ってますか?
pollやselectの引数の構造体に何を入れていいのかわかりません。
pollやselectの引数の構造体に何を入れていいのかわかりません。
04/08/03 23:47ID:0P3Qaw2+
>>356
ioctlのハンドラからsys_selectとか呼びたいって事ですか?
呼べないことはないと思うけど…
なんでそんな変な事をする必要があるのか興味がありますな。
引数は普通にselectに食わせているものを同じように渡せば良いはず。
ioctlのハンドラからsys_selectとか呼びたいって事ですか?
呼べないことはないと思うけど…
なんでそんな変な事をする必要があるのか興味がありますな。
引数は普通にselectに食わせているものを同じように渡せば良いはず。
04/08/04 09:37ID:NoJQortH
>>357
3つのCPUおよびOSがある組込み系のデバドラを考えてます。
普通はioctlやselectをモジュール側に個別に書くのでしょうが、
それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。
ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を
考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
3つのCPUおよびOSがある組込み系のデバドラを考えてます。
普通はioctlやselectをモジュール側に個別に書くのでしょうが、
それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。
ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を
考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
04/08/04 10:00ID:H7hK0Jjq
>>358
>ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。
ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?
>ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。
ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?
04/08/04 10:24ID:AG/Dol7k
一般に、デバドラ内部からシステムコールやライブラリ関数は呼べないよ。
書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを
自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。
カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから
各バージョンすべてで動作する共通コードを書くのは結構大変
泣ける マジで
書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを
自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。
カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから
各バージョンすべてで動作する共通コードを書くのは結構大変
泣ける マジで
04/08/04 14:21ID:NoJQortH
>>359
モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。
表現が下手ですね。文章もあまりうまくないのでごめんなさい。
ライブラリ側では、whileループでバッファの中身をチェックしています。
バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。
モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。
表現が下手ですね。文章もあまりうまくないのでごめんなさい。
ライブラリ側では、whileループでバッファの中身をチェックしています。
バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。
04/08/04 14:35ID:NoJQortH
>>360
ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。
今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、
poll(select)の関数を指すようにしてやっています。
そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。
ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。
今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、
poll(select)の関数を指すようにしてやっています。
そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。
04/08/04 14:40ID:+wO9AS9w
>>356 の言う「モジュール」=「ライブラリのソース」は「ユーザランドの
アプリケーションが使うライブラリ」かな?
アプリケーションが使うライブラリ」かな?
04/08/04 15:22ID:NoJQortH
はい。そうです。
わかりにくくてすいません。
わかりにくくてすいません。
04/08/05 00:11ID:UYjeE7ll
>>362
なんか、あさっての方向に走ってないか?
- poll() したいなら poll() を実装する
- イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
やりたいことを確認したほうがいいぞ。
- なにをどう待ちたい?
- 付加的にやりたいことは何?
後者は、
> なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
がわからんかったって話。
なんか、あさっての方向に走ってないか?
- poll() したいなら poll() を実装する
- イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
やりたいことを確認したほうがいいぞ。
- なにをどう待ちたい?
- 付加的にやりたいことは何?
後者は、
> なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
がわからんかったって話。
04/08/05 00:11ID:UYjeE7ll
あうあ
- - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
+ - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て
- - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
+ - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て
04/08/05 00:45ID:CMe3HEND
大丈夫か!? >>364よ!!
がんばれよ! 見守ってるからさ!
がんばれよ! 見守ってるからさ!
368login:Penguin
04/08/05 12:51ID:dMydmJ+4 書いてあることだけじゃいまいち要領を得ないが
アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である
ようなデバイスで
・ノンブロックでアクセス処理したい
・複数のプロセスから同時にアクセスされる状況に対応したい
・複数のデバイスを一元的に管理したい (リソース管理など)
こんな条件だと勝手に仮定すると
たしかに大きいデバイスドライバを書いて、そこですべて管理するのも
ひとつの解決法ではある。
でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を
実装することも出来るし、唯一の解でもない。
まぁ、情報が出せないというよりは、状況を理解してないので
うまく説明できないって感じなので、もうちょっと頭を使って
問題を整理してから、もう一回質問するがよかろう
アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である
ようなデバイスで
・ノンブロックでアクセス処理したい
・複数のプロセスから同時にアクセスされる状況に対応したい
・複数のデバイスを一元的に管理したい (リソース管理など)
こんな条件だと勝手に仮定すると
たしかに大きいデバイスドライバを書いて、そこですべて管理するのも
ひとつの解決法ではある。
でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を
実装することも出来るし、唯一の解でもない。
まぁ、情報が出せないというよりは、状況を理解してないので
うまく説明できないって感じなので、もうちょっと頭を使って
問題を整理してから、もう一回質問するがよかろう
369login:Penguin
04/10/29 11:01:48ID:rDkd0V/P lsusbだとデバイス名が把握できてるということは、
個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか?
linux-2.6において
usbcore
uhci_hcd
cdc_acm
という三つのドライバにより動かしたいハードウェアがあるんですが、
cdc_acmをロードしてもうんともすんとも言いません
個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか?
linux-2.6において
usbcore
uhci_hcd
cdc_acm
という三つのドライバにより動かしたいハードウェアがあるんですが、
cdc_acmをロードしてもうんともすんとも言いません
04/10/31 20:53:26ID:fFX2rhTr
.netとかjavaみたいなバイトコードなドライバーでハードウェア
を制御する環境を作るって可能ですか?
を制御する環境を作るって可能ですか?
04/10/31 21:36:34ID:uzVMAm7i
04/11/01 02:36:54ID:dfNRJQ4+
>>371
JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが
速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と
何にしてもバイナリの非互換性がどうにかならんかなぁと。
カーネル毎にコンパイルはダリ
JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが
速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と
何にしてもバイナリの非互換性がどうにかならんかなぁと。
カーネル毎にコンパイルはダリ
04/11/01 06:48:36ID:IqBdvM7D
>>370
Kernelから呼び出すような仕組みにしても、
Javaで言うnativeなのが無いと駄目じゃない?
レジスタとかメモリ領域さわれないし。
結局そこ(nativeなモジュール)で非互換性が出る気がする。
Kernelから呼び出すような仕組みにしても、
Javaで言うnativeなのが無いと駄目じゃない?
レジスタとかメモリ領域さわれないし。
結局そこ(nativeなモジュール)で非互換性が出る気がする。
04/11/01 15:55:17ID:lkrLxjNC
>>373
そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。
PCIあたりならかなりの所まで出来そうな気がするなあ。
そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?
そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。
PCIあたりならかなりの所まで出来そうな気がするなあ。
そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?
04/11/01 22:34:23ID:dfNRJQ4+
04/11/02 12:28:29ID:lgEgFui9
カーネルのバージョンによってカーネルが持つ構造体が微妙に違うことがよくある。
(メンパが増えてるとか)
現状のinsmodによるデバイスドライバのダイナミックリンクは
その手の構造体の違いを解決してくれないので、原則的に
カーネルバージョンに依存したドライバしかリンクできない。
強制的に違うバージョンのドライバをinsmodすることも可能だが
正常に動く保証はない。たまたま動くことはあるけれども。
(メンパが増えてるとか)
現状のinsmodによるデバイスドライバのダイナミックリンクは
その手の構造体の違いを解決してくれないので、原則的に
カーネルバージョンに依存したドライバしかリンクできない。
強制的に違うバージョンのドライバをinsmodすることも可能だが
正常に動く保証はない。たまたま動くことはあるけれども。
04/11/02 18:53:41ID:chaRCRYs
まあソース見て「あーこれなら動くな」と思ったら
迷わず-f
迷わず-f
04/11/03 13:41:27ID:1PHyje+L
ドライバのソースがあるならリビルドする方がいいような気がするのう。
いっぱいコンパイラに怒られたりすると直す気が失せるが…
いっぱいコンパイラに怒られたりすると直す気が失せるが…
04/11/06 23:30:41ID:9J0OxvoL
>>376
なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。
いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も
こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから
んし(嫌味とかじゃなくて本当にわからんのです。)
って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・
なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。
いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も
こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから
んし(嫌味とかじゃなくて本当にわからんのです。)
って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・
04/11/07 08:11:19ID:/P0s9FI4
04/11/08 12:46:18ID:ir5Tmuq8
Xサーバはroot権限のユーザランドプロセスで /dev/ioとか /dev/memに
直接アクセスしてビデオチップを制御する。
Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。
直接アクセスしてビデオチップを制御する。
Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。
04/11/09 23:51:44ID:+nDFjkMc
ユーザ空間からmmapでマッピングしてデバイスいじくるときって、
アプリがマッピング先のメモリに書き込む動作と同時に
デバイスにデータって書きこまれるんでしょうか?
バッファリングみたいのって気にしなくてもいいの?
アプリがマッピング先のメモリに書き込む動作と同時に
デバイスにデータって書きこまれるんでしょうか?
バッファリングみたいのって気にしなくてもいいの?
04/11/10 01:00:51ID:8UeNJl+2
>>382
デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、
ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。
類似のがある場合はあって、それはキャッシュなのです。
/dev/fb* は通常キャッシュが抑止されています。
/dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。
デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、
ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。
類似のがある場合はあって、それはキャッシュなのです。
/dev/fb* は通常キャッシュが抑止されています。
/dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。
04/11/10 07:34:29ID:WP1ExQ+t
PCIデバイスの場合 各共有メモリ空間ごとにprefetchableビットが定義されている
ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる
ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる
04/11/10 14:40:19ID:OHaab6bm
04/11/10 18:01:50ID:MrVsce1+
>>385
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。
最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。
最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
04/11/10 23:54:53ID:8UeNJl+2
>>385
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。
388382 385
04/11/11 00:27:04ID:95L6p31P すみません。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。
387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。
ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。
387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。
ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
04/11/12 00:12:24ID:nxDtrzpb
390login:Penguin
04/11/14 11:26:16ID:ZhMJfRu+ USBサブシステムを読んでいるんですが、
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。
またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。
またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?
391login:Penguin
04/11/21 11:06:40ID: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使わずに、ちゃんと専用ドライバ使わないとだめなの?
これに対しCでプログラムを作って、
fd = open("/dev/hiddev0", O_WRONLY);
して、
write(fd, command, 8);
した。commandは0x01FF00000000。けど全然反応が無い。
USB-IOのエンドポイント0には、0x01FFを送ったら、ポート0が反転するはずなんだけどなあ。
hid使わずに、ちゃんと専用ドライバ使わないとだめなの?
04/11/21 17:22:45ID:fkgrUhvM
デバイスドライバはカーネルメモリを消費するらしいのですが、
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
393391
04/11/21 17:37:11ID:RzBM8DsM >390 /usr/include/usb.h
04/12/12 18:20:03ID: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行目
}
がまずは、オライリーの本で解説してる、
サンプルコードから入ろうと思ったんですが、
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行目
}
395394
04/12/12 18:22:17ID:fch5Qtg6 あ、マシンは i686です。
04/12/14 01:02:15ID:bnBNd/cw
たしか-fno-strict-aliasingだったかな。それつけれ。
より詳細が知りたいときはググれ。
より詳細が知りたいときはググれ。
397394
04/12/14 02:47:39ID:iNH7gUWs■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 第2次大戦に触れトランプ氏「米中は同盟国」、当時は中華民国…「抗日」巡る中国の言説補強する恐れ ★4 [蚤の市★]
- 【速報】 高市首相 「円の過小評価は問題だ」 ★3 [お断り★]
- 69歳男性、29歳女性と結婚 「正気になって!」と訴えた40代独身娘 「44歳で弟が爆誕…?」 [お断り★]
- 【ナフサ】カルビー代表、モノクロパッケージ巡り漫画家らに感謝「生まれたのは、私たちの想像を超える『彩り』でした」 [少考さん★]
- 堀江貴文氏、「ホリエモンは嫌いだけど好きになりそう」との声に疑問「わざわざ嫌いとかなんでいうの?」 [Anonymous★]
- 【長期金利】3.115%に上昇 30年1カ月ぶり高水準 [蚤の市★]
- 【高市悲報】お笑い芸人ゼレンスキー「次はモスクワにミサイルぶち込んでやる🤪」 [616817505]
- 日本人の中学生民度完全崩壊、フードコートで暴れたり迷惑行為を繰り返し逆ギレ学校も誰も対応せず [709039863]
- 【悲報】高市「うーんこの演説、なんか足りないわね…🫪!敵国条項削除っと」自ら原稿に加筆していた😨 ★2 [359965264]
- ドコモ値上げ、ahamo3段階制導入 [256556981]
- 女性「たのしいピクニック女は女性から見ると知的○害者なの。クラスで嫌われていて1ミリもモテないwww」 [592058334]
- 男「生き物を踏み潰す女性募集」10代女性「はい!(虫かザリガニやろ)」男「ハムスター」女「え!絶対いや!」男「1匹ごとに報酬1000円」→25匹踏む [597533159]