探検


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

■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
垢版 |
02/01/31 01:14ID:t3s191ys
ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
653login:Penguin
垢版 |
2007/05/04(金) 00:18:46ID:yYLKnQ2E
>>652
thx.でも、

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

わたしのへぼマシンだと。
2007/05/04(金) 00:23:00ID:gFGVYRPM
やっぱりCPU速くするのが一番
2007/05/04(金) 00:24:14ID:yYLKnQ2E
そこをなんとか。
2007/05/04(金) 00:35:21ID:n4WASQRt
>>653
2.6だったらトップディレクトリから

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

とか出来る。
2007/05/04(金) 00:38:41ID:yYLKnQ2E
できました。ありがとうございました。
2007/05/04(金) 01:24:26ID:ulT/mofy
>>576
カーネルをコンパイルしたgccでモジュールをコンパイルしないとinsmod時にそのエラーが出るよ。
2007/05/13(日) 23:53:14ID:EYFP+J0v
質問です。
>>620さんと同じ状況です。
ただ>>628>>629の方法を試したのですが
解決しませんでした。
いまだに>>620さんが書かれてるエラーがでてしまいます。
考えられる原因はありますでしょうか?
ubuntu 7.04、gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
を使っています。
2007/05/26(土) 11:11:39ID:XoKsvVbX
>>15
IPLで使いたい分のメモリを確保すればいいって聞いたことがある。
カーネルのブートパラメータでから使いたい分を引く感じ。
2007/05/26(土) 16:19:33ID:olOYm4ED
>>660
それで短くなるの? ならないと思うけど。
2007/05/26(土) 23:30:58ID:XoKsvVbX
>>661
あれ?なんかぜんぜん違う話へのレスになってる…。
スマソ、なんか誤爆っぽい…orz
663login:Penguin
垢版 |
2007/06/03(日) 15:06:38ID: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
2007/06/03(日) 15:14:36ID:1QJRDZ5d
>>663
ドライバで浮動小数点の計算はしない方がいいと思う。
2007/06/03(日) 15:35:59ID:W8zh9WHI
proc_fs で表示するために使いたいのですが,駄目なんでしょうか...?
2007/06/03(日) 16:53:58ID:KH63vIBs
浮動小数点演算はFPUを使う可能性があるから
カーネルモードでは可能な限り避けるべき

きちんと対応すれば使えないことはないけど、
速度的な利点はほとんどなくなる
2007/06/03(日) 23:23:42ID:/hAY1VOO
「速度的な利点」って何に対する何の利点?
2007/06/03(日) 23:31:28ID:5NVvB11p
きっと >>666 の CPU は浮動小数点演算を使うと割り込み禁止になるんだろう
2007/06/04(月) 00:46:42ID:CXn8XPVL
nVidiaのドライバの解析って3年ぐらいまでやってる人間
いたけど今どうなってるの?
2007/06/04(月) 12:11:48ID:RaTjYNE+
!(-_Φ+){ ... }
671663
垢版 |
2007/06/05(火) 02:17:22ID:aHzmfEHS
とりあえず固定小数点もどきをつかって回避して,こんなのできました.
お時間があれば添削などしていただけると嬉しいです.

http://acapulco.dyndns.org/usbrh/
2007/06/05(火) 10:49:22ID:qhZ8Q9LN
>>665
固定小数点じゃだめか?

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

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

