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


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

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



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


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

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

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

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


232 名前:226 mailto:sage [03/05/30 10:13 ID:Mg17snq6]
>>231
$file vmlinux
./vmlinux: ELF 32-bit LSB mips-2 executable, MIPS R3000_LE [bfd bug], version 1, statically linked, not stripped

$file test.o
./test.o: ELF 32-bit LSB mips-2 relocatable, MIPS R3000_LE [bfd bug], version 1, not stripped



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


234 名前:226 mailto:sage [03/06/02 11:33 ID:O0kbkjww]
>>233
cc に渡すパラメータに -DCONFIG_MODVERSIONS を付け加えたら無くなりました。
ところが今度は、insmod するとこんなエラーが・・・
./test.o: unresolved symbol _gp_disp
./test.o: Note: modules without a GPL compatible license cannot use GPLONLY_ symbols

_gp_disp はどこのライブラリにあるのでしょうか?

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


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

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

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

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




239 名前:() mailto:sage [03/06/03 18:52 ID:U5Cecnio]
Windowsで動いているUSBデバイスドライバを、Linux へ移植しようとしています。デバイスの認識、open, write, close はうまく出来ているようなのですがreadがうまく行きません。 -75 のエラーが usb_bulk_msg() から返って来ます。-EOVERFLOW のエラーのようです。
ところが、一度、Windowsに認識させてから、そのデバイスをLinux につなぎ直してreadするとうまく行きます。
何らかの初期化をしているようなのですが、Linux ではどのようにすればいいのでしょうか? sniffer Tool の出力には
0000027510:31:13>>>>>>> URB 4 going down...
0000027610:31:13-- URB_FUNCTION_CLASS_INTERFACE:
0000027710:31:13 TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT, ~USBD_SHORT_TRANSFER_OK)
0000027810:31:13 TransferBufferLength = 00000008
0000027910:31:13 TransferBuffer = 81406fd0
0000028010:31:13 TransferBufferMDL = 00000000
0000028110:31:13
0000028210:31:13 0000:
0000028310:31:13 80
0000028410:31:13 25
0000028510:31:13 00
0000028610:31:13 00
0000028710:31:13 00
0000028810:31:13 02
0000028910:31:13 08
0000029010:31:13 00
0000029110:31:13
0000029210:31:13 UrbLink = 00000000
0000029310:31:13 RequestTypeReservedBits = 00
0000029410:31:13 Request = 20
0000029510:31:13 Value = 0000
0000029610:31:13 Index = 0000



とでていたので、usb_ctrl_msg()を使うのかと思ったのですが。
#define EPIPE32/* Broken pipe */
のエラーを返してしまいます。どうやればいいのでしょうか?
ちなみにチップは、日立の38K0です。

240 名前:login:Penguin [03/06/04 10:07 ID:RzUG7kJc]
デバドラ開発超初心者です。
誰か教えてちょーだい!!

カーネルモジュールでぬるぽ等による例外が起きてoopsが出た後って
リブートしなくちゃいけないの?
rmmodするとリソースbusyと言われて出来ないし。
簡単にやり直せる方法はないのでしょうか?
kdbとかを使うと出来るのでしょうか?
小さなドライバなので出来ればprintkだけでデバッグ
済ませてしまいたいです。

241 名前:login:Penguin mailto:sage [03/06/04 15:22 ID:miGkoc0u]
>>240
su して、
reboot

これが最速。

242 名前:login:Penguin mailto:sage [03/06/04 15:58 ID:YRPx8Qpb]
>>240
MOD_INC_USE_COUNTしなければ、rmmodできるはず。
Oops食らったまま動かし続けるのは気持ち悪すぎるが。


243 名前:240 [03/06/04 18:14 ID:RzUG7kJc]
>>241 >>242さん、ありがとうございます。
MOD_INC_USE_COUNT、MOD_DEC_USE_COUNTを空に
再定義してみました、単純なミスとかで他のメモリ
領域に影響なさそうであれば、これで切り抜けよう
と思います。
危なそうな場合は、やっぱりrebootですね。

244 名前:うまうま mailto:sage [03/06/04 23:56 ID:yoK8ZXbv]
>>239
ドライバの移植?なかなかおもしろそうだね

read, writeのコマンドシーケンスは合ってる?
ひょっとして、readする前にデバイスに対し的確なコマンドを
writeしてあげないといけないのでは?

そのsnifferログは、OSから8バイトのデータをデバイスに送っている
点や、URB番号が若い点からして、USBデバイスからディスクリプタを
読み出そうとしているところと見た。それはWindowsでもLinuxでもデバイスを
繋いだらUSBホスト側が自動的に行う部分。いわゆる初期化処理。
今回のreadできない問題に関係あるとは思えないな。


245 名前:239 mailto:sage [03/06/09 11:05 ID:FPzn7DZy]
>>244
write シーケンスの前にあるこの処理が妖しいとは思うのですが、Linux でどうやって実現したらいいのか・・・
0000037010:31:29>>>>>>> URB 7 going down...
0000037110:31:29-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
0000037210:31:29 PipeHandle = 814d7b1c
0000037310:31:29 TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
0000037410:31:29 TransferBufferLength = 00001000
0000037510:31:29 TransferBuffer = 8140c000
0000037610:31:29 TransferBufferMDL = 00000000
0000037710:31:29 UrbLink = 00000000
0000037810:31:29B133TN: m_Endpoint1IN.SubmitUrb status ==>
0000037910:31:290x00000103
0000038010:31:29
0000038110:31:29B133TN: B133TNDevice::Create Status
0000038210:31:290x00000000
0000038310:31:29
0000038410:31:29B133TN: Entering B133TNDevice::Device Control,
0000038510:31:29IRP: Major=0xe
0000038610:31:29 Minor=0x0 Flags=0x30
0000038710:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000038810:31:29B133TN:
0000038910:31:29B133TN: Entering B133TNDevice::IOCTL_B133TN_COMMAND_OUT_Handler,
0000039010:31:29IRP: Major=0xe
0000039110:31:29 Minor=0x0 Flags=0x30
0000039210:31:29B133TN: Code=0x222000 InputSize=0x4 OutputSize=0x0
0000039310:31:29B133TN:
0000039410:31:29B133TN: FIFO ReservedDataSize=>
0000039510:31:290x00000000
0000039610:31:29
0000039710:31:29UsbSnoop - IRP_MJ_INTERNAL_DEVICE_CONTROL, IOCTL_INTERNAL_USB_SUBMIT_URB
0000039810:31:29


246 名前:239 mailto:sage [03/06/10 11:06 ID:3w0EVlGb]
ttp://www.xlsoft.com/jp/products/windriver/windriver.html
ここにある、winDrive の体験版でハードを調査したところ、インターフェースが活性化されていないのが原因のようです。

usb_set_interface() を使えばいいのだろうけど、パラメータがよくわからない。

247 名前:login:Penguin mailto:sage [03/06/13 16:03 ID:pewsS0ej]
cat /proc/bus/usb/devices で表示されるインターフェースの中から

C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=piece
E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl= 16ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=piece
のデバイスを活性化するにはどうすればいいのでしょうか?

248 名前:247 mailto:sage [03/06/13 18:44 ID:pewsS0ej]
ここを読んだら自己解決しますた。

USB通信プログラミングテクニック
ttp://www.picfun.com/usb00.html



249 名前:うまうま mailto:sage [03/06/13 22:20 ID:EYuB3skO]
>>248
こりゃ使えるサイトだ。日本語でUSBの仕様をここまで説明したサイトって、
他にはないよきっと

>>247に質問!
「活性化」というのがよくわからないから教えてほしい。

cat /proc/bus/usb/devices で >>247のような表示がされたってことは、
すべてのPIPEがオープンされているものと思ったけど。
結局、このデバイスにはInterfaceが二つあって、USBバス上に
接続したときは Interface 0しか初期化されなかった。その状態で
Interface 1のEndpoint 0x81からread()しようとしたが、
まだPIPEがオープンされてないためできなかったということ?


250 名前:login:Penguin [03/06/14 17:46 ID:G+Mtao/F]
オイラGPLライセンスだよ〜
と表明するときに書くマクロって
どういうやつだっけ?

251 名前:login:Penguin mailto:sage [03/06/14 18:11 ID:1HDS5RSe]
MODULE_LICENSE("GPL"); のことかにゃ。

252 名前:login:Penguin mailto:sage [03/06/14 18:13 ID:G+Mtao/F]
>>251
(゚∀゚)サンクスコ

253 名前:247 [03/06/16 12:53 ID:bzsTHCID]
>>249
そのとおりです。

えーと、いま作成中のドライバを試してみたら解決していませんでした。
Interface 1の初期化ってどうやるのでしょう?

254 名前:247 [03/06/16 17:13 ID:bzsTHCID]
追記:cat /proc/bus/usb/devices の表示は >>247 なのですが、なぜかread
が出来ないのです。writeは出来るのですが

255 名前: [03/06/19 18:39 ID:L1S32rBn]
質問です。USB のpipe を reset するにはどうすればいいのでしょうか?

256 名前:中年ハード屋 [03/06/20 00:46 ID:GdrpjdbN]
 DVDのCSS回路を設計するために、そのCSSの方法を理解するために、
LINUXのide-cdを利用したソフトを書いています。(ライセンス済みです)
それで、DVDのディスクキーや内部情報、そして、認証などは出来るのですが、
タイトルキーの取得が出来なくて困っています。

 atapiを通したイトルキーの取得で何かしらのトリックがあるのでしょうか?

 このようなソフトを書く場合に、通常のアプリソフトのように(いまの
やりかた)書けば動作するのですか、それともドライバーソフトのように
特殊な方法が必要なのでしょうか?

 よろしくお願いします

257 名前:login:Penguin [03/06/20 12:05 ID:w5824KTx]


258 名前:login:Penguin [03/07/02 02:02 ID:VujfXoME]
(・∀・)renice!



259 名前:login:Penguin [03/07/06 23:29 ID:lEtq+gmE]
(・∀・)renice!

260 名前:login:Penguin [03/07/08 15:11 ID:nDf4bQ70]
(・∀・)renice!

261 名前:linuxer [03/07/09 01:17 ID:W4/RwfEH]
僕はLinux のethernet のドライバを改造したいデス
ふつは通信用途に最適化されてると効きました
それはぺケットをみる目的につかいます
なにかアイディアはありますか??

262 名前:login:Penguin mailto:sage [03/07/09 01:22 ID:9Ead9bym]
tcpdump等の既存のものより詳細にみれなければ意味がない気がするけど大丈
夫なのかしら。


263 名前:_ mailto:sage [03/07/09 01:29 ID:RRaEUYou]
homepage.mac.com/hiroyuki44/hankaku09.html

264 名前:login:Penguin mailto:sage [03/07/09 01:48 ID:FD/eKW7A]
>>262
石にもよるでしょうねえ。
最近の利口な奴はいろいろ手を入れてくれるし。


265 名前:login:Penguin mailto:sage [03/07/09 13:47 ID:GtKhiIZ8]
>>261
現行ドライバだと、どの点が不満なのか言ってもらわないと助言しようがないよ
パケットモニタリングはNICチップのpromiscuousモードの仕様に依存する話だ

266 名前:login:Penguin mailto:sage [03/07/10 07:33 ID:sMbuqqa1]
>>265
現行のドライバならpromiscuousモードで動かしたときに
パフォーマンスがわるいな感じです
それでぺケットを取りこぼすことになってしまうので
キャプチャ用途に最適化できたらいいなと考えましたです

267 名前:login:Penguin mailto:sage [03/07/10 07:41 ID:oOmBMqv3]
>>266
promiscuousモードだと全パケットをホストPCに転送するから
通常モードに比べて取りこぼす可能性は増える。対象のNICチップは何?
素直にintelなり3comを買えば済むだけの話かもよ。

ちなみにリアルテック(蟹)の性能がよくないのは特許を避けてるから。
現状でいいパフォーマンスのNICが欲しけりゃIntel(or元DEC)、3comの
ちょっと値が張るNICを買うしかないよ。

ドライバでどうこうできる話ではない

268 名前:login:Penguin mailto:sagee [03/07/10 23:13 ID:TravPTn9]
>>267
リアルテクです。3COMも使ってますが、スイッチと相性が悪いな感じで
無反応になってしまう(壊れているのかもしれない)こともありますで
リアルテクでペルフォマンスがよくならないかなと想いました
ちなみに特許って具体的にはどんな特許ですか?



269 名前:login:Penguin mailto:sage [03/07/10 23:46 ID:bBVT4pXs]
>>268
261と268で目的が変化してるぞ。

270 名前:login:Penguin mailto:sage [03/07/11 13:32 ID:CtoBVZIQ]
>>268
そもそもパケットモニタリングするのにスイッチングハブを使ってる時点でアウト
リピータハブ(ダムハプ)を使わないと他ホストの通信は傍受できないよ

結論
・RealtekのNICは捨てて、Intelか3Comを使え
・スイッチングハブではなく、リピータハブを使え

全然デバドラと関係ないや スレ違いどころか板違い?

271 名前:login:Penguin mailto:sage [03/07/13 22:55 ID:UrPfG9sV]
>>267
>promiscuousモードだと全パケットをホストPCに転送するから
違うよ。promiscuousモードって言うのは、リンク層で受信したデータが
自ホストの物理アドレスでなくても受信すること。
>>270が正しい事を言っている。

272 名前:login:Penguin [03/07/14 02:37 ID:imGWjqw6]
age

273 名前:267=270 mailto:sage [03/07/14 15:12 ID:E/Ns9e+C]
>>271
すまん 267=270 なのだが 何か矛盾したこと言ったかな?

MAC層(データリンク層)の処理はNICチップで行われる。
ホストPCはMAC層の処理にはまったく関与しない。
MAC層の処理後、必要なデータだけPCIバスを介してホストPCにDMA転送する。

つまり、通常モードだと自ホスト宛かブロードキャストのパケットデータだけを
ホストPCに転送すればいいのに対し、promiscuousモードだとすべての
パケットデータを転送しなくてはならず、転送量が膨大になる。
そのため、バッファがあふれる(=データを取りこぼす)ことになりやすい。

274 名前:268 mailto:sage [03/07/15 03:30 ID:Yac3cQfq]
スイッチはL3スイッチでポトミラリング機能がありますよ

ただ3COMのNICでも限界があるとですがぎりぎりまでぺケットの
モニタ用に最適化したいと思いましたです
リアルテクの話は忘れてください ふつはバッファも通信用に
チュニングすれて確保してると思ったけどぺケットをモニタするときは
受け取るだけだから ドライバで受信用のバッファを多めに
できたらいいなと思ったよ でもどうやったらいいか分らないよ
ヘルプしてください





275 名前:山崎 渉 mailto:(^^) [03/07/15 11:17 ID:2JhhXBQM]

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

276 名前:login:Penguin [03/07/15 12:07 ID:Fo16Kpwc]
(・∀・)renice!

277 名前:login:Penguin [03/07/22 11:30 ID:6WQ9WMDa]
(・∀・)renice!

278 名前:login:Penguin [03/07/25 12:52 ID:NH3LXVfX]
(・∀・)renice!



279 名前:login:Penguin [03/07/30 12:07 ID:cPdgkLk2]
(・∀・)renice!

280 名前:ぼるじょあ ◆yBEncckFOU mailto:(^^) [03/08/02 05:04 ID:GfRe8vK7]
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ

281 名前:login:Penguin [03/08/02 10:27 ID:2rmp9gin]
(・∀・)renice!

282 名前:login:Penguin [03/08/08 11:54 ID:mg5o8ebS]
(・∀・)renice!

283 名前:login:Penguin [03/08/13 12:30 ID:pfCYHBFY]
(・∀・)renice!

284 名前:login:Penguin mailto:sage [03/08/14 22:31 ID:EZZe4dzO]
$> cd /pub
$> more beer


285 名前:login:Penguin mailto:sage [03/08/14 22:44 ID:EZZe4dzO]
$> man woman
$> Segmentaion fault (core dumped)


286 名前:山崎 渉 mailto:(^^) [03/08/15 22:51 ID:dil3w4kp]
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

287 名前:login:Penguin [03/08/15 23:47 ID:GfNK1qbf]
(・∀・)renice!

288 名前:login:Penguin [03/08/16 15:04 ID:rNtMNMvg]
(・∀・)renice!



289 名前:login:Penguin [03/08/25 09:46 ID:+hXUD3jL]
(・∀・)renice!

290 名前:login:Penguin [03/09/02 21:16 ID:1mo12GKS]
insmod xxx.oってことはドライバのソースはどんなに大きくてもxxx.cの1っこだけじゃないとだめなの?

291 名前:login:Penguin mailto:sage [03/09/02 21:20 ID:88sqYoXe]
>>1は、ママンでもファックしてろや!hahahahahahaaaaaaaaaaaaaa!

292 名前:login:Penguin mailto:sage ああウソだぜ [03/09/02 22:18 ID:qo69XMHR]
>>290
完全なるカーネルモジュールにヘッダやリンカはいらない。
ソースは常にひとつ。

293 名前:login:Penguin mailto:sage [03/09/03 08:04 ID:CuYcG2U3]
>>290
Cファイルをインクルードすればいいだろ。

294 名前:login:Penguin mailto:sage [03/09/03 11:30 ID:4cm8kGPF]
>>293
よりによって一番最悪な答えですね先生

295 名前:login:Penguin mailto:sage [03/09/03 16:47 ID:iWz7WMbL]
>>290
info ld
-rの説明読め。


296 名前:login:Penguin mailto:sage [04/01/07 22:36 ID:ui3n7e6w]
だいぶ下がってますが、
2.6 と 2.4 のドライバ記述って何か変りました?
2.6 まだインストしてないので報告キボンヌ・・・
2.2 -> 2.4 程は変ってないのかなー?

297 名前:login:Penguin [04/01/16 18:02 ID:ZUOtu/O9]
PCIのデバイスドライバを作成していますが、
全くできません。
less /proc/iomemで書かれているアドレスで
read、write関数を使って書いたり、読んだりしてもだめです。
何がいけないんでしょうか?


298 名前:login:Penguin mailto:sage [04/01/16 19:15 ID:JS8EwlnL]
とりあえず、lspci -vvv を晒してみたらどうでしょう。
もちろんデバイス指定でね。
それを見て私が答えられるかどうかはまた別の話ですけど。




