03/07/09 01:29 RRaEUYou
URLリンク(homepage.mac.com)
264:login:Penguin
03/07/09 01:48 FD/eKW7A
>>262
石にもよるでしょうねえ。
最近の利口な奴はいろいろ手を入れてくれるし。
265:login:Penguin
03/07/09 13:47 GtKhiIZ8
>>261
現行ドライバだと、どの点が不満なのか言ってもらわないと助言しようがないよ
パケットモニタリングはNICチップのpromiscuousモードの仕様に依存する話だ
266:login:Penguin
03/07/10 07:33 sMbuqqa1
>>265
現行のドライバならpromiscuousモードで動かしたときに
パフォーマンスがわるいな感じです
それでぺケットを取りこぼすことになってしまうので
キャプチャ用途に最適化できたらいいなと考えましたです
267:login:Penguin
03/07/10 07:41 oOmBMqv3
>>266
promiscuousモードだと全パケットをホストPCに転送するから
通常モードに比べて取りこぼす可能性は増える。対象のNICチップは何?
素直にintelなり3comを買えば済むだけの話かもよ。
ちなみにリアルテック(蟹)の性能がよくないのは特許を避けてるから。
現状でいいパフォーマンスのNICが欲しけりゃIntel(or元DEC)、3comの
ちょっと値が張るNICを買うしかないよ。
ドライバでどうこうできる話ではない
268:login:Penguin
03/07/10 23:13 TravPTn9
>>267
リアルテクです。3COMも使ってますが、スイッチと相性が悪いな感じで
無反応になってしまう(壊れているのかもしれない)こともありますで
リアルテクでペルフォマンスがよくならないかなと想いました
ちなみに特許って具体的にはどんな特許ですか?
269:login:Penguin
03/07/10 23:46 bBVT4pXs
>>268
261と268で目的が変化してるぞ。
270:login:Penguin
03/07/11 13:32 CtoBVZIQ
>>268
そもそもパケットモニタリングするのにスイッチングハブを使ってる時点でアウト
リピータハブ(ダムハプ)を使わないと他ホストの通信は傍受できないよ
結論
・RealtekのNICは捨てて、Intelか3Comを使え
・スイッチングハブではなく、リピータハブを使え
全然デバドラと関係ないや スレ違いどころか板違い?
271:login:Penguin
03/07/13 22:55 UrPfG9sV
>>267
>promiscuousモードだと全パケットをホストPCに転送するから
違うよ。promiscuousモードって言うのは、リンク層で受信したデータが
自ホストの物理アドレスでなくても受信すること。
>>270が正しい事を言っている。
272:login:Penguin
03/07/14 02:37 imGWjqw6
age
273:267=270
03/07/14 15:12 E/Ns9e+C
>>271
すまん 267=270 なのだが 何か矛盾したこと言ったかな?
MAC層(データリンク層)の処理はNICチップで行われる。
ホストPCはMAC層の処理にはまったく関与しない。
MAC層の処理後、必要なデータだけPCIバスを介してホストPCにDMA転送する。
つまり、通常モードだと自ホスト宛かブロードキャストのパケットデータだけを
ホストPCに転送すればいいのに対し、promiscuousモードだとすべての
パケットデータを転送しなくてはならず、転送量が膨大になる。
そのため、バッファがあふれる(=データを取りこぼす)ことになりやすい。
274:268
03/07/15 03:30 Yac3cQfq
スイッチはL3スイッチでポトミラリング機能がありますよ
ただ3COMのNICでも限界があるとですがぎりぎりまでぺケットの
モニタ用に最適化したいと思いましたです
リアルテクの話は忘れてください ふつはバッファも通信用に
チュニングすれて確保してると思ったけどぺケットをモニタするときは
受け取るだけだから ドライバで受信用のバッファを多めに
できたらいいなと思ったよ でもどうやったらいいか分らないよ
ヘルプしてください
275:山崎 渉
03/07/15 11:17 2JhhXBQM
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
276:login:Penguin
03/07/15 12:07 Fo16Kpwc
(・∀・)renice!
277:login:Penguin
03/07/22 11:30 6WQ9WMDa
(・∀・)renice!
278:login:Penguin
03/07/25 12:52 NH3LXVfX
(・∀・)renice!
279:login:Penguin
03/07/30 12:07 cPdgkLk2
(・∀・)renice!
280:ぼるじょあ ◆yBEncckFOU
03/08/02 05:04 GfRe8vK7
∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎―――◎ 山崎渉&ぼるじょあ
281:login:Penguin
03/08/02 10:27 2rmp9gin
(・∀・)renice!
282:login:Penguin
03/08/08 11:54 mg5o8ebS
(・∀・)renice!
283:login:Penguin
03/08/13 12:30 pfCYHBFY
(・∀・)renice!
284:login:Penguin
03/08/14 22:31 EZZe4dzO
$> cd /pub
$> more beer
285:login:Penguin
03/08/14 22:44 EZZe4dzO
$> man woman
$> Segmentaion fault (core dumped)
286:山崎 渉
03/08/15 22:51 dil3w4kp
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
287:login:Penguin
03/08/15 23:47 GfNK1qbf
(・∀・)renice!
288:login:Penguin
03/08/16 15:04 rNtMNMvg
(・∀・)renice!
289:login:Penguin
03/08/25 09:46 +hXUD3jL
(・∀・)renice!
290:login:Penguin
03/09/02 21:16 1mo12GKS
insmod xxx.oってことはドライバのソースはどんなに大きくてもxxx.cの1っこだけじゃないとだめなの?
291:login:Penguin
03/09/02 21:20 88sqYoXe
>>1は、ママンでもファックしてろや!hahahahahahaaaaaaaaaaaaaa!
292:login:Penguin
03/09/02 22:18 qo69XMHR
>>290
完全なるカーネルモジュールにヘッダやリンカはいらない。
ソースは常にひとつ。
293:login:Penguin
03/09/03 08:04 CuYcG2U3
>>290
Cファイルをインクルードすればいいだろ。
294:login:Penguin
03/09/03 11:30 4cm8kGPF
>>293
よりによって一番最悪な答えですね先生
295:login:Penguin
03/09/03 16:47 iWz7WMbL
>>290
info ld
-rの説明読め。
296:login:Penguin
04/01/07 22:36 ui3n7e6w
だいぶ下がってますが、
2.6 と 2.4 のドライバ記述って何か変りました?
2.6 まだインストしてないので報告キボンヌ・・・
2.2 -> 2.4 程は変ってないのかなー?
297:login:Penguin
04/01/16 18:02 ZUOtu/O9
PCIのデバイスドライバを作成していますが、
全くできません。
less /proc/iomemで書かれているアドレスで
read、write関数を使って書いたり、読んだりしてもだめです。
何がいけないんでしょうか?
298:login:Penguin
04/01/16 19:15 JS8EwlnL
とりあえず、lspci -vvv を晒してみたらどうでしょう。
もちろんデバイス指定でね。
それを見て私が答えられるかどうかはまた別の話ですけど。
299:login:Penguin
04/01/16 19:52 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]
300:298
04/01/16 20:57 JS8EwlnL
FPGAですね。
私もそんなに知っているわけではないので、
あまりあてにはしないで欲しいのですけれど…
lspciの結果は特に変なところは無いと思います。
Class ff00はどのクラスにも属さないと言うことだと思うのでちょっと気にはなりますが、
読み書きぐらいはできるでしょうね、きっと。
だとすると、あとはドライバのソースでチョンボがあるか
FPGAの中で書きこみ禁止になっているとかですかね。
FPGAにどんなipが載っているのか分からないので、あくまで推測ですけど。
あんまり力になれなくてごめんね。
301:login:Penguin
04/01/18 02:27 +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決め打ちだけど。
302:login:Penguin
04/01/18 02:28 +zT3hNOG
あ>>299のマチガイだ。
303:login:Penguin
04/01/19 07:32 kPFQP2Tn
PCIバスアナライザで観測しながらアクセスしてみそ
304:login:Penguin
04/01/22 14:27 O8v9hJ5s
>>303
持っているならいい方法だけどね。
買おうとすると激しく高い。
レンタルでも中古でも激しく高い。
でも、欲しいね。
305:login:Penguin
04/01/28 10:42 N5b+GE5n
マジレスすれば
ロジアナでPCIバスを観測するか、PCIバスアナライザを使うか
どっちかしないと、PCIデバイス/ドライバの開発は無理だろう
306:login:Penguin
04/01/28 12:46 OnT2yC/X
んなこたーない!
297 が FPGA開発を同時にやってるならまだしも・・・
あったほうが楽なのは確かだが、無理ではない。
ハード屋さんはバスレベルで確認して提出するはず。
read/write 出来ないのはドライバの不具合。
>>297 は pci_find_device 関数など、基本から勉強したほうがよさそう。
307:305
04/01/28 15:27 N5b+GE5n
無理ではないって言っても、そんなマゾプレイみたいなコトしたくないよ
目隠しして半田付けしろっていうのに近いな
PCIのロジックって複雑だから、実機でバグが露呈するのはよくあること
430FXで動いたからって 875Pでは動かないとか余裕であるよ
市場に流通してるチップセットすべてで確認しないと市販は無理
名の通った枯れてるチップならまだしも、実機の動作チェックもしてない
FPGAの回路をつかったPCIカードなら、最初から疑ってかからなきゃダメだと思います
> ハード屋さんはバスレベルで確認して提出するはず。
PCIバスの全パターンをシミュレーションできる検証ツールってすごく高いよ
特にFPGAの開発のために検証環境買うのはコストにあわない
PCIバスアナライザがある環境で実機試験して、少しずつ直すほうが早くて安い
308:login:Penguin
04/01/28 18:36 XM3JMqvR
>>307
そーゆーのはハード屋さんの仕事じゃないかと。
PCIブリッジの違いで動かないなんてのは設定云々じゃない限りドライバじゃ直せん。
309:login:Penguin
04/01/28 19:09 ceOaOw14
> そーゆーのはハード屋さんの仕事じゃないかと。
おれもそう思う。
でも、実際はソフト組み込んだらなんかおかしくて、
実は結局、微妙にハードが悪かったなんて事は良くある話だね。
きっと >>305 は苦い思いをしたんだろうよ。
310:login:Penguin
04/01/29 18:47 ci1wDtTm
>実は結局、微妙にハードが悪かったなんて事は良くある話だね。
ハード絡みやってりゃ必ずあるね。
慣れてくればハード、ソフトどっちが悪いか何となくわかるようになるけど。
制御チップ動かす時なんかはオシロ、ロジアナの出番が増える。
さすがに PCI制御用FPGAまで計測器突っ込んだ亊はないけどね・・・
そこまで行くと スレ違いですね >> 307
311:307
04/01/30 07:19 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用のドライバ書いておけば後が楽になるからね。
スレ違いだったかな
駄文失礼
312:login:Penguin
04/02/03 23:12 j9rA+N1w
>駄文失礼
気にしなくていいぜ。(w
313:login:Penguin
04/02/09 07:11 7h6uvjnn
すいません、どうしようもない質問なんですが、
実験的にカーネルパニックを発生させるドライバを作るのには
どうすればよいでしょうか?
カーネル関数panic()を使っても
ハングするだけでパニックしないんです。。。
どうか教えてください。
314:login:Penguin
04/02/09 20:13 oe9mNV77
このスレは俺に勇気をくれた。
315:login:Penguin
04/02/10 00:02 0xm4A1oM
>>313
コンソールに"Kernel panic: …"って出てないの?
316:login:Penguin
04/02/10 00:52 4iNUE3rF
>>313->panic();
317:login:Penguin
04/02/10 21:13 WwFCucZO
>>315-316
返信ありがとうございます!
単純にパニックするよりoops画面が表示するようにしたいのです。
mmapあたりをいじくるドライバを作れば、
oops画面を表示させることは可能ですか?
318:殴られそうだが
04/02/10 23:35 0xm4A1oM
>>317
試してないけど、
*(unsigned long)0 = 0;
とか。
319:login:Penguin
04/02/11 00:21 QfDGoor4
>>318
似たようなので、
x=0;
x=x/x;
ってのをやってみたのですがダメですた。
やっぱLinuxって頑強だと思いますた。
mmapも見てみたらカーネル空間でなく補助記憶空間に
マップするだけのようですし・・・
アドレス例外でoopsできるような方法とかあるのですかね??
320:login:Penguin
04/02/11 17:17 ViS2X9Xm
Oopsとpanicを混同しているような気がしないでもない。
321:login:Penguin
04/02/12 00:21 9Bh5Rhh+
>>320
すみません。。。
パニックとシステムフォルト(oops)と勘違いしていたようです。。。
ドライバからシステムフォルト(oops)
させるような方法ってあるのでしょうか?
322:login:Penguin
04/02/14 07:34 kX0ZpYOB
linuxはsolarisみたいにクラッシュダンプ取れますか??
323:login:Penguin
04/02/16 00:01 dUYGf/LZ
>>322
URLリンク(lkcd.sourceforge.net)
324:login:Penguin
04/02/19 02:35 tYIYueC9
Linuxでのデバイス・ノード管理は現在
従来の/dev以下のデバイス・ノードファイル、devfs、udevが
存在しているようですが、デバイスドライバを書くような
デバドラ開発者にはこの状態は影響するのでしょうか?
325:login:Penguin
04/02/19 10:34 iwEBqmwA
私は従来の/dev以下のデバイス・ノードファイルを使ってます
devfsに対応するのも簡単だけど優先度低いから先送り
326:login:Penguin
04/02/24 22:37 BGHqYIMS
modpostについて詳しく解説している文書をご存知でしたら教えて下さい。
327:login:Penguin
04/03/17 23:57 P4QfZyWd
データシートをどうやって手に入れるか
それが問題だ
328:login:Penguin
04/03/18 10:56 WBeyRceU
何のデータシート?
329:login:Penguin
04/04/08 16:25 E32BiKCa
mmapについて質問させてください。
メモリデバイスをmmapするとき、ページサイズを4096Byteとした場合、
mmapされたデバイスの先頭からの"物理アドレス"と
mmapしたプロセスのデバイスに割り当てられた"仮想アドレス"の
下位12bit(2^12 = 4096)は一致するのでしょうか?
mmapではプロセスの仮想空間にページサイズ単位で
ファイルやデバイスを割り当てることが出来るわけですよね。
ページサイズが関係してくると言うことはMMUのようなものが
作用して、この割り当てを管理しているのですよね。
(あるいはMMUそのものなんですか?そこが分かってないのですが)
もしも、MMUの管理下にあるならば、実空間と仮想空間のアドレスの
下位12bitは一致するはずです。
MMUはページサイズ以下のアドレスを知らないはずですから。
ここまでは私の理解に間違えはないですよね。
でも、mmapが実際にどんな風に動いているか良く分からないので、
上のような疑問が沸いてしまったのです。
どなたかお分かりいになる方がいましたら教えてください。
330:login:Penguin
04/04/08 17:57 /VjqMrH1
>>329
つ[ mmap.c ]
331:login:Penguin
04/04/09 00:53 E9wQ2At3
いいなこのスレ
332:login:Penguin
04/04/09 00:58 ImS0ZAox
>>330
ha?
333:login:Penguin
04/04/09 00:59 ImS0ZAox
あぁソース嫁ってことかw
334:login:Penguin
04/04/09 14:52 8RpqlllW
>>329
CPU/MMUアーキテクチャに依存する話だね。
IA32に限っていえばその理解でいいと思うよ。
他archでもまずそうなってるだろう。
そうなってないMMUなんて見たことない。
335:login:Penguin
04/04/09 15:39 dsP5+/oo
2次キャッシュを UBS mem に格納して使いたし。可能?
336:login:Penguin
04/04/09 21:34 /keZpBhh
>>335
CPUの2次キャッシュをUSBメモリにやらせるってこと?
337:login:Penguin
04/04/10 01:41 04yJkWho
AGE
338:login:Penguin
04/04/13 23:49 bzoEXS/o
USBのデバイスドライバ作る時のTIPSを教えてください
339:login:Penguin
04/04/14 15:26 XimV19c+
デバイスを破壊出来るデバイスドライバーの作り方教えてください
340:login:Penguin
04/04/14 23:18 QKI6oVKA
>>339
1.どこからかゴルフのドライバーを手に入れる。
2.ドライバーのフェイスにデバイスを貼り付ける(ガムテープでも可)
しかる後にドライバーを振りかぶり、路面、ブロック塀etc.にぶつけること。
341:login:Penguin
04/04/15 10:49 D/fT1Zhi
>>340
( ´д)ヒソ(´д`)ヒソ(д` )
342:login:Penguin
04/04/19 20:10 TjHP8JDs
>>340
( ´д)チョメ(´д`)チョメ(д` )
343:login:Penguin
04/04/27 21:12 ftQXOuAJ
v2.6.x 用の module (.ko) の作り方ってどっかに落ちてませんか?
v2.4.x だと gcc -c するだけで insmod できるイメージができましたが、
v2.6.x だとなんか後工程があるんですよね?
344:login:Penguin
04/04/27 21:18 VEIU93yI
>>339
FDDにアクセスして、その音で音楽を鳴らす。
CDDのトレイを頻繁に出し入れする。
ってトレイは入れられたっけ?
345:login:Penguin
04/04/28 09:36 r7A4ZD5z
>>344
出し入れ可能だけど、作り方は教えられないのでは?
もう既に完成してしまっているし ソース嫁としか言えないと思う
346:login:Penguin
04/04/29 22:03 ugZV/Avt
>>344
CDDのトレイを開け閉めする位ならioctlで……
347:login:Penguin
04/05/05 09:59 IcDQ6/Fz
v2.4でUSBキーボードドライバにRAWレベルアクセスする方法知りませんか?
usb/usbkbd.cを単品でモジュール化してみたけど、プログラムからのアクセス
方法がわからない・・・
usb_register時にマイナーバージョンの情報を登録してないみたいだけど
デバイスファイルでアクセスしようと思うと無理なのかな~・・・
348:login:Penguin
04/07/17 17:55 z93SFsgN
落ちそう・・・見込みなさそうだけど上げ
349:login:Penguin
04/07/18 17:33 qhsm/Ia2
>>343
URLリンク(linuxdevices.com)とか
URLリンク(lwn.net)とかではどう?
350:login:Penguin
04/07/27 03:02 AwmCdxXP
Moz2chで見てると
レスがだんだん右にずれていくます。
351:login:Penguin
04/07/27 03:08 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
04/07/27 03:23 7ve9Hskt
>>351
要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。
status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。
# IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。
353:login:Penguin
04/08/02 14:39 QD1yhPkc
チップセットのドライバって具体的にはどんなことやってるの?
354:login:Penguin
04/08/02 16:42 4u8OC/CN
すごく恥かしいあんなことやこんなこと
355:login:Penguin
04/08/02 17:48 Wbtl3uph
>>354
激しく気になります。
356:login:Penguin
04/08/03 23:29 HnnAhZGX
突然ですが、デバドラのioctlからpollやselectって呼べるかどなたか知ってますか?
pollやselectの引数の構造体に何を入れていいのかわかりません。
357:login:Penguin
04/08/03 23:47 0P3Qaw2+
>>356
ioctlのハンドラからsys_selectとか呼びたいって事ですか?
呼べないことはないと思うけど…
なんでそんな変な事をする必要があるのか興味がありますな。
引数は普通にselectに食わせているものを同じように渡せば良いはず。
358:login:Penguin
04/08/04 09:37 NoJQortH
>>357
3つのCPUおよびOSがある組込み系のデバドラを考えてます。
普通はioctlやselectをモジュール側に個別に書くのでしょうが、
それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。
ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を
考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
359:login:Penguin
04/08/04 10:00 H7hK0Jjq
>>358
>ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。
ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?
360:login:Penguin
04/08/04 10:24 AG/Dol7k
一般に、デバドラ内部からシステムコールやライブラリ関数は呼べないよ。
書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを
自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。
カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから
各バージョンすべてで動作する共通コードを書くのは結構大変
泣ける マジで
361:login:Penguin
04/08/04 14:21 NoJQortH
>>359
モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。
表現が下手ですね。文章もあまりうまくないのでごめんなさい。
ライブラリ側では、whileループでバッファの中身をチェックしています。
バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。
362:login:Penguin
04/08/04 14:35 NoJQortH
>>360
ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。
今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、
poll(select)の関数を指すようにしてやっています。
そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。
363:login:Penguin
04/08/04 14:40 +wO9AS9w
>>356 の言う「モジュール」=「ライブラリのソース」は「ユーザランドの
アプリケーションが使うライブラリ」かな?
364:login:Penguin
04/08/04 15:22 NoJQortH
はい。そうです。
わかりにくくてすいません。
365:login:Penguin
04/08/05 00:11 UYjeE7ll
>>362
なんか、あさっての方向に走ってないか?
- poll() したいなら poll() を実装する
- イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
やりたいことを確認したほうがいいぞ。
- なにをどう待ちたい?
- 付加的にやりたいことは何?
後者は、
> なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
がわからんかったって話。
366:login:Penguin
04/08/05 00:11 UYjeE7ll
あうあ
- - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
+ - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て
367:login:Penguin
04/08/05 00:45 CMe3HEND
大丈夫か!? >>364よ!!
がんばれよ! 見守ってるからさ!
368:login:Penguin
04/08/05 12:51 dMydmJ+4
書いてあることだけじゃいまいち要領を得ないが
アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である
ようなデバイスで
・ノンブロックでアクセス処理したい
・複数のプロセスから同時にアクセスされる状況に対応したい
・複数のデバイスを一元的に管理したい (リソース管理など)
こんな条件だと勝手に仮定すると
たしかに大きいデバイスドライバを書いて、そこですべて管理するのも
ひとつの解決法ではある。
でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を
実装することも出来るし、唯一の解でもない。
まぁ、情報が出せないというよりは、状況を理解してないので
うまく説明できないって感じなので、もうちょっと頭を使って
問題を整理してから、もう一回質問するがよかろう
369:login:Penguin
04/10/29 11:01:48 rDkd0V/P
lsusbだとデバイス名が把握できてるということは、
個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか?
linux-2.6において
usbcore
uhci_hcd
cdc_acm
という三つのドライバにより動かしたいハードウェアがあるんですが、
cdc_acmをロードしてもうんともすんとも言いません
370:login:Penguin
04/10/31 20:53:26 fFX2rhTr
.netとかjavaみたいなバイトコードなドライバーでハードウェア
を制御する環境を作るって可能ですか?
371:login:Penguin
04/10/31 21:36:34 uzVMAm7i
>>369
まあそうでしょうな。
lsusbはハード的につながっていれば見えるし。
>>370
そりゃ作れん事は無いが…
速度が厳しくないかい?
372:login:Penguin
04/11/01 02:36:54 dfNRJQ4+
>>371
JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが
速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と
何にしてもバイナリの非互換性がどうにかならんかなぁと。
カーネル毎にコンパイルはダリ
373:login:Penguin
04/11/01 06:48:36 IqBdvM7D
>>370
Kernelから呼び出すような仕組みにしても、
Javaで言うnativeなのが無いと駄目じゃない?
レジスタとかメモリ領域さわれないし。
結局そこ(nativeなモジュール)で非互換性が出る気がする。
374:login:Penguin
04/11/01 15:55:17 lkrLxjNC
>>373
そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。
PCIあたりならかなりの所まで出来そうな気がするなあ。
そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?
375:login:Penguin
04/11/01 22:34:23 dfNRJQ4+
成るほど・・・
>>373
やっぱりそういうところで不備が出てきますか。。。言語拡張で・・・となると
Javaじゃなくなるし、コンパイラーも自前に用意しなきゃならなくなるし。。。
>>374
漏れもそんな感じの考えでいたんだけど、やっぱそれが難しいんでしょうね。
とはいえ、可能性があることはわかりました。ありがとうございます。
>>OpenFirmware
調べてみましたが上の考えのBIOS版みたいなもんでしょうか?
とりあえず、神が現れることを祈りつつ作れる作れない、作る作らないは別として
自分でも調べてみようと思います。厨の妄想に付き合っていただきありがとうございました。
376:login:Penguin
04/11/02 12:28:29 lgEgFui9
カーネルのバージョンによってカーネルが持つ構造体が微妙に違うことがよくある。
(メンパが増えてるとか)
現状のinsmodによるデバイスドライバのダイナミックリンクは
その手の構造体の違いを解決してくれないので、原則的に
カーネルバージョンに依存したドライバしかリンクできない。
強制的に違うバージョンのドライバをinsmodすることも可能だが
正常に動く保証はない。たまたま動くことはあるけれども。
377:login:Penguin
04/11/02 18:53:41 chaRCRYs
まあソース見て「あーこれなら動くな」と思ったら
迷わず-f
378:login:Penguin
04/11/03 13:41:27 1PHyje+L
ドライバのソースがあるならリビルドする方がいいような気がするのう。
いっぱいコンパイラに怒られたりすると直す気が失せるが…
379:login:Penguin
04/11/06 23:30:41 9J0OxvoL
>>376
なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。
いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も
こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから
んし(嫌味とかじゃなくて本当にわからんのです。)
って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・
380:login:Penguin
04/11/07 08:11:19 /P0s9FI4
>>636 > 昨日Linuxにふれたものですから
であり、(非常に一般的なやりかたにもかかわらず)やりかたがわからないとい
う人が tamagoをいれたい理由はなにかしら?
特に強い理由がないなら、「いれるな」が正しいガイドだと思うのですよ。
>>635
つかいかたは man xmodmap でみるといい。
キーコードは xev で調べられます。使いかたは man xev でみるといい。
381:login:Penguin
04/11/08 12:46:18 ir5Tmuq8
Xサーバはroot権限のユーザランドプロセスで /dev/ioとか /dev/memに
直接アクセスしてビデオチップを制御する。
Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。
382:login:Penguin
04/11/09 23:51:44 +nDFjkMc
ユーザ空間からmmapでマッピングしてデバイスいじくるときって、
アプリがマッピング先のメモリに書き込む動作と同時に
デバイスにデータって書きこまれるんでしょうか?
バッファリングみたいのって気にしなくてもいいの?
383:login:Penguin
04/11/10 01:00:51 8UeNJl+2
>>382
デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、
ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。
類似のがある場合はあって、それはキャッシュなのです。
/dev/fb* は通常キャッシュが抑止されています。
/dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。
384:login:Penguin
04/11/10 07:34:29 WP1ExQ+t
PCIデバイスの場合 各共有メモリ空間ごとにprefetchableビットが定義されている
ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる
385:login:Penguin
04/11/10 14:40:19 OHaab6bm
>>383
>>384
CPUキャッシュですか。
環境にもよるのでしょうけど、基本的にはあまり気にしなくてもいいのですね。
実は、drivers/char/mem.c みたんですけど、mmap システムコールを呼んだときと、
そこにアクセスした時のコードの流れがよくわからないのでちょっと???でした。
あとは、コンパイラのオプティマイズも気にしておいたほうがいいのでしょうね。
386:login:Penguin
04/11/10 18:01:50 MrVsce1+
>>385
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。
最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
387:login:Penguin
04/11/10 23:54:53 8UeNJl+2
>>385
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。
388:382 385
04/11/11 00:27:04 95L6p31P
すみません。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。
387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。
ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
389:login:Penguin
04/11/12 00:12:24 nxDtrzpb
>>388
抑止の方は O_SYNC でできますよ。その行の後半の条件がそうでしょ?
390:login:Penguin
04/11/14 11:26:16 ZhMJfRu+
USBサブシステムを読んでいるんですが、
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。
またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?
391:login:Penguin
04/11/21 11:06:40 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
04/11/21 17:22:45 fkgrUhvM
デバイスドライバはカーネルメモリを消費するらしいのですが、
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
393:391
04/11/21 17:37:11 RzBM8DsM
>390 /usr/include/usb.h
394:login:Penguin
04/12/12 18:20:03 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
04/12/12 18:22:17 fch5Qtg6
あ、マシンは i686です。
396:login:Penguin
04/12/14 01:02:15 bnBNd/cw
たしか-fno-strict-aliasingだったかな。それつけれ。
より詳細が知りたいときはググれ。
397:394
04/12/14 02:47:39 iNH7gUWs
産休です>>396
小細工ですが、
(unsigned int*)&(x)を、(unsigned int*)(void*)&(x)に書き換えると、
警告を封じることができますた。
勉強がんばります。
398:login:Penguin
04/12/14 11:29:27 HO3MDnt+
モジュールでmallocを使うと
implicit declaration of function `malloc'
なる警告が出ました。
正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。
何かヘッダをincludeすればいいのでしょうか。
399:login:Penguin
04/12/14 11:44:22 vlh4D4yl
>>398
kmalloc() or vmalloc()
400:login:Penguin
04/12/14 11:54:53 HO3MDnt+
>>399
感謝.あとは調べます.
401:login:Penguin
04/12/14 15:55:34 ScDxM3L+
【序 論】
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。
統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。
日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。
一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、
後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。
もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。
宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。
そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、
北の現体制を維持するための、CIAの有難い配慮だったわけです。
なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。
麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。
今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。
尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。
URLリンク(mentai.2ch.net)
402:login:Penguin
04/12/14 17:02:39 WBCZfumK
国際金融資本と無関係な人はいません。ここが大事なところです。
国際金融資本とダーティーな勢力になんらかの関係があるというのなら、
全ての人間がダーティーな勢力と関係があるということです。
403:login:Penguin
04/12/16 00:42:54 HSUTNn3s
<linux/errno.h>をincludeしているのに、errnoが宣言されていないとエラーが出ます。
なぜですか?
404:login:Penguin
04/12/16 00:52:12 fnG8qWZe
#include <asm/errno.h>
405:login:Penguin
04/12/16 03:08:53 L4JhEJTY
デバイスドライバーをイジルとハードが壊れます
406:login:Penguin
05/01/13 20:25:56 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
05/01/13 21:59:07 b26g+4JK
>>406
jiffesの値が飛ぶせいじゃないの?
初期値をいじる方がいいと思うが。
408:login:Penguin
05/01/13 22:21:10 5Qhjx5GH
やっぱりそれしか方法ないでしょうかね。カーネルコンパイルが億劫で
まだ試していませんでした。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 8640000; にすると、より多くの時間がかかるようです。仮
想マシン環境で実験しているのですが、その間、仮想マシンのプロセス
の CPU 使用率は高いままでした。
409:login:Penguin
05/01/14 02:03:54 PSu0RjKD
ん? 何書いてたんだ、俺
>408 は、正しくは以下です。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 864000000; にすると、より多くの時間がかかるようです。
410:login:Penguin
05/02/06 11:19:02 +OMlHKxZ
mmapによるデバイスアクセスについてご教授ください。
16bitアクセス限定のデバイスに対して、
mmapによるアクセスを試行しているのですが、
どうも挙動が怪しくて困っています。
アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、
そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか?
なにか考慮が不足してるのでしょうか。
411:login:Penguin
05/02/06 14:33:57 JfjjYGk4
>>410
アーキテクチャわかんないので、過去の経験より。
・D cache
・コンパイラが勝手に最適化
そういう制限がある場合は、おとなしく専用ドライバ書くのが
近道のような気がしますな。
412:login:Penguin
05/02/10 21:10:10 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
05/02/12 01:22:07 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
05/02/12 01:24:29 QcR6E3eX
早速、間違えてました(w
>ところどころ言ってるかもしれませんけどね・・・
ところどころ * うそ * 言ってるかもしれませんけどね・・・
415:410
05/02/16 00:46:02 E/KjMwKc
いろいろ情報ありがとうございます。
もともとドライバ経由でアクセスしていたのですが、
パフォーマンス的な問題でmmapでを使用したかったという経緯があります。
ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。
ですので、単純にmmapでの処理の問題かと思っていました。
時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。
416:login:Penguin
05/02/16 22:28:50 mypLuczy
URLリンク(www.netfort.gr.jp)
これカコイイ
417:login:Penguin
05/02/20 21:06:04 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
05/02/20 21:09:12 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
05/02/20 21:10:12 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
05/02/20 21:38:19 uvzGFsyf
結果じゃなくてソースだそうよ
421:417
05/02/20 21:48:59 0sjUjbHi
>>420
Please wait for a moment...
422:417
05/02/20 22:06:08 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
05/02/20 22:07:26 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
05/02/20 22:10:07 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
05/02/20 22:11:43 0sjUjbHi
以上で全部です。
426:login:Penguin
05/02/20 23:44:25 Ia/OzVXx
>>417
コピペしたら動いたぞ。 2.6.10 でだけど・・・
カキコしたソースで動かしてみそ。
427:417
05/02/21 00:06:03 bwxnTums
>>426
マジ?しかも、2.6?
このソースでコンパイル通った?
そして実行結果キボンヌ
428:login:Penguin
05/02/21 00:25:27 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
05/02/21 00:37:25 bwxnTums
>>428
Thanks!
こちらもたった今2.6で動作確認したところです。
う~む、何故2.4ではエラーなんだろ。
もうちょっと自分で調べてみます。
テストしてくれてありがとう >>426 & >>428
430:login:Penguin
05/03/06 13:19:22 PjCVkwmZ
何気に良スレ
みんな頑張れ
お気に入りに追加しますた。
431:login:Penguin
05/03/29 16:05:44 lbUCJwgD
ドライバのread、write関数でminor番号取得する方法ってないんですか?
2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、
片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。
まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。
432:login:Penguin
05/03/29 23:34:47 ChOvrjsk
private_data を使う、かな?
433:login:Penguin
05/03/30 11:17:39 tWHa73x6
>>432
サンクス!
open時に file->private_data にポインタ突っ込んでおくってことですね。
取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。
修行が足りぬ…orz
434:login:Penguin
05/04/16 06:28:18 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
05/04/16 08:17:16 R/hasO1P
自己レスです.
解決法を見付けたので,書き込みます.
drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に,
joypad のベンダIDとプロダクトIDを加えることで,解決しそうです.
スレ汚し失礼しました.
436:login:Penguin
05/05/17 18:53:06 CbytfkQn
2.6 kernel(2.6.11.x)上でデバドラ書く場合、
MOD_INC_USE_COUNT
MOD_DEC_USE_COUNT
を使用する事ってobsolete?
437:login:Penguin
05/05/18 01:07:17 2baf1QgQ
>>436
れがし
438:login:Penguin
05/05/19 23:52:14 m1yq1rQI
カーネル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)
439:login:Penguin
05/05/19 23:52:48 m1yq1rQI
==ドライバ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)
440:login:Penguin
05/05/19 23:57:30 m1yq1rQI
==コンパイル手順==
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'
となります。実機が側にないので出力メッセージは大体こんな感じということで。
よろしくお願いします。
441:login:Penguin
05/05/20 03:04:35 Ds9MyJAI
>>440
カーネルソースんとこでs_printグレップしようぜ
具烈婦
レップってすごいなコレ。どういう意味だ
442:login:Penguin
05/05/20 08:58:08 zG+tsX8i
>>441
烈婦ワロタ
レスありがとうございます。
s_printでgrepしてみたのですが、同名のシンボルは無いようでした。
念のため、ドライバAに
EXPORT_SYMBOL(s_print);
を追加しても'Unknown symbol'になってしまいます。
ドライバ間の依存関係をどこかで明示する必要があるのでしょうか?
443:login:Penguin
05/06/07 10:17:39 6uaL4exB
普通はそんなことはできないんじゃない?
誰かができると言ったのかな?
デバイスファイル開いてioctlをコールが普通じゃねぇの?
444:login:Penguin
05/06/17 18:54:11 9kSGojSd
URLリンク(www.oreilly.com)
Linux Device Drivers, Third Edition
445:login:Penguin
05/06/18 19:13:08 Uc6V46BE
>>444
chapter1まで読んだ。
Policy-free driversの意味がまったく分からない。
うえーん
446:login:Penguin
05/06/19 15:13:18 f3bsYXGy
the role of a device driver is providing mechanism, not policy.
これが、policy-free
447:login:Penguin
05/06/19 15:19:24 f3bsYXGy
ここでのfreeはduty freeのfreeと同じ使われ方。
policyがないdriver
448:login:Penguin
05/06/29 18:33:32 hcN+gVRw
カーネル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になったのか
なぞです。どなたかわかる方いらっしゃいますか?
449:login:Penguin
05/06/29 18:42:20 Cc/icRgl
Linux のドライバのプログラミングの
良い入門書があったらおしえてください
450:login:Penguin
05/06/29 22:17:33 OM3Tds/i
>>448
Kernel2.4.27のソースしか見てないので違ったら失礼。
>マイナー番号を100 120 140 160としました。
これがよくわからん。デフォでは192から16個を順番に割り当てるようになってるが、それをわざわざいじったってことか?
そうなると、スケルトンをあちこち変更してあるのだろうから、さすがにソース無いとなんも判らん。
451:login:Penguin
05/06/29 22:32:06 rSbPN/4/
>>449
アレ買え。馬の絵の描いてあるヤツ。
高くても我慢しろ。読めば安いと思うようになる。
絶対買え。とにかく買え。12冊買え。たくさん買え。
452:login:Penguin
05/06/30 09:52:01 6k+4MtMc
12冊=たくさん
納得した
453:login:Penguin
05/06/30 11:24:58 9CZUZn2O
なぜ12冊なのかちっとも納得いかないんだが
454:login:Penguin
05/06/30 11:25:42 J4A9ru3W
たくさんだからだろう
455:Artane. ◆o6gE1yuDGM
05/07/04 07:22:47 Y9u/GUb1
2.6.13で又モジュール周りのAPIが変わりそうな悪寒…
drivers/base/class_simple.cがまるごとなくなってる…そこのAPIを使ってる URLリンク(www.linuxant.com) のx86_64用のHSFモデムドライバがそのままでは動かない状況に(;´Д`)
その前はACPI絡みでデッドロックがかーねるにあって動かなかったし、どうなってるんだろうヽ(`ー´)ノ
しかもライセンスがプロプラなのでどーすりゃいいのか頭が痛いです。
456:login:Penguin
05/07/07 22:10:08 DftqFJii
2.4はcc -o hoge.o -c hoge.cするだけでokだったけど
2.6はmakeファイルを書かないとダメになった。
はぁ、マンドクセ
457:login:Penguin
05/07/07 22:51:04 Hy9t4ICF
URLリンク(japan.linux.com)
ここの一番下に書いてあるのなら楽だろ。簡単に再利用できるし。
458:login:Penguin
05/07/08 11:00:44 9KK2lDyF
obj-m := unko.o
の1行でよくね?
459:login:Penguin
05/07/24 15:33:14 02p0TYUx
USBのドライバ書いたことアルヤツいる?
460:login:Penguin
05/07/28 21:47:52 3ylo+PR7
>>459
2.4.0testカーネルの時やってたなぁ
ストレージ関係がクラスドライバでないときは動かすのに苦労したよ
USB Snoopyで解析したりして
461:login:Penguin
05/07/31 16:37:19 0Amwd3lA
カーネル2.6.xのSMPの wait_event_interruptible でしつもんです。
起こされる要因をビットであらわすようにして
起こされたあとに flag &= ~FLAG; として
起床要因をクリアしたいです。そこで、
wait_event_interruptible(wq, !(flag & FLAG) );
tmpflag = flag; // ◆1
// ★
flag &= ~FLAG; // ◆2
if( tmpflag & ・・・
としていたのですが、割込が運悪く★のところに来たときに
次回起床要因flagを割込ルーチンで設定された直後にクリアしてしまいます。
◆1と◆2をアトミックに処理するのに割禁使うのも大げさな気がします。
どうしたらよいでしょうか? (><)教えて!
462:login:Penguin
05/08/18 13:31:44 wsNIgIg1
ご存知の方がいたら教えて頂けないでしょうか?
printk の動作に関してなのですが、たとえば、ドライバの登録の際に
int init_module (void) /* Loads a module in the kernel */
{
printk("Hello kernel \n");
return 0;
}
などと printk を使い、(X-Window は起動しないで)コンソールで
# insmod filename.o
を実行すると Hello kernel とコンソールに表示されるはずなのですが、
表示される場合と表示されない場合があります。実際には、
ほとんどの場合は表示されず、表示されるのは数十回に1回程度です。
そもそも 「printk はコンソールに *必ず* 出力するわけではない」
のでしょうか?どうなのでしょう?
463:login:Penguin
05/08/18 14:45:51 AA5MGziJ
>>462
ほんとうに\nを入れたのか
464:login:Penguin
05/08/18 14:47:24 zqtjM++q
>>462
ほんとうにコンソールなのか
Xterm とかじゃないだろうな。
465:login:Penguin
05/08/18 14:54:07 zqtjM++q
X-Window は起動せずにって書いてあったな。 すまそ。
printk() は中で register_console() されたドライバの ->write() を
直接呼んでるから必ず出力されるよ。
出ないとするとログレベルの設定かな。
頭に "<1>" とかつけるといいのでは?
466:462
05/08/18 18:10:38 wsNIgIg1
レスありがとうございます。
>>463
\n は入れてあります。
\n を入れるのと入れないのでは違いがあるんですか?
>>465
出力されるときと出力されないときがあるんですよ。
でも、起動のたびにログレベルが変更されるというのは考えにくいし…
467:login:Penguin
05/08/18 18:35:47 spRqn48O
flushされていない or
同じメッセージなので纏められているのでは?(この場合、last message repeated xxx times とでる。)
468:login:Penguin
05/08/18 20:41:10 cWStGfHc
>>466
ログファイルに吐かれていればメッセージレベル。
出てなかったら改行だろう。
>>467
コンソールに出る方はまとめてくれない。
469:462
05/08/19 09:09:08 qyuoI/lN
>>467, 468
/var/log/message には出てます。
改行もしてるんだけどなぁ。
どうもよくわからないので、あきらめることにしました。(^^;
お忙しいところ、レスありがとうございました!
470:login:Penguin
05/08/19 22:08:36 ZOCJz/g6
/etc/syslog.conf に
kern.* /dev/console
とか書いてあるか?
471:462
05/08/22 13:16:52 nvUzxFpI
>>470
を! /etc/syslog.conf の kern.* /dev/console が
コメントアウトされています!
なるほど、これを有効にすると確実に表示されそう
ですねぇ。
今、ハードが客先に行ってしまったので
確認できないんですけど、ハードが戻ってきたら
試してみます。
ありがとうございます!
472:login:Penguin
05/10/22 01:07:43 EmofMJka
やべえ、カッコイイ......デバイスドライバ自分で書いてる人たち......。
Cは一通り入門程度のことは覚えたけど、遊びでstdio.h使うことばっかりで入門の領域出てないんですよね、僕。
Linuxにも入って間もないからシェルスクリプトの使い方もまともに知らないからLinuxプログラミングなんてまだまだ....。
お馬さんの本、大学の図書館にありましたねー、ぱらっと見たけどさっぱり......。
473:login:Penguin
05/10/22 17:23:49 0rh+z8HN
デバドラ本第3版の和訳もう出てるのね。
洋書を見つけてレジに持っていこうとするも、ふと横を見ると書棚にありました
474:login:Penguin
05/10/23 03:10:35 JQc1kDtY
>>472
努力でどうとでもなる
まぁ頑張れ
475:login:Penguin
05/10/23 06:34:02 TRsS2wCF
SMPな環境で、あるAという区間とBという区間があるとき
そこを走行するCPUをひとつだけにして、
かつAとBを同時に走らないようにしたい。
最速で処理できる区間ではspin_lock_irqsaveを使ってもいいけど
ちょっと時間を食いたい処理のときには割り禁にしたくない/出来ない。
こういうときってセマフォを使うんだっけ?
あと、誰かがそこを走行してたら、待たずにあきらめる処理も
どうやるのかいまいちわからんです。
476:login:Penguin
05/10/23 07:17:36 TyUzTsLn
っ[MUTEX]
477:login:Penguin
05/10/24 11:41:52 y/bnKz7N
futex
478:login:Penguin
05/10/24 21:00:03 qab5z916
insmod hello.o
が出来ません....
bash: insmod: command not found
と出てしょっぱなから弾かれました....。
FC4を入れているのですが、ぐぐったところKernelのバージョンが
上ってからサポートされなくなった(?)のようなことがかいてありましたが...
ちょっとわからないです..。
479:login:Penguin
05/10/24 21:41:23 nHBdU4lq
>>478
module-init-toolsが入っていない。
なんて事はまずありえないので、パス通っていないだけだろう。
480:login:Penguin
05/10/25 01:26:16 boXSHzJM
っ[/sbin/insmod]
481:login:Penguin
05/10/25 01:50:35 mHOxbI49
$ su -
passwd:
#
482:login:Penguin
05/10/25 07:29:46 gtGeQ0F/
モジュールに挑戦する前にやるべきことがあるだろう。
483:login:Penguin
05/10/27 22:32:36 5z/EqZNh
みなさん、返事が遅れてすみません....。
何日ものぞいていませんでした。
どうやら、おっしゃる通りパスが通っていないようでして、
あれから、/sbin/insmod [filename]
を試してみましたがなんだか、だめだ!のようなメッセージが表示されて
しまい、無理でした。Linuxのデバイスドライバのプログラミングは
BIOSレベルでのデバイスドライバを書くときの参考にもなるかと
思ったのですが、やっぱりLinuxを初めてあまりたっていないのに
背伸びをしすぎたようです。出直してきます。
御回答いただいた方々、ほんとうにありがとうございました。:-)
484:login:Penguin
05/10/28 05:51:31 gqZeSigl
│
│
J
∩_∩ ∩_∩
( ・(ェ)・) (・(ェ)・ )
エサクマか? 違うクマよ、
あわてて食いつくと面倒なことになるクマ。
485:login:Penguin
05/10/28 08:53:26 iWNW3bFs
>>483
いえいえ是非また来て下さいね><
御町して檻ます><
486:483
05/10/30 22:20:06 kv9dDPbi
やっとできました!
>>167さんのレスのようにお馬さん初版第二章の一番最初のなーんにもしない
モジュールのソースに追加することでロードすることができました。
試しにカーネルソースのmodule.hを見てみるとメッセージでライセンスが無いといわれた経緯から
MODULE_LICENSE (license)の定義をみつけ、それをキーワードにぐぐったらこれを追加するような
記述をみつけることができました。
カーネルバージョンが2.4.1以降からこうなったようなことがinsmodのmanページにあったので一気に解決しました。
たぶん、insmodが認識されなかったのはKterm上からやろうとしたからですね....
嬉しい!
487:login:Penguin
05/10/30 22:27:05 dxIdqW+o
>>486
よくやった!
とりあえず、今の状態を登山に例えるなら
登山用品店の自動ドアが開いたあたりだな。
488:login:Penguin
05/11/19 17:12:54 mr3HUTh9
2.4から2.6へポーティングしててkoができるまで行きました。
chrdevなんですけどudevの仲間に入る方法がわかりません。
2.4のころのように直接的にmknodしてinsmodするものなのでしょうか。
489:login:Penguin
05/11/24 19:13:51 tUhrvxEF
ageようよ。
490:login:Penguin
05/11/25 02:45:31 Y8mPXznM
質問なのですが、回路の方は勉強しておられますでしょうか?
491:login:Penguin
05/12/08 03:07:19 B0ejvBgu
ちょっと質問させて下さい。
ノートパソコンを使っているんですが、マイクとスピーカーの位置が近いのでサウンドドライバの
読み込み時からサウンドミキサーが起動して音量設定するまでの間にハウリングしたりするんです。
そこで、サウンドドライバ読み込み時にマイクをミュートにしたいと考えたのですが、
例えばドライバの中にマイクの初期音量を0にするコードを追加したりするようなことは可能なんでしょうか?
# スレ違いでしたら誘導お願いします。
492:login:Penguin
05/12/08 10:11:04 j53o+rA9
ageようよ。
493:login:Penguin
05/12/11 18:47:51 rh+AeURO
はじめまして。
Windows対応のRS232C->USB変換ケーブルを使って、スイッチャを
LINUXのPCで制御しようとしているんですが、そもそもドライバを
自分で作る必要があるのでしょうか?
LINUXの環境はOSがRED HAT 9でカーネルは2.4です。
もしくは必要かどうかを確認する方法ってあるのでしょうか?
ご存知の方がいらっしゃいましたら、答えていただけないでしょうか?
よろしくお願いします。
494:login:Penguin
05/12/11 21:37:52 ZmBeQHZx
>>493
自動認識されないか??
suse10だと自動で使えた
けどBreak信号遅れなくてヒデブだった
495:493
05/12/13 02:44:01 bCmTAm2t
>>494
お返事ありがとうございます。
/var/log/messagesでログを見たら、新しいUSBデバイスが認識できている
っぽいことが書かれてました。
たぶんRS232C->USB変換ケーブルは認識できてると思います。
で、早速プログラム組んでスイッチャに信号を送ってみたんですが、
これがうんともスンとも言わなくて。
もしかして変換ケーブルだけ認識しててスイッチャは認識していないかも
って考えたのですが、シリアル通信だから信号を送るだけなら送れますよね?
496:login:Penguin
05/12/13 21:07:28 sg6goQTn
/dev/ttyUSBの読み書き許可がなかったよ
497:色情前世鑑定士
05/12/13 23:49:52 xAfc4hOf
>>495
ボーレートとかあってますよね?
sttyとか使って動作中のUSBシリアルの各設定を
観察・設定してみるといいかもしれません
498:login:Penguin
05/12/17 23:06:34 oosooT9i
>>496,497
助言ありがとうございます。
パーミッションに関してはchmod 666を実行したので、大丈夫だと思います。
ボーレート他の初期設定は、少し自信がないのですが、他のシリアル通信
のプログラムを参考にして一通りプログラム内で設定しています。
sttyで確認するというのは知らなかったので、早速やってみたいと思います。
ありがとうございます。
499:login:Penguin
06/01/28 02:19:52 eIqcEw8I
馬本買った記念age
500:login:Penguin
06/01/28 02:22:46 eIqcEw8I
ageて無かった…orz
501::login:Penguin
06/01/28 13:24:51 z02En7Mn
tky007lip10.iij.net [210.130.172.193]
502:login:Penguin
06/02/06 00:56:30 gxgsnq8Z
age
503:login:Penguin
06/03/19 20:02:53 wmRM5297
URLリンク(www.doodoo.ru)
504:login:Penguin
06/03/21 02:41:04 wxAXo3DG
SMPプログラミングの入門ページとかありませんかね?
どちらかというとAの処理をCPU0に割り当ててBの処理を1に
って感じで分けながら処理するタイプのプログラミングなので
ASMPのほうがよいのですがこのような話題はどこで聞けばよいのでしょうか
505:login:Penguin
06/03/30 20:19:25 P2MixPUa
なんか誰も見てないような気もするけどちょっと質問
Redhat ES4(kernel 2.6..9-11 x86-64)
CPU Xeon 2.8G(HT-on EM64T)
メモリ4GB
な環境で、SCSI Low level driverを書いてるんですが、
物理メモリ4GBしかないのに、SCSI Mid levle driverから
渡されてくる転送アドレス(物理アドレス)が4GBを超えた
アドレスが渡されて来ます。
当然メモリ未実装エリアのアドレスなので転送しようにも
出来ない訳でSCSIカードが転送しようとしてエラーとなり
ます。
pci_set_dma_msakに指定している値は、SCSIカードがサ
ポートしてるアドレス範囲の40bitを指定しています。
これを32bitマスクにすると4GBを超えるアドレスは来な
くなるんですけど、もしかしてpci_set_dma_msakて実装メ
モリ量も気にしなければいけないんでしょうか?
馬本見てもそんな事書いてないし。たんにハードウェアの
アドレス範囲を宣言するだけと認識してるんですけど。
何方かご存知の方居られたらご教授願います。
506:login:Penguin
06/03/31 11:41:12 zMWwd0XE
適当に書いてみる。
他のドライバ見たらわかるけど、実装メモリは気にしない。
pci_dma_syncなんたらが失敗するの?
507:login:Penguin
06/03/31 21:18:57 OpI/WZIP
おお見てる人がw
実装メモリはカーネルが握ってるから本来気にする必要が無いのは
分かってるんですが、そのカーネルから来るアドレスが実装容量を超
えたアドレスを通知してくるので悩んで降ります。
pci_dma_syncでなくpci_map_sgで作られたスキャッタ/ギャザーリスト
の中の物理アドレスが未実装領域のアドレスを指してる感じですね。
pci_set_dma_maskで32bitマスク(0xffffffff)してやればpci_map_sgで
作られたスキャッタ/ギャザーリスト内のアドレスは4GB未満のアドレ
ス範囲で収まる感じです。(当然といえば当然)
それを40bitマスク(0xffffffffff)にすると、実メモリ4GBしか無いにも
関わらず32bit以上、40bit未満のアドレスがスキャッタ/ギャザーリス
トに含まれてしまいます。
カーネルのバグを疑い出して、カーネルソース追い始めた所でなの
で実際にアドレス作り出す所まではまだ追いきれて無い状態です。
ご指摘の通り他のSCSI系ドライバのソースも参考にしてますが、実
装メモリなんて気にして無いしなんとも不可解…。
元々Solarisのドライバ作ってたんだけど、Linuxは今回初でかなり困っ
てる状態ですorz
508:login:Penguin
06/03/32 02:19:11 9G03KeUN
また別の人が適当に書いてみる。
hugemem使ってみては?
509:login:Penguin
06/03/32 10:42:43 afhcBPMx
hugememってi386じゃなかったっけ?
x86_64で4G載ってるって事は、IOMMUとか関係あるのかな。
結局virt_to_bus(pci-nommu.c)かvirt_to_phys(pci-gart.c)呼んでるから、
scatterlistのpageが期待しない値なんでしょうけど、そこら辺調べたらいいのかな。
ドライバいじったことはあるけど、書いたこと無いので適当です。
510:login:Penguin
06/03/32 10:47:55 shKEnT0S
似たようなドライバの中身を調べてみればすぐわかりそうなものだが
511:login:Penguin
06/03/32 15:12:47 afhcBPMx
>>510
俺もそう思って、見たけどわからなかったw
SCSI側からと、PCI側から見たら、よくわからなくなった。。
bioがよくわからん。
pci_set_dma_maskって要するにbounceするかどうかなのか?
あとは、ページ確保するときのDMA/DMA32の切り分け。
512:login:Penguin
06/03/32 16:46:33 p6EHT8/a
うぉレスが増えてる。
>>508
hugemem は、>>509 が指摘の通り、x86_64では無いですね。
ただこのドライバは、一つのソースでRedhat ES4の 32bit Uni-processer/
SMP/hugemem kernelとx86-64 kernelの4種類サポートでして、実装メモリ
12GBのマシンでhugememカーネル使ってる分にはアドレスは正常な値が
返って来てます。
hugemem kernelとx86-64 kernelではDMAアドレスは64bit幅で来るのでこ
の二つのカーネルの時は処理(アドレス計算とか)は共通にしてます。
>>509
正にそうです。scatterlistに入ってるpageが明後日の所を指し示してるので、
そのままSCSIカードに送るとカード上のIOPのファームがアクセスに行くとメ
モリが無いのでメモリアクセスエラーを検出します。
>>510
SCSIカードと言うか実はRAIDコントローラでして、カード上にPCI-PCIブリッ
ジが乗っかっててIOPとSCSIコントローラが載ってるカードです。
カード-ドライバ間はI2Oで通信してて、近い奴としてはmagariadとかqla1280
当たりなんですよね。他にも色々見てるんですが違いはそうは無い感じ。
>>511
bioはいまいち良く分からないですね。
ページ確保の時のDMA/DMA32て、GFP_DMA/GFP_DMA32フラグの事でし
ょうか?
今使ってるカーネルをみるとGFP_DMA32が未定義でして、kernl-2.6.14とか
2.6.15とか見ると定義されてるんですよね。
なんかその辺も絡んでるのかなと気にはなってはいました。
皆さんアドバイスありがとうです。
もう少しカーネルソース見て来ます。
513:login:Penguin
06/04/04 08:20:23 0xn4pI8o
気になるから、どうなったか知りたいです。
514:login:Penguin
06/04/04 13:11:55 p7vmOtaT
>>504
sched_setaffinity(2)
515:login:Penguin
06/04/06 22:28:49 Mnqgo3eJ
>>513
まだ色々と追っかけてる途中です。
とりあえずPCIドライバ周りから追っかけ中です。
PCIドライバを見た限りでは、pci_map_sgすると中でdma_map_sg
呼び出しててその中見てもあんまり大したことしてなさそうですね。
やはりbio周りも見ないと駄目なのかも。
もうちとかかりそうですが、わかり次第、結果をお知らせします。
516:505
06/04/08 14:24:03 +mDmSXuo
原因わかりました。
結論から言うと、pci_map_sg()で作られるSGリストのアドレスは正常でした。
問題なのはpci_map_single()で出てくるアドレスが、低位メモリだとカーネル
論理アドレスを返し、高位メモリだとカーネル仮想アドレスを返してるのが、
原因でした。
高位メモリだとページをダイナミックに確保されるため、物理アドレスとペー
ジが1:1でマッピングされないので、pci_map_single()だとvirt_to_physしてる
だけなので使えませんね。
なのでpci_map_pageで確保してやれば問題は消えました。
SGリストに変なアドレスが入ると言ってましたが、カードのファーム側で受
け取ったリストを見てたのですが、カード内でドライバから受けた転送アドレ
スをカード内部のバッファに結びつける為にファームが独自にSGリストを
再構成しており、そのリストがpci_map_sg()で作られた物と勘違いしてまし
た。OTL
色々アドバイスありがとうございました。
517:login:Penguin
06/04/08 16:09:33 MBAxFSYD
>>516
解決おめでとうございます。
一般的に使えそうなものならまたどこかで公開してくださいな。
518:login:Penguin
06/04/10 22:36:55 C69QC/MM
>>516
よかったよかった。
私もソース読んで少し勉強になったよ。
ネットワーク系しかいじったこと無かったから。
519:505
06/04/10 23:00:56 9eFrvNz6
>>517 >>518
ありがとうございます。
馬鹿高な価格の独自のカード用のドライバで有用性はかな
り低いです。。。一応GPLなんですが、カード買わないと非
公開という阿保な方針らしいので、一般公開は難しそうです。
Linuxでの初開発で手探り状態でしたが、お蔭様で何とか目
処が立ってきた感じです。まだ細かな問題がありますが…。
Linuxでの開発はカーネルや他のドライバソース読まなけば
資料が少ない所がキツイですね。
まぁコード上のテクニックとか色々勉強になる部分は多いけ
ど、納期のある仕事でやるのは大変ですね。
流石UNIX板だけあって、建設的なスレで助かりました。
520:login:Penguin
06/04/10 23:42:28 Cs5Rh9+Y
>>519
> Linuxでの開発はカーネルや他のドライバソース読まなけば
> 資料が少ない所がキツイですね。
ちょっと教えてください。
Linuxより資料が多いOSってなんのことを指してますか?
自分は主にLinuxの開発に携わってますが、いつもオープンソースのありがたみを
感じながらやっているので、Linuxが資料が少ない、というのは意外です。
521:login:Penguin
06/04/11 00:42:17 KjDgNH9L
OSによっては中身がさっぱりわからないままドライバ開発しなきゃいけない事もあるしな。
つーか、そっちのほうが多そう。
522:login:Penguin
06/04/11 00:47:03 rZUiZ4e7
>>520
NetBSDはそういう部分のmanpageが充実してるとか聞きますな。
linuxはmanpage書き上げたら実装が別物になってたなんて笑えん状況がありそうだなあ…
523:login:Penguin
06/04/11 00:57:41 9nKANwAS
そこでmain treeにマージですよ。
main tree内の変更はたいていは面倒をみてくれる。
524:login:Penguin
06/05/11 18:07:51 PmwpTb/Y
ある内蔵デバイスのドライバでPCの機種毎に処理を変えなければいけない部分が
あり、ユーザ負担を減らすためにドライバ側で自動判別したいと思っています。
機種は違うのにSubvendorIDやSubdeviceIDまで何故か一致しているので、SMBIOS
のDMI情報を参照して機種を判別したいのですが、これって可能なんでしょうか?
そんなやり方は行儀が悪いとか、他にもっとまともなやり方があるとか何でも
構いませんので、どうかご教示をよろしくお願いします。m(__)m
525:好色少年のススメ
06/05/11 23:43:06 Uu/mTCgT
確かに行儀はよくないかも
新しいハードが出るたびにパッチ提供とか考えたら面倒だし
たとえそれが自社ハードだとしてもバージョンアップあるだろうし
判別はユーザランドで行う方が気分も楽だし処理も楽だしバグも少ない
526:login:Penguin
06/05/26 20:11:11 YiUMorw/
URLリンク(lkml.org)
527:login:Penguin
06/08/20 01:06:14 BobpEKad
カーネル層のモジュールのテストプログラム
を作ってるんですが、カーネル層でinit_moduleや
ioctlからスレッドを起こして daemonのように
動作させることってできるんでしょうか?
Linuxデバイスドライバを読んでもスレッドを
起こすような処理は載っていないようなので
参考書籍だけでも教えていただけるとありがたいです。
528:login:Penguin
06/08/20 11:29:13 EWXtKjUy
>>527
kernel_thread
daemonize
529:login:Penguin
06/08/20 20:55:18 bg2sTV9e
というか、普通に載ってるよね
530:login:Penguin
06/08/24 12:55:11 6WITQjoc
そいや、最近のノートPCには指紋センサーがあるけど
あれはハックできるものなの?
531:login:Penguin
06/08/24 13:34:05 wKY4BjAS
>>530
OSM 8月号に記事載ってたよ。
URLリンク(shop.sbcr.jp)
532:login:Penguin
06/08/25 00:34:04 CPHGcnDi
>>531 せんきゅー!
533:login:Penguin
06/08/26 07:37:08 F4NpQAPn
>>529
すみません。ページご存知でしたら教えてください。
第3版持ってます。
534:login:Penguin
06/10/04 21:49:48 EGTQjLn1
すみません、どなたかわかる方教えてください。
現在、XFree86でグラフィックドライバを作ってます。チップは独自のものです。
バス等に接続されておらず、メモリマップドI/Oでアクセスします。
一応画面は出たのですが、1024*768だと縦が半分しか表示されず、
(縦に圧縮される感じ。マウスカーソルが縦につぶれている)
1280*1024だと画面が横に5個くらい表示されてしまいます。
使用しているチップは1ライン4096byte固定なので、解像度に応じて次のラインを
描画するアドレスを更新しなくてはなりません。
カーネルのFBドライバだとline_lengthとかの変数に設定してあげればうまいこと
描画してくれるのですが、XFree86の構造体にはそういった変数が見当たりません。
カーネルFBドライバのline_lengthとかに相当するものはどれでしょうか?
縦に圧縮されるのと画面が5個くらい表示されるのは、別問題な気がしてます。
今、手元にソースがないんですが、InitをするときにvirtualYを*2してやると縦が一見
正常っぽく表示されました。カーソルとかが縦につぶれたままなので、根本対策には
なっていません。
535:Mr.名無しさん
06/10/09 16:36:24 OGKR436u
■■■■■■■■■■■■■■■■
■ ■ 違う板にコピペすると、四角の枠の中に
■ ■ メッセージとURLが現れる不思議な絵。
■ ■
■ ■ (その仕組みがリンク先に書いてある)
■ ■
■ ■ この原理を応用すると、まったく新しい
■ ■ コピペが作れる予感。
■■■■■■■■■■■■■■■■
536:login:Penguin
06/11/05 18:18:15 j6ZWju7f
>>534
グラフィックチップのモード設定を間違えている予感
537:login:Penguin
06/12/14 22:35:16 JyAlagq8
すみません どなたか助けて下さる方はいらっしゃらないでしょうか?
当方PCIデバイスのドライバをLinuxデバイスドライバ読みながら
作成しております。
今DMAを用いてread,writeさせようと思っているのですが、
うまく転送ができておりません。
DMA転送の関数としては
dma_buff = kmalloc( count, GFP_KERNEL | __GFP_DMA)
bus_addr = pci_map_single( pci_dev, dma_buff, count,
direction );
flags = claim_dma_lock();
disable_dma(channel);
clear_dma_ff(channel);
set_dma_mode(channel, mode);
set_dma_addr(channel, bus_addr);
set_dma_count(channel, count);
enable_dma(channel);
release_dma_lock(flags);
てな感じです。
get_dma_residueで転送できてるかどうかみてるのですが
まったく転送されてないみたいです。
DMAコントローラのレジスタの設定とかは
ほかに何かいるのでしょうか。
ちなみにターゲットのPCはPen3 800MHZ
チップセットは815です。
どなたかお知りの方いらっしゃったら お願いします。
538:login:Penguin
06/12/15 11:02:30 Qc0JIFW5
>>537
見ているものがまったく違っているような気がしますが。
PCIでbus master転送したいんじゃないの?
539:537
06/12/15 15:20:46 NJleqqJR
おお、早速のレスありがとうございます。
DMA転送するにはチップセットの中の8237DMAコントローラをいじればいいって思ってました。バスマスタについて少し調べましたが、IDEのDMAもバスマスタになるんですね、知りませんでした。
となるとこのバスマスタはどうやればいいのでしょうか?参考になるものでもいいので、教えてください、お願いします。
540:login:Penguin
06/12/15 23:40:00 72pQobUh
ターゲットとなるPCIデバイスの仕様がわからなきゃデバイスドライバは書けないよ
せめて型番だけでも出してくれ
541:login:Penguin
06/12/16 18:42:01 wkeveW0d
ドライバというか、モジュールの話なんですけど
スレッドを使ったせい?なのか、psすると
3635 pts/0 R 0:00 modprobe hoge
と残るんですが、これは出ないようには出来ないものなんでしょうか?
勿論 rmmod hoge すると消えるんですけど。
542:537
06/12/17 19:34:20 BtOAund7
ターゲットのデバイスは内製のボードなのですよ orz
となると やっぱボード自体を作った人に聞いたほうがいいのかな?
543:login:Penguin
06/12/17 19:50:10 pl1Ns6BC
チップのレジスタ仕様と、制御のシーケンスがわからないとドライバは書けないよ。
544:login:Penguin
06/12/17 20:36:37 6E+xGodr
>>542
当然聞くべきなのですよ
545:login:Penguin
06/12/17 22:08:40 SVqrrgVr
チップも内製なのか?
だったらデバイスドライバもチップ開発チームが書くものだよな
少なくともサンプルコードの類は書くはずだ
そうでなくて市販のチップを使ってPWBAだけ内製したのなら
使用したチップのデータシートなりプログラマーズガイドなりを読めばいいだけの話
546:537
06/12/18 01:17:23 5wopQO2S
ほぼ内製だったと思います。
ちょっと月曜日会社いったら、聞いてみようと思います。
大変参考になりました、ありがとうございました。
ところで、これは単なる質問ですが、
マザボのチップセットにある8237とかの
DMAコントローラは古いし遅いみたいだから
PCIとかIDEとかに使われてないみたいだけど、
Pen3 800MHzとかでも PIOのが早いの?
547:login:Penguin
06/12/18 07:35:08 a8xYea1H
最近のデバイスで言うDMAはバスマスタDMAのことだよ。
バスマスタってのはデバイス側が主導権とってバスを制御して
CPUの頭越しにメインメモリにデータ出し入れすることだ。
そのためにはデバイスにバスをのっとってデータ転送しろって命令を
CPUからデバイスに発行する必要がある。
その手続きを知るためにレジスタなりデータシートなりを調べろって
みなさん言ってるんだよ。
548:537
06/12/19 00:01:59 2Sv0wv+g
なるほろ、大変勉強になりました。
ハード屋さんからマニュアルゲットして
がんばってみます。
549:login:Penguin
06/12/19 23:53:27 g20RCuxU
>>537
つ URLリンク(www.oreilly.co.jp)
550:login:Penguin
06/12/27 05:38:58 krfJbXj5
すみません ドライバでDMA転送するための連続したメモリ領域(64MB)を確保したいのです。
kmallocで確保可能な連続したDMA領域は最大128kB ということはネットで検索すると出て来たのですが、
どうすればドライバのDMA転送で利用可能な128kBを超えるの連続領域を確保出来るでしょうか?
OSはlinuxカーネル2.6です。
ご存じの方おられましたら御教示戴きたくよろしくお願い致します。
551:login:Penguin
06/12/27 10:51:31 mQ5aQPBa
>>550
とりあえずそのふざけた石を投げ捨てれ。
やるならalloc_pagesだろうなあ。そのサイズで連続領域を簡単に確保できるとは思えんが。
ついでに書いておくと128KByte制限は8237の呪いなのでPCIならそんなものはない。
552:login:Penguin
06/12/27 12:43:43 krfJbXj5
投げ捨てぇー…れないorz
>>551
早速ありがとうございます。
検索してても思ったのですが、
なんか連続領域"64MB"っていうのは常識外れっぽいのですね…
とはいえ組込み系で使った独自ロケットI/OのPC向け転用の必要があり、
石を投げ捨てる訳にもいかず今回の質問とあいなりました。
alloc_pages、試してみます!!
回答感謝いたします。
センキュー!!!!
553:login:Penguin
06/12/28 02:29:39 4Oi09t3r
かなり強引だけど、カーネルオプションで使用メモリ量に制限かけといて、
未使用領域を作った上でそこ使っちゃえば?
554:login:Penguin
06/12/28 12:33:40 vc2Jrznf
>>553
MMUの面倒は誰が見るですか?
面倒な世の中になったのう…
物理アドレスで完結してりゃなにも考えなくていいのに。
555:login:Penguin
06/12/29 09:28:41 JbqPlaTm
>>553
アドバイスありがとうございます。
ちょっと恐いですが、検討してみます。
>>554
MMU…よく判ってません…勉強してきます。
ご指摘ありがとうございます。
いろいろレスありがとうございました。
スレの皆様が良い年越しを迎えられますように!!
それでは、また来年!!
556:login:Penguin
06/12/29 10:44:35 PkRb73AX
RocketIOってことはXilinxのFPGAだよな
だったら128KBのブロックのアドレスポインタリストを渡すと
自動的にリスト通りブロックをたどって転送するように
FPGA回路を再設計するのがまっとうな手段だろうな
デバイスドライバやOS設定の変更ではどうにもならんと思う
557:login:Penguin
06/12/30 00:07:40 SZb58Bld
カーネル組込みで、ドライバ初期化のときなら確保できそうな気もするな。
開放したら二度と確保できなくなりそうだが。
558:login:Penguin
07/01/01 22:05:23 uXbHjsPd
明けましておめでとうございます。
さらにレス&アドバイスありがとうございます。
うー勉強不足。知らないこと多過ぎますね!ハードル高いです orz
安定化まで考えると更にハードル上がりそうですが、ハード側とも相談してみます。
それでは本年もよろしくお願いいたします!!
559:login:Penguin
07/01/19 00:41:46 xhnZtOc/
皆様に聞きたいのですが
当方Linux 2.6カーネルの元でドライバの開発を行っています。
起動してからinsmodでインサートするタイプのモジュールを作っています。
カーネルをフリーズさせたりして固まらせてしまって、やむなくリセットボタンを
押す事が多々あるのですが、その際にファイルシステムのチェックが
強制的に行われてしまい、これでかなりの時間をロスしてしまいます。
何とかこのファイルチェックを飛ばして時間の短縮を行う方法はないでしょうか?
VMwareとかの仮想マシンを使えばいいのかもしれませんが、
特殊命令を使っておりますので、仮想マシンがその命令をサポートしていないために
導入できません。
560:login:Penguin
07/01/19 02:15:30 VcfRHkiI
>>559
mount -o remount,ro /
とかやって、書き込み不可にしてから遊べばよくね?
561:login:Penguin
07/01/19 08:04:16 /YcMJPuk
/etc/fstabの6番目のフィールドの値を0にする。man fstabしてみそ。
tune2fsで-c 0とかもしておいたほうがいいかも。
562:login:Penguin
07/01/19 20:24:37 xhnZtOc/
>>560
でもそれをやると、kmallocをGFP_KERNELで使ったときに
メモリがスワップアウトしたらまずいことになりませんか?
>>561
やってみました
なんかファイルチェックをしなくなったことで壊れそうでもありますが
やっぱり我慢してチェックしたほうがいいでしょうか...
563:login:Penguin
07/01/20 19:48:34 3aq4dRUa
>>562
/だけ守ればいいので、なりません。
564:login:Penguin
07/01/21 01:23:20 QaYT7DDq
>>563
ああそうか、swapファイルはswapパーティションですもんね
ありがとうございます
565:login:Penguin
07/01/27 11:05:03 4J9B+fMX
評価機はネットブートさせてNFSroot稼動させればいつ飛んでも
大丈夫な環境にできるんじゃない?
566:login:Penguin
07/02/05 06:03:38 9i1Bwf6u
通常、Linuxのドライバをインストールする時はカーネルにパッチを当ててカーネルごと
コンパイルしなければいけないけど、Windowsのようにカーネルソース無しでドライバを
コンパイルしてインストールできるようにする方法ってあるの?
567:login:Penguin
07/02/05 06:26:04 9i1Bwf6u
URLリンク(ja.wikipedia.org)には
現在のカーネルではモジュールをカーネルの構築状態に依存する事なく追加できると
書いてあるけど、カーネル側でインターフェースが変更になった場合は旧ドライバは
使用できなくなるんじゃないの?それとも、カーネル側で旧インターフェースが温存されるの?
あと、「カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある」
Linuxはどのバージョンまでなの?
568:login:Penguin
07/02/05 06:56:37 Zi/ATtvA
>>566
いまはそんなことしなくていいよ
insmod rmmodで動的にドライバを挿入したり削除したりできる
569:login:Penguin
07/02/06 01:26:43 j3mwrUGC
いやぁソースはいるだろ。
570:login:Penguin
07/02/06 08:59:25 jQKQh5/W
ソースはいるけどカーネルのリビルドはいらない
571:login:Penguin
07/02/06 10:27:34 Rm04tDsq
いやぁリビルドは途中までいるだろ。
572:login:Penguin
07/02/10 16:03:43 XWBlzb1u
初歩的な質問ですがよろしいでしょうか
私はlinuxカーネル2.6.13のモジュールでhello worldのプログラムを組込みたいのですが上手くいきません
gcc -c module.c -Wall -Wstrict-prototypes -O -pipe -m486
この様にコンパイルしたのですがカーネルのソースコードに構文エラーがあるようでコンパイルが通りません
カーネルのソースコードを見てみても構文エラーらしき物はみられませんでした
どうすればコンパイルが通るでしょうか
エラーメッセージとソースコードを書いておきます
ソースコード
URLリンク(sakuratan.ddo.jp)
エラーメッセージ
URLリンク(sakuratan.ddo.jp)
573:login:Penguin
07/02/10 17:14:52 d+hexa9D
>>572
普通はMakefile書くわな
574:login:Penguin
07/02/10 17:47:20 a+8l3AD+
Makefileに
obj-m += module.o
って書いて
make -C /usr/src/linux M=$PWD modules
575:login:Penguin
07/02/10 19:18:09 XWBlzb1u
>>543
そうみたいですね
私のみた資料では、そうコンパイルする様に書いてあったのですが結構古い奴だった
のでしょうか
>>574
本当にありがとうございました。
その方法で無事にモジュールを作れました
感謝感謝
576:542
07/02/10 19:55:09 XWBlzb1u
.koってファイルが出てきたらからinsmodにかけてみたら
insmod: error inserting 'module.ko': -1 Invalid module format
って言われワラタ
turbo linuxなんて微妙なの使ってるせいなんですかねこれは.....
577:542
07/02/10 20:03:22 XWBlzb1u
今までsage忘れてたごめん
578:login:Penguin
07/02/10 20:06:01 791EznrY
話題提供時はage、その後はsage
ってのが一番角が立たない。
正直、どうでもいいけど。
579:login:Penguin
07/02/10 20:14:38 a+8l3AD+
/usr/src/linux が今動いてるカーネルソースじゃないとか
580:542
07/02/10 21:33:23 XWBlzb1u
>>579
そうですね
元からあったソースでコンパイルしようとすると必要なMakefileがないとかで無理
でしたから、kernel.orgから同じバージョンのコード落してきてまた設定しなし
いた訳ですがそれが原因ですかね。
ディストリとかは独自の変更を加えているらしいし、また変更が加えられていない
純粋なカーネルインストールしてから出直してきます
581:login:Penguin
07/02/18 23:17:11 PxJoV1oA
すみません。kmallocで確保したメモリ領域をDMA転送するために、__paで変換して
渡してやるのと、dma_map_singleで変換して渡すのと、違いはあるのでしょうか?
たとえば性能(処理効率)が違うとか? どう使い分けているのでしょうか?
582:login:Penguin
07/02/19 10:56:01 QHwPPpDN
UNIXTIMEを日付文字列に変換するのに なんかAPI用意されてないの?
"2007/02/19 12:34:56" とかその程度のでいいんだけど。