みたいな感じ
負値だと剰余の扱いがちょっと面倒になる
673login:Penguin
垢版 |
2007/07/16(月) 18:26:19ID:h1/eDBu5
はck
674login:Penguin
垢版 |
2007/08/06(月) 00:29:52ID:E6mK6Nbx
ドライバ書くときってCPUの事は知っておいた方がいいのでしょうか?
2007/08/06(月) 01:55:04ID:Taq1zrH7
どうでもいいよ
タマゴがどっち向きかだけ知っとけば
676login:Penguin
垢版 |
2007/08/28(火) 23:24:19ID:aUO2fWSH
あげ
2007/08/29(水) 01:23:49ID:bmM5qB+B
>>675
俺はとんがったほうから食べるのが好きだ。
2007/08/29(水) 23:50:22ID:E1JDVS03
どちらから割るのが正しいかが問題だ。大きいほうか、尖った方か。
16bit時代以降、中には大きい方から割って、尖った方から食べるという
両刀使いが出てきてさらにややこしくなった。
2007/08/30(木) 12:40:15ID:pmmgZB5J
そんな両刀使いがいたのか
具体的にはドレ?
2007/08/31(金) 00:43:34ID:pR6eg2ir
NUXIとかmixed endianでggr。1234じゃなくて2143並びになったりするらしい。
実は漏れも知らなかったが、最近でも某腕プロセッサはデータ型によってはまさにミックスになるそうな。
2007/08/31(金) 01:04:08ID://apeG96
まあそうはいっても日常的にミックスは体験してるよな
通信プロトコルは大体ビッグだからな
682login:Penguin
垢版 |
2007/08/31(金) 07:07:24ID: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);
2007/08/31(金) 07:12:11ID:Bq5CxAt1
>>682
シリアル通信の基本を誰かに教えてもらったら...
2007/08/31(金) 14:54:06ID:bz+r4Vre
>>682
ドライバを組むのなら、ターゲットの仕様をきちんとおさえるのが基本。
uart程度の解説なら本屋にいくらでもあるし、ググればいくらでも情報
が手に入る。

その程度の情報収集ができないなら、ドライバ開発は諦めたほうが良い。
685login:Penguin
垢版 |
2007/09/12(水) 11:40:08ID:W+jFMZNC
初歩的な質問で、すみません

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

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

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

文字数制限の問題で、ソースは>>686に貼らせていただきます
686685
垢版 |
2007/09/12(水) 11:47:03ID:W+jFMZNC
コピペでは無理だったので、ロダに上げしました
http://sakuratan.ddo.jp/uploader/source/date51655.c
2007/09/12(水) 12:38:12ID:b4ZSgzLd
>>685
ハードウエアを接続したとき、dmesgにはなんて出てくる?
688685
垢版 |
2007/09/12(水) 13:23:18ID: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
2007/09/12(水) 13:41:02ID:Eo9vQi0w
>>688
フックできないような感じだけど?
2007/09/12(水) 14:04:06ID:gJXCaswd
usb_device_id の .driver_info だけ定義するとすべてのデバイスにマッチするらしい(馬本参照)ので
デバッグ用にやってみるのがいいかも

> このドライバ以外のUSBマウスドライバがあると、駄目なのでしょうか
たぶんそう
691login:Penguin
垢版 |
2007/09/13(木) 12:25:45ID:oMFp/NB1
ドライバの開発って難しいでしょうか?
2007/09/13(木) 21:34:22ID:dbMVSAQN
そのような質問をする方には難しいです。
2007/09/14(金) 03:35:04ID:bpVkKQxn
>>685
むかしは定義に合致するドライバが呼ばれたが最近は1つ合致するやつが
あると、それ以上呼ばないようになってたと思う
HIDドライバが先にとっちゃうんでしょう。.configで無効にしてやってみそ
694login:Penguin
垢版 |
2007/10/03(水) 08:13:37ID:WhUHfKUP
あげ
2007/10/07(日) 18:44:44ID:wad8eg6i
UIO:ユーザー空間でデバイスドライバ作成が可能に
http://www.atmarkit.co.jp/flinux/rensai/watch2007/watch09a.html
696login:Penguin
垢版 |
2007/10/08(月) 12:39:42ID:v1nGyoTL
馬本でデバドラを勉強しています。
カーネルのソースでドライバやったことがない人にも分かりやすいソースってどれですかね?
2007/10/08(月) 12:48:08ID:Y0LW8BuC
そんな事言ってる位なら、馬本のドライバソース見ればいいじゃん。ダウンロードできるよ
2007/10/09(火) 08:54:41ID:qhmHV8vi
>>696
何系のドライバかによるのでは>どれを見たらいいか。

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

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

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

