ディバイスドライバを ..
[2ch|▼Menu]
508:login:Penguin
06/03/32 02:19:11 9G03KeUN
また別の人が適当に書いてみる。
hugemem使ってみては?

509:login:Penguin
06/03/32 10:42:43 afhcBPMx
hugememってi386じゃなかったっけ?

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

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

510:login:Penguin
06/03/32 10:47:55 shKEnT0S
似たようなドライバの中身を調べてみればすぐわかりそうなものだが

511:login:Penguin
06/03/32 15:12:47 afhcBPMx
>>510
俺もそう思って、見たけどわからなかったw

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

512:login:Penguin
06/03/32 16:46:33 p6EHT8/a
うぉレスが増えてる。

>>508
hugemem は、>>509 が指摘の通り、x86_64では無いですね。
ただこのドライバは、一つのソースでRedhat ES4の 32bit Uni-processer/
SMP/hugemem kernelとx86-64 kernelの4種類サポートでして、実装メモリ
12GBのマシンでhugememカーネル使ってる分にはアドレスは正常な値が
返って来てます。
hugemem kernelとx86-64 kernelではDMAアドレスは64bit幅で来るのでこ
の二つのカーネルの時は処理(アドレス計算とか)は共通にしてます。

>>509
正にそうです。scatterlistに入ってるpageが明後日の所を指し示してるので、
そのままSCSIカードに送るとカード上のIOPのファームがアクセスに行くとメ
モリが無いのでメモリアクセスエラーを検出します。

>>510
SCSIカードと言うか実はRAIDコントローラでして、カード上にPCI-PCIブリッ
ジが乗っかっててIOPとSCSIコントローラが載ってるカードです。
カード−ドライバ間はI2Oで通信してて、近い奴としてはmagariadとかqla1280
当たりなんですよね。他にも色々見てるんですが違いはそうは無い感じ。

>>511
bioはいまいち良く分からないですね。
ページ確保の時のDMA/DMA32て、GFP_DMA/GFP_DMA32フラグの事でし
ょうか?
今使ってるカーネルをみるとGFP_DMA32が未定義でして、kernl-2.6.14とか
2.6.15とか見ると定義されてるんですよね。
なんかその辺も絡んでるのかなと気にはなってはいました。

皆さんアドバイスありがとうです。
もう少しカーネルソース見て来ます。

513:login:Penguin
06/04/04 08:20:23 0xn4pI8o
気になるから、どうなったか知りたいです。

514:login:Penguin
06/04/04 13:11:55 p7vmOtaT
>>504
sched_setaffinity(2)


515:login:Penguin
06/04/06 22:28:49 Mnqgo3eJ
>>513

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


516:505
06/04/08 14:24:03 +mDmSXuo
原因わかりました。
結論から言うと、pci_map_sg()で作られるSGリストのアドレスは正常でした。
問題なのはpci_map_single()で出てくるアドレスが、低位メモリだとカーネル
論理アドレスを返し、高位メモリだとカーネル仮想アドレスを返してるのが、
原因でした。

高位メモリだとページをダイナミックに確保されるため、物理アドレスとペー
ジが1:1でマッピングされないので、pci_map_single()だとvirt_to_physしてる
だけなので使えませんね。

なのでpci_map_pageで確保してやれば問題は消えました。

SGリストに変なアドレスが入ると言ってましたが、カードのファーム側で受
け取ったリストを見てたのですが、カード内でドライバから受けた転送アドレ
スをカード内部のバッファに結びつける為にファームが独自にSGリストを
再構成しており、そのリストがpci_map_sg()で作られた物と勘違いしてまし
た。OTL

色々アドバイスありがとうございました。


517:login:Penguin
06/04/08 16:09:33 MBAxFSYD
>>516
解決おめでとうございます。
一般的に使えそうなものならまたどこかで公開してくださいな。

518:login:Penguin
06/04/10 22:36:55 C69QC/MM
>>516
よかったよかった。
私もソース読んで少し勉強になったよ。
ネットワーク系しかいじったこと無かったから。

519:505
06/04/10 23:00:56 9eFrvNz6
>>517 >>518

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

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

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

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

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

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

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

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


523:login:Penguin
06/04/11 00:57:41 9nKANwAS
そこでmain treeにマージですよ。
main tree内の変更はたいていは面倒をみてくれる。

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

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

526:login:Penguin
06/05/26 20:11:11 YiUMorw/
URLリンク(lkml.org)


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

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

528:login:Penguin
06/08/20 11:29:13 EWXtKjUy
>>527
kernel_thread
daemonize


529:login:Penguin
06/08/20 20:55:18 bg2sTV9e
というか、普通に載ってるよね