299 名前:login:Penguin [04/01/16 19:52 ID: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 mailto:sage [04/01/16 20:57 ID:JS8EwlnL]
FPGAですね。

私もそんなに知っているわけではないので、
あまりあてにはしないで欲しいのですけれど…
lspciの結果は特に変なところは無いと思います。
Class ff00はどのクラスにも属さないと言うことだと思うのでちょっと気にはなりますが、
読み書きぐらいはできるでしょうね、きっと。

だとすると、あとはドライバのソースでチョンボがあるか
FPGAの中で書きこみ禁止になっているとかですかね。
FPGAにどんなipが載っているのか分からないので、あくまで推測ですけど。

あんまり力になれなくてごめんね。


301 名前:login:Penguin mailto:sage [04/01/18 02:27 ID:+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 ID:+zT3hNOG]
>>299のマチガイだ。

303 名前:login:Penguin mailto:sage [04/01/19 07:32 ID:kPFQP2Tn]
PCIバスアナライザで観測しながらアクセスしてみそ

304 名前:login:Penguin mailto:sage [04/01/22 14:27 ID:O8v9hJ5s]
>>303

持っているならいい方法だけどね。
買おうとすると激しく高い。
レンタルでも中古でも激しく高い。

でも、欲しいね。

305 名前:login:Penguin [04/01/28 10:42 ID:N5b+GE5n]
マジレスすれば
ロジアナでPCIバスを観測するか、PCIバスアナライザを使うか
どっちかしないと、PCIデバイス/ドライバの開発は無理だろう

306 名前:login:Penguin mailto:sage [04/01/28 12:46 ID:OnT2yC/X]
んなこたーない!
297 が FPGA開発を同時にやってるならまだしも・・・
あったほうが楽なのは確かだが、無理ではない。

ハード屋さんはバスレベルで確認して提出するはず。
read/write 出来ないのはドライバの不具合。

>>297 は pci_find_device 関数など、基本から勉強したほうがよさそう。

307 名前:305 mailto:sage [04/01/28 15:27 ID:N5b+GE5n]
無理ではないって言っても、そんなマゾプレイみたいなコトしたくないよ
目隠しして半田付けしろっていうのに近いな

PCIのロジックって複雑だから、実機でバグが露呈するのはよくあること
430FXで動いたからって 875Pでは動かないとか余裕であるよ
市場に流通してるチップセットすべてで確認しないと市販は無理

名の通った枯れてるチップならまだしも、実機の動作チェックもしてない
FPGAの回路をつかったPCIカードなら、最初から疑ってかからなきゃダメだと思います

> ハード屋さんはバスレベルで確認して提出するはず。

PCIバスの全パターンをシミュレーションできる検証ツールってすごく高いよ
特にFPGAの開発のために検証環境買うのはコストにあわない
PCIバスアナライザがある環境で実機試験して、少しずつ直すほうが早くて安い

308 名前:login:Penguin mailto:sage [04/01/28 18:36 ID:XM3JMqvR]
>>307
そーゆーのはハード屋さんの仕事じゃないかと。
PCIブリッジの違いで動かないなんてのは設定云々じゃない限りドライバじゃ直せん。




309 名前:login:Penguin mailto:sage [04/01/28 19:09 ID:ceOaOw14]
> そーゆーのはハード屋さんの仕事じゃないかと。

おれもそう思う。
でも、実際はソフト組み込んだらなんかおかしくて、
実は結局、微妙にハードが悪かったなんて事は良くある話だね。
きっと >>305 は苦い思いをしたんだろうよ。

310 名前:login:Penguin mailto:sage [04/01/29 18:47 ID:ci1wDtTm]
>実は結局、微妙にハードが悪かったなんて事は良くある話だね。
ハード絡みやってりゃ必ずあるね。
慣れてくればハード、ソフトどっちが悪いか何となくわかるようになるけど。
制御チップ動かす時なんかはオシロ、ロジアナの出番が増える。

さすがに PCI制御用FPGAまで計測器突っ込んだ亊はないけどね・・・
そこまで行くと スレ違いですね >> 307

311 名前:307 mailto:sage [04/01/30 07:19 ID: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 mailto:sage [04/02/03 23:12 ID:j9rA+N1w]
>駄文失礼

気にしなくていいぜ。(w

313 名前:login:Penguin [04/02/09 07:11 ID:7h6uvjnn]
すいません、どうしようもない質問なんですが、
実験的にカーネルパニックを発生させるドライバを作るのには
どうすればよいでしょうか?
カーネル関数panic()を使っても
ハングするだけでパニックしないんです。。。
どうか教えてください。

314 名前:login:Penguin mailto:sage [04/02/09 20:13 ID:oe9mNV77]
このスレは俺に勇気をくれた。

315 名前:login:Penguin mailto:sage [04/02/10 00:02 ID:0xm4A1oM]
>>313
コンソールに"Kernel panic: …"って出てないの?


316 名前:login:Penguin mailto:sage [04/02/10 00:52 ID:4iNUE3rF]
>>313->panic();


317 名前:login:Penguin [04/02/10 21:13 ID:WwFCucZO]
>>315−316
返信ありがとうございます!
単純にパニックするよりoops画面が表示するようにしたいのです。
mmapあたりをいじくるドライバを作れば、
oops画面を表示させることは可能ですか?

318 名前:殴られそうだが mailto:sage [04/02/10 23:35 ID:0xm4A1oM]
>>317
試してないけど、
*(unsigned long)0 = 0;
とか。




319 名前:login:Penguin [04/02/11 00:21 ID:QfDGoor4]
>>318
似たようなので、
x=0;
x=x/x;
ってのをやってみたのですがダメですた。
やっぱLinuxって頑強だと思いますた。
mmapも見てみたらカーネル空間でなく補助記憶空間に
マップするだけのようですし・・・
アドレス例外でoopsできるような方法とかあるのですかね??

320 名前:login:Penguin mailto:sage [04/02/11 17:17 ID:ViS2X9Xm]
Oopsとpanicを混同しているような気がしないでもない。


321 名前:login:Penguin [04/02/12 00:21 ID:9Bh5Rhh+]
>>320
すみません。。。
パニックとシステムフォルト(oops)と勘違いしていたようです。。。
ドライバからシステムフォルト(oops)
させるような方法ってあるのでしょうか?

322 名前:login:Penguin mailto:sage [04/02/14 07:34 ID:kX0ZpYOB]
linuxはsolarisみたいにクラッシュダンプ取れますか??

323 名前:login:Penguin mailto:sage [04/02/16 00:01 ID:dUYGf/LZ]
>>322
ttp://lkcd.sourceforge.net/


324 名前:login:Penguin mailto:sage [04/02/19 02:35 ID:tYIYueC9]
Linuxでのデバイス・ノード管理は現在
従来の/dev以下のデバイス・ノードファイル、devfs、udevが
存在しているようですが、デバイスドライバを書くような
デバドラ開発者にはこの状態は影響するのでしょうか?


325 名前:login:Penguin [04/02/19 10:34 ID:iwEBqmwA]
私は従来の/dev以下のデバイス・ノードファイルを使ってます
devfsに対応するのも簡単だけど優先度低いから先送り

326 名前:login:Penguin mailto:sage [04/02/24 22:37 ID:BGHqYIMS]
modpostについて詳しく解説している文書をご存知でしたら教えて下さい。

327 名前:login:Penguin mailto:sage [04/03/17 23:57 ID:P4QfZyWd]
データシートをどうやって手に入れるか
それが問題だ

328 名前:login:Penguin mailto:sage [04/03/18 10:56 ID:WBeyRceU]
何のデータシート?



329 名前:login:Penguin [04/04/08 16:25 ID:E32BiKCa]
mmapについて質問させてください。

メモリデバイスをmmapするとき、ページサイズを4096Byteとした場合、
mmapされたデバイスの先頭からの"物理アドレス"と
mmapしたプロセスのデバイスに割り当てられた"仮想アドレス"の
下位12bit(2^12 = 4096)は一致するのでしょうか?

mmapではプロセスの仮想空間にページサイズ単位で
ファイルやデバイスを割り当てることが出来るわけですよね。
ページサイズが関係してくると言うことはMMUのようなものが
作用して、この割り当てを管理しているのですよね。
(あるいはMMUそのものなんですか?そこが分かってないのですが)

もしも、MMUの管理下にあるならば、実空間と仮想空間のアドレスの
下位12bitは一致するはずです。
MMUはページサイズ以下のアドレスを知らないはずですから。
ここまでは私の理解に間違えはないですよね。

でも、mmapが実際にどんな風に動いているか良く分からないので、
上のような疑問が沸いてしまったのです。
どなたかお分かりいになる方がいましたら教えてください。



330 名前:login:Penguin mailto:sage [04/04/08 17:57 ID:/VjqMrH1]
>>329
つ[ mmap.c ]

331 名前:login:Penguin [04/04/09 00:53 ID:E9wQ2At3]
いいなこのスレ

332 名前:login:Penguin mailto:sage [04/04/09 00:58 ID:ImS0ZAox]
>>330
ha?

333 名前:login:Penguin mailto:sage [04/04/09 00:59 ID:ImS0ZAox]
あぁソース嫁ってことかw


334 名前:login:Penguin mailto:sage [04/04/09 14:52 ID:8RpqlllW]
>>329
CPU/MMUアーキテクチャに依存する話だね。
IA32に限っていえばその理解でいいと思うよ。
他archでもまずそうなってるだろう。
そうなってないMMUなんて見たことない。


335 名前:login:Penguin mailto:sage [04/04/09 15:39 ID:dsP5+/oo]
2次キャッシュを UBS mem に格納して使いたし。可能?

336 名前:login:Penguin mailto:sage [04/04/09 21:34 ID:/keZpBhh]
>>335
CPUの2次キャッシュをUSBメモリにやらせるってこと?

337 名前:login:Penguin [04/04/10 01:41 ID:04yJkWho]
AGE

338 名前:login:Penguin [04/04/13 23:49 ID:bzoEXS/o]
USBのデバイスドライバ作る時のTIPSを教えてください



339 名前:login:Penguin mailto:sage [04/04/14 15:26 ID:XimV19c+]
デバイスを破壊出来るデバイスドライバーの作り方教えてください

340 名前:login:Penguin mailto:sage [04/04/14 23:18 ID:QKI6oVKA]
>>339
1.どこからかゴルフのドライバーを手に入れる。
2.ドライバーのフェイスにデバイスを貼り付ける(ガムテープでも可)

しかる後にドライバーを振りかぶり、路面、ブロック塀etc.にぶつけること。

341 名前:login:Penguin mailto:sage [04/04/15 10:49 ID:D/fT1Zhi]
>>340
( ´д)ヒソ(´д`)ヒソ(д` )

342 名前:login:Penguin mailto:sage [04/04/19 20:10 ID:TjHP8JDs]
>>340
( ´д)チョメ(´д`)チョメ(д` )


343 名前:login:Penguin mailto:age [04/04/27 21:12 ID:ftQXOuAJ]
v2.6.x 用の module (.ko) の作り方ってどっかに落ちてませんか?
v2.4.x だと gcc -c するだけで insmod できるイメージができましたが、
v2.6.x だとなんか後工程があるんですよね?

344 名前:login:Penguin [04/04/27 21:18 ID:VEIU93yI]
>>339
FDDにアクセスして、その音で音楽を鳴らす。
CDDのトレイを頻繁に出し入れする。
ってトレイは入れられたっけ?

345 名前:login:Penguin mailto:sage [04/04/28 09:36 ID:r7A4ZD5z]
>>344
出し入れ可能だけど、作り方は教えられないのでは?
もう既に完成してしまっているし ソース嫁としか言えないと思う

346 名前:login:Penguin mailto:sage [04/04/29 22:03 ID:ugZV/Avt]
>>344
CDDのトレイを開け閉めする位ならioctlで……

347 名前:login:Penguin [04/05/05 09:59 ID:IcDQ6/Fz]
v2.4でUSBキーボードドライバにRAWレベルアクセスする方法知りませんか?
usb/usbkbd.cを単品でモジュール化してみたけど、プログラムからのアクセス
方法がわからない・・・
usb_register時にマイナーバージョンの情報を登録してないみたいだけど
デバイスファイルでアクセスしようと思うと無理なのかな〜・・・

348 名前:login:Penguin [04/07/17 17:55 ID:z93SFsgN]
落ちそう・・・見込みなさそうだけど上げ



349 名前:login:Penguin [04/07/18 17:33 ID:qhsm/Ia2]
>>343
linuxdevices.com/articles/AT4389927951.htmlとか
lwn.net/Articles/driver-porting/とかではどう?

350 名前:login:Penguin [04/07/27 03:02 ID:AwmCdxXP]


Moz2chで見てると
レスがだんだん右にずれていくます。



351 名前:login:Penguin [04/07/27 03:08 ID:AwmCdxXP]

USBに2台のWebカメラをつなげてまちゅが

May 30 08:31:05 localhost kernel: usb-uhci.c: interrupt,status 3, frame# 1728

しばらく動いた後に/var/log/messageに出力されてカメラがハングしてちまいます。
USBのデバイスドライバは何を言ったのでしょうか?おちえてください。



352 名前:login:Penguin mailto:sage [04/07/27 03:23 ID:7ve9Hskt]
>>351
要はエラーが起きたのですね。それ以上あまり解析のタシにはなりません。
status 3 ってのは、割り込みが起きて、IOC と Error が立っていたんです。
# IOCの方は、割り込みを発生する機能なので、エラーじゃないですが。


353 名前:login:Penguin [04/08/02 14:39 ID:QD1yhPkc]
チップセットのドライバって具体的にはどんなことやってるの?

354 名前:login:Penguin [04/08/02 16:42 ID:4u8OC/CN]
すごく恥かしいあんなことやこんなこと

355 名前:login:Penguin [04/08/02 17:48 ID:Wbtl3uph]
>>354
激しく気になります。

356 名前:login:Penguin mailto:sage [04/08/03 23:29 ID:HnnAhZGX]
突然ですが、デバドラのioctlからpollやselectって呼べるかどなたか知ってますか?
pollやselectの引数の構造体に何を入れていいのかわかりません。

357 名前:login:Penguin mailto:sage [04/08/03 23:47 ID:0P3Qaw2+]
>>356
ioctlのハンドラからsys_selectとか呼びたいって事ですか?
呼べないことはないと思うけど…

なんでそんな変な事をする必要があるのか興味がありますな。
引数は普通にselectに食わせているものを同じように渡せば良いはず。


358 名前:login:Penguin mailto:sage [04/08/04 09:37 ID:NoJQortH]
>>357
3つのCPUおよびOSがある組込み系のデバドラを考えてます。
普通はioctlやselectをモジュール側に個別に書くのでしょうが、
それだとダメみたいです。デバドラ側で一括して処理を行うようにしないといけません。
ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を
考えてます。なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。



359 名前:login:Penguin mailto:sage [04/08/04 10:00 ID:H7hK0Jjq]
>>358
>ioctlをモジュール側から呼びだして、デバイス側ではそのioctl処理からpoll(割り込み処理)を考えてます。
ちょっと待てよ、そこで言ってるモジュール側とデバイス側の区別がわからないのだが?


360 名前:login:Penguin mailto:sage [04/08/04 10:24 ID:AG/Dol7k]
一般に、デバドラ内部からシステムコールやライブラリ関数は呼べないよ。
書いてあることだけじゃいまいち要領を得ないが、taskletなりtask_queueなりを
自分で管理して、カーネルのスケジューラに登録するのが常套手段だ。

カーネルスケジューラはは2.2系 2.4系 2.6系で大きく異なるから
各バージョンすべてで動作する共通コードを書くのは結構大変
泣ける マジで

361 名前:login:Penguin mailto:sage [04/08/04 14:21 ID:NoJQortH]
>>359
モジュール側とはライブラリのソースで、デバイス側とはデバイスドライバのソースです。
表現が下手ですね。文章もあまりうまくないのでごめんなさい。
ライブラリ側では、whileループでバッファの中身をチェックしています。
バッファが空になるまで、プロセスを眠らすことがそもそもの目的です。


362 名前:login:Penguin mailto:sage [04/08/04 14:35 ID:NoJQortH]
>>360
ありがとうございます。げえ、かなり大変そうですね。。。かなり萎えてきました。
今いろいろいじくり回してて、デバドラのioctlのfile構造体のメンバf_opを、
poll(select)の関数を指すようにしてやっています。
そのために、ioctlとは別のfile_operation構造体をつくってそこでpollを宣言しました。


363 名前:login:Penguin mailto:sage [04/08/04 14:40 ID:+wO9AS9w]
>>356 の言う「モジュール」=「ライブラリのソース」は「ユーザランドの
アプリケーションが使うライブラリ」かな?

364 名前:login:Penguin mailto:sage [04/08/04 15:22 ID:NoJQortH]
はい。そうです。
わかりにくくてすいません。

365 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll]
>>362
なんか、あさっての方向に走ってないか?
- poll() したいなら poll() を実装する
- イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て

やりたいことを確認したほうがいいぞ。
- なにをどう待ちたい?
- 付加的にやりたいことは何?

後者は、
> なぜioctlかと言うと、ユーザデータをデバドラに渡したい(アドレスのチェック)からです。
がわからんかったって話。


366 名前:login:Penguin mailto:sage [04/08/05 00:11 ID:UYjeE7ll]
あうあ
- - イベント待ちをしたいread()だろうがioctl()だろうがかまわず待て
+ - イベント待ちをしたいなら、read()だろうがioctl()だろうがかまわず待て


367 名前:login:Penguin mailto:sage [04/08/05 00:45 ID:CMe3HEND]
大丈夫か!? >>364よ!!
がんばれよ! 見守ってるからさ!

368 名前:login:Penguin [04/08/05 12:51 ID:dMydmJ+4]
書いてあることだけじゃいまいち要領を得ないが

アクセス待ち、アクセス完了まで時間がかかる、排他処理が必要である
ようなデバイスで

・ノンブロックでアクセス処理したい
・複数のプロセスから同時にアクセスされる状況に対応したい
・複数のデバイスを一元的に管理したい (リソース管理など)

こんな条件だと勝手に仮定すると
たしかに大きいデバイスドライバを書いて、そこですべて管理するのも
ひとつの解決法ではある。
でもユーザランドでスレッド/子プロセスを使って、ノンブロック処理を
実装することも出来るし、唯一の解でもない。

まぁ、情報が出せないというよりは、状況を理解してないので
うまく説明できないって感じなので、もうちょっと頭を使って
問題を整理してから、もう一回質問するがよかろう



369 名前:login:Penguin [04/10/29 11:01:48 ID:rDkd0V/P]
lsusbだとデバイス名が把握できてるということは、
個々のドライバ部分に問題があって動かないという風に考えてもいいでしょうか?
linux-2.6において
usbcore
uhci_hcd
cdc_acm
という三つのドライバにより動かしたいハードウェアがあるんですが、
cdc_acmをロードしてもうんともすんとも言いません

370 名前:login:Penguin mailto:sage [04/10/31 20:53:26 ID:fFX2rhTr]
.netとかjavaみたいなバイトコードなドライバーでハードウェア
を制御する環境を作るって可能ですか?

371 名前:login:Penguin mailto:sage [04/10/31 21:36:34 ID:uzVMAm7i]
>>369
まあそうでしょうな。
lsusbはハード的につながっていれば見えるし。

>>370
そりゃ作れん事は無いが…
速度が厳しくないかい?


372 名前:login:Penguin mailto:思っただけで、実現する技術が無いので sage [04/11/01 02:36:54 ID:dfNRJQ4+]
>>371
JITなりリコンパイラーなり方法はあるだろうし、全てのドライバーが
速度を必要とするわけじゃないと考えたわけで。部分的にでも・・・と
何にしてもバイナリの非互換性がどうにかならんかなぁと。

カーネル毎にコンパイルはダリ

373 名前:login:Penguin mailto:sage [04/11/01 06:48:36 ID:IqBdvM7D]
>>370
Kernelから呼び出すような仕組みにしても、
Javaで言うnativeなのが無いと駄目じゃない?
レジスタとかメモリ領域さわれないし。
結局そこ(nativeなモジュール)で非互換性が出る気がする。

374 名前:login:Penguin mailto:sage [04/11/01 15:55:17 ID:lkrLxjNC]
>>373
そのへんはバイトコードインタプリタで抽象化すればいいのではないかと。
PCIあたりならかなりの所まで出来そうな気がするなあ。

そういやOpenFirmwareなんてのがあったのう…あれはForthだっけ?


375 名前:login:Penguin mailto:sage [04/11/01 22:34:23 ID:dfNRJQ4+]
成るほど・・・
>>373
やっぱりそういうところで不備が出てきますか。。。言語拡張で・・・となると
Javaじゃなくなるし、コンパイラーも自前に用意しなきゃならなくなるし。。。

>>374
漏れもそんな感じの考えでいたんだけど、やっぱそれが難しいんでしょうね。
とはいえ、可能性があることはわかりました。ありがとうございます。
>>OpenFirmware
調べてみましたが上の考えのBIOS版みたいなもんでしょうか?

とりあえず、神が現れることを祈りつつ作れる作れない、作る作らないは別として
自分でも調べてみようと思います。厨の妄想に付き合っていただきありがとうございました。

376 名前:login:Penguin mailto:sage [04/11/02 12:28:29 ID:lgEgFui9]
カーネルのバージョンによってカーネルが持つ構造体が微妙に違うことがよくある。
(メンパが増えてるとか)

現状のinsmodによるデバイスドライバのダイナミックリンクは
その手の構造体の違いを解決してくれないので、原則的に
カーネルバージョンに依存したドライバしかリンクできない。

強制的に違うバージョンのドライバをinsmodすることも可能だが
正常に動く保証はない。たまたま動くことはあるけれども。

377 名前:login:Penguin mailto:sage [04/11/02 18:53:41 ID:chaRCRYs]
まあソース見て「あーこれなら動くな」と思ったら
迷わず-f

378 名前:login:Penguin mailto:sage [04/11/03 13:41:27 ID:1PHyje+L]
ドライバのソースがあるならリビルドする方がいいような気がするのう。
いっぱいコンパイラに怒られたりすると直す気が失せるが…




379 名前:login:Penguin mailto:sage いやしかし勉強になる。。。 [04/11/06 23:30:41 ID:9J0OxvoL]
>>376
なるほど。JAVA云々無しにしてもやっぱカーネルとは別離すべきなのかも。
いや、マイクロ・モノリシックの話じゃなくて仕様的なものを。moduleの管理も
こんなんでいいの?って気もするし。Xもドライバー持ってるってのがよくわから
んし(嫌味とかじゃなくて本当にわからんのです。)

って偉そうな事言っててもしょうがないな・・・たまにはソースぐらい読もう・・・

380 名前:login:Penguin mailto:sage [04/11/07 08:11:19 ID:/P0s9FI4]
>>636 > 昨日Linuxにふれたものですから
であり、(非常に一般的なやりかたにもかかわらず)やりかたがわからないとい
う人が tamagoをいれたい理由はなにかしら?
特に強い理由がないなら、「いれるな」が正しいガイドだと思うのですよ。

>>635
つかいかたは man xmodmap でみるといい。
キーコードは xev で調べられます。使いかたは man xev でみるといい。


381 名前:login:Penguin mailto:sage [04/11/08 12:46:18 ID:ir5Tmuq8]
Xサーバはroot権限のユーザランドプロセスで /dev/ioとか /dev/memに
直接アクセスしてビデオチップを制御する。
Xのドライバといわゆるデバイスドライバとは動作メカニズムがまったく違う。

382 名前:login:Penguin mailto:sage [04/11/09 23:51:44 ID:+nDFjkMc]
ユーザ空間からmmapでマッピングしてデバイスいじくるときって、
アプリがマッピング先のメモリに書き込む動作と同時に
デバイスにデータって書きこまれるんでしょうか?
バッファリングみたいのって気にしなくてもいいの?

383 名前:login:Penguin mailto:sage [04/11/10 01:00:51 ID:8UeNJl+2]
>>382
デバイスをmmapしてアクセスするときは、単にMMUがそこを指しているだけで、
ディスク上のファイルをmmapしたときのようなバッファリングはありませんよ。
類似のがある場合はあって、それはキャッシュなのです。
/dev/fb* は通常キャッシュが抑止されています。
/dev/mem は O_SYNCでopenしてやるとキャッシュを抑止します。



384 名前:login:Penguin mailto:sage [04/11/10 07:34:29 ID:WP1ExQ+t]
PCIデバイスの場合 各共有メモリ空間ごとにprefetchableビットが定義されている
ほとんどのPCIカードはprefetchableがdisableになっておりキャッシュ無効になってる

385 名前:login:Penguin mailto:sage [04/11/10 14:40:19 ID:OHaab6bm]
>>383
>>384
CPUキャッシュですか。
環境にもよるのでしょうけど、基本的にはあまり気にしなくてもいいのですね。
実は、drivers/char/mem.c みたんですけど、mmap システムコールを呼んだときと、
そこにアクセスした時のコードの流れがよくわからないのでちょっと???でした。

あとは、コンパイラのオプティマイズも気にしておいたほうがいいのでしょうね。

386 名前:login:Penguin mailto:sage [04/11/10 18:01:50 ID:MrVsce1+]
>>385
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。

最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。


387 名前:login:Penguin mailto:sage [04/11/10 23:54:53 ID:8UeNJl+2]
>>385
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。


388 名前:382 385 mailto:sage [04/11/11 00:27:04 ID:95L6p31P]
すみません。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。

387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。

ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。






389 名前:login:Penguin mailto:sage [04/11/12 00:12:24 ID:nxDtrzpb]
>>388
抑止の方は O_SYNC でできますよ。その行の後半の条件がそうでしょ?


390 名前:login:Penguin [04/11/14 11:26:16 ID:ZhMJfRu+]
USBサブシステムを読んでいるんですが、
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。

またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?

391 名前:login:Penguin [04/11/21 11:06:40 ID:RzBM8DsM]
technokitのUSB-IOをFedora Core 3に接続したら、/dev/hiddev0が勝手にできたので、
これに対しCでプログラムを作って、
fd = open("/dev/hiddev0", O_WRONLY);
して、
write(fd, command, 8);
した。commandは0x01FF00000000。けど全然反応が無い。

USB-IOのエンドポイント0には、0x01FFを送ったら、ポート0が反転するはずなんだけどなあ。
hid使わずに、ちゃんと専用ドライバ使わないとだめなの?

392 名前:login:Penguin mailto:sage [04/11/21 17:22:45 ID:fkgrUhvM]
デバイスドライバはカーネルメモリを消費するらしいのですが、
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?

393 名前:391 [04/11/21 17:37:11 ID:RzBM8DsM]
>390 /usr/include/usb.h

394 名前:login:Penguin mailto:age [04/12/12 18:20:03 ID:fch5Qtg6]
Linuxデバイスドライバの勉強を始めました。
がまずは、オライリーの本で解説してる、
サンプルコードから入ろうと思ったんですが、
asm/system.hをincludeしているコードは、

/usr/src/linux/include/asm/system.h: 関数 `__set_64bit_var' 内:
/usr/src/linux/include/asm/system.h:190: 警告:
dereferencing type-punned pointer will break strict-aliasing rules

と警告を出されてしまいます。
同じ現象に遭遇した香具師いませんか?
コンパイラはgcc3.3、kernel2.4.26。
ちなみに、警告された部分は、
#define ll_low(x) *(((unsigned int*)&(x))+0)
#define ll_high(x) *(((unsigned int*)&(x))+1)

static inline void __set_64bit_var (unsigned long long *ptr,
unsigned long long value)
{
__set_64bit(ptr,ll_low(value), ll_high(value)); //190行目
}


395 名前:394 mailto:sage [04/12/12 18:22:17 ID:fch5Qtg6]
あ、マシンは i686です。

396 名前:login:Penguin mailto:sage [04/12/14 01:02:15 ID:bnBNd/cw]
たしか-fno-strict-aliasingだったかな。それつけれ。
より詳細が知りたいときはググれ。

397 名前:394 mailto:sage [04/12/14 02:47:39 ID:iNH7gUWs]
産休です>>396

小細工ですが、
(unsigned int*)&(x)を、(unsigned int*)(void*)&(x)に書き換えると、
警告を封じることができますた。
勉強がんばります。

398 名前:login:Penguin [04/12/14 11:29:27 ID:HO3MDnt+]
モジュールでmallocを使うと
implicit declaration of function `malloc'
なる警告が出ました。
正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。
何かヘッダをincludeすればいいのでしょうか。



399 名前:login:Penguin mailto:sage [04/12/14 11:44:22 ID:vlh4D4yl]
>>398
kmalloc() or vmalloc()

400 名前:login:Penguin mailto:sage [04/12/14 11:54:53 ID:HO3MDnt+]
>>399
感謝.あとは調べます.

401 名前:login:Penguin [04/12/14 15:55:34 ID:ScDxM3L+]
【序 論】
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。
統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。
日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。
一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、
後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。
もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。
宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。
そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、
北の現体制を維持するための、CIAの有難い配慮だったわけです。
なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。
麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。
今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。
尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。
mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100

402 名前:login:Penguin mailto:sage [04/12/14 17:02:39 ID:WBCZfumK]
国際金融資本と無関係な人はいません。ここが大事なところです。
国際金融資本とダーティーな勢力になんらかの関係があるというのなら、
全ての人間がダーティーな勢力と関係があるということです。

403 名前:login:Penguin [04/12/16 00:42:54 ID:HSUTNn3s]
<linux/errno.h>をincludeしているのに、errnoが宣言されていないとエラーが出ます。
なぜですか?

404 名前:login:Penguin [04/12/16 00:52:12 ID:fnG8qWZe]
#include <asm/errno.h>


405 名前:login:Penguin mailto:sage [04/12/16 03:08:53 ID:L4JhEJTY]
デバイスドライバーをイジルとハードが壊れます

406 名前:login:Penguin mailto:sage [05/01/13 20:25:56 ID:5Qhjx5GH]
jiffies の質問です。jiffies がオーバーフローする時の挙動を確かめ
たく、下記のようなモジュールを作成してロードしたのですが、モジュー
ルのロードに非常に時間がかかります。

#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/delay.h>

MODULE_LICENSE("GPL");

int init_module(void)
{
jiffies = 4294961296UL;
return 0;
}

void cleanup_module(void)
{
return;
}

即座に jiffies 値を変更するためには、何か工夫が必要なのでしょう
か?


407 名前:login:Penguin mailto:sage [05/01/13 21:59:07 ID:b26g+4JK]
>>406
jiffesの値が飛ぶせいじゃないの?
初期値をいじる方がいいと思うが。


408 名前:login:Penguin mailto:sage [05/01/13 22:21:10 ID:5Qhjx5GH]
やっぱりそれしか方法ないでしょうかね。カーネルコンパイルが億劫で
まだ試していませんでした。

例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 8640000; にすると、より多くの時間がかかるようです。仮
想マシン環境で実験しているのですが、その間、仮想マシンのプロセス
の CPU 使用率は高いままでした。




409 名前:login:Penguin mailto:sage [05/01/14 02:03:54 ID:PSu0RjKD]
ん? 何書いてたんだ、俺
>408 は、正しくは以下です。

例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 864000000; にすると、より多くの時間がかかるようです。


410 名前:login:Penguin [05/02/06 11:19:02 ID:+OMlHKxZ]
mmapによるデバイスアクセスについてご教授ください。

16bitアクセス限定のデバイスに対して、
mmapによるアクセスを試行しているのですが、
どうも挙動が怪しくて困っています。

アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、
そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか?
なにか考慮が不足してるのでしょうか。

411 名前:login:Penguin mailto:sage [05/02/06 14:33:57 ID:JfjjYGk4]
>>410
アーキテクチャわかんないので、過去の経験より。
・D cache
・コンパイラが勝手に最適化

そういう制限がある場合は、おとなしく専用ドライバ書くのが
近道のような気がしますな。


412 名前:login:Penguin [05/02/10 21:10:10 ID:oT40ukFS]
gcc 3.3.5(gentoo) で作成したモジュールを gcc 3.4.2(FC3) のPCへ
組み込もうとするとエラーで組み込めません。
どちらも kernel-2.6.10 です。

insmod: error inserting 'hoge.ko' : -1 Invalid module format

kernel config (General setup, Loadable module) は同じにしてあります。
同じバージョンの gcc で作成したシステムでないと無理なのでしょうか。

413 名前:login:Penguin mailto:sage [05/02/12 01:22:07 ID:QcR6E3eX]
>>410

>>411の言うとおりアーキテクチャが分からないのでなんともいえないけど・・・

/dev/memをmmapでshortアクセスしたら、普通はshortで触ってくれるでしょう。
でも、触ってるデバイスが * 例えば32bit PCI * にぶら下がってたりしたら
32bit で触りに行っちゃうこともありますよ。
っていうか、PCIの向こうにいるデバイスに届くまでに余計な16bitが増えてたりする。
それでも、読みにいくときには多分shortで行っても多分大丈夫。
書き込みをshortでやったりすると、残りの16bitにゴミが乗っかっちゃうとか、
そんなんじゃないでしょうか?

そうならば、shortで書きに行くときには、最初にデバイスから32bit分持ってきて、
それに16bit分上書きして、32bit書き戻すとかするしかないのでは。
(16bitアクセス限定でも、読みに行くときは16bit×2で32bit分をうまく返してくれることを
かってに期待して書いてますけど)

それから、32bitでアクセスするときにも触りに行くアドレスに注意が必要ですよ、多分。
32bitアラインメントじゃないとダメな予感がします。
もしそうならば、アラインメントの境界をまたいじゃうような16bitの書き込みをする場合、
両側の32×2 = 64bit分を持ってきて16bit書いて戻す、とかしないとダメですよね。

もちろんこれは、PCI上でうまく振舞うように作られていないデバイスの話で、
たとえ16bitアクセス限定デバイスでもそうならないようにつくることは可能だと思います。

ところどころ言ってるかもしれませんけどね・・・

414 名前:413 mailto:sage [05/02/12 01:24:29 ID:QcR6E3eX]
早速、間違えてました(w

>ところどころ言ってるかもしれませんけどね・・・

ところどころ * うそ * 言ってるかもしれませんけどね・・・


415 名前:410 mailto:sage [05/02/16 00:46:02 ID:E/KjMwKc]
いろいろ情報ありがとうございます。

もともとドライバ経由でアクセスしていたのですが、
パフォーマンス的な問題でmmapでを使用したかったという経緯があります。
ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。

ですので、単純にmmapでの処理の問題かと思っていました。
時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。


416 名前:login:Penguin [05/02/16 22:28:50 ID:mypLuczy]
www.netfort.gr.jp/~matsu/lcd_pc/lcd_pc.html
これカコイイ


417 名前:login:Penguin mailto:sage [05/02/20 21:06:04 ID:0sjUjbHi]
現在、デバイスドライバ作成(とりあえずキャラクタ型)の勉強しているのですが、
2.4.30-pre1上で作成したテストドライバでモジュールのロードは成功したと思われる
のですが(lsmodで存在を確認)、実際にドライバを使用する為に作成したテストツールから
呼び出す(ioctlを使用する箇所で)と失敗しました。

$ ls -l /dev/testdev
crw-rw-rw- 1 root root 60, 0 2月 20日 20:11 /dev/testdev
$ ./testtool
ioctl: Inappropriate ioctl for device <-- perrorで表示させてみたところ


418 名前:417 mailto:sage [05/02/20 21:09:12 ID:0sjUjbHi]
つづき

そこで、さらに詳細に状況を確認するためにstraceを使用してみました。
$ strace ./testtool
execve("./testtool", ["./testtool"], [/* 52 vars */]) = 0
brk(0) = 0x8049a6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=62075, ...}) = 0
old_mmap(NULL, 62075, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40013000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0DU\1\000"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1333605, ...}) = 0
old_mmap(NULL, 1145796, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x40134000, 27588, PROT_NONE) = 0
old_mmap(0x40134000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x110000) = 0x40134000
old_mmap(0x40139000, 7108, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40139000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4013b000
munmap(0x40013000, 62075) = 0
open("/dev/testdev", O_RDWR) = 3
ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40013000
write(1, "errno = 25\n", 11errno = 25
) = 11




419 名前:417 mailto:sage [05/02/20 21:10:12 ID:0sjUjbHi]
つづき

dup(2) = 4
fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR)
brk(0) = 0x8049a6c
brk(0x804aa6c) = 0x804aa6c
brk(0) = 0x804aa6c
brk(0x804b000) = 0x804b000
fstat64(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
_llseek(4, 0, 0xbfffef50, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(4, "ioctl: Inappropriate io"..., 47ioctl: Inappropriate ioctl for device
) = 38
close(4) = 0
munmap(0x40014000, 4096) = 0
close(3) = 0
munmap(0x40013000, 4096) = 0
exit_group(1) = ?
$

結果を見ていると実行したおぼえのない以下の行がありました。

ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)

この現象はどこにエラーがある場合におこり得ますか?
知ってる方お願いします。m(_ _)m

420 名前:login:Penguin mailto:sage [05/02/20 21:38:19 ID:uvzGFsyf]
結果じゃなくてソースだそうよ

421 名前:417 mailto:sage [05/02/20 21:48:59 ID:0sjUjbHi]
>>420
Please wait for a moment...

422 名前:417 mailto:sage [05/02/20 22:06:08 ID:0sjUjbHi]
#define MODULE
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/string.h>
static int devmajor=60;
static char *devname="testdev";
MODULE_PARM(devmajor, "i");
MODULE_PARM(devname, "s");
#include <asm/uaccess.h>

static int devtest_open(struct inode * inode, struct file * file){
MOD_INC_USE_COUNT;
return 0;
}

static int devtest_close(struct inode * inode, struct file * file){
MOD_DEC_USE_COUNT;
return 0;
}

static int devtest_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg){
int i;
printk("testdev: ioctl: cmd=%04X\n",cmd);
switch(cmd)
{
case 1: printk("Driver testing\n"); return 0;
}
return -EINVAL;
}

423 名前:417 mailto:sage [05/02/20 22:07:26 ID:0sjUjbHi]
つづき
static struct file_operations devtest_fops = {
ioctl: devtest_ioctl,
open: devtest_open,
release: devtest_close,
};

int init_module(void){
printk("install '%s' into major %d\n",devname,devmajor);
if(register_chrdev(devmajor,devname,&devtest_fops)){
printk("device registration error\n");
return -EBUSY;
}
return 0;
}

void cleanup_module(void){
printk("remove '%s' from major %d\n",devname,devmajor);
if (unregister_chrdev(devmajor,devname))
{
printk ("unregister_chrdev failed\n");
}
};


424 名前:417 mailto:sage [05/02/20 22:10:07 ID:0sjUjbHi]
デバドラ呼び出し部

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
extern int errno;
int main(void){
int fd, ret;

fd=open("/dev/testdev",O_RDWR);
if(fd<0){
fprintf(stderr,"cannot open device\n");
return 1;
}
errno = 0;
ret = ioctl(fd,1);
if(ret == -1){
printf("errno = %d\n", errno);
perror("ioctl");
}
close(fd);
return 0;
}

425 名前:417 mailto:sage [05/02/20 22:11:43 ID:0sjUjbHi]
以上で全部です。

426 名前:login:Penguin mailto:sage [05/02/20 23:44:25 ID:Ia/OzVXx]
>>417
コピペしたら動いたぞ。 2.6.10 でだけど・・・
カキコしたソースで動かしてみそ。

427 名前:417 mailto:sage [05/02/21 00:06:03 ID:bwxnTums]
>>426
マジ?しかも、2.6?
このソースでコンパイル通った?

そして実行結果キボンヌ

428 名前:login:Penguin mailto:sage [05/02/21 00:25:27 ID:PN7I+gvx]
>>427
# uname -r
2.6.10-gentoo-r6

/var/log/messages より
Feb 20 23:41:06 XXXXX testdev: ioctl: cmd=0001
Feb 20 23:41:06 XXXXX Driver testing

変更点は /dev/wrkdev にしただけ。



429 名前:417 mailto:sage [05/02/21 00:37:25 ID:bwxnTums]
>>428
Thanks!
こちらもたった今2.6で動作確認したところです。

う〜む、何故2.4ではエラーなんだろ。

もうちょっと自分で調べてみます。
テストしてくれてありがとう >>426 & >>428

430 名前:login:Penguin mailto:sage [05/03/06 13:19:22 ID:PjCVkwmZ]
何気に良スレ
みんな頑張れ
お気に入りに追加しますた。

431 名前:login:Penguin mailto:sage [2005/03/29(火) 16:05:44 ID:lbUCJwgD]
ドライバのread、write関数でminor番号取得する方法ってないんですか?

2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、
片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。

まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。

432 名前:login:Penguin mailto:sage [2005/03/29(火) 23:34:47 ID:ChOvrjsk]
private_data を使う、かな?


433 名前:login:Penguin mailto:sage [2005/03/30(水) 11:17:39 ID:tWHa73x6]
>>432
サンクス!
open時に file->private_data にポインタ突っ込んでおくってことですね。

取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。
修行が足りぬ…orz

434 名前:login:Penguin mailto:sage [2005/04/16(土) 06:28:18 ID:R/hasO1P]
usb-hid についての質問です.
usb 接続の joypad を,hid-input 経由ではなく,
(drivers/usb/usb-skeleton.c のような) usb のデバイスドライバで処理したいと考えています.
問題は,joypad の挿入時に hid-core の probe 関数が呼ばれてしまい,
自作 usb デバイスドライバの probe 関数が呼ばれないことです.
上記の解決策はあるのでしょうか.

自作 usb デバイスドライバ内では, joybad のベンダーID,プロダクトIDを
usb_device_id 構造体に設定しています.

kernel は 2.6.10 です.
よろしくお願いします.

435 名前:434 mailto:sage [2005/04/16(土) 08:17:16 ID:R/hasO1P]
自己レスです.
解決法を見付けたので,書き込みます.

drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に,
joypad のベンダIDとプロダクトIDを加えることで,解決しそうです.

スレ汚し失礼しました.

436 名前:login:Penguin mailto:sage [2005/05/17(火) 18:53:06 ID:CbytfkQn]
2.6 kernel(2.6.11.x)上でデバドラ書く場合、
MOD_INC_USE_COUNT
MOD_DEC_USE_COUNT
を使用する事ってobsolete?

437 名前:login:Penguin [2005/05/18(水) 01:07:17 ID:2baf1QgQ]
>>436
れがし

438 名前:login:Penguin mailto:sage [2005/05/19(木) 23:52:14 ID: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 [2005/05/19(木) 23:52:48 ID: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 [2005/05/19(木) 23:57:30 ID: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 mailto:sage [2005/05/20(金) 03:04:35 ID:Ds9MyJAI]
>>440
カーネルソースんとこでs_printグレップしようぜ

具烈婦
レップってすごいなコレ。どういう意味だ

442 名前:login:Penguin [2005/05/20(金) 08:58:08 ID:zG+tsX8i]
>>441
烈婦ワロタ

レスありがとうございます。
s_printでgrepしてみたのですが、同名のシンボルは無いようでした。

念のため、ドライバAに
EXPORT_SYMBOL(s_print);
を追加しても'Unknown symbol'になってしまいます。
ドライバ間の依存関係をどこかで明示する必要があるのでしょうか?


443 名前:login:Penguin mailto:sage [2005/06/07(火) 10:17:39 ID:6uaL4exB]
普通はそんなことはできないんじゃない?
誰かができると言ったのかな?

デバイスファイル開いてioctlをコールが普通じゃねぇの?

444 名前:login:Penguin mailto:sage [2005/06/17(金) 18:54:11 ID:9kSGojSd]
www.oreilly.com/catalog/linuxdrive3/book/index.csp
Linux Device Drivers, Third Edition

445 名前:login:Penguin mailto:sage [2005/06/18(土) 19:13:08 ID:Uc6V46BE]
>>444
chapter1まで読んだ。
Policy-free driversの意味がまったく分からない。
うえーん

446 名前:login:Penguin mailto:sage [2005/06/19(日) 15:13:18 ID:f3bsYXGy]
the role of a device driver is providing mechanism, not policy.
これが、policy-free

447 名前:login:Penguin mailto:sage [2005/06/19(日) 15:19:24 ID:f3bsYXGy]
ここでのfreeはduty freeのfreeと同じ使われ方。
policyがないdriver

448 名前:login:Penguin [2005/06/29(水) 18:33:32 ID: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 [2005/06/29(水) 18:42:20 ID:Cc/icRgl]
Linux のドライバのプログラミングの
良い入門書があったらおしえてください

450 名前:login:Penguin mailto:sage [2005/06/29(水) 22:17:33 ID:OM3Tds/i]
>>448
Kernel2.4.27のソースしか見てないので違ったら失礼。

>マイナー番号を100 120 140 160としました。
これがよくわからん。デフォでは192から16個を順番に割り当てるようになってるが、それをわざわざいじったってことか?
そうなると、スケルトンをあちこち変更してあるのだろうから、さすがにソース無いとなんも判らん。

451 名前:login:Penguin [2005/06/29(水) 22:32:06 ID:rSbPN/4/]
>>449
アレ買え。馬の絵の描いてあるヤツ。

高くても我慢しろ。読めば安いと思うようになる。
絶対買え。とにかく買え。12冊買え。たくさん買え。

452 名前:login:Penguin mailto:sage [2005/06/30(木) 09:52:01 ID:6k+4MtMc]
12冊=たくさん

納得した

453 名前:login:Penguin mailto:sage [2005/06/30(木) 11:24:58 ID:9CZUZn2O]
なぜ12冊なのかちっとも納得いかないんだが

454 名前:login:Penguin mailto:sage [2005/06/30(木) 11:25:42 ID:J4A9ru3W]
たくさんだからだろう

455 名前:Artane. ◆o6gE1yuDGM [2005/07/04(月) 07:22:47 ID:Y9u/GUb1]
2.6.13で又モジュール周りのAPIが変わりそうな悪寒…
drivers/base/class_simple.cがまるごとなくなってる…そこのAPIを使ってる ttp://www.linuxant.com/ のx86_64用のHSFモデムドライバがそのままでは動かない状況に(;´Д`)
その前はACPI絡みでデッドロックがかーねるにあって動かなかったし、どうなってるんだろうヽ(`ー´)ノ
しかもライセンスがプロプラなのでどーすりゃいいのか頭が痛いです。

456 名前:login:Penguin mailto:sage [2005/07/07(木) 22:10:08 ID:DftqFJii]
2.4はcc -o hoge.o -c hoge.cするだけでokだったけど
2.6はmakeファイルを書かないとダメになった。
はぁ、マンドクセ

457 名前:login:Penguin mailto:sage [2005/07/07(木) 22:51:04 ID:Hy9t4ICF]
ttp://japan.linux.com/kernel/03/10/26/1026229.shtml
ここの一番下に書いてあるのなら楽だろ。簡単に再利用できるし。

458 名前:login:Penguin mailto:sage [2005/07/08(金) 11:00:44 ID:9KK2lDyF]
obj-m := unko.o
の1行でよくね?



459 名前:login:Penguin [2005/07/24(日) 15:33:14 ID:02p0TYUx]
USBのドライバ書いたことアルヤツいる?

460 名前:login:Penguin mailto:sage [2005/07/28(木) 21:47:52 ID:3ylo+PR7]
>>459
2.4.0testカーネルの時やってたなぁ
ストレージ関係がクラスドライバでないときは動かすのに苦労したよ
USB Snoopyで解析したりして

461 名前:login:Penguin mailto:sega [2005/07/31(日) 16:37:19 ID: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 [2005/08/18(木) 13:31:44 ID: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 mailto:sage [2005/08/18(木) 14:45:51 ID:AA5MGziJ]
>>462
ほんとうに\nを入れたのか

464 名前:login:Penguin [2005/08/18(木) 14:47:24 ID:zqtjM++q]
>>462
ほんとうにコンソールなのか

Xterm とかじゃないだろうな。

465 名前:login:Penguin [2005/08/18(木) 14:54:07 ID:zqtjM++q]
X-Window は起動せずにって書いてあったな。 すまそ。

printk() は中で register_console() されたドライバの ->write() を
直接呼んでるから必ず出力されるよ。

出ないとするとログレベルの設定かな。
頭に "<1>" とかつけるといいのでは?

466 名前:462 [2005/08/18(木) 18:10:38 ID:wsNIgIg1]
レスありがとうございます。

>>463
\n は入れてあります。
\n を入れるのと入れないのでは違いがあるんですか?

>>465
出力されるときと出力されないときがあるんですよ。

でも、起動のたびにログレベルが変更されるというのは考えにくいし…

467 名前:login:Penguin mailto:sage [2005/08/18(木) 18:35:47 ID:spRqn48O]
flushされていない or 
同じメッセージなので纏められているのでは?(この場合、last message repeated xxx times とでる。)

468 名前:login:Penguin mailto:sage [2005/08/18(木) 20:41:10 ID:cWStGfHc]
>>466
ログファイルに吐かれていればメッセージレベル。
出てなかったら改行だろう。

>>467
コンソールに出る方はまとめてくれない。




469 名前:462 mailto:sage [2005/08/19(金) 09:09:08 ID:qyuoI/lN]
>>467, 468
/var/log/message には出てます。
改行もしてるんだけどなぁ。

どうもよくわからないので、あきらめることにしました。(^^;

お忙しいところ、レスありがとうございました!




470 名前:login:Penguin [2005/08/19(金) 22:08:36 ID:ZOCJz/g6]
/etc/syslog.conf に
kern.* /dev/console
とか書いてあるか?

471 名前:462 mailto:sage [2005/08/22(月) 13:16:52 ID:nvUzxFpI]
>>470
を! /etc/syslog.conf の kern.* /dev/console が
コメントアウトされています!
なるほど、これを有効にすると確実に表示されそう
ですねぇ。

今、ハードが客先に行ってしまったので
確認できないんですけど、ハードが戻ってきたら
試してみます。

ありがとうございます!


472 名前:login:Penguin [2005/10/22(土) 01:07:43 ID:EmofMJka]
やべえ、カッコイイ......デバイスドライバ自分で書いてる人たち......。
Cは一通り入門程度のことは覚えたけど、遊びでstdio.h使うことばっかりで入門の領域出てないんですよね、僕。
Linuxにも入って間もないからシェルスクリプトの使い方もまともに知らないからLinuxプログラミングなんてまだまだ....。
お馬さんの本、大学の図書館にありましたねー、ぱらっと見たけどさっぱり......。

473 名前:login:Penguin mailto:sage [2005/10/22(土) 17:23:49 ID:0rh+z8HN]
デバドラ本第3版の和訳もう出てるのね。
洋書を見つけてレジに持っていこうとするも、ふと横を見ると書棚にありました

474 名前:login:Penguin mailto:sage [2005/10/23(日) 03:10:35 ID:JQc1kDtY]
>>472
努力でどうとでもなる
まぁ頑張れ

475 名前:login:Penguin mailto:sega [2005/10/23(日) 06:34:02 ID:TRsS2wCF]
SMPな環境で、あるAという区間とBという区間があるとき
そこを走行するCPUをひとつだけにして、
かつAとBを同時に走らないようにしたい。

最速で処理できる区間ではspin_lock_irqsaveを使ってもいいけど
ちょっと時間を食いたい処理のときには割り禁にしたくない/出来ない。
こういうときってセマフォを使うんだっけ?

あと、誰かがそこを走行してたら、待たずにあきらめる処理も
どうやるのかいまいちわからんです。

476 名前:login:Penguin mailto:sage [2005/10/23(日) 07:17:36 ID:TyUzTsLn]
っ[MUTEX]

477 名前:login:Penguin mailto:sage [2005/10/24(月) 11:41:52 ID:y/bnKz7N]
futex

478 名前:login:Penguin [2005/10/24(月) 21:00:03 ID:qab5z916]
insmod hello.o
が出来ません....
bash: insmod: command not found
と出てしょっぱなから弾かれました....。
FC4を入れているのですが、ぐぐったところKernelのバージョンが
上ってからサポートされなくなった(?)のようなことがかいてありましたが...
ちょっとわからないです..。



479 名前:login:Penguin mailto:sage [2005/10/24(月) 21:41:23 ID:nHBdU4lq]
>>478
module-init-toolsが入っていない。
なんて事はまずありえないので、パス通っていないだけだろう。


480 名前:login:Penguin mailto:sage [2005/10/25(火) 01:26:16 ID:boXSHzJM]
っ[/sbin/insmod]

481 名前:login:Penguin mailto:sage [2005/10/25(火) 01:50:35 ID:mHOxbI49]
$ su -
passwd:
#

482 名前:login:Penguin mailto:sage [2005/10/25(火) 07:29:46 ID:gtGeQ0F/]
モジュールに挑戦する前にやるべきことがあるだろう。

483 名前:login:Penguin mailto:sage [2005/10/27(木) 22:32:36 ID:5z/EqZNh]
みなさん、返事が遅れてすみません....。
何日ものぞいていませんでした。
どうやら、おっしゃる通りパスが通っていないようでして、
あれから、/sbin/insmod [filename]
を試してみましたがなんだか、だめだ!のようなメッセージが表示されて
しまい、無理でした。Linuxのデバイスドライバのプログラミングは
BIOSレベルでのデバイスドライバを書くときの参考にもなるかと
思ったのですが、やっぱりLinuxを初めてあまりたっていないのに
背伸びをしすぎたようです。出直してきます。
御回答いただいた方々、ほんとうにありがとうございました。:-)

484 名前:login:Penguin mailto:sage [2005/10/28(金) 05:51:31 ID:gqZeSigl]
      │
      │
      J

  ∩_∩   ∩_∩
 (  ・(ェ)・) (・(ェ)・  )
エサクマか?   違うクマよ、
         あわてて食いつくと面倒なことになるクマ。

485 名前:login:Penguin mailto:sage [2005/10/28(金) 08:53:26 ID:iWNW3bFs]
>>483
いえいえ是非また来て下さいね><
御町して檻ます><

486 名前:483 mailto:sage [2005/10/30(日) 22:20:06 ID:kv9dDPbi]
やっとできました!
>>167さんのレスのようにお馬さん初版第二章の一番最初のなーんにもしない
モジュールのソースに追加することでロードすることができました。
試しにカーネルソースのmodule.hを見てみるとメッセージでライセンスが無いといわれた経緯から
MODULE_LICENSE (license)の定義をみつけ、それをキーワードにぐぐったらこれを追加するような
記述をみつけることができました。
カーネルバージョンが2.4.1以降からこうなったようなことがinsmodのmanページにあったので一気に解決しました。
たぶん、insmodが認識されなかったのはKterm上からやろうとしたからですね....
嬉しい!


487 名前:login:Penguin mailto:sage [2005/10/30(日) 22:27:05 ID:dxIdqW+o]
>>486
よくやった!

とりあえず、今の状態を登山に例えるなら
登山用品店の自動ドアが開いたあたりだな。

488 名前:login:Penguin mailto:sage [2005/11/19(土) 17:12:54 ID:mr3HUTh9]
2.4から2.6へポーティングしててkoができるまで行きました。
chrdevなんですけどudevの仲間に入る方法がわかりません。
2.4のころのように直接的にmknodしてinsmodするものなのでしょうか。



489 名前:login:Penguin [2005/11/24(木) 19:13:51 ID:tUhrvxEF]
ageようよ。

490 名前:login:Penguin mailto:sage [2005/11/25(金) 02:45:31 ID:Y8mPXznM]
質問なのですが、回路の方は勉強しておられますでしょうか?

491 名前:login:Penguin mailto:sage [2005/12/08(木) 03:07:19 ID:B0ejvBgu]
ちょっと質問させて下さい。
ノートパソコンを使っているんですが、マイクとスピーカーの位置が近いのでサウンドドライバの
読み込み時からサウンドミキサーが起動して音量設定するまでの間にハウリングしたりするんです。

そこで、サウンドドライバ読み込み時にマイクをミュートにしたいと考えたのですが、
例えばドライバの中にマイクの初期音量を0にするコードを追加したりするようなことは可能なんでしょうか?
# スレ違いでしたら誘導お願いします。

492 名前:login:Penguin [2005/12/08(木) 10:11:04 ID:j53o+rA9]
ageようよ。

493 名前:login:Penguin [2005/12/11(日) 18:47:51 ID:rh+AeURO]
はじめまして。
Windows対応のRS232C->USB変換ケーブルを使って、スイッチャを
LINUXのPCで制御しようとしているんですが、そもそもドライバを
自分で作る必要があるのでしょうか?
LINUXの環境はOSがRED HAT 9でカーネルは2.4です。
もしくは必要かどうかを確認する方法ってあるのでしょうか?
ご存知の方がいらっしゃいましたら、答えていただけないでしょうか?
よろしくお願いします。

494 名前:login:Penguin [2005/12/11(日) 21:37:52 ID:ZmBeQHZx]
>>493
自動認識されないか??
suse10だと自動で使えた
けどBreak信号遅れなくてヒデブだった

495 名前:493 [2005/12/13(火) 02:44:01 ID:bCmTAm2t]
>>494
お返事ありがとうございます。
/var/log/messagesでログを見たら、新しいUSBデバイスが認識できている
っぽいことが書かれてました。
たぶんRS232C->USB変換ケーブルは認識できてると思います。
で、早速プログラム組んでスイッチャに信号を送ってみたんですが、
これがうんともスンとも言わなくて。
もしかして変換ケーブルだけ認識しててスイッチャは認識していないかも
って考えたのですが、シリアル通信だから信号を送るだけなら送れますよね?


496 名前:login:Penguin mailto:sage [2005/12/13(火) 21:07:28 ID:sg6goQTn]
/dev/ttyUSBの読み書き許可がなかったよ

497 名前:色情前世鑑定士 mailto:sage [2005/12/13(火) 23:49:52 ID:xAfc4hOf]
>>495
ボーレートとかあってますよね?
sttyとか使って動作中のUSBシリアルの各設定を
観察・設定してみるといいかもしれません

498 名前:login:Penguin [2005/12/17(土) 23:06:34 ID:oosooT9i]
>>496,497
助言ありがとうございます。
パーミッションに関してはchmod 666を実行したので、大丈夫だと思います。
ボーレート他の初期設定は、少し自信がないのですが、他のシリアル通信
のプログラムを参考にして一通りプログラム内で設定しています。
sttyで確認するというのは知らなかったので、早速やってみたいと思います。
ありがとうございます。



499 名前:login:Penguin mailto:sage [2006/01/28(土) 02:19:52 ID:eIqcEw8I]
馬本買った記念age

500 名前:login:Penguin [2006/01/28(土) 02:22:46 ID:eIqcEw8I]
ageて無かった…orz

501 名前::login:Penguin [2006/01/28(土) 13:24:51 ID:z02En7Mn]
tky007lip10.iij.net [210.130.172.193]


502 名前:login:Penguin [2006/02/06(月) 00:56:30 ID:gxgsnq8Z]
age

503 名前:login:Penguin mailto:sage [2006/03/19(日) 20:02:53 ID:wmRM5297]
www.doodoo.ru/image-2006/03-16-yeticrab.jpg

504 名前:login:Penguin mailto:sage [2006/03/21(火) 02:41:04 ID:wxAXo3DG]
SMPプログラミングの入門ページとかありませんかね?
どちらかというとAの処理をCPU0に割り当ててBの処理を1に
って感じで分けながら処理するタイプのプログラミングなので
ASMPのほうがよいのですがこのような話題はどこで聞けばよいのでしょうか

505 名前:login:Penguin [2006/03/30(木) 20:19:25 ID: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 mailto:sage [2006/03/31(金) 11:41:12 ID:zMWwd0XE]
適当に書いてみる。
他のドライバ見たらわかるけど、実装メモリは気にしない。

pci_dma_syncなんたらが失敗するの?

507 名前:login:Penguin [2006/03/31(金) 21:18:57 ID: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 mailto:sage [2006/03/32(土) 02:19:11 ID:9G03KeUN]
また別の人が適当に書いてみる。
hugemem使ってみては?



509 名前:login:Penguin mailto:sage [2006/03/32(土) 10:42:43 ID:afhcBPMx]
hugememってi386じゃなかったっけ?

x86_64で4G載ってるって事は、IOMMUとか関係あるのかな。
結局virt_to_bus(pci-nommu.c)かvirt_to_phys(pci-gart.c)呼んでるから、
scatterlistのpageが期待しない値なんでしょうけど、そこら辺調べたらいいのかな。

ドライバいじったことはあるけど、書いたこと無いので適当です。

510 名前:login:Penguin mailto:sage [2006/03/32(土) 10:47:55 ID:shKEnT0S]
似たようなドライバの中身を調べてみればすぐわかりそうなものだが

511 名前:login:Penguin mailto:sage [2006/03/32(土) 15:12:47 ID:afhcBPMx]
>>510
俺もそう思って、見たけどわからなかったw

SCSI側からと、PCI側から見たら、よくわからなくなった。。
bioがよくわからん。
pci_set_dma_maskって要するにbounceするかどうかなのか?
あとは、ページ確保するときのDMA/DMA32の切り分け。

512 名前:login:Penguin [2006/03/32(土) 16:46:33 ID: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 mailto:sage [2006/04/04(火) 08:20:23 ID:0xn4pI8o]
気になるから、どうなったか知りたいです。

514 名前:login:Penguin mailto:sage [2006/04/04(火) 13:11:55 ID:p7vmOtaT]
>>504
sched_setaffinity(2)


515 名前:login:Penguin mailto:sage [2006/04/06(木) 22:28:49 ID:Mnqgo3eJ]
>>513

まだ色々と追っかけてる途中です。
とりあえずPCIドライバ周りから追っかけ中です。
PCIドライバを見た限りでは、pci_map_sgすると中でdma_map_sg
呼び出しててその中見てもあんまり大したことしてなさそうですね。
やはりbio周りも見ないと駄目なのかも。
もうちとかかりそうですが、わかり次第、結果をお知らせします。


516 名前:505 mailto:sage [2006/04/08(土) 14:24:03 ID:+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 mailto:sage [2006/04/08(土) 16:09:33 ID:MBAxFSYD]
>>516
解決おめでとうございます。
一般的に使えそうなものならまたどこかで公開してくださいな。

518 名前:login:Penguin mailto:sage [2006/04/10(月) 22:36:55 ID:C69QC/MM]
>>516
よかったよかった。
私もソース読んで少し勉強になったよ。
ネットワーク系しかいじったこと無かったから。



519 名前:505 mailto:sage [2006/04/10(月) 23:00:56 ID:9eFrvNz6]
>>517 >>518

ありがとうございます。
馬鹿高な価格の独自のカード用のドライバで有用性はかな
り低いです。。。一応GPLなんですが、カード買わないと非
公開という阿保な方針らしいので、一般公開は難しそうです。

Linuxでの初開発で手探り状態でしたが、お蔭様で何とか目
処が立ってきた感じです。まだ細かな問題がありますが…。

Linuxでの開発はカーネルや他のドライバソース読まなけば
資料が少ない所がキツイですね。
まぁコード上のテクニックとか色々勉強になる部分は多いけ
ど、納期のある仕事でやるのは大変ですね。

流石UNIX板だけあって、建設的なスレで助かりました。

520 名前:login:Penguin mailto:sage [2006/04/10(月) 23:42:28 ID:Cs5Rh9+Y]
>>519
> Linuxでの開発はカーネルや他のドライバソース読まなけば
> 資料が少ない所がキツイですね。

ちょっと教えてください。
Linuxより資料が多いOSってなんのことを指してますか?
自分は主にLinuxの開発に携わってますが、いつもオープンソースのありがたみを
感じながらやっているので、Linuxが資料が少ない、というのは意外です。

521 名前:login:Penguin mailto:sage [2006/04/11(火) 00:42:17 ID:KjDgNH9L]
OSによっては中身がさっぱりわからないままドライバ開発しなきゃいけない事もあるしな。
つーか、そっちのほうが多そう。

522 名前:login:Penguin mailto:sage [2006/04/11(火) 00:47:03 ID:rZUiZ4e7]
>>520
NetBSDはそういう部分のmanpageが充実してるとか聞きますな。
linuxはmanpage書き上げたら実装が別物になってたなんて笑えん状況がありそうだなあ…


523 名前:login:Penguin mailto:sage [2006/04/11(火) 00:57:41 ID:9nKANwAS]
そこでmain treeにマージですよ。
main tree内の変更はたいていは面倒をみてくれる。

524 名前:login:Penguin [2006/05/11(木) 18:07:51 ID:PmwpTb/Y]
ある内蔵デバイスのドライバでPCの機種毎に処理を変えなければいけない部分が
あり、ユーザ負担を減らすためにドライバ側で自動判別したいと思っています。
機種は違うのにSubvendorIDやSubdeviceIDまで何故か一致しているので、SMBIOS
のDMI情報を参照して機種を判別したいのですが、これって可能なんでしょうか?
そんなやり方は行儀が悪いとか、他にもっとまともなやり方があるとか何でも
構いませんので、どうかご教示をよろしくお願いします。m(__)m

525 名前:好色少年のススメ mailto:sage [2006/05/11(木) 23:43:06 ID:Uu/mTCgT]
確かに行儀はよくないかも
新しいハードが出るたびにパッチ提供とか考えたら面倒だし
たとえそれが自社ハードだとしてもバージョンアップあるだろうし
判別はユーザランドで行う方が気分も楽だし処理も楽だしバグも少ない

526 名前:login:Penguin mailto:sage [2006/05/26(金) 20:11:11 ID:YiUMorw/]
ttp://lkml.org/lkml/2006/5/24/238


527 名前:login:Penguin [2006/08/20(日) 01:06:14 ID:BobpEKad]
カーネル層のモジュールのテストプログラム
を作ってるんですが、カーネル層でinit_moduleや
ioctlからスレッドを起こして daemonのように
動作させることってできるんでしょうか?

Linuxデバイスドライバを読んでもスレッドを
起こすような処理は載っていないようなので
参考書籍だけでも教えていただけるとありがたいです。

528 名前:login:Penguin mailto:sage [2006/08/20(日) 11:29:13 ID:EWXtKjUy]
>>527
kernel_thread
daemonize




529 名前:login:Penguin mailto:sage [2006/08/20(日) 20:55:18 ID:bg2sTV9e]
というか、普通に載ってるよね

530 名前:login:Penguin [2006/08/24(木) 12:55:11 ID:6WITQjoc]
そいや、最近のノートPCには指紋センサーがあるけど

あれはハックできるものなの?

531 名前:login:Penguin mailto:sage [2006/08/24(木) 13:34:05 ID:wKY4BjAS]
>>530
OSM 8月号に記事載ってたよ。
shop.sbcr.jp/bm_detail.asp?sku=1016200604

532 名前:login:Penguin mailto:sage [2006/08/25(金) 00:34:04 ID:CPHGcnDi]
>>531 せんきゅー!

533 名前:login:Penguin mailto:sage [2006/08/26(土) 07:37:08 ID:F4NpQAPn]
>>529
すみません。ページご存知でしたら教えてください。
第3版持ってます。


534 名前:login:Penguin mailto:sage [2006/10/04(水) 21:49:48 ID:EGTQjLn1]
すみません、どなたかわかる方教えてください。

現在、XFree86でグラフィックドライバを作ってます。チップは独自のものです。
バス等に接続されておらず、メモリマップドI/Oでアクセスします。

一応画面は出たのですが、1024*768だと縦が半分しか表示されず、
(縦に圧縮される感じ。マウスカーソルが縦につぶれている)
1280*1024だと画面が横に5個くらい表示されてしまいます。

使用しているチップは1ライン4096byte固定なので、解像度に応じて次のラインを
描画するアドレスを更新しなくてはなりません。
カーネルのFBドライバだとline_lengthとかの変数に設定してあげればうまいこと
描画してくれるのですが、XFree86の構造体にはそういった変数が見当たりません。

カーネルFBドライバのline_lengthとかに相当するものはどれでしょうか?

縦に圧縮されるのと画面が5個くらい表示されるのは、別問題な気がしてます。
今、手元にソースがないんですが、InitをするときにvirtualYを*2してやると縦が一見
正常っぽく表示されました。カーソルとかが縦につぶれたままなので、根本対策には
なっていません。

535 名前:Mr.名無しさん [2006/10/09(月) 16:36:24 ID:OGKR436u]
■■■■■■■■■■■■■■■■
■                     ■  違う板にコピペすると、四角の枠の中に
■                     ■  メッセージとURLが現れる不思議な絵。
■                     ■
■                     ■  (その仕組みがリンク先に書いてある)
■                     ■
■                     ■  この原理を応用すると、まったく新しい
■                     ■  コピペが作れる予感。
■■■■■■■■■■■■■■■■




536 名前:login:Penguin mailto:sage [2006/11/05(日) 18:18:15 ID:j6ZWju7f]
>>534
グラフィックチップのモード設定を間違えている予感

537 名前:login:Penguin mailto:sage [2006/12/14(木) 22:35:16 ID: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 mailto:sage [2006/12/15(金) 11:02:30 ID:Qc0JIFW5]
>>537
見ているものがまったく違っているような気がしますが。
PCIでbus master転送したいんじゃないの?




539 名前:537 mailto:sage [2006/12/15(金) 15:20:46 ID:NJleqqJR]
おお、早速のレスありがとうございます。

DMA転送するにはチップセットの中の8237DMAコントローラをいじればいいって思ってました。バスマスタについて少し調べましたが、IDEのDMAもバスマスタになるんですね、知りませんでした。

となるとこのバスマスタはどうやればいいのでしょうか?参考になるものでもいいので、教えてください、お願いします。

540 名前:login:Penguin mailto:sage [2006/12/15(金) 23:40:00 ID:72pQobUh]
ターゲットとなるPCIデバイスの仕様がわからなきゃデバイスドライバは書けないよ
せめて型番だけでも出してくれ

541 名前:login:Penguin mailto:sage [2006/12/16(土) 18:42:01 ID:wkeveW0d]
ドライバというか、モジュールの話なんですけど
スレッドを使ったせい?なのか、psすると
3635 pts/0 R 0:00 modprobe hoge
と残るんですが、これは出ないようには出来ないものなんでしょうか?
勿論 rmmod hoge すると消えるんですけど。


542 名前:537 mailto:sage [2006/12/17(日) 19:34:20 ID:BtOAund7]
ターゲットのデバイスは内製のボードなのですよ orz
となると やっぱボード自体を作った人に聞いたほうがいいのかな?

543 名前:login:Penguin mailto:sage [2006/12/17(日) 19:50:10 ID:pl1Ns6BC]
チップのレジスタ仕様と、制御のシーケンスがわからないとドライバは書けないよ。

544 名前:login:Penguin mailto:sage [2006/12/17(日) 20:36:37 ID:6E+xGodr]
>>542
当然聞くべきなのですよ

545 名前:login:Penguin mailto:sage [2006/12/17(日) 22:08:40 ID:SVqrrgVr]
チップも内製なのか?
だったらデバイスドライバもチップ開発チームが書くものだよな
少なくともサンプルコードの類は書くはずだ

そうでなくて市販のチップを使ってPWBAだけ内製したのなら
使用したチップのデータシートなりプログラマーズガイドなりを読めばいいだけの話

546 名前:537 mailto:sage [2006/12/18(月) 01:17:23 ID:5wopQO2S]
ほぼ内製だったと思います。
ちょっと月曜日会社いったら、聞いてみようと思います。
大変参考になりました、ありがとうございました。

ところで、これは単なる質問ですが、
マザボのチップセットにある8237とかの
DMAコントローラは古いし遅いみたいだから
PCIとかIDEとかに使われてないみたいだけど、
Pen3 800MHzとかでも PIOのが早いの?

547 名前:login:Penguin mailto:sage [2006/12/18(月) 07:35:08 ID:a8xYea1H]
最近のデバイスで言うDMAはバスマスタDMAのことだよ。
バスマスタってのはデバイス側が主導権とってバスを制御して
CPUの頭越しにメインメモリにデータ出し入れすることだ。
そのためにはデバイスにバスをのっとってデータ転送しろって命令を
CPUからデバイスに発行する必要がある。

その手続きを知るためにレジスタなりデータシートなりを調べろって
みなさん言ってるんだよ。

548 名前:537 mailto:sage [2006/12/19(火) 00:01:59 ID:2Sv0wv+g]
なるほろ、大変勉強になりました。
ハード屋さんからマニュアルゲットして
がんばってみます。




549 名前:login:Penguin [2006/12/19(火) 23:53:27 ID:g20RCuxU]
>>537
つ ttp://www.oreilly.co.jp/books/4873112532/


550 名前:login:Penguin mailto:sage [2006/12/27(水) 05:38:58 ID:krfJbXj5]
すみません ドライバでDMA転送するための連続したメモリ領域(64MB)を確保したいのです。
kmallocで確保可能な連続したDMA領域は最大128kB ということはネットで検索すると出て来たのですが、
どうすればドライバのDMA転送で利用可能な128kBを超えるの連続領域を確保出来るでしょうか?
OSはlinuxカーネル2.6です。
ご存じの方おられましたら御教示戴きたくよろしくお願い致します。

551 名前:login:Penguin mailto:sage [2006/12/27(水) 10:51:31 ID:mQ5aQPBa]
>>550
とりあえずそのふざけた石を投げ捨てれ。

やるならalloc_pagesだろうなあ。そのサイズで連続領域を簡単に確保できるとは思えんが。
ついでに書いておくと128KByte制限は8237の呪いなのでPCIならそんなものはない。



552 名前:login:Penguin mailto:sage [2006/12/27(水) 12:43:43 ID:krfJbXj5]
投げ捨てぇー…れないorz

>>551
早速ありがとうございます。
検索してても思ったのですが、
なんか連続領域"64MB"っていうのは常識外れっぽいのですね…
とはいえ組込み系で使った独自ロケットI/OのPC向け転用の必要があり、
石を投げ捨てる訳にもいかず今回の質問とあいなりました。
alloc_pages、試してみます!!

回答感謝いたします。
センキュー!!!!

553 名前:login:Penguin mailto:sage [2006/12/28(木) 02:29:39 ID:4Oi09t3r]
かなり強引だけど、カーネルオプションで使用メモリ量に制限かけといて、
未使用領域を作った上でそこ使っちゃえば?

554 名前:login:Penguin mailto:sage [2006/12/28(木) 12:33:40 ID:vc2Jrznf]
>>553
MMUの面倒は誰が見るですか?

面倒な世の中になったのう…
物理アドレスで完結してりゃなにも考えなくていいのに。


555 名前:login:Penguin mailto:sage [2006/12/29(金) 09:28:41 ID:JbqPlaTm]
>>553
アドバイスありがとうございます。
ちょっと恐いですが、検討してみます。

>>554
MMU…よく判ってません…勉強してきます。
ご指摘ありがとうございます。

いろいろレスありがとうございました。
スレの皆様が良い年越しを迎えられますように!!
それでは、また来年!!

556 名前:login:Penguin mailto:sage [2006/12/29(金) 10:44:35 ID:PkRb73AX]
RocketIOってことはXilinxのFPGAだよな
だったら128KBのブロックのアドレスポインタリストを渡すと
自動的にリスト通りブロックをたどって転送するように
FPGA回路を再設計するのがまっとうな手段だろうな

デバイスドライバやOS設定の変更ではどうにもならんと思う

557 名前:login:Penguin mailto:sage [2006/12/30(土) 00:07:40 ID:SZb58Bld]
カーネル組込みで、ドライバ初期化のときなら確保できそうな気もするな。
開放したら二度と確保できなくなりそうだが。


558 名前:login:Penguin mailto:sage [2007/01/01(月) 22:05:23 ID:uXbHjsPd]
明けましておめでとうございます。

さらにレス&アドバイスありがとうございます。
うー勉強不足。知らないこと多過ぎますね!ハードル高いです orz
安定化まで考えると更にハードル上がりそうですが、ハード側とも相談してみます。

それでは本年もよろしくお願いいたします!!



559 名前:login:Penguin mailto:sage [2007/01/19(金) 00:41:46 ID:xhnZtOc/]
皆様に聞きたいのですが
当方Linux 2.6カーネルの元でドライバの開発を行っています。
起動してからinsmodでインサートするタイプのモジュールを作っています。
カーネルをフリーズさせたりして固まらせてしまって、やむなくリセットボタンを
押す事が多々あるのですが、その際にファイルシステムのチェックが
強制的に行われてしまい、これでかなりの時間をロスしてしまいます。
何とかこのファイルチェックを飛ばして時間の短縮を行う方法はないでしょうか?

VMwareとかの仮想マシンを使えばいいのかもしれませんが、
特殊命令を使っておりますので、仮想マシンがその命令をサポートしていないために
導入できません。

560 名前:login:Penguin mailto:sage [2007/01/19(金) 02:15:30 ID:VcfRHkiI]
>>559
mount -o remount,ro /
とかやって、書き込み不可にしてから遊べばよくね?

561 名前:login:Penguin mailto:sage [2007/01/19(金) 08:04:16 ID:/YcMJPuk]
/etc/fstabの6番目のフィールドの値を0にする。man fstabしてみそ。
tune2fsで-c 0とかもしておいたほうがいいかも。


562 名前:login:Penguin mailto:sage [2007/01/19(金) 20:24:37 ID:xhnZtOc/]
>>560
でもそれをやると、kmallocをGFP_KERNELで使ったときに
メモリがスワップアウトしたらまずいことになりませんか?

>>561
やってみました

なんかファイルチェックをしなくなったことで壊れそうでもありますが
やっぱり我慢してチェックしたほうがいいでしょうか...

563 名前:login:Penguin mailto:sage [2007/01/20(土) 19:48:34 ID:3aq4dRUa]
>>562
/だけ守ればいいので、なりません。

564 名前:login:Penguin mailto:sage [2007/01/21(日) 01:23:20 ID:QaYT7DDq]
>>563
ああそうか、swapファイルはswapパーティションですもんね
ありがとうございます

565 名前:login:Penguin mailto:sage [2007/01/27(土) 11:05:03 ID:4J9B+fMX]
評価機はネットブートさせてNFSroot稼動させればいつ飛んでも
大丈夫な環境にできるんじゃない?


566 名前:login:Penguin [2007/02/05(月) 06:03:38 ID:9i1Bwf6u]
通常、Linuxのドライバをインストールする時はカーネルにパッチを当ててカーネルごと
コンパイルしなければいけないけど、Windowsのようにカーネルソース無しでドライバを
コンパイルしてインストールできるようにする方法ってあるの?

567 名前:login:Penguin [2007/02/05(月) 06:26:04 ID:9i1Bwf6u]
ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8E%E3%83%AA%E3%82%B7%E3%83%83%E3%82%AF%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%ABには
現在のカーネルではモジュールをカーネルの構築状態に依存する事なく追加できると
書いてあるけど、カーネル側でインターフェースが変更になった場合は旧ドライバは
使用できなくなるんじゃないの?それとも、カーネル側で旧インターフェースが温存されるの?
あと、「カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある」
Linuxはどのバージョンまでなの?

568 名前:login:Penguin mailto:sage [2007/02/05(月) 06:56:37 ID:Zi/ATtvA]
>>566
いまはそんなことしなくていいよ
insmod rmmodで動的にドライバを挿入したり削除したりできる



569 名前:login:Penguin mailto:sage [2007/02/06(火) 01:26:43 ID:j3mwrUGC]
いやぁソースはいるだろ。

570 名前:login:Penguin mailto:sage [2007/02/06(火) 08:59:25 ID:jQKQh5/W]
ソースはいるけどカーネルのリビルドはいらない

571 名前:login:Penguin mailto:sage [2007/02/06(火) 10:27:34 ID:Rm04tDsq]
いやぁリビルドは途中までいるだろ。

572 名前:login:Penguin [2007/02/10(土) 16:03:43 ID:XWBlzb1u]
初歩的な質問ですがよろしいでしょうか

私はlinuxカーネル2.6.13のモジュールでhello worldのプログラムを組込みたいのですが上手くいきません

gcc -c module.c -Wall -Wstrict-prototypes -O -pipe -m486

この様にコンパイルしたのですがカーネルのソースコードに構文エラーがあるようでコンパイルが通りません
カーネルのソースコードを見てみても構文エラーらしき物はみられませんでした
どうすればコンパイルが通るでしょうか

エラーメッセージとソースコードを書いておきます

ソースコード
sakuratan.ddo.jp/uploader/source/date32474.c

エラーメッセージ
sakuratan.ddo.jp/uploader/source/date32475.txt

573 名前:login:Penguin mailto:sage [2007/02/10(土) 17:14:52 ID:d+hexa9D]
>>572
普通はMakefile書くわな


574 名前:login:Penguin mailto:sage [2007/02/10(土) 17:47:20 ID:a+8l3AD+]
Makefileに
obj-m += module.o
って書いて
make -C /usr/src/linux M=$PWD modules

575 名前:login:Penguin [2007/02/10(土) 19:18:09 ID:XWBlzb1u]
>>543

そうみたいですね
私のみた資料では、そうコンパイルする様に書いてあったのですが結構古い奴だった
のでしょうか

>>574

本当にありがとうございました。
その方法で無事にモジュールを作れました

感謝感謝


576 名前:542 [2007/02/10(土) 19:55:09 ID:XWBlzb1u]
.koってファイルが出てきたらからinsmodにかけてみたら
insmod: error inserting 'module.ko': -1 Invalid module format

って言われワラタ
turbo linuxなんて微妙なの使ってるせいなんですかねこれは.....

577 名前:542 mailto:sage [2007/02/10(土) 20:03:22 ID:XWBlzb1u]
今までsage忘れてたごめん

578 名前:login:Penguin mailto:sage [2007/02/10(土) 20:06:01 ID:791EznrY]
話題提供時はage、その後はsage
ってのが一番角が立たない。

正直、どうでもいいけど。



579 名前:login:Penguin mailto:sage [2007/02/10(土) 20:14:38 ID:a+8l3AD+]
/usr/src/linux が今動いてるカーネルソースじゃないとか

580 名前:542 mailto:sage [2007/02/10(土) 21:33:23 ID:XWBlzb1u]
>>579

そうですね
元からあったソースでコンパイルしようとすると必要なMakefileがないとかで無理
でしたから、kernel.orgから同じバージョンのコード落してきてまた設定しなし
いた訳ですがそれが原因ですかね。

ディストリとかは独自の変更を加えているらしいし、また変更が加えられていない
純粋なカーネルインストールしてから出直してきます



581 名前:login:Penguin [2007/02/18(日) 23:17:11 ID:PxJoV1oA]
すみません。kmallocで確保したメモリ領域をDMA転送するために、__paで変換して
渡してやるのと、dma_map_singleで変換して渡すのと、違いはあるのでしょうか?
たとえば性能(処理効率)が違うとか? どう使い分けているのでしょうか?


582 名前:login:Penguin mailto:sage [2007/02/19(月) 10:56:01 ID:QHwPPpDN]
UNIXTIMEを日付文字列に変換するのに なんかAPI用意されてないの?
"2007/02/19 12:34:56" とかその程度のでいいんだけど。

583 名前:login:Penguin mailto:sage [2007/02/19(月) 11:19:53 ID:I/jMKPR3]
strftime

584 名前:login:Penguin mailto:sage [2007/02/19(月) 13:52:20 ID:QHwPPpDN]
>>583
いや、デバイスドライバ内でなんだけど、あったっけ? いや、ない。

585 名前:login:Penguin [2007/02/21(水) 07:53:48 ID:Wuryqsb6]
Linux 2.6.16用のパッチとe2comprを同時に使いたいのだが、e2comprは2.6.10用まで
しかない。カーネルとドライバが完全に分離され、カーネルバージョンが上がっても
カーネル側の旧インターフェースが温存されるようになれば、ドライバの開発が停滞しても
最新のカーネルでそのドライバを使い続ける事ができる。

586 名前:login:Penguin mailto:sage [2007/02/22(木) 01:34:45 ID:I6i5DnCh]
そのカーネル側のABI決めようぜ話はLinusに一蹴されてるんじゃなかったけ?


587 名前:login:Penguin [2007/02/22(木) 09:14:42 ID:y9d4aAAQ]
>>586
カーネル側のドライバとして旧バージョンのカーネルのモジュールをロードできる
ラッパーを作成して、カーネル側インターフェースが変更されるたびにラッパーを
更新していく手もあるべ。

588 名前:login:Penguin [2007/02/22(木) 09:16:48 ID:y9d4aAAQ]
ラッパーにx86エミュレーションを追加するとザウルスでWindowsのドライバを読み込めたりもする。



589 名前:login:Penguin mailto:sage [2007/02/22(木) 22:34:24 ID:I6i5DnCh]
つ NDISwrapper


590 名前:login:Penguin mailto:sage [2007/02/23(金) 00:44:11 ID:cxn/yRhr]
つcapative ntfs

591 名前:login:Penguin [2007/04/03(火) 00:09:41 ID:3ycIJVku]
<linux/module.h>が無いんだけど、
デバドラ開発するには、なにかパッケージ追加しなきゃいけないの?

使ってるのはfedora6

592 名前:login:Penguin [2007/04/03(火) 00:24:35 ID:3ycIJVku]
yum install kernel-devel
してもダメだな。何が足りない?

593 名前:login:Penguin mailto:sage [2007/04/03(火) 00:41:11 ID:xSB1c0Df]
>>591
カーネルソースそのものじゃね?

594 名前:login:Penguin [2007/04/03(火) 01:00:14 ID:3ycIJVku]
>>593
あ、カーネルソースに有った。ありがとう。

普通、/usr/includeには入らないの?

595 名前:login:Penguin [2007/04/03(火) 01:08:21 ID:3ycIJVku]
あと、
man printk
って出ないの?

596 名前:login:Penguin mailto:sage [2007/04/03(火) 02:25:43 ID:xSB1c0Df]
>>595
出ないんじゃよ

597 名前:login:Penguin mailto:sage [2007/04/03(火) 02:43:03 ID:GYgStP3Z]
>>594
カーネル用ヘッダと、ユーザプログラム用ヘッダは
まざるとまずいから分離されてる。だから/usr/includeにカーネル用ヘッダはふつうは無い。

598 名前:login:Penguin mailto:sage [2007/04/04(水) 00:07:01 ID:NkZt7NAi]
/usr/include/linux に入ってないか?鳥にもよるけど。




599 名前:login:Penguin [2007/04/04(水) 00:15:23 ID:wyW6RdvI]
カーネル用ヘッダと、ユーザプログラム用ヘッダがまざると、何でとまずいだろ。

600 名前:login:Penguin [2007/04/04(水) 00:23:08 ID:ICf0Aql0]
爆発しても知りません。

601 名前:login:Penguin mailto:sage [2007/04/04(水) 00:42:58 ID:IK0cizpI]
>>598,>>599
/usr/include/linuxにあるのは確かにカーネルのヘッダだが、glibcをビルドするときに使った
アーキテクチャ依存部分とかのカーネルヘッダ、
/usr/src/linux/includeにあるのは「現在使用中のカーネル」のヘッダファイル
だよね。(間違ってたらスマソ)

これらが同じだとちょっとカーネルに変更があったときとかまずくない?
最悪glibc動かなくなるときもあるかと。

602 名前:login:Penguin [2007/04/08(日) 00:07:55 ID:gmHS+Fdj]
>>17 をコンパイルするとエラーがたくさん出るんだけど何が悪いの??

エラーの一部

/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/bitops.h:244: error: expected ‘=’, ‘,’’, ‘asm’ or ‘__attribute__’ before ‘int’
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/thread_info.h:
20,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/module.h:9,

603 名前:login:Penguin mailto:sage [2007/04/08(日) 00:09:38 ID:2aPQfsMY]
脳?

604 名前:login:Penguin [2007/04/08(日) 00:10:46 ID:gmHS+Fdj]
>>603
いや、たぶん違うと思う。

こんなのも出てる。

/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/system.h:346: error: expected declarat
ion specifiers or ‘...’ before ‘u8’
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/system.h:346: error: expected declarat
ion specifiers or ‘...’ before ‘u8’

605 名前:login:Penguin mailto:sage [2007/04/08(日) 00:11:42 ID:2aPQfsMY]
じゃ、頭?

606 名前:login:Penguin [2007/04/08(日) 00:12:08 ID:gmHS+Fdj]
NGID ID:2aPQfsMY

607 名前:login:Penguin mailto:sage [2007/04/08(日) 00:15:19 ID:2aPQfsMY]
マジレスすると、読み込むヘッダーファイルが足りないんだよ。

608 名前:602 [2007/04/08(日) 00:19:06 ID:gmHS+Fdj]
環境はVMWare上でfedora 6を動かしてる。

こんなのも。

/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/bitmap.h:149: error: ‘BITS_PER_LONG’
undeclared (first use in this function)



609 名前:login:Penguin mailto:sage [2007/04/08(日) 00:20:46 ID:2aPQfsMY]
BITS_PER_LONGを定義しているファイルをさがすことだね。

610 名前:login:Penguin mailto:sage [2007/04/08(日) 00:29:38 ID:nSKp4d9I]
なんだこのキチガイ

611 名前:login:Penguin mailto:sage [2007/04/08(日) 00:31:56 ID:2aPQfsMY]
また、きちがいあつかいですか?

612 名前:login:Penguin mailto:sage [2007/04/08(日) 00:36:41 ID:nSKp4d9I]
ほう「また」なんだ

613 名前:login:Penguin mailto:sage [2007/04/08(日) 00:37:31 ID:2aPQfsMY]
で?

614 名前:login:Penguin mailto:sage [2007/04/08(日) 00:46:02 ID:nSKp4d9I]
あらら

615 名前:login:Penguin mailto:sage [2007/04/08(日) 00:48:10 ID:2aPQfsMY]
なにがあららなの?

616 名前:login:Penguin mailto:sage [2007/04/08(日) 00:49:12 ID:nSKp4d9I]
脳?

617 名前:login:Penguin mailto:sage [2007/04/08(日) 00:49:55 ID:2aPQfsMY]
それはお互い様だろ?

618 名前:login:Penguin mailto:sage [2007/04/08(日) 00:51:34 ID:nSKp4d9I]
俺はその質問者じゃないんだけどねえ



619 名前:login:Penguin mailto:sage [2007/04/08(日) 00:56:35 ID:2aPQfsMY]
お友達?

620 名前:602 [2007/04/08(日) 00:58:54 ID:gmHS+Fdj]
もういちど、しきりなおし。

>>17 をコンパイルするとエラーがたくさん出るんだけど何が悪いの??

エラーの一部

/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/bitops.h:244: error: expected ‘=’, ‘,’’, ‘asm’ or ‘__attribute__’ before ‘int’
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/thread_info.h:
20,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/module.h:9,


621 名前:login:Penguin mailto:sage [2007/04/08(日) 01:03:19 ID:z/motjJL]
>>620
ヒント:>>17のかかれた日付に注目。


622 名前:login:Penguin mailto:sage [2007/04/08(日) 01:11:57 ID:nSKp4d9I]
2.6以降はモジュールのフォーマットが変わって、
.oじゃなくて.koになってるからね。
ビルドの仕方も面倒になって...俺もよくしらない。

623 名前:login:Penguin mailto:sage [2007/04/08(日) 01:12:30 ID:2aPQfsMY]
linux/compiler.hかな?

624 名前:login:Penguin [2007/04/08(日) 02:07:26 ID:gmHS+Fdj]
>>621-622
情報が古いのか。。
でも、ウェブにあるサンプルは大体同じような感じなんだけど。

2.6用モジュールhello worldってないのかな。

625 名前:login:Penguin mailto:sage [2007/04/08(日) 02:24:54 ID:z/motjJL]
>>624
2.6 kernel hello world
でぐぐればすぐ出てくるぞ。

626 名前:login:Penguin [2007/04/08(日) 02:28:17 ID:gmHS+Fdj]
>>625
なかなか無いよ。たとえばどこ?
すぐ出てきたなら、ここに貼って。

627 名前:login:Penguin mailto:sage [2007/04/08(日) 02:34:41 ID:n+CzrFXh]
#include <linux/init.h>
がいるみたいね

628 名前:login:Penguin [2007/04/08(日) 02:41:10 ID:gmHS+Fdj]
Makefileの書き方も変わってるみたいだね。

uguisu.skr.jp/algo/device.html
のやり方でうまくいった。



629 名前:login:Penguin mailto:sage [2007/04/08(日) 03:09:43 ID:z/motjJL]
こことかな。
www.si-linux.co.jp/wiki/silinux/index.php?Linux-2.6%A5%C7%A5%D0%A5%A4%A5%B9%A5%C9%A5%E9%A5%A4%A5%D0

630 名前:login:Penguin [2007/04/12(木) 01:42:14 ID:MCdnGupN]
aio_write()でユーザ空間の登録だけして、後からハードウェア割り込みでその登録したユーザ空間にアクセスすることってできる?
やり方教えて。

631 名前:login:Penguin mailto:sage [2007/04/12(木) 02:34:41 ID:HoyZz9hB]
>>626
自分はこれが良かった。
www.freesoftwaremagazine.com/articles/drivers_linux

632 名前:login:Penguin [2007/04/15(日) 01:56:51 ID:YIKahQqf]
タスクレットの中でcopy_to_user()、copy_from_user()を使えますか?

633 名前:login:Penguin mailto:sage [2007/04/17(火) 02:52:55 ID:IoB9zeVk]
試してみろ!!
callした瞬間ぼくの丸太のような足蹴りが君の股間をつぶす
それでもいいのなら!

634 名前:login:Penguin [2007/04/27(金) 00:53:37 ID:6m6QKylD]
プログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。

635 名前:login:Penguin mailto:sage [2007/04/27(金) 06:02:05 ID:DTYmU0pC]
www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/IO-mapping.txt.html

636 名前:login:Penguin mailto:sage [2007/04/27(金) 06:03:05 ID:DTYmU0pC]
www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html

637 名前:login:Penguin [2007/04/27(金) 08:23:06 ID:6m6QKylD]
ユーザプログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。

638 名前:login:Penguin [2007/04/27(金) 08:26:29 ID:6m6QKylD]
(1)ユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。

>>634-635 そこの記述では不十分だよ。




639 名前:login:Penguin mailto:sage [2007/04/27(金) 10:46:58 ID:cjUqO3s+]
>>638
つ 馬本

なんで物理アドレスが必要なのかよくわからんが、virt_to_pyhsかのう。




640 名前:login:Penguin [2007/04/27(金) 21:21:47 ID:6NURgk06]
>>639
virt_to_phys()で本当にユーザプログラムで確保したメモリの物理アドレスが求められる?
質問はカーネルの仮想アドレスを物理アドレスに変換したいのではないよ。
ユーザプログラムで確保したメモリのアドレスの物理アドレスだよ。

あと>>638の(2)については、知ってる人いないの?

641 名前:login:Penguin mailto:sage [2007/04/27(金) 21:40:17 ID:67IsA5dw]
痛い人現る

642 名前:login:Penguin mailto:sage [2007/04/27(金) 23:10:53 ID:EZ45sIxG]
cr3レジスタからたどれば

643 名前:login:Penguin [2007/04/27(金) 23:27:03 ID:6NURgk06]
>>642
で、そのcr3レジスタの値はどこから持ってくるの?
cr3レジスタの値はあくまでも現在のプロセスの仮想アドレスのページテーブルだよね。
カーネルプロセスからユーザプログラムのページテーブルを取得するにはどうするの?

mm_structを保存しておけば、任意のユーザプロセスのメモリ空間にアクセスできる?

644 名前:login:Penguin mailto:sage [2007/04/28(土) 04:22:35 ID:+D3gS6jR]
カーネル書き直せば?w

645 名前:login:Penguin [2007/04/28(土) 07:44:33 ID:oKLKreO7]
カーネルを書きなおしてもいいよ。どこをどうすればいいの?その方法を教えて。

(1)カーネルから任意のユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。


646 名前:login:Penguin mailto:sage [2007/04/28(土) 07:47:13 ID:dRSGn50m]
カーネルからだとページテーブルがページアウトしている可能性もあるから
めんどくさい

647 名前:login:Penguin [2007/04/28(土) 08:04:23 ID:oKLKreO7]
ページアウトはしていないと仮定していいよ。それなら簡単?

648 名前:login:Penguin mailto:sage [2007/04/28(土) 11:40:13 ID:Fr2ol1ef]
ザワザワ…
ザワザワ…




649 名前:login:Penguin mailto:sage [2007/04/28(土) 23:24:32 ID:ZU2q9XRX]
>>639
ttp://d.hatena.ne.jp/Newmarket/20060828/1156705255

650 名前:login:Penguin mailto:sage [2007/04/28(土) 23:42:14 ID:o6o1fGCI]
馬の多さにワロタ

651 名前:login:Penguin [2007/05/03(木) 23:34:15 ID:ErpReMz0]
カーネルのソースツリーの一部分だけ、お試しでコンパイル
したいときってどのようにすればいいですか?

たとえば、lib/ の下だけすこしいじって、syntaxのチェック
だけしたいときとか。2.6.21です。

652 名前:login:Penguin mailto:sage [2007/05/04(金) 00:08:49 ID:9yQs8D1Y]
>>651
なんだかんだいっても、一度全体コンパイルしておくのが一番早い。

653 名前:login:Penguin [2007/05/04(金) 00:18:46 ID:yYLKnQ2E]
>>652
thx.でも、

一度全体をコンパイルしておいて、lib/以下をちょっと(.cのみ)いじって、
全体をmake bzImageすると、それだけで5分以上かかるんすよ...

わたしのへぼマシンだと。

654 名前:login:Penguin mailto:sage [2007/05/04(金) 00:23:00 ID:gFGVYRPM]
やっぱりCPU速くするのが一番

655 名前:login:Penguin mailto:sage [2007/05/04(金) 00:24:14 ID:yYLKnQ2E]
そこをなんとか。

656 名前:login:Penguin mailto:sage [2007/05/04(金) 00:35:21 ID:n4WASQRt]
>>653
2.6だったらトップディレクトリから

$ make lib/cmdline.o
CC lib/cmdline.o

とか出来る。


657 名前:login:Penguin mailto:sage [2007/05/04(金) 00:38:41 ID:yYLKnQ2E]
できました。ありがとうございました。

658 名前:login:Penguin mailto:sage [2007/05/04(金) 01:24:26 ID:ulT/mofy]
>>576
カーネルをコンパイルしたgccでモジュールをコンパイルしないとinsmod時にそのエラーが出るよ。



659 名前:login:Penguin mailto:sage [2007/05/13(日) 23:53:14 ID:EYFP+J0v]
質問です。
>>620さんと同じ状況です。
ただ>>628>>629の方法を試したのですが
解決しませんでした。
いまだに>>620さんが書かれてるエラーがでてしまいます。
考えられる原因はありますでしょうか?
ubuntu 7.04、gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
を使っています。


660 名前:login:Penguin mailto:sage [2007/05/26(土) 11:11:39 ID:XoKsvVbX]
>>15
IPLで使いたい分のメモリを確保すればいいって聞いたことがある。
カーネルのブートパラメータでから使いたい分を引く感じ。

661 名前:login:Penguin mailto:sage [2007/05/26(土) 16:19:33 ID:olOYm4ED]
>>660
それで短くなるの? ならないと思うけど。

662 名前:login:Penguin mailto:sage [2007/05/26(土) 23:30:58 ID:XoKsvVbX]
>>661
あれ?なんかぜんぜん違う話へのレスになってる…。
スマソ、なんか誤爆っぽい…orz

663 名前:login:Penguin [2007/06/03(日) 15:06:38 ID:W8zh9WHI]
ドライバ内での double 型の使用について質問があります.

Kernel 2.6 のドライバ内で double の演算と,sprintf("%.2f", ...) の様な
関数を使うのはどうすればいいのでしょうか?

現在,下記のようなエラーが出ていてドライバをロードできないです.
% make
...(snip)
WARNING: "__adddf3" [hoge.ko] undefined!
WARNING: "__muldf3" [hoge.ko] undefined!
WARNING: "__floatsidf" [hoge.ko] undefined!

% insmod hoge,ko
insmod: error inserting 'hoge.ko': -1 Unknown symbol in module

664 名前:login:Penguin mailto:sage [2007/06/03(日) 15:14:36 ID:1QJRDZ5d]
>>663
ドライバで浮動小数点の計算はしない方がいいと思う。

665 名前:login:Penguin mailto:sage [2007/06/03(日) 15:35:59 ID:W8zh9WHI]
proc_fs で表示するために使いたいのですが,駄目なんでしょうか...?

666 名前:login:Penguin mailto:sage [2007/06/03(日) 16:53:58 ID:KH63vIBs]
浮動小数点演算はFPUを使う可能性があるから
カーネルモードでは可能な限り避けるべき

きちんと対応すれば使えないことはないけど、
速度的な利点はほとんどなくなる

667 名前:login:Penguin mailto:sage [2007/06/03(日) 23:23:42 ID:/hAY1VOO]
「速度的な利点」って何に対する何の利点?

668 名前:login:Penguin mailto:sage [2007/06/03(日) 23:31:28 ID:5NVvB11p]
きっと >>666 の CPU は浮動小数点演算を使うと割り込み禁止になるんだろう



669 名前:login:Penguin mailto:sage [2007/06/04(月) 00:46:42 ID:CXn8XPVL]
nVidiaのドライバの解析って3年ぐらいまでやってる人間
いたけど今どうなってるの?

670 名前:webmaster@気まぐれアナスイ mailto:192.168.0.1 [2007/06/04(月) 12:11:48 ID:RaTjYNE+]
!(-_Φ+){ ... }

671 名前:663 mailto:sage [2007/06/05(火) 02:17:22 ID:aHzmfEHS]
とりあえず固定小数点もどきをつかって回避して,こんなのできました.
お時間があれば添削などしていただけると嬉しいです.

acapulco.dyndns.org/usbrh/

672 名前:login:Penguin mailto:sage [2007/06/05(火) 10:49:22 ID:qhZ8Q9LN]
>>665
固定小数点じゃだめか?

値が必ず正値と仮定、valに本当の値の100倍を入れるとすると

 unsigned int val;
 sprintf(str, "%d.%02d", val/100, val%100)

みたいな感じ
負値だと剰余の扱いがちょっと面倒になる

673 名前:login:Penguin [2007/07/16(月) 18:26:19 ID:h1/eDBu5]
はck

674 名前:login:Penguin [2007/08/06(月) 00:29:52 ID:E6mK6Nbx]
ドライバ書くときってCPUの事は知っておいた方がいいのでしょうか?

675 名前:login:Penguin mailto:sage [2007/08/06(月) 01:55:04 ID:Taq1zrH7]
どうでもいいよ
タマゴがどっち向きかだけ知っとけば

676 名前:login:Penguin [2007/08/28(火) 23:24:19 ID:aUO2fWSH]
あげ

677 名前:login:Penguin mailto:sage [2007/08/29(水) 01:23:49 ID:bmM5qB+B]
>>675
俺はとんがったほうから食べるのが好きだ。

678 名前:login:Penguin mailto:sage [2007/08/29(水) 23:50:22 ID:E1JDVS03]
どちらから割るのが正しいかが問題だ。大きいほうか、尖った方か。
16bit時代以降、中には大きい方から割って、尖った方から食べるという
両刀使いが出てきてさらにややこしくなった。



679 名前:login:Penguin mailto:sage [2007/08/30(木) 12:40:15 ID:pmmgZB5J]
そんな両刀使いがいたのか
具体的にはドレ?

680 名前:login:Penguin mailto:sage [2007/08/31(金) 00:43:34 ID:pR6eg2ir]
NUXIとかmixed endianでggr。1234じゃなくて2143並びになったりするらしい。
実は漏れも知らなかったが、最近でも某腕プロセッサはデータ型によってはまさにミックスになるそうな。

681 名前:login:Penguin mailto:sage [2007/08/31(金) 01:04:08 ID://apeG96]
まあそうはいっても日常的にミックスは体験してるよな
通信プロトコルは大体ビッグだからな

682 名前:login:Penguin [2007/08/31(金) 07:07:24 ID:IHXG9RG5]
uartのドライバ書きたいのだけど、uart_opsのメンバのそれぞれの責務がよく分からない。
文字列送って受けるだけなのに、なぜこんなにいっぱいあるんでしょう?
軽くおしえてもらえないでしょうか?
include/linux/serial_core.h
/*
* This structure describes all the operations that can be
* done on the physical hardware.
*/
struct uart_ops {
unsigned int (*tx_empty)(struct uart_port *);
void (*set_mctrl)(struct uart_port *, unsigned int mctrl);
unsigned int (*get_mctrl)(struct uart_port *);
void (*stop_tx)(struct uart_port *);
void (*start_tx)(struct uart_port *);
void (*send_xchar)(struct uart_port *, char ch);
void (*stop_rx)(struct uart_port *);
void (*enable_ms)(struct uart_port *);
void (*break_ctl)(struct uart_port *, int ctl);
int (*startup)(struct uart_port *);
void (*shutdown)(struct uart_port *);
void (*set_termios)(struct uart_port *, struct ktermios *new,
struct ktermios *old);
void (*pm)(struct uart_port *, unsigned int state,
unsigned int oldstate);
int (*set_wake)(struct uart_port *, unsigned int state);

683 名前:login:Penguin mailto:sage [2007/08/31(金) 07:12:11 ID:Bq5CxAt1]
>>682
シリアル通信の基本を誰かに教えてもらったら...

684 名前:login:Penguin mailto:sage [2007/08/31(金) 14:54:06 ID:bz+r4Vre]
>>682
ドライバを組むのなら、ターゲットの仕様をきちんとおさえるのが基本。
uart程度の解説なら本屋にいくらでもあるし、ググればいくらでも情報
が手に入る。

その程度の情報収集ができないなら、ドライバ開発は諦めたほうが良い。


685 名前:login:Penguin [2007/09/12(水) 11:40:08 ID:W+jFMZNC]
初歩的な質問で、すみません

linuxカーネルは2.6.18-1.2798.fc6-i586で、fedora core6のカーネルを使っています

USBマウスが差し込まれたときに、呼ばれるprobeのコールバックと、外されたときに呼ぶdisconnect
のコールバックを書いたのですが、なぜかvenderIDと、productIDに間違いはないはずなのに
これらが呼ばれません

USBドライバの登録には成功しているようなのですが、登録に使う構造体の初期化に間違いがあったのでしょうか
それとも、このドライバ以外のUSBマウスドライバがあると、駄目なのでしょうか

文字数制限の問題で、ソースは>>686に貼らせていただきます

686 名前:685 [2007/09/12(水) 11:47:03 ID:W+jFMZNC]
コピペでは無理だったので、ロダに上げしました
sakuratan.ddo.jp/uploader/source/date51655.c

687 名前:login:Penguin mailto:sage [2007/09/12(水) 12:38:12 ID:b4ZSgzLd]
>>685
ハードウエアを接続したとき、dmesgにはなんて出てくる?

688 名前:685 [2007/09/12(水) 13:23:18 ID:W+jFMZNC]
>>687

dmesgは、このように出力しています

usbcore: registered new driver usb_mouse
succes_usbregist<6>usb 4-2: new low speed USB device using ohci_hcd and address 6
usb 4-2: configuration #1 chosen from 1 choice
input: Cypress Sem PS2/USB Browser Combo Mouse as /class/input/input6
input: USB HID v1.00 Mouse [Cypress Sem PS2/USB Browser Combo Mouse] on usb-0000:00:0b.1-2




689 名前:login:Penguin mailto:sage [2007/09/12(水) 13:41:02 ID:Eo9vQi0w]
>>688
フックできないような感じだけど?

690 名前:login:Penguin mailto:sage [2007/09/12(水) 14:04:06 ID:gJXCaswd]
usb_device_id の .driver_info だけ定義するとすべてのデバイスにマッチするらしい(馬本参照)ので
デバッグ用にやってみるのがいいかも

> このドライバ以外のUSBマウスドライバがあると、駄目なのでしょうか
たぶんそう

691 名前:login:Penguin [2007/09/13(木) 12:25:45 ID:oMFp/NB1]
ドライバの開発って難しいでしょうか?

692 名前:login:Penguin mailto:sage [2007/09/13(木) 21:34:22 ID:dbMVSAQN]
そのような質問をする方には難しいです。

693 名前:login:Penguin mailto:sage [2007/09/14(金) 03:35:04 ID:bpVkKQxn]
>>685
むかしは定義に合致するドライバが呼ばれたが最近は1つ合致するやつが
あると、それ以上呼ばないようになってたと思う
HIDドライバが先にとっちゃうんでしょう。.configで無効にしてやってみそ

694 名前:login:Penguin [2007/10/03(水) 08:13:37 ID:WhUHfKUP]
あげ

695 名前:login:Penguin mailto:sage [2007/10/07(日) 18:44:44 ID:wad8eg6i]
UIO:ユーザー空間でデバイスドライバ作成が可能に
www.atmarkit.co.jp/flinux/rensai/watch2007/watch09a.html

696 名前:login:Penguin [2007/10/08(月) 12:39:42 ID:v1nGyoTL]
馬本でデバドラを勉強しています。
カーネルのソースでドライバやったことがない人にも分かりやすいソースってどれですかね?

697 名前:login:Penguin mailto:sage [2007/10/08(月) 12:48:08 ID:Y0LW8BuC]
そんな事言ってる位なら、馬本のドライバソース見ればいいじゃん。ダウンロードできるよ

698 名前:login:Penguin mailto:sage [2007/10/09(火) 08:54:41 ID:qhmHV8vi]
>>696
何系のドライバかによるのでは>どれを見たらいいか。

ドライバの種類によってどういうインタフェースセット(いわゆる*_opsとか)を
register_*とかで登録するのか、またインタフェース間やカーネル側処理がキュー等を
介してどのように連携するのか全く異なる。

漏れも読みたて入門者なんであれだけど、

キャラクタデバイスなら/dev/null(mem.c)とパラレルポート(ppdev.c + parport/*)
ブロックデバイスならフロッピー(floppy.c)かramdisk(rd.c)
ファイルシステムならromfs(romfs/*, readonly-fs)とbfs(bfs/*, readwrite-fs)

が短かったり馴染みがあったりしてすんなり読めた。




699 名前:696 [2007/10/09(火) 12:16:03 ID:BjHL69v3]
>>697-697
レスありがとうございます。

700 名前:login:Penguin mailto:sage [2007/10/18(木) 23:39:59 ID:YYamJxiT]
複数のデバイス間でデータをバイパス
したいのですがサンプルないですか?

701 名前:login:Penguin mailto:sage [2007/10/19(金) 14:04:12 ID:CYTWECsc]
いくらなんでも漠然としすぎだろw

702 名前:login:Penguin mailto:sage [2007/10/20(土) 01:03:15 ID:jtNU9aYY]
2ポートとか4ポート付きのNICって
モジュールはどのようにロードされるの?
またデータの共有とかRx,Txバッファの
管理とかどうなってるの?

703 名前:login:Penguin mailto:sage [2007/10/20(土) 04:41:50 ID:izm7N8bV]
1ポートのNICが複数枚ある場合と大差はない。


704 名前:login:Penguin [2007/10/21(日) 17:41:17 ID:yGaxVLsH]
>>701
各ポートにデバイス eth0, eth1 ... と付いて、このデバイスファイルごとに
設定が管理されるだけじゃね?

705 名前:login:Penguin mailto:sage [2007/10/21(日) 18:39:44 ID:SCXCQ8PP]
>>704
pciのデバイスとしては1つにしか見えないんだけどさ
どうやって、その後4ポート認識してるかわからないんだよね

706 名前:login:Penguin mailto:sage [2007/10/21(日) 19:36:55 ID:f7YPzoUy]
>>705
それはPCIブリッジが載ってるからじゃね?
LANチップはその向こうのローカルバスに4ケ載ってるかと。

707 名前:login:Penguin [2007/10/23(火) 20:59:15 ID:pGCXISsZ]
どなたかおしえてください。カーネルモジュールにバイナリコードを渡したい
のでrequest_firmware()を呼び出しているのですが、このrequest_firmware()
という関数から呼び出されるhotplugはどのディレクトリでバイナリコードを
検索してくれるのかわかりません。言ってみればバイナリコードをどのディレクトリ
におけばいいかがわかりません。ディストリビューションはfc6でカーネルは2.6.22です。

カーネルモジュールに対応するデバイスは無いので、sysfs上に仮想的なバスと
デバイス、ドライバを作ってあります。このデバイスのdevice構造体を使って
request_firmwareを呼んでいます。申し訳ありませんが、かなりまいってるので
お願いします。ご助力ください。

708 名前:login:Penguin mailto:sage [2007/10/23(火) 21:05:08 ID:tiPDo332]
>>707
Documentation/firmware_class/*
?



709 名前:login:Penguin mailto:sage [2007/10/23(火) 22:03:44 ID:+D+WWc4l]
BUFFALOのCD-RWドライブがまだ使えるのでハックしたいんですが、
必要な情報ってメーカーから提供されているんでしょうか?

710 名前:login:Penguin mailto:sage [2007/10/24(水) 15:38:46 ID:8BiGN5WQ]
ハゲシク板違い

711 名前:login:Penguin mailto:sage [2007/10/26(金) 18:00:12 ID:OMFZLcsd]
お馬さんの本読んで勉強してるのだが、さっぱり分からん。
ちなみに今3章のscullデバイス。

みんな最初はこんなもんなの?
それとも、俺がバカなだけなのか?諦めたほうがいいのか?

意見求む!!

712 名前:login:Penguin mailto:sage [2007/10/26(金) 18:53:10 ID:OVakku/9]
やる気の問題じゃね?

713 名前:login:Penguin mailto:sage [2007/10/26(金) 20:06:04 ID:nlKsXgN2]
>>711
「作ってみなきゃわかんない」 の典型かもしれん。
実際作業するとキャラクタデバイスは楽しい。

そして、ブロックデバイスに挑戦するときに
分けわかんなさをもう一度楽しめる

714 名前:login:Penguin mailto:sage [2007/10/27(土) 11:47:28 ID:US/tv6oE]
よくわかんないのが、他のドライバの叩き方なんだよな。

ネットワーク通信してファイルとかブロックデバイスにも書くような
ドライバが最終ゴールなんだけど、他のドライバのAPIってどうやって
叩くのか(どこがインタフェース界面なのか)と。

715 名前:login:Penguin mailto:sage [2007/10/27(土) 12:04:42 ID:Y1miLqrF]
OSの勉強やり直しっぽい

716 名前:login:Penguin [2007/10/27(土) 19:45:56 ID:5LV4rb/o]
>>714
それってkernelspaceじゃなくてuserspaceでやればいいのでは。

717 名前:login:Penguin mailto:sage [2007/10/27(土) 20:15:47 ID:US/tv6oE]
>>716
使う側からはファイルシステムに見せたいので、実際プロトタイプは
FUSE方式でやろうとしてます。でもそれだと簡単ではあるものの
二級市民みたいなので、kernelspaceでの正しいやり方を知りたいなと。

nfsとかcryptfsのコードを読むは読むにしても、どっかにそういう
各種ドライバを内部から使うための情報をとりまとめたものとかは
ないのかなと。

718 名前:login:Penguin mailto:sage [2007/10/27(土) 21:00:45 ID:RlzxlVfH]
>>717
とにかくなんでもいいから氏ねw



719 名前:711 mailto:sage [2007/10/28(日) 02:49:08 ID:W9zUZBn1]
>>712
鋭いな。そうかもしんない。

>>713
なるほど、これは貴重な意見が聞けた。サンスコ!!

720 名前:login:Penguin mailto:sage [2007/10/28(日) 02:54:06 ID:7ULWmmgi]
>>717
ntfs-3g なんかはfuseだけど、実用的に動いているし、全然2級って感じしないけど。

721 名前:login:Penguin [2007/10/28(日) 23:36:04 ID:jy3FHf6c]
馬本にOSの仕組みを知ってる必要があると書いてありましたが、
どんなことを知っていたほうがいいのでしょうか?

722 名前:login:Penguin mailto:sage [2007/10/28(日) 23:41:48 ID:1vAj4w/k]
メモリ管理・特権・スケジューリング・ファイルシステム(ry…全部じゃん

723 名前:login:Penguin [2007/10/28(日) 23:45:24 ID:jy3FHf6c]
>>722
ありがとうございます。
詳解Linuxカーネルも読みます。

724 名前:login:Penguin mailto:sage [2007/10/29(月) 00:42:23 ID:uCaYz1aO]
>>723
知りたくなったときに読めばいいよ
でも必ず買っとけ

725 名前:login:Penguin mailto:sage [2007/10/29(月) 09:44:50 ID:wx/mrO8x]
買うなら原書(英語版)のほうがいいぜ
版が新しいし安いからな

726 名前:login:Penguin mailto:sage [2007/10/29(月) 10:27:48 ID:nDk3r2gZ]
> 版が新しいし
4th edition でたの?

727 名前:login:Penguin mailto:sage [2007/10/29(月) 20:53:20 ID:Bg0Jp9i7]
konozama.comとか少しは自分で調べようよ

728 名前:login:Penguin mailto:sage [2007/10/29(月) 23:42:16 ID:oMEBh2dX]
Oh〜、チョッとお聞きしただけで損何怒らなくても
いいじゃないですかぁ〜。Hey,take it easy !
でも調べるところは教えてくれるアナタに感謝で〜す!



729 名前:login:Penguin [2007/11/08(木) 00:29:00 ID:Cm3oK6QC]
メーカーとかが作ったデバドラのソースって公開してるものはあるのでしょうか?

730 名前:login:Penguin mailto:sage [2007/11/08(木) 01:07:57 ID:vscqki7B]
ネットワークデバイス系はそういうのが結構多いような。
超いい加減だけど:
つ $ grep -r 'Inc[.o]' drivers | egrep -v '(Red|Vista|Foundation)'


731 名前:login:Penguin [2007/11/12(月) 11:19:56 ID:vNQ95D4g]
kernel2.6.18.6でターゲット側のUSBドライバ書こうとしてるんですが
参考になるサンプルってありますでしょうか?
drivers/usb/gadget/net2280.cとかが近いのかも知れないですけど
どうもpciで登録してるように見えて「別物かなぁ?」と思いまして。

あとホスト側のUSBドライバで挿されたら何でも拾う設定って
usb_device_idの.device_infoに適当な値を突っ込めばいいと思って
たんですがどうにもattachの際に自作のprobeが呼ばれません。
成功した方っていらっしゃいます?

ご存知の方いらっしゃればお願いします。

732 名前:login:Penguin mailto:sage [2007/11/12(月) 23:57:28 ID:xIHzaILy]
>>731
おめー御馬様のサンプル
見てていってるんだよね?

もしそうなら、適正無いから諦めろ
見てないなら、お前は調査能力ない
からニートかなんかになれ

733 名前:login:Penguin mailto:sage [2007/11/13(火) 00:56:13 ID:0Tz4Ruwv]
>>732
よく判ってらっしゃる。
馬本はさらっと読みましたが元がLinuxでも組み込みでもない世界で
やってて、急遽ヘルプで入ったんでさっぱり。

前任が逃げてヘルプなんで誰も知ってる人がいない\(^o^)/

で、聞いてみたんですが俺も逃げっかな・・・

734 名前:login:Penguin mailto:sage [2007/11/13(火) 01:11:37 ID:nAlW3/rO]
>>733
一週間悩んだら解かんないか?
すげー複雑な科学計算とか遺伝子関係の
プログラミング以外ほとんどの対象のプログラミング
なんて簡単だぞ

時間がかかるものが多いのは事実だが
ドライバは簡単な部類だ

735 名前:login:Penguin mailto:sage [2007/11/13(火) 01:21:16 ID:0Tz4Ruwv]
>>734
まだ2日程度なんですよね。
「デバドラ」だと思ったんで聞いてみたんですがレベル設定あるみたいなんで
「くだらねぇ」でも行ってきます(´・ω・`)

736 名前:login:Penguin mailto:sage [2007/11/13(火) 01:24:22 ID:O430Avmc]
御馬様っていうのか・・・
昨日、買いました。勉強します〜

737 名前:login:Penguin mailto:sage [2007/11/13(火) 09:24:54 ID:SFIG7nsG]
>>734
ちなみに、回答しない人の言うことは無視したほうがいいよ。
>>732はニートとか言ってるし典型的な煽り。

738 名前:735 mailto:sage [2007/11/14(水) 00:27:19 ID:2+ZY8Hov]
馬本見たら「本書の範囲を超えるので載せません」て書かれてた(´・ω・`)
USB gadgetは難しいだろうかnet2280.cよりもZero.c見たほうがいいのかなぁ・・・。



739 名前:login:Penguin mailto:sage [2007/11/14(水) 02:20:20 ID:aLuJUt0c]
文句とか愚痴だけいって何も貢献しない人間ほどむかつく奴はいない。

740 名前:login:Penguin [2007/11/17(土) 09:40:38 ID:MN9c6cz5]
>>739
どうどうどぅ…

741 名前:login:Penguin mailto:sage [2007/11/17(土) 11:39:12 ID:AZzmHExp]
>>739
Do! Do! Do!

742 名前:login:Penguin [2007/11/17(土) 11:43:31 ID:4avAGLIe]
do_fork

743 名前:login:Penguin [2007/11/29(木) 13:55:56 ID:yo1OGExb]
mmapで特定のデバイスのIOメモリを仮想空間に割り付けて,
その領域に対してユーザーからデータを書き込むことを考えています.

ユーザープログラムからその領域上に,あるデータ型の双方向リスト
を作りたいのですが,ユーザー空間の特定のアドレス範囲から空き
メモリ領域を動的に確保する方法ってないでしょうか

void *dev_malloc(start_address, end_adress, nbyte);
とすると仮想アドレスstart_address〜end_adressの範囲から
nbyteバイトの領域を確保するみたいなイメージです


744 名前:login:Penguin mailto:sage [2007/11/29(木) 20:09:08 ID:iCD9/EY6]
>>743
かーなーり スレ違い
デバイスドライバ関係ない
汎用heap管理ライブラリがほしいってことだろ

heap-management とか ヒープ管理 でぐぐってみそ

ちなみに
void *dev_malloc(start_address, end_adress, nbyte);
ってI/Fはありえないと思うぞ
毎回 start_addressとend_adressを与えるわけ??

745 名前:login:Penguin [2007/12/02(日) 23:50:11 ID:lbIQi7BJ]
あげ

746 名前:login:Penguin [2007/12/13(木) 19:50:31 ID:pBhS9AMD]
あげ

747 名前: [2007/12/18(火) 23:09:45 ID:K//ZswLt]
ドライバでCPUキャッシュのフラッシュやりたい!
どうやるの?だれかおせぇ〜てぇ〜

748 名前:login:Penguin mailto:sage [2007/12/18(火) 23:41:07 ID:uNdsweTC]
>>747
CPUキャッシュのフラッシュをする命令を実行すればいいんじゃない?
CPUはなに?



749 名前: [2007/12/18(火) 23:59:27 ID:K//ZswLt]
>>748
Xeonの5100です。
データシートとか見つからなくて。。。
ご存知でしたら教えていただけませんか?

<経緯>
Linuxマシンで、DMAでPCIeのデバイスからホストメモリにデータ転送
したときにキャッシュのせいか、2周目のリングバッファ領域が
うまく参照できていなく、フラッシュすればと思いました。。



750 名前:login:Penguin mailto:sage [2007/12/23(日) 13:45:51 ID:VU+KNtKv]
>>ORE
ttp://www.intel.com/products/processor/manuals/index.htm

751 名前:login:Penguin [2007/12/24(月) 18:03:58 ID:ugbio3bt]
Linux 2.6.22 ARM9マシンでシリアルコンソールでデバッグするためにカーネルコマンドラインで
console=uart,mmio,0x80004600,57600n8
とすると、カーネルの初期化中に
early_uart_console_init()→register_console()→early_uart_setup()→parse_options()→ioremap()→__arm_ioremap()→__arm_ioremap_pfn()→get_vm_area()→__get_vm_area_node()→kmalloc_node()→kmalloc()→kmem_cache_alloc()
が呼ばれてkmem_cache_alloc()でこけます。
slabアロケータがまだ初期化されていないのにkmem_cache_alloc()が呼ばれているのがこける原因と思うのですが、armマシンでもearly_uart_consoleは使えるのでしょうか?

752 名前: 【大吉】 【801円】 [2008/01/01(火) 19:54:53 ID:EHGXP/cp]
新年あげ

753 名前: 【中吉】 【156円】 [2008/01/01(火) 20:58:21 ID:LfamTH+n]
>750
749じゃないけど,これいいな.サンクス.
みんなチップのデータとかはどこから調べてくるの?
ちょっと想像してみたけど,「とりあえずメーカサイトを調べる」
以外の方法がわからん.
windowsのドライバから情報調べたりする人もいるの?
いたらその解析方法とかおしえてください.

754 名前:login:Penguin mailto:sage [2008/01/01(火) 20:59:27 ID:VCekl7x7]
>>753
メーカに電話して聞く

755 名前:login:Penguin mailto:sage [2008/01/01(火) 23:23:30 ID:hQDOyXLN]
>>749
Intel の CPU だとその手のキャッシュのことは気にしなくていいんじゃなかったっけ?
いわゆるバススヌープ。ま、明示的にフラッシュしたきゃできるだろうけど。
(実は俺自身は x86 以外用のドライバしか書いたことがないので聞きかじりだが...)

あと、キャッシュが効いているなら1周目でも駄目な場合がありそうだがどうなん?
単にリングバッファのアリゴリズムでしくじってたりして。

って、よく見るとえらい昔の書き込みだった。もう解決したのかな。

756 名前:login:Penguin mailto:sage [2008/01/02(水) 12:58:56 ID:jVjgkvN4]
チップの購入先の営業から入手とか
チップベンダのwebサイトからダウンロードだろ
常考

757 名前:login:Penguin [2008/01/14(月) 11:44:33 ID:MLu8ArWP]
今馬本の第 3 版読んでんだけど scull のソースコードって
Web でダウンロードできるの?

758 名前:login:Penguin mailto:sage [2008/01/14(月) 11:59:56 ID:hAs2atpA]
あるよ



759 名前:login:Penguin mailto:sage [2008/01/14(月) 13:03:13 ID:MLu8ArWP]
>>758
早速ありがとう.
本を斜め読みしてるんだけど URL が見当たらないです.
検索しても見付からないし,もしよろしければ教えていただけますと
うれしいです

760 名前:login:Penguin mailto:sage [2008/01/14(月) 13:36:46 ID:Q2m15cvj]
>>759
>>80

761 名前:login:Penguin mailto:sage [2008/01/14(月) 14:10:16 ID:MLu8ArWP]
>>759
ありがとう! 3版のは FTP で以下からダウンロードできました.

ar.linux.it/pub/ldd3/ldd3-samples-1.0.0.tar.gz

かなり感謝です ありがとう

762 名前:login:Penguin mailto:sage [2008/01/14(月) 14:13:07 ID:MLu8ArWP]
自分にお礼ちまった

>>761の「>>759」は >>760 の間違いです
>>760さんありがとう

763 名前:login:Penguin mailto:sage [2008/01/17(木) 11:56:40 ID:1+AIbUNm]
>>761
あれ?お馬さんの第3版それなの?
日付が気になるので、第3版翻訳本に載ってたのをこぴぺ

ftp://example.oreilly.com/pub/examples/linuxdrive3
examples.tar.gz 70 KB 2005/05/12 0:00:00

ちょいとだけ新しいかも。同じくLinuxデバドラはじめる所なので
よろしく〜。Win系でWDM書いてました〜。

764 名前:!omikuji !dama [2008/01/25(金) 07:11:44 ID:dVpHcdky]
kaso

765 名前:login:Penguin mailto:sage [2008/01/25(金) 21:56:39 ID:OZPnpJ0W]
ドライバでのロックの掛け方とか
その変のデザインパターンみたいなもの
ないのですか?

馬本読んでも、DualSocket 4コアとか
その辺の場合どうすればいいとかまったく
書いてなくて困ってる。

CPU毎にあるモノを意識しなければならないのか
全リソースを意識した作りなのかの判断も
ケースバイケースとかだし。WDMの方がいいよね

766 名前:login:Penguin mailto:sage [2008/01/26(土) 23:10:19 ID:jNmSnKBM]
>>765
スピンロック様

767 名前:login:Penguin mailto:sage [2008/01/27(日) 14:19:40 ID:/9d4A9Tg]
WDMってよく知らないが、割り禁、スピン、寝る&起こす以外に
排他の方法があるの?

768 名前:login:Penguin mailto:sage [2008/01/27(日) 17:28:29 ID:Q2ylOq7r]
そもそも排他なんじゃねーの?
昔はLinuxも明示的にスケジュールよぶまで
カーネル空間は排他だったじゃん
SMPが出てきて全部直す羽目になったけど



769 名前:login:Penguin mailto:sage [2008/01/27(日) 19:45:28 ID:/9d4A9Tg]
割込みハンドラ

770 名前:login:Penguin [2008/02/03(日) 19:45:35 ID:coODkdMv]
過疎

771 名前:login:Penguin mailto:sage [2008/02/07(木) 03:30:55 ID:9BnmgFGp]
「新着1件ってことは、いつもの良スレ上げ厨かなぁ」と思ったらそう来たか。

772 名前:login:Penguin [2008/02/19(火) 16:29:32 ID:vNMS2dUr]
基本的にPCIデバイスにデータ渡すだけのドライバを作ってるのですが、
I2Cデータ転送もしたいといわれ、苦戦中につき質問させて下さい。

カーネルリリースは2.6.11-1.1369_FC4

今のところインクルードしてるのは下記ヘッダーです。
linux/module.h
linux/kernel.h
linux/pci.h
linux/pci-dev.h
asm/uaccess.h
unistd/.h
sys/ioctl.h
sys/perm.h

I2Cのオープンのために、これにfcntl.hを加えたところ、dev_tの型などが再定義されたとエラーが出ます。


また、KERNELDIRを取得して、その場でMAKEしているため
Makefileにて、環境変数C_INCLUDE_PATHに/usr/includeを設定しているのですが
fcntl.hを除いてコンパイルしてもclose, ioctl等が未定義と警告されます。

これらエラーや警告の対応に行き詰まってしまいました。
インクルードに過不足あるのか、Makefileが悪いのか、そもそもPCIドライバからI2Cを叩く方法が悪いのか…
アドバイス等お願い出来ますでしょうか。

773 名前:login:Penguin mailto:sage [2008/02/19(火) 19:10:24 ID:5BDGV8A6]
デバイスドライバでunistd.hなんかincludeしちゃダメだろ
fcntl.hも同様

774 名前:login:Penguin mailto:sage [2008/02/19(火) 21:35:29 ID:ec7S8nn5]
何言ってるのかわからないなw
PCIデバイスとして、I2Cバスへのブリッジが載っているのか?
それとも、PCIバス/デバイスとは関係なく、全く別のI2Cバス上のデバイスをアクセスしたいだけなのか?

775 名前:772 mailto:sage [2008/02/19(火) 22:00:59 ID:vQR2/dLm]
>>773
やっぱりダメですか。

というか、無理やり環境変数使ってコンパイラのエラーを抜けてる(unistd.h以降3ヘッダ、加えてfcntl.h)のは全部includeしちゃダメですかね。

>>774
>PCIデバイスとして、I2Cバスへのブリッジが載っているのか?
>それとも、PCIバス/デバイスとは関係なく、全く別のI2Cバス上のデバイスをアクセスしたいだけなのか?

PCIデバイスにI2Cバスへのブリッジが載っている、のはずです。


776 名前:login:Penguin mailto:sage [2008/02/19(火) 22:53:37 ID:5BDGV8A6]
つーかさ
カーネルモードで動いてるデバイスドライバの中から
open()とかclose()とかioctl()みたいなシステムコールを
発行できるわけないだろ?

>>772が作りたいと思ってるのは root権限で直接I/O叩くだけの
ユーザランドで動くアプリなんじゃないのか?

777 名前:login:Penguin mailto:sage [2008/02/19(火) 23:10:27 ID:ec7S8nn5]
>>775
じゃあ、そのPCI-I2Cブリッジのデバイスドライバを書いているんだとして、
>I2Cのオープンのために
なんで、こうなるのよw 
とりあえずDocumentation/i2c/summaryでも読んでくれ。

778 名前:login:Penguin mailto:sage [2008/02/20(水) 08:43:00 ID:zgvkT7V3]
>>776
呼んじゃダメなんですね。了解しました。
先週までアプリしかやったことがなく、ついそっち寄りな考えに、と、蛇足でした。失礼しました。

>>777
あー、確かに。
教えていただいたものを読んでみます。
ありがとうございました。



779 名前:login:Penguin mailto:sage [2008/02/20(水) 09:40:57 ID:zxxPBExl]
>>773
そういえば、しちゃダメだ ってどこにも書いてないな
わからない奴はわからないんじゃないか?

780 名前:login:Penguin mailto:sage [2008/02/21(木) 00:46:11 ID:VUV3LHo/]
ちょっと相談なんだが、いいかな

writeの中で長時間割り込み待ちをするような処理と、その場で終わる処理を持ったデバドラがあって、
(処理の切り替えはioctl)
まずアプリAが長時間かかる処理のためにwriteわ呼び出す。

当然割り込み待ちになるが、そのままアプリBがioctlやwriteを呼び出すとどうなる?
普通に処理出来る?

781 名前:login:Penguin mailto:sage [2008/02/21(木) 00:55:15 ID:A2lpGb2W]
一つのデバイスを二つのアプリで同時に使うっつー事ですか?

782 名前:login:Penguin mailto:sage [2008/02/21(木) 01:18:43 ID:VUV3LHo/]
>>781
その通りで。
ただ、1つのアプリがマルチスレッドになってるという場合もありでお願いしたい

783 名前:login:Penguin mailto:sage [2008/02/21(木) 01:55:12 ID:6LvlPNy5]
できるかどうかは作り方次第だろうな

資源の排他処理が必要なら、ロック使わなきゃならん
その場合は、すぐ終わるはずの処理ももちろん待たされる

待たせたくなけりゃ、長時間かかるというwriteにバッファを設けて
write処理と割り込み処理とを分離するみたいな工夫したらどうだ

的外れならスマソ

784 名前:login:Penguin mailto:sage [2008/02/21(木) 02:11:45 ID:VUV3LHo/]
>>783
資源は共有しないからロックはいらなさそうだ
writeにバッファを設けて処理を分離ってのがイマイチわからんのだけど、説明頼んでもいいかい?
デバドラの中でもスレッドとかで並列にするの?

785 名前:login:Penguin mailto:sage [2008/02/21(木) 06:04:45 ID:Xs+RkuJQ]
シリアルポートを想像してみたらどうだろう
Write、Read、割り込みがそれぞれ並列に動くはずだ

Writeで割り込み使ってるかどうかは知らないけど

786 名前:login:Penguin mailto:sage [2008/02/21(木) 07:26:26 ID:Kf6eqU14]
ブロック と ノンブロック という用語を使ってほしいところだな

んで複数プロセスから同時に使えるかどうかはデバイスドライバの作り方次第
手抜きにつくると open()されるときに競合問題を判断して
同時にひとつとかopenできないようにするよな

複数同時にopenして、ひとつがブロックしてる時に
また別のがノンブロックの処理要求してきたなんて場合は
そういう風にうまく動くようにドライバの中で考慮する必要がある

787 名前:login:Penguin mailto:sage [2008/02/21(木) 07:32:20 ID:Kf6eqU14]
追記

呼び出し側がマルチスレッド使ってるかどうかはあまり関係ない
ふたつのプロセスがメモリを共有してようがしてまいが
ドライバにとっては関係ない話だ

それよりCPUが複数ある(いわゆるSMP)かどうかの方が重要
smp対応させるなら必要なところできっちりspinlockしないとダメ

788 名前:login:Penguin mailto:sage [2008/02/21(木) 08:59:36 ID:VUV3LHo/]
>>787-788
ブロック=長時間処理
ノンブロック=即時処理
でおk?

複数からopenされるのはアリにしないといけないっぽいんで、考えてみる。

ブロック中にアプリBからもwrite自体は呼び出せる?
その時点で破綻してるなら、今のwriteをそのままスレッド化して、write自体はスレッド起動だけにするなりで対応とか…ダメかな

あとCPUは1つ前提でおkっす。
余裕があったら後学のためにもsmp対応も抑えておきたいがw



789 名前:login:Penguin mailto:sage [2008/02/21(木) 09:10:48 ID:Kf6eqU14]
> ブロック中にアプリBからもwrite自体は呼び出せる?
もちろん呼べる

ブロック処理とは、簡単にいうと処理開始をデバイス(ハードウェア)に
通知したあとスリープ状態に入り、処理完了割込が入ったら
割込ハンドラがスリープ(ブロッキング)しているプロセスを
たたき起こすって流れ。

アプリAがスリープ(ブロッキング)している間に
アプリBからreadなりwriteなりが発行されるのは当然ありうる話。
ちゃんとドライバを書いておけば問題なく動く。

linuxカーネルのソースコードそのものがいいサンプルコードだから
いろいろ読んでみるとよい。

それから、procfs(/procの下に仮想ファイルをつくる)に
状態監視・デバッグ操作用のI/Fを用意しておくと後々楽になるよ。

790 名前:login:Penguin mailto:sage [2008/02/21(木) 09:27:27 ID:VUV3LHo/]
>>789
凄く参考になった!
ありがとう

>答えてくれた人達
いろいろありがとう

791 名前:login:Penguin [2008/03/03(月) 00:13:39 ID:JgGlbVL6]
ttp://www.atmarkit.co.jp/fsecurity/rensai/rootkit03/rootkit02.html

上記を参考にシステムコールをフックするプログラムを書きました(そのままでは駄目なので必要に応じて修正しています)。
コンパイルすると、

original_sys_uname = sys_call_table[sys_uname];
sys_call_table[sys_uname] = hook_uname;

のsys_unameで `sys_uname' undeclared (first use in this function) とエラーがでます。
これは arch/i386/kernel/syscall_table.S をインクルードしておく必要があるのでしょうか?

使用しているカーネル:2.6.23

792 名前:login:Penguin mailto:sage [2008/03/03(月) 01:17:37 ID:dOT+ttrq]
>>791
よく知らんけど、これよめ。
System calls replacement
ttp://kerneltrap.org/node/5793

nm -uでundefinedなシンボルが置き換えらればいいだけなら、
LD_PRELOADなりLD_AUDITをつかってどうにかしたほうがいいんじゃね?
そうなら、以後下へどうぞ。

Linuxプログラミング
pc11.2ch.net/test/read.cgi/linux/1118024349/

793 名前:login:Penguin mailto:sage [2008/03/03(月) 04:02:04 ID:JCTvrwL7]
>>791
sys_call_table[NR_uname] = hook_uname;
の様な気がするわけですが。

>>792
それはユーザー空間で乗っ取る方法ですがな。


794 名前:791 [2008/03/03(月) 07:25:41 ID:zrYDUX8A]
>>792-793
試してみます。
情報ありがとうございます。

795 名前:login:Penguin mailto:sage [2008/03/04(火) 09:36:17 ID:NdRlprld]
>>791
乗り遅れたか!?

Linux 2.6からシステムコールのフックはできません。
パッチ当てなきゃできないようなことが
ttp://tldp.org/LDP/lkmpg/2.6/lkmpg.pdf
8章にそのようなことが書いてあったはず。

記憶が確かなら、792の示したサイトの
unsigned long **sys_call_table = find_sys_call_table();を
加えればできたと思う。

796 名前:795 mailto:sage [2008/03/04(火) 09:39:35 ID:NdRlprld]
>>791
パッチを当てるのが嫌ならLSMを使ったらいい。
決まった関数で始めるとか、とかsecurity_operations構造体に登録するあたりとか
デバドラに似ているからsecurity以下を読めば使えると思う。

797 名前:791 [2008/03/04(火) 19:10:21 ID:iX0t2env]
>>795
どうもです。
あれから色々調べたら>>795の言うとおりに2.6.xからはできないみたいですね。
下記のURLに書いてある。i386_ksyms.cに

extern void* sys_call_table[];
EXPORT_SYMBOL(sys_call_table);

を、追加・再構築してやってみようと思います。

ttp://mail.nl.linux.org/kernelnewbies/2006-05/msg00334.html

798 名前:login:Penguin mailto:sage [2008/03/04(火) 20:25:09 ID:neWtFAJV]
>>791
調べもせずに書いてるけどLinux版のウィルス対策ソフトのお試し版に
運がよければカーネルモジュールのソースが含まれていて、なおかつ、
それがシステムコールのフックしていたりしないか?



799 名前:791 [2008/03/05(水) 00:39:02 ID:QPFLTsD+]
>>798
そのようなことはございません

800 名前:login:Penguin [2008/03/17(月) 18:46:02 ID:c0UdNwV3]
あげ

801 名前:login:Penguin mailto:sage [2008/03/18(火) 18:12:00 ID:z8581E+A]
init中にalloc_chrdev_regionでデバイス番号を動的確保した後で、
そのまま(関数内で)スペシャルファイルを作成する事は可能?

mknodコマンドでなく、あくまでインスコだけで済ませるように出来ないかと…

802 名前:login:Penguin mailto:sage [2008/03/18(火) 18:22:19 ID:qC/Waqz9]
udevじゃダメなの?

803 名前:login:Penguin mailto:sage [2008/03/18(火) 20:50:35 ID:Hq9+Lc7G]
>>801
オレならprocなりsysなりのみで済ます

804 名前:801 mailto:sage [2008/03/18(火) 21:37:57 ID:z8581E+A]
>>802>>803
それだとinsmod以外にも必要になるんじゃないんですか?
関数で無いですかね
(init_moduleから呼び出す)

insmod hoge
だけ実行すればアプリから叩けるような形にしたいんですが…

805 名前:login:Penguin mailto:sage [2008/03/18(火) 21:49:17 ID:irgQA2zj]
shell スクリプト作ってその中で insmod、mknod すれば?
rmmod も出来るようにすれば、なお良いでしょ?

806 名前:login:Penguin mailto:sage [2008/03/18(火) 23:47:40 ID:z8581E+A]
>>805
それが良さげですね。
ありがとうございました。

807 名前:login:Penguin mailto:sage [2008/03/18(火) 23:49:33 ID:owXiyD5i]
>>801
mknodしたくないってだけなら、device_create(9)か、手を抜きたいなら
misc_register(9)に全部にまかせれば、>>802が言ってるように、udevが勝手に
スペシャルファイルを作ってくれるんじゃないか?

808 名前:login:Penguin mailto:sage [2008/03/19(水) 10:35:22 ID:J+fEVrF8]
ブロックデバイスのブロックサイズってどこで決まってるの?
ユーザアプリから見る方法ある?



809 名前:login:Penguin mailto:sage [2008/03/19(水) 14:37:31 ID:ZMxkS/nc]
>>808
mkfsする時に決まると思うが。
ext2/ext3 なら tune2fs -l で見るか、ファイルがあれば stat構造体の st_blksize を見る。

810 名前:login:Penguin mailto:sage [2008/03/20(木) 00:19:26 ID:tEIlyDHp]
>>808
そのブロックデバイスドライバが制御しているハードの規格によりだね。
SCSI系ならMode Senseコマンドで取れたんじゃないっけ?

811 名前:login:Penguin mailto:sage [2008/03/20(木) 00:24:56 ID:tEIlyDHp]
>>808
試してないけど、blktool(8)のblock-szコマンドでいけそうかもね?

812 名前:login:Penguin mailto:sage [2008/03/20(木) 02:10:32 ID:wMmGSYfl]
>>809
フォーマットする前に最適値を知っときたい乙女心です

>>810-811
ありがとう。でもハードの規格というよりブロックデバイスとして
なんかその辺を返してくれるioctlなりなんなりがあったらいいな
とか夢想してた

813 名前:login:Penguin mailto:sage [2008/03/28(金) 15:40:00 ID:BcQjSrEl]
>>807見て、misc_register調べてちょっと使ってみたんだけど、
これで作ったもんどうやって消すんだ?

関数自体は使い方分かったが、対になるもの無い?
misc_register込みのinsmod→rmmod→再度insmodでハングするんだが

814 名前:login:Penguin mailto:sage [2008/03/28(金) 15:47:49 ID:BcQjSrEl]
書いた直後に自己解決しちまったorz

misc_deregisterがあるのね…
スレ汚しすまんかった

815 名前:791 [2008/04/06(日) 15:36:55 ID:n9AD6VHb]
ほ?

816 名前:login:Penguin [2008/04/10(木) 21:40:14 ID:zop984mC]
mmapを利用して物理アドレス0x10000000に存在するデバイス(SRAM)のR/Wを
行うドライバを作成しようと思っています。
馬本の第3版のサンプルソース(simple)を参考にしながらremap_pfn_rangeで
マッピングし、ダンプをとってみたところ、0x10000000エリアのデータでは
なく、全て0のデータが読み取れました。
0x1000等の小さい物理アドレスであれば正常にリード出来ているようです。
0x10000000のように上の方のアドレスは、remap_pfn_rangeではマッピング
されないのでしょうか?

カーネルのバージョンは2.6.11です。


817 名前:816 [2008/04/10(木) 22:19:28 ID:zop984mC]
/dev/mem openして
memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
でも同じ結果でした・・・



818 名前:816 [2008/04/10(木) 22:20:55 ID:zop984mC]
訂正
>>817
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)




819 名前:816 [2008/04/10(木) 22:21:43 ID:zop984mC]
訂正
>>817
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)


820 名前:login:Penguin mailto:sage [2008/04/10(木) 23:10:16 ID:hws3UYgb]
Linux 2.6.11 使ってないしためしてないけど、
/sys/devices/pci*/*/resource? を mmap(2) って出来ないんだっけ?

821 名前:login:Penguin mailto:sage [2008/04/11(金) 00:58:30 ID:pzz5pihD]
とりあえず、落ち着けw
man mmap2

822 名前:816 [2008/04/11(金) 23:01:18 ID:1s5/4DVK]
>>821
>man mmap2
↓ですよね?
www.pinkdragon.net/doc_lib/contents/ja/linux_man/mmap2.2.html
Linux 2.3.31 以降で使用可能とありますが、この環境では定義されていないと言われます。
組込み系だからなんでしょうか・・・

それと馬本第3版のP437 15.2.6 RAMのマッピングを変更する に
「ramap_pfn_rangeがRAMを扱えないことは・・・」ってくだりがあります。
実際いま起きている問題はこれなんでしょうか?
ioremap_nocacheでReadする方法とダンプ比較したところ,mmapだと
0x00000000〜0x00800000 あたりまではちゃんとよめますが、
0x01000000になったとたん、0x00000000の値になってしまいます・・・
ioremap_nocacheでは0x01000000も見れるのに・・・

823 名前:login:Penguin mailto:sage [2008/04/12(土) 04:09:25 ID:CJCvWk/v]
MTD使えばいいんじゃない?
phram.koとか
slram.koとか

824 名前:login:Penguin mailto:sage [2008/05/26(月) 23:35:38 ID:ZMUO6bXW]
タスクレットの中でsleep_on_timeoutって呼べないんですか?
なぜかカーネルパニックになってしまいます…

825 名前:login:Penguin mailto:sage [2008/05/28(水) 19:14:20 ID:eAKKlqpI]
タスクレットからkill_fasync()呼びたいんですけど、
第一引数ってどこから持ってくればいいんでしょうか?

826 名前:login:Penguin [2008/06/13(金) 19:47:44 ID:ngpRzev4]
フリーオのデバイスドライバー書ける人が居たら神!

827 名前:login:Penguin mailto:sage [2008/06/13(金) 22:56:58 ID:yAy4CW2H]
玄箱用のは、あるだろ

828 名前:login:Penguin [2008/07/05(土) 05:09:39 ID:+CtKxXwh]
あげあげ



829 名前:login:Penguin mailto:sage [2008/07/05(土) 08:11:05 ID:d6Puhgue]

ttp://pc11.2ch.net/test/read.cgi/linux/1213378360/

830 名前:login:Penguin mailto:sage [2008/07/05(土) 11:49:23 ID:D1363wxr]
やっぱり情報公開されてない物のドライバ造るのって無理がある?
Willcomスマートフォン端末でLinuxを動かすプロジェクト?があるのですが、
WS003SH、WSはPrismチップの無線LANを使用。
WS011SHではSharp独自のチップを使用した物のようです。
WS020SHは不明。

当方WS011SHの物の開発に興味があるのですが、難しいどころか情報の公開がされていない限りは
手すら付けられない状態でしょうか?
アドバイスよろしくお願いします。

831 名前:login:Penguin [2008/07/27(日) 04:17:46 ID:JGvJfhtT]
copy_{to,from}_user()でユーザプロセスのアドレスを与えるところにカーネル空間のアドレスを与えるとどうなります?
やっぱりaccess_ok()で弾かれる?


832 名前:login:Penguin [2008/07/27(日) 08:01:26 ID:Nq54nVAZ]
>>831
その程度、自分で確認しろ。

833 名前:login:Penguin [2008/08/21(木) 06:11:30 ID:5vh0FBcx]
あげ

834 名前:login:Penguin [2008/09/17(水) 22:50:23 ID:v0hV3n2N]
Linuxデバドラ移植の質問です。
雑誌の記事でx86Linuxデバドラを他CPUのLinuxに移植する際に、デバドラのソースが
x86に依存してて移植できないことを知りました。
どうやらx86プログラマが他のCPUへの移植性を考えずに開発したことが原因みたいです。

雑誌によるとデバドラの依存箇所は以下が多いようです。
・バイトオーダ
・アライメント
・I/Oアクセス
・タイミング

皆様に質問ですが、このようなx86に依存したLinuxデバドラが落ちている場所を
ご存じないでしょうか?
また、根本的なことですがx86Linuxデバドラを移植したり、移植しようとしたが
x86に依存してて大変だったという案件は多いのでしょうか?

どうぞよろしくお願いいたします。













835 名前:login:Penguin mailto:sage [2008/09/17(水) 23:58:51 ID:3YmhTjsY]
>>834
drivers/

直すのはそんなにめんどくないが、どこに地雷があるかわかりにくいのがのう。


836 名前:login:Penguin mailto:sage [2008/09/18(木) 00:34:30 ID:YTkXriLK]
>>834
というか、デバイスドライバは基本的にハードに依存して当然
という側面も否定できないと言わざるを得ないこともあるので。

837 名前:834 mailto:sage [2008/09/18(木) 00:34:38 ID:csSd+QEz]
カーネルソース内にあるんですね!
知りませんでした;

私は初心者でよく知らないんですが、てっきりカーネルソール内のコードって
移植性をちゃんと考えてあって(arch/以外)、管理されていると思ってました。

むしろ、カーネルソース外の開発(企業or個人)で公開されているドライバに
あるのかと思ってました。

838 名前:login:Penguin mailto:sage [2008/09/18(木) 10:25:28 ID:tEXQNL4k]
>>834
ふつー開発者の持ってるCPUでしかテストしないよ。

tg3とかe1000とかはNEC(ia64)とかIBM(powerpc)とかが
頑張って自分とこのハードで動くようにしてるけど、
個人でハックしてるものはたいていx86だけ。



839 名前:login:Penguin mailto:sage [2008/09/19(金) 05:32:38 ID:PmgUOzFO]
まあ、過去の経験からすると
・USBターゲット - ほとんど手を入れる必要無し
・PCI - そんなに苦労することはない
・CPU直結 - 健闘を祈る
てところですかねえ。


840 名前:login:Penguin [2008/11/09(日) 10:59:58 ID:QBZrgAJi]
age

841 名前:login:Penguin mailto:sage [2008/11/13(木) 05:29:37 ID:dS9nrsy0]
USBデバイスでも無線LANとかは

842 名前:login:Penguin [2008/12/07(日) 17:23:17 ID:Ht7uJKzk]
age

843 名前:login:Penguin mailto:sage [2008/12/19(金) 14:08:43 ID:MwDJWbRs]
HWからの割込み処理中の、ローカルAPICへのEOI発行タイミングについて質問があります。
レベル・トリガの割込みだった場合は、end関数からEOIを発行しています。
これは、割込み処理の先頭で発行してしまうと、I/O APICへEOIが通知され、デバイスのアサートが
失われてしまうのが不都合だからでしょうか?
カーネルのverは2.6.18 です。



844 名前:login:Penguin mailto:sage [2008/12/20(土) 08:40:05 ID:9ZJbjYSC]
>>843
一般的な話だけど
割り込みに関わるのは3つ。
@割り込み発生の条件と、割り込み要求するデバイス
A割り込みを調停する割り込みコントローラと、割り込み受付のカーネル
B実際の割り込み処理プログラム

@→A→Bの流れは分かるよね
それなら質問の答えも分かるよねw


わんこ蕎麦に例えると
@>>843のお椀の蓋が開いてる
A>>843のお椀に蕎麦を放り込むおばちゃん
B蕎麦を食べる>>843

満腹になった>>843Bが最初にすべきは、@の処理かAの処理か

845 名前:login:Penguin mailto:sage [2008/12/21(日) 18:36:36 ID:6RSqLOEI]
>>844
「ご馳走様でした」と言いながら金を払わないで蓋も開けっ放しで逃げる。



846 名前:login:Penguin mailto:sage [2008/12/21(日) 19:17:37 ID:otIiAnj0]
ダブルフォルト乙

847 名前:login:Penguin mailto:sage [2008/12/22(月) 03:52:28 ID:guo09gfy]
(1)はおばさんのスピードに勝てないと判断して、(2)のおばさんに話し掛けるよな
もうお腹いっぱいって

848 名前:login:Penguin [2009/01/24(土) 00:42:09 ID:UJ+xFTUa]
a



849 名前:login:Penguin mailto:sage [2009/02/17(火) 22:55:17 ID:m2mCukTw]
ポートIOするサンプルを作ってみようと思ったのですが、
下のコードの時点で、すでにコンパイルが通りません。
sys_ioplを呼ぶのに、何が足りないのか分からないです。
どうしたら良いか、アドバイス頂けたら助かります。
よろしくお願いします。

debian 2.6.24 gcc 4.1.2

make -C /lib/modules/2.6.24/build M=/test module
error: implicit declartion of function 'sys_iopl'
---
#include <linux/init.h>
#include <linux/module.h>
#include <linux/io.h>
#include <linux/ioport.h>

static int __init
hello_init(void){
sys_iopl(3);
return;
}

static void __exit
hello_exit(void){
return;
}

module_init(hello_init);
module_exit(hello_exit);


850 名前:login:Penguin [2009/02/17(火) 22:55:48 ID:m2mCukTw]
すみません、sageてしまいました。

851 名前:login:Penguin mailto:sage [2009/02/18(水) 00:04:19 ID:lQ8CDN9P]
根本的に間違っているような気がするので、
もう少し具体的にやりたいことを書いた方がいいと思う。

取り合えずドライバでioplはいらねえ。


852 名前:login:Penguin mailto:sage [2009/02/18(水) 01:04:31 ID:WJ6360yx]
>>851
もしかして、ドライバ内では、ポートにアクセスするのに、iopl自体が使えないということでしょうか?
そうすると、request_regionしていくしかないということですかね。
それとも、アクセス許可自体が必要ないのでしょうか。


元々、独自PCI-I/Fボードにアクセスするアプリがありまして、
それの、ドライバ版を作ろうと思いました。
そのアプリでは、iopl(3)→outb(),inb()にて値を取得していたので、同じ様に作っていたところでした。
PCIからのポートアドレス取得が上手くでき、そのアドレスにアクセスする段階だったのですが、
ioplでどうしてもコンパイルが通らず、includeの問題なのか、Makefileなのか、
途方に暮れてました。>>849はそのテストプログラムを抜き出しです。


853 名前:login:Penguin mailto:sage [2009/02/18(水) 01:38:21 ID:lQ8CDN9P]
なんでドライバにする必要があるのかよくわからんが。
そういうレベルでわからんのであれば、まずは馬本で基礎知識を
身につけた方がいいと思う。

ついでに、sys_ioplの呼び方はそうじゃない。
つうかカーネルの中でsys_〜は直接呼ぶもんじゃない。


854 名前:login:Penguin mailto:sage [2009/02/18(水) 12:48:39 ID:WJ6360yx]
>>853
ありがとうございます。
ドライバ版の意図は、いずれ割り込みを使うつもりだったからです。
馬本は十分理解できなかったので、とりあえず作ってみるという感じでやってました。
sys_ioplは呼んではいけないんですね。
馬本、もう一度読んでみます。

855 名前:login:Penguin mailto:sage [2009/02/18(水) 16:25:38 ID:zpaCJvuo]
馬本はカーネルの知識がある程度ある前提で書かれてるので
まずはLinuxカーネルに関する文献を読んでみることをおすすめするよ

デバイスドライバはカーネルの一部でもあることを忘れるな

856 名前:login:Penguin mailto:sage [2009/05/29(金) 14:40:20 ID:D/EXOrYt]
Kernel 内で IN/OUT アセンブラ命令に相当するのは
何かマクロがあるんじゃなかったっけ?

READ_PORT とかそんなの。


857 名前:login:Penguin mailto:sage [2009/05/29(金) 23:00:18 ID:A6oE+oT8]
in[bwl]
out[bwl]
とか。
include/asm/io.hに入ってたはず。


858 名前:login:Penguin mailto:sage [2009/07/04(土) 14:39:23 ID:D5yvn6Kc]
シリアルドライバ内の情報で、何バイト受信済みとか、何バイト未送信という情報って
取得することは可能ですか?



859 名前:858 mailto:sage [2009/07/04(土) 16:35:43 ID:D5yvn6Kc]
補足です。
上記の情報をアプリケーションから取得できますか?

860 名前:login:Penguin mailto:sage [2009/07/05(日) 02:17:52 ID:vnzKXmwE]
>>859
ioctlでTIOCINQとかTIOCOUTQみれば出来そう。
つーかマニュアル嫁よ。せっかくあるんだからよ。

861 名前:login:Penguin mailto:sage [2009/07/05(日) 14:39:25 ID:jkHVDhT6]
ヌルイぞ。そこは

 つーかソース嫁よ。せっかるあるんだからよ。

だろ。ソース以上の資料なんかないんだからOSSってのは質問禁止なんだよ。

・・・ってえらいひとがいってました!

862 名前:login:Penguin mailto:sage [2009/07/05(日) 23:11:19 ID:vnzKXmwE]
>>861
その偉い人は馬鹿だよ

863 名前:login:Penguin mailto:sage [2009/07/05(日) 23:20:49 ID:xNWd+cLB]
どこでも、えらい人は馬鹿なもんさ。

864 名前:login:Penguin [2009/09/19(土) 20:24:56 ID:I29pddJ7]
保守上げ

865 名前:login:Penguin mailto:sage [2009/10/12(月) 16:24:20 ID:cJbteqq9]
>>861

× だろ。ソース以上の資料なんかないんだからOSSってのは質問禁止なんだよ。

○ だろ。ソース以外の資料なんかないんだからOSSってのは質問禁止なんだよ。

866 名前:login:Penguin mailto:sage [2009/12/03(木) 22:11:10 ID:s69LcKJk]
i386BSDカーネルの386BSDカーネルソースコードの秘密
ソース以上の資料なんかないんだから、に対して何か書いてあったな。

867 名前:login:Penguin mailto:sage [2009/12/03(木) 23:11:02 ID:LYVup2we]
>>866
ソースそのものと、ソースにこめられた趣旨は別じゃないかな?

868 名前:login:Penguin mailto:sage [2009/12/10(木) 00:21:58 ID:XvjOUXRH]
UTSL だな。




869 名前:login:Penguin [2010/02/18(木) 10:40:00 ID:hWc/MwlX]
linuxmintとウィンドウズ7RCを使っています。WIN7は試用なので来月から起動後一時間で自動で電源が落ちるようです。
リナックスに乗り換えるのは簡単なのですが、今使ってるテレビチューナーのドライバがリナックスには無いのです。
だれかmvp-rx3のドライバを書いてください。
このままではリナックスでテレビが見られず、リナックスをあきらめてウィンドウズのところにお嫁にイかされてしまいます。
テレビを見るためにはリナックスをお慕いもうしあげていますのにウィンドウズを買わなければならない境遇に
どうかどうか同情をしていただけるスーパーハッカーの方はドライバ書いてくださいませんか。
生きていくためには愛をもあきらめゲイツに身をゆだねなければならないのかと震えております。
ちなみにあたし女子中学生です。生娘です。似ている芸能人は17歳のころの広末涼子です。

870 名前:login:Penguin mailto:sage [2010/02/18(木) 19:21:20 ID:tk+7V5La]
>>869
GV-MVP/RX3
www.iodata.jp/product/tv/analog/gv-mvprx3/

mvp-rx3はアナログTVキャプチャーボードですね。
2011年7月にアナログテレビ放送が終了するので
どのみち地上デジタルテレビチューナーが必要になります。
Windows7を買う金でPT2を買ってLinuxで使う方がよいと思います。
PT2なら地デジでもコピーワンスによる不便から逃れられます。

日経Linux 2010年2月号
itpro.nikkeibp.co.jp/article/MAG/20100105/342880/
> 特集2
> PT2で地デジ録画システムを作る
> パソコンで地上デジタル放送や衛星放送を受信できる
> デジタル・チューナ「PT2」を使ってシステムを作ります。
> 最新のLinuxディストリビューションのFedora 12とUbuntu 9.10で
> PT2のドライバをインストールし,高画質のテレビ番組を見てみましょう。
> 番組表から録画予約する方法も紹介します。

【視聴】Linuxでデジタル放送【録画】
pc11.2ch.net/test/read.cgi/linux/1230616112/






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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