が短かったり馴染みがあったりしてすんなり読めた。
699696
垢版 |
2007/10/09(火) 12:16:03ID:BjHL69v3
>>697-697
レスありがとうございます。
2007/10/18(木) 23:39:59ID:YYamJxiT
複数のデバイス間でデータをバイパス
したいのですがサンプルないですか?
2007/10/19(金) 14:04:12ID:CYTWECsc
いくらなんでも漠然としすぎだろw
2007/10/20(土) 01:03:15ID:jtNU9aYY
2ポートとか4ポート付きのNICって
モジュールはどのようにロードされるの?
またデータの共有とかRx,Txバッファの
管理とかどうなってるの?
2007/10/20(土) 04:41:50ID:izm7N8bV
1ポートのNICが複数枚ある場合と大差はない。
704login:Penguin
垢版 |
2007/10/21(日) 17:41:17ID:yGaxVLsH
>>701
各ポートにデバイス eth0, eth1 ... と付いて、このデバイスファイルごとに
設定が管理されるだけじゃね?
2007/10/21(日) 18:39:44ID:SCXCQ8PP
>>704
pciのデバイスとしては1つにしか見えないんだけどさ
どうやって、その後4ポート認識してるかわからないんだよね
2007/10/21(日) 19:36:55ID:f7YPzoUy
>>705
それはPCIブリッジが載ってるからじゃね?
LANチップはその向こうのローカルバスに4ケ載ってるかと。
707login:Penguin
垢版 |
2007/10/23(火) 20:59:15ID:pGCXISsZ
どなたかおしえてください。カーネルモジュールにバイナリコードを渡したい
のでrequest_firmware()を呼び出しているのですが、このrequest_firmware()
という関数から呼び出されるhotplugはどのディレクトリでバイナリコードを
検索してくれるのかわかりません。言ってみればバイナリコードをどのディレクトリ
におけばいいかがわかりません。ディストリビューションはfc6でカーネルは2.6.22です。