530:login:Penguin
06/08/24 12:55:11 6WITQjoc
そいや、最近のノートPCには指紋センサーがあるけど

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

531:login:Penguin
06/08/24 13:34:05 wKY4BjAS
>>530
OSM 8月号に記事載ってたよ。
URLリンク(shop.sbcr.jp)

532:login:Penguin
06/08/25 00:34:04 CPHGcnDi
>>531 せんきゅー!

533:login:Penguin
06/08/26 07:37:08 F4NpQAPn
>>529
すみません。ページご存知でしたら教えてください。
第3版持ってます。


534:login:Penguin
06/10/04 21:49:48 EGTQjLn1
すみません、どなたかわかる方教えてください。

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

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

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

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

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

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




536:login:Penguin
06/11/05 18:18:15 j6ZWju7f
>>534
グラフィックチップのモード設定を間違えている予感

537:login:Penguin
06/12/14 22:35:16 JyAlagq8
すみません どなたか助けて下さる方はいらっしゃらないでしょうか?
当方PCIデバイスのドライバをLinuxデバイスドライバ読みながら
作成しております。

今DMAを用いてread,writeさせようと思っているのですが、
うまく転送ができておりません。
DMA転送の関数としては

dma_buff = kmalloc( count, GFP_KERNEL | __GFP_DMA)
  bus_addr = pci_map_single( pci_dev, dma_buff, count,
direction );

flags = claim_dma_lock();
disable_dma(channel);
clear_dma_ff(channel);
set_dma_mode(channel, mode);
set_dma_addr(channel, bus_addr);
set_dma_count(channel, count);
enable_dma(channel);
release_dma_lock(flags);
てな感じです。
get_dma_residueで転送できてるかどうかみてるのですが
まったく転送されてないみたいです。
DMAコントローラのレジスタの設定とかは
ほかに何かいるのでしょうか。
ちなみにターゲットのPCはPen3 800MHZ
チップセットは815です。
どなたかお知りの方いらっしゃったら お願いします。


538:login:Penguin
06/12/15 11:02:30 Qc0JIFW5
>>537
見ているものがまったく違っているような気がしますが。
PCIでbus master転送したいんじゃないの?


539:537
06/12/15 15:20:46 NJleqqJR
おお、早速のレスありがとうございます。

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

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

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

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


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

543:login:Penguin
06/12/17 19:50:10 pl1Ns6BC
チップのレジスタ仕様と、制御のシーケンスがわからないとドライバは書けないよ。

544:login:Penguin
06/12/17 20:36:37 6E+xGodr
>>542
当然聞くべきなのですよ

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

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

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

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

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

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

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


549:login:Penguin
06/12/19 23:53:27 g20RCuxU
>>537
URLリンク(www.oreilly.co.jp)


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

551:login:Penguin
06/12/27 10:51:31 mQ5aQPBa
>>550
とりあえずそのふざけた石を投げ捨てれ。

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



552:login:Penguin
06/12/27 12:43:43 krfJbXj5
投げ捨てぇー…れないorz

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

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

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

554:login:Penguin
06/12/28 12:33:40 vc2Jrznf
>>553
MMUの面倒は誰が見るですか?

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


555:login:Penguin
06/12/29 09:28:41 JbqPlaTm
>>553
アドバイスありがとうございます。
ちょっと恐いですが、検討してみます。

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

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

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

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

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


558:login:Penguin
07/01/01 22:05:23 uXbHjsPd
明けましておめでとうございます。

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

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

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

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

560:login:Penguin
07/01/19 02:15:30 VcfRHkiI
>>559
mount -o remount,ro /
とかやって、書き込み不可にしてから遊べばよくね?

561:login:Penguin
07/01/19 08:04:16 /YcMJPuk
/etc/fstabの6番目のフィールドの値を0にする。man fstabしてみそ。
tune2fsで-c 0とかもしておいたほうがいいかも。


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

>>561
やってみました

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

563:login:Penguin
07/01/20 19:48:34 3aq4dRUa
>>562
/だけ守ればいいので、なりません。

564:login:Penguin
07/01/21 01:23:20 QaYT7DDq
>>563
ああそうか、swapファイルはswapパーティションですもんね
ありがとうございます

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


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

567:login:Penguin
07/02/05 06:26:04 9i1Bwf6u
Wikipedia項目リンクには
現在のカーネルではモジュールをカーネルの構築状態に依存する事なく追加できると
書いてあるけど、カーネル側でインターフェースが変更になった場合は旧ドライバは
使用できなくなるんじゃないの?それとも、カーネル側で旧インターフェースが温存されるの?
あと、「カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある」
Linuxはどのバージョンまでなの?

568:login:Penguin
07/02/05 06:56:37 Zi/ATtvA
>>566
いまはそんなことしなくていいよ
insmod rmmodで動的にドライバを挿入したり削除したりできる

569:login:Penguin
07/02/06 01:26:43 j3mwrUGC
いやぁソースはいるだろ。

570:login:Penguin
07/02/06 08:59:25 jQKQh5/W
ソースはいるけどカーネルのリビルドはいらない

571:login:Penguin
07/02/06 10:27:34 Rm04tDsq
いやぁリビルドは途中までいるだろ。

572:login:Penguin
07/02/10 16:03:43 XWBlzb1u
初歩的な質問ですがよろしいでしょうか

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

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

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

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

ソースコード
URLリンク(sakuratan.ddo.jp)

エラーメッセージ
URLリンク(sakuratan.ddo.jp)

573:login:Penguin
07/02/10 17:14:52 d+hexa9D
>>572
普通はMakefile書くわな


574:login:Penguin
07/02/10 17:47:20 a+8l3AD+
Makefileに
obj-m += module.o
って書いて
make -C /usr/src/linux M=$PWD modules

575:login:Penguin
07/02/10 19:18:09 XWBlzb1u
>>543

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

>>574

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

感謝感謝


576:542
07/02/10 19:55:09 XWBlzb1u
.koってファイルが出てきたらからinsmodにかけてみたら
insmod: error inserting 'module.ko': -1 Invalid module format

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

577:542
07/02/10 20:03:22 XWBlzb1u
今までsage忘れてたごめん

578:login:Penguin
07/02/10 20:06:01 791EznrY
話題提供時はage、その後はsage
ってのが一番角が立たない。

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

579:login:Penguin
07/02/10 20:14:38 a+8l3AD+
/usr/src/linux が今動いてるカーネルソースじゃないとか

580:542
07/02/10 21:33:23 XWBlzb1u
>>579

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

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



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


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

583:login:Penguin
07/02/19 11:19:53 I/jMKPR3
strftime

584:login:Penguin
07/02/19 13:52:20 QHwPPpDN
>>583
いや、デバイスドライバ内でなんだけど、あったっけ? いや、ない。

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

586:login:Penguin
07/02/22 01:34:45 I6i5DnCh
そのカーネル側のABI決めようぜ話はLinusに一蹴されてるんじゃなかったけ?


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

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

589:login:Penguin
07/02/22 22:34:24 I6i5DnCh
つ NDISwrapper


590:login:Penguin
07/02/23 00:44:11 cxn/yRhr
つcapative ntfs

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

使ってるのはfedora6

592:login:Penguin
07/04/03 00:24:35 3ycIJVku
yum install kernel-devel
してもダメだな。何が足りない?

593:login:Penguin
07/04/03 00:41:11 xSB1c0Df
>>591
カーネルソースそのものじゃね?

594:login:Penguin
07/04/03 01:00:14 3ycIJVku
>>593
あ、カーネルソースに有った。ありがとう。

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

595:login:Penguin
07/04/03 01:08:21 3ycIJVku
あと、
man printk
って出ないの?

596:login:Penguin
07/04/03 02:25:43 xSB1c0Df
>>595
出ないんじゃよ

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

598:login:Penguin
07/04/04 00:07:01 NkZt7NAi
/usr/include/linux に入ってないか?鳥にもよるけど。


599:login:Penguin
07/04/04 00:15:23 wyW6RdvI
カーネル用ヘッダと、ユーザプログラム用ヘッダがまざると、何でとまずいだろ。

600:login:Penguin
07/04/04 00:23:08 ICf0Aql0
爆発しても知りません。

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

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

602:login:Penguin
07/04/08 00:07:55 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
07/04/08 00:09:38 2aPQfsMY
脳?

604:login:Penguin
07/04/08 00:10:46 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
07/04/08 00:11:42 2aPQfsMY
じゃ、頭?

606:login:Penguin
07/04/08 00:12:08 gmHS+Fdj
NGID ID:2aPQfsMY

607:login:Penguin
07/04/08 00:15:19 2aPQfsMY
マジレスすると、読み込むヘッダーファイルが足りないんだよ。

608:602
07/04/08 00:19:06 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
07/04/08 00:20:46 2aPQfsMY
BITS_PER_LONGを定義しているファイルをさがすことだね。

610:login:Penguin
07/04/08 00:29:38 nSKp4d9I
なんだこのキチガイ

611:login:Penguin
07/04/08 00:31:56 2aPQfsMY
また、きちがいあつかいですか?

612:login:Penguin
07/04/08 00:36:41 nSKp4d9I
ほう「また」なんだ

613:login:Penguin
07/04/08 00:37:31 2aPQfsMY
で?

614:login:Penguin
07/04/08 00:46:02 nSKp4d9I
あらら

615:login:Penguin
07/04/08 00:48:10 2aPQfsMY
なにがあららなの?

616:login:Penguin
07/04/08 00:49:12 nSKp4d9I
脳?

617:login:Penguin
07/04/08 00:49:55 2aPQfsMY
それはお互い様だろ?

618:login:Penguin
07/04/08 00:51:34 nSKp4d9I
俺はその質問者じゃないんだけどねえ

619:login:Penguin
07/04/08 00:56:35 2aPQfsMY
お友達?

620:602
07/04/08 00:58:54 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
07/04/08 01:03:19 z/motjJL
>>620
ヒント:>>17のかかれた日付に注目。


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

623:login:Penguin
07/04/08 01:12:30 2aPQfsMY
linux/compiler.hかな?

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

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

625:login:Penguin
07/04/08 02:24:54 z/motjJL
>>624
2.6 kernel hello world
でぐぐればすぐ出てくるぞ。

626:login:Penguin
07/04/08 02:28:17 gmHS+Fdj
>>625
なかなか無いよ。たとえばどこ?
すぐ出てきたなら、ここに貼って。

627:login:Penguin
07/04/08 02:34:41 n+CzrFXh
#include <linux/init.h>
がいるみたいね

628:login:Penguin
07/04/08 02:41:10 gmHS+Fdj
Makefileの書き方も変わってるみたいだね。

URLリンク(uguisu.skr.jp)
のやり方でうまくいった。

629:login:Penguin
07/04/08 03:09:43 z/motjJL
こことかな。
URLリンク(www.si-linux.co.jp)

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

631:login:Penguin
07/04/12 02:34:41 HoyZz9hB
>>626
自分はこれが良かった。
URLリンク(www.freesoftwaremagazine.com)

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

633:login:Penguin
07/04/17 02:52:55 IoB9zeVk
試してみろ!!
callした瞬間ぼくの丸太のような足蹴りが君の股間をつぶす
それでもいいのなら!

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

635:login:Penguin
07/04/27 06:02:05 DTYmU0pC
URLリンク(www.linux.or.jp)

636:login:Penguin
07/04/27 06:03:05 DTYmU0pC
URLリンク(www.linux.or.jp)

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

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

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


639:login:Penguin
07/04/27 10:46:58 cjUqO3s+
>>638
つ 馬本

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




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

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

641:login:Penguin
07/04/27 21:40:17 67IsA5dw
痛い人現る

642:login:Penguin
07/04/27 23:10:53 EZ45sIxG
cr3レジスタからたどれば

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

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

644:login:Penguin
07/04/28 04:22:35 +D3gS6jR
カーネル書き直せば?w

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

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


646:login:Penguin
07/04/28 07:47:13 dRSGn50m
カーネルからだとページテーブルがページアウトしている可能性もあるから
めんどくさい

647:login:Penguin
07/04/28 08:04:23 oKLKreO7
ページアウトはしていないと仮定していいよ。それなら簡単?

648:login:Penguin
07/04/28 11:40:13 Fr2ol1ef
ザワザワ…
ザワザワ…


649:login:Penguin
07/04/28 23:24:32 ZU2q9XRX
>>639
URLリンク(d.hatena.ne.jp)

650:login:Penguin
07/04/28 23:42:14 o6o1fGCI
馬の多さにワロタ

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

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

652:login:Penguin
07/05/04 00:08:49 9yQs8D1Y
>>651
なんだかんだいっても、一度全体コンパイルしておくのが一番早い。

653:login:Penguin
07/05/04 00:18:46 yYLKnQ2E
>>652
thx.でも、

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

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

654:login:Penguin
07/05/04 00:23:00 gFGVYRPM
やっぱりCPU速くするのが一番

655:login:Penguin
07/05/04 00:24:14 yYLKnQ2E
そこをなんとか。

656:login:Penguin
07/05/04 00:35:21 n4WASQRt
>>653
2.6だったらトップディレクトリから

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

とか出来る。


657:login:Penguin
07/05/04 00:38:41 yYLKnQ2E
できました。ありがとうございました。

658:login:Penguin
07/05/04 01:24:26 ulT/mofy
>>576
カーネルをコンパイルしたgccでモジュールをコンパイルしないとinsmod時にそのエラーが出るよ。

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


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

661:login:Penguin
07/05/26 16:19:33 olOYm4ED
>>660
それで短くなるの? ならないと思うけど。