カーネルモジュールに対応するデバイスは無いので、sysfs上に仮想的なバスと
デバイス、ドライバを作ってあります。このデバイスのdevice構造体を使って
request_firmwareを呼んでいます。申し訳ありませんが、かなりまいってるので
お願いします。ご助力ください。
2007/10/23(火) 21:05:08ID:tiPDo332
>>707
Documentation/firmware_class/*
?
2007/10/23(火) 22:03:44ID:+D+WWc4l
BUFFALOのCD-RWドライブがまだ使えるのでハックしたいんですが、
必要な情報ってメーカーから提供されているんでしょうか?
2007/10/24(水) 15:38:46ID:8BiGN5WQ
ハゲシク板違い
2007/10/26(金) 18:00:12ID:OMFZLcsd
お馬さんの本読んで勉強してるのだが、さっぱり分からん。
ちなみに今3章のscullデバイス。

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

意見求む!!
2007/10/26(金) 18:53:10ID:OVakku/9
やる気の問題じゃね?
2007/10/26(金) 20:06:04ID:nlKsXgN2
>>711
「作ってみなきゃわかんない」 の典型かもしれん。
実際作業するとキャラクタデバイスは楽しい。

そして、ブロックデバイスに挑戦するときに
分けわかんなさをもう一度楽しめる
2007/10/27(土) 11:47:28ID:US/tv6oE
よくわかんないのが、他のドライバの叩き方なんだよな。

ネットワーク通信してファイルとかブロックデバイスにも書くような
ドライバが最終ゴールなんだけど、他のドライバのAPIってどうやって
叩くのか(どこがインタフェース界面なのか)と。
2007/10/27(土) 12:04:42ID:Y1miLqrF
OSの勉強やり直しっぽい
716login:Penguin
垢版 |
2007/10/27(土) 19:45:56ID:5LV4rb/o
>>714
それってkernelspaceじゃなくてuserspaceでやればいいのでは。
2007/10/27(土) 20:15:47ID:US/tv6oE
>>716
使う側からはファイルシステムに見せたいので、実際プロトタイプは
FUSE方式でやろうとしてます。でもそれだと簡単ではあるものの
二級市民みたいなので、kernelspaceでの正しいやり方を知りたいなと。

nfsとかcryptfsのコードを読むは読むにしても、どっかにそういう
各種ドライバを内部から使うための情報をとりまとめたものとかは
ないのかなと。
2007/10/27(土) 21:00:45ID:RlzxlVfH
>>717
とにかくなんでもいいから氏ねw
719711
垢版 |
2007/10/28(日) 02:49:08ID:W9zUZBn1
>>712
鋭いな。そうかもしんない。

>>713
なるほど、これは貴重な意見が聞けた。サンスコ!!
2007/10/28(日) 02:54:06ID:7ULWmmgi
>>717
ntfs-3g なんかはfuseだけど、実用的に動いているし、全然2級って感じしないけど。
721login:Penguin
垢版 |
2007/10/28(日) 23:36:04ID:jy3FHf6c
馬本にOSの仕組みを知ってる必要があると書いてありましたが、
どんなことを知っていたほうがいいのでしょうか?
2007/10/28(日) 23:41:48ID:1vAj4w/k
メモリ管理・特権・スケジューリング・ファイルシステム(ry…全部じゃん
723login:Penguin
垢版 |
2007/10/28(日) 23:45:24ID:jy3FHf6c
>>722
ありがとうございます。
詳解Linuxカーネルも読みます。
2007/10/29(月) 00:42:23ID:uCaYz1aO
>>723
知りたくなったときに読めばいいよ
でも必ず買っとけ
2007/10/29(月) 09:44:50ID:wx/mrO8x
買うなら原書(英語版)のほうがいいぜ
版が新しいし安いからな
2007/10/29(月) 10:27:48ID:nDk3r2gZ
> 版が新しいし
4th edition でたの?
2007/10/29(月) 20:53:20ID:Bg0Jp9i7
konozama.comとか少しは自分で調べようよ
2007/10/29(月) 23:42:16ID:oMEBh2dX
Oh〜、チョッとお聞きしただけで損何怒らなくても
いいじゃないですかぁ〜。Hey,take it easy !
でも調べるところは教えてくれるアナタに感謝で〜す!
729login:Penguin
垢版 |
2007/11/08(木) 00:29:00ID:Cm3oK6QC
メーカーとかが作ったデバドラのソースって公開してるものはあるのでしょうか?
2007/11/08(木) 01:07:57ID:vscqki7B
ネットワークデバイス系はそういうのが結構多いような。
超いい加減だけど:
つ $ grep -r 'Inc[.o]' drivers | egrep -v '(Red|Vista|Foundation)'
731login:Penguin
垢版 |
2007/11/12(月) 11:19:56ID:vNQ95D4g
kernel2.6.18.6でターゲット側のUSBドライバ書こうとしてるんですが
参考になるサンプルってありますでしょうか?
drivers/usb/gadget/net2280.cとかが近いのかも知れないですけど
どうもpciで登録してるように見えて「別物かなぁ?」と思いまして。

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

ご存知の方いらっしゃればお願いします。
2007/11/12(月) 23:57:28ID:xIHzaILy
>>731
おめー御馬様のサンプル
見てていってるんだよね?

もしそうなら、適正無いから諦めろ
見てないなら、お前は調査能力ない
からニートかなんかになれ
2007/11/13(火) 00:56:13ID:0Tz4Ruwv
>>732
よく判ってらっしゃる。
馬本はさらっと読みましたが元がLinuxでも組み込みでもない世界で
やってて、急遽ヘルプで入ったんでさっぱり。

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

で、聞いてみたんですが俺も逃げっかな・・・
2007/11/13(火) 01:11:37ID:nAlW3/rO
>>733
一週間悩んだら解かんないか?
すげー複雑な科学計算とか遺伝子関係の
プログラミング以外ほとんどの対象のプログラミング
なんて簡単だぞ

時間がかかるものが多いのは事実だが
ドライバは簡単な部類だ
2007/11/13(火) 01:21:16ID:0Tz4Ruwv
>>734
まだ2日程度なんですよね。
「デバドラ」だと思ったんで聞いてみたんですがレベル設定あるみたいなんで
「くだらねぇ」でも行ってきます(´・ω・`)
2007/11/13(火) 01:24:22ID:O430Avmc
御馬様っていうのか・・・
昨日、買いました。勉強します〜
2007/11/13(火) 09:24:54ID:SFIG7nsG
>>734
ちなみに、回答しない人の言うことは無視したほうがいいよ。
>>732はニートとか言ってるし典型的な煽り。
738735
垢版 |
2007/11/14(水) 00:27:19ID:2+ZY8Hov
馬本見たら「本書の範囲を超えるので載せません」て書かれてた(´・ω・`)
USB gadgetは難しいだろうかnet2280.cよりもZero.c見たほうがいいのかなぁ・・・。
2007/11/14(水) 02:20:20ID:aLuJUt0c
文句とか愚痴だけいって何も貢献しない人間ほどむかつく奴はいない。
740login:Penguin
垢版 |
2007/11/17(土) 09:40:38ID:MN9c6cz5
>>739
どうどうどぅ…
2007/11/17(土) 11:39:12ID:AZzmHExp
>>739
Do! Do! Do!
742login:Penguin
垢版 |
2007/11/17(土) 11:43:31ID:4avAGLIe
do_fork
743login:Penguin
垢版 |
2007/11/29(木) 13:55:56ID:yo1OGExb
mmapで特定のデバイスのIOメモリを仮想空間に割り付けて,
その領域に対してユーザーからデータを書き込むことを考えています.

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

void *dev_malloc(start_address, end_adress, nbyte);
とすると仮想アドレスstart_address〜end_adressの範囲から
nbyteバイトの領域を確保するみたいなイメージです
2007/11/29(木) 20:09:08ID:iCD9/EY6
>>743
かーなーり スレ違い
デバイスドライバ関係ない
汎用heap管理ライブラリがほしいってことだろ

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

ちなみに
void *dev_malloc(start_address, end_adress, nbyte);
ってI/Fはありえないと思うぞ
毎回 start_addressとend_adressを与えるわけ??
745login:Penguin
垢版 |
2007/12/02(日) 23:50:11ID:lbIQi7BJ
あげ
746login:Penguin
垢版 |
2007/12/13(木) 19:50:31ID:pBhS9AMD
あげ
747俺
垢版 |
2007/12/18(火) 23:09:45ID:K//ZswLt
ドライバでCPUキャッシュのフラッシュやりたい!
どうやるの?だれかおせぇ〜てぇ〜
2007/12/18(火) 23:41:07ID:uNdsweTC
>>747
CPUキャッシュのフラッシュをする命令を実行すればいいんじゃない?
CPUはなに?
749俺
垢版 |
2007/12/18(火) 23:59:27ID:K//ZswLt
>>748
Xeonの5100です。
データシートとか見つからなくて。。。
ご存知でしたら教えていただけませんか?

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

2007/12/23(日) 13:45:51ID:VU+KNtKv
>>ORE
ttp://www.intel.com/products/processor/manuals/index.htm
751login:Penguin
垢版 |
2007/12/24(月) 18:03:58ID: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:53ID:EHGXP/cp
新年あげ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況