662:login:Penguin
07/05/26 23:30:58 XoKsvVbX
>>661
あれ?なんかぜんぜん違う話へのレスになってる…。
スマソ、なんか誤爆っぽい…orz

663:login:Penguin
07/06/03 15:06:38 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
07/06/03 15:14:36 1QJRDZ5d
>>663
ドライバで浮動小数点の計算はしない方がいいと思う。

665:login:Penguin
07/06/03 15:35:59 W8zh9WHI
proc_fs で表示するために使いたいのですが,駄目なんでしょうか...?

666:login:Penguin
07/06/03 16:53:58 KH63vIBs
浮動小数点演算はFPUを使う可能性があるから
カーネルモードでは可能な限り避けるべき

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

667:login:Penguin
07/06/03 23:23:42 /hAY1VOO
「速度的な利点」って何に対する何の利点?

668:login:Penguin
07/06/03 23:31:28 5NVvB11p
きっと >>666 の CPU は浮動小数点演算を使うと割り込み禁止になるんだろう

669:login:Penguin
07/06/04 00:46:42 CXn8XPVL
nVidiaのドライバの解析って3年ぐらいまでやってる人間
いたけど今どうなってるの?

670:webmaster@気まぐれアナスイ
07/06/04 12:11:48 RaTjYNE+
!(-_Φ+){ ... }

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

URLリンク(acapulco.dyndns.org)

672:login:Penguin
07/06/05 10:49:22 qhZ8Q9LN
>>665
固定小数点じゃだめか?

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

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

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

673:login:Penguin
07/07/16 18:26:19 h1/eDBu5
はck

674:login:Penguin
07/08/06 00:29:52 E6mK6Nbx
ドライバ書くときってCPUの事は知っておいた方がいいのでしょうか?

675:login:Penguin
07/08/06 01:55:04 Taq1zrH7
どうでもいいよ
タマゴがどっち向きかだけ知っとけば

676:login:Penguin
07/08/28 23:24:19 aUO2fWSH
あげ

677:login:Penguin
07/08/29 01:23:49 bmM5qB+B
>>675
俺はとんがったほうから食べるのが好きだ。

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

679:login:Penguin
07/08/30 12:40:15 pmmgZB5J
そんな両刀使いがいたのか
具体的にはドレ?

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

681:login:Penguin
07/08/31 01:04:08 //apeG96
まあそうはいっても日常的にミックスは体験してるよな
通信プロトコルは大体ビッグだからな

682:login:Penguin
07/08/31 07:07:24 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
07/08/31 07:12:11 Bq5CxAt1
>>682
シリアル通信の基本を誰かに教えてもらったら...

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

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


685:login:Penguin
07/09/12 11:40:08 W+jFMZNC
初歩的な質問で、すみません

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

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

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

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

686:685
07/09/12 11:47:03 W+jFMZNC
コピペでは無理だったので、ロダに上げしました
URLリンク(sakuratan.ddo.jp)

687:login:Penguin
07/09/12 12:38:12 b4ZSgzLd
>>685
ハードウエアを接続したとき、dmesgにはなんて出てくる?

688:685
07/09/12 13:23:18 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
07/09/12 13:41:02 Eo9vQi0w
>>688
フックできないような感じだけど?

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

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

691:login:Penguin
07/09/13 12:25:45 oMFp/NB1
ドライバの開発って難しいでしょうか?

692:login:Penguin
07/09/13 21:34:22 dbMVSAQN
そのような質問をする方には難しいです。

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

694:login:Penguin
07/10/03 08:13:37 WhUHfKUP
あげ

695:login:Penguin
07/10/07 18:44:44 wad8eg6i
UIO:ユーザー空間でデバイスドライバ作成が可能に
URLリンク(www.atmarkit.co.jp)

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

697:login:Penguin
07/10/08 12:48:08 Y0LW8BuC
そんな事言ってる位なら、馬本のドライバソース見ればいいじゃん。ダウンロードできるよ

698:login:Penguin
07/10/09 08:54:41 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
07/10/09 12:16:03 BjHL69v3
>>697-697
レスありがとうございます。

700:login:Penguin
07/10/18 23:39:59 YYamJxiT
複数のデバイス間でデータをバイパス
したいのですがサンプルないですか?

701:login:Penguin
07/10/19 14:04:12 CYTWECsc
いくらなんでも漠然としすぎだろw

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

703:login:Penguin
07/10/20 04:41:50 izm7N8bV
1ポートのNICが複数枚ある場合と大差はない。


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

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

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


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5366日前に更新/265 KB
担当:undef