探検


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

■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
垢版 |
02/01/31 01:14ID:t3s191ys
ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
2login:Penguin
垢版 |
02/01/31 01:15ID:t3s191ys
とりあえず、オライリーのお馬さん本2杯目へのリンク。
http://www.xml.com/ldd/chapter/book/bookindexpdf.html
3login:Penguin
垢版 |
02/01/31 01:30ID:o+EauUH6
イーサネットドライバの仕組みが知りたいですわ。

02/01/31 01:32ID:WoiBhbQB
何故?Kernel仕組みスレのリンクを張らないの?

☆Linux カーネルの仕組みを勉強するスレ☆
http://pc.2ch.net/test/read.cgi/linux/1002012247/
51
垢版 |
02/01/31 01:44ID:R8TIzJku
あー、スマソ。ぼけてたです。

ついでに最新カーネル表示スレ
http://pc.2ch.net/test/read.cgi/linux/999618082/l50
USB総合スレ
http://pc.2ch.net/test/read.cgi/linux/1002630729/l50
最適NICスレ
http://pc.2ch.net/test/read.cgi/linux/986761860/l50
02/01/31 01:47ID:WoiBhbQB
是非とも、このスレを優スレにしたいなぁ・・・

公開されているいい関係資料を漁ってみよう。
71
垢版 |
02/01/31 01:47ID:R8TIzJku
JFドライバ関係
http://www.linux.or.jp/JF/JFdocs/INDEX-hardware.html
おなじくカーネル関係
http://www.linux.or.jp/JF/JFdocs/INDEX-kernel.html

ちょっとネタスレだけどLinuxプログラミングスレ
http://www.linux.or.jp/JF/JFdocs/INDEX-kernel.html
8login:Penguin
垢版 |
02/01/31 02:02ID:igUBIfwm
YAMAHA AC-XGをハクってください。
9login:Penguin
垢版 |
02/01/31 02:32ID:+4ZZMVcM
>>8
YAMAHAって、マイクロコードを
ドライバーがロードさせるタイプじゃないかな?
もしそうだと、YAMAHAが出さないと難しいかも。
02/01/31 10:02ID:+yS2cLhP
_IO マクロってみんな使ってる?
11login:Penguin
垢版 |
02/01/31 15:08ID:o+EauUH6
イーサネットドライバって、使われているチップに対してバスのメモリを解して
read/writeすればいいのかな?
12login:Penguin
垢版 |
02/01/31 18:55ID:igUBIfwm
>>9
まったくの阿呆なのでおっしゃってる意味がよくわかりませんが、
無理なのですか…。
残念…。
13login:Penguin
垢版 |
02/01/31 23:21ID:o+EauUH6
やっぱ人気ねぇかなぁ。このスレ。

それともレヴェルが低いかなぁ。(アオリ
02/01/31 23:21ID:ZFCCqGEW
正直、こういう技術的なネタはここでは盛り上がらない。
02/02/01 00:30ID:Hb4Obm1B
じふぃーず ってどこまで短くしたことある?
みんなの体験談キボーン

とりあえずCPUクロックと併記よろしこ
02/02/01 00:45ID:0DxQaaOu
んじゃ、適当なソースでも引っ張って解説つけていくとか・・・

おもしろくないねぇ・・2chデストリ用に何かつくるとか・・・
17login:Penguin
垢版 |
02/02/01 04:33ID:Dg5fN5Aj
どうやってドライバを書くのかという英文をひらったぞ(゚Д゚)ゴルァ

一番単純なモジュール抜粋じゃー
#define MODULE
#include <linux/module.h>

int init_module (void) /* Loads a module in the kernel */
{
printk("Hello kernel \n");
return 0;
}

void cleanup_module(void) /* Removes module from kernel */
{
printk("GoodBye Kernel\n");
}

モジュールコンパイルしろや
# gcc -c hello.c
モジュールロードだ
# insmod hello.o

出力は
Hello kernel
モジュールアンロード
# rmmod hello.o
02/02/01 04:56ID:Dg5fN5Aj
モジュールに引数わたしたけりゃ
static int baka;
MODULE_PARM(baka,'i');
int init_module (void) /* Loads a module in the kernel */
{
printk("Hello kernel \nMODULE_PARM=%d\n",baka);
return 0;
}
insmod hello.o 1
とかしろ、
この{マ,チ}ンカスどもめ
02/02/01 05:17ID:Dg5fN5Aj
デバイスドライバには2種類ある
ブロックドライバとキャラクタドライバ

ブロックデバイスは塊単位としてしかアクセスできんデバイス
普通は1kごととかで
お前らの使ってるディスク装置とかがこれだ

キャラクタデバイスはファイルみたいにアクセスできてそういう世話
をするのが実装されとる。オープン・クローズ・リード・ライトシステム
コールが実装されていてコンソールとかパラレルポートとかが
これらしい。

ほんとかよ。お前ら間違ってたら教えろよ。
02/02/01 05:38ID:Dg5fN5Aj
順番むちゃくちゃに訳してたら、何で最初にシンプルなモジュール
の書き方が書いてあるのか説明してなかった。
linuxではデバイスドライバはinsmodをつかって
動的にカーネルに読みこんだりできるモジュールなんだそうな

>>17のinit_moduleは何をするんかつーとリロケートされたモジュールイメージ
がカーネルスペースにロードしてモジュールの初期化ファンクション
を走らすらしい

ところで、なあ、リロケート再配置ってなんじゃこりゃ
init_module loads the relocated module image into kernel space and runs
the module's init function.

英語だけでなく日本語も不自由なんじゃ(゚Д゚)ゴルァ
21スマソ
垢版 |
02/02/01 05:45ID:Dg5fN5Aj
>>18
s/insmod hello.o 1/insmod hello.o baka=1/

02/02/01 06:29ID:Dg5fN5Aj
20 のモジュールイメージっつうのは具体的に何かっつーと
モジュール構造体で始まって、適切にコードとデータが連なった
もんらしい。
モジュール構造体は
struct module
{
unsigned long size_of_struct;
struct module *next;
const char *name;
unsigned long size;
long usecount;
unsigned long flags;
unsigned int nsyms;
unsigned int ndeps;
struct module_symbol *syms;
struct module_ref *deps;
struct module_ref *refs;
int (*init)(void);
void (*cleanup)(void);
const struct exception_table_entry *ex_table_start;
const struct exception_table_entry *ex_table_end;
#ifdef __alpha__
unsigned long gp;
#endif
};

nextとrefsを除く全部のポインタはモジュールのボディを指すように
期待されていてカーネルスペースのために適切に初期化される
例えば残りのモジュールなんかを再配置したりとかなあ。

日本語だけでなくコンピュータも不自由なんじゃ(゚Д゚)ゴルァ
意味わかんねえし

init_moduleと
cleanup_moduleの戻値は0が成功-1は失敗
-1のときはerrnoがセットされる。
...ズラズラとエラーコードの説明

一般的なドライバのコンパイルオプションは
-D__KERNEL__ _DMODULE -O -Wall -I$(INCLUDEDIR)
らしい

読み終わりました。
この文書だけでドライバが書ける奴は
居ないと思いました。終始モジュールの説明でした。

真面目にKHGを読もうかと思います。
http://www.linuxdoc.org/LDP/khg/HyperNews/get/khg.html
23login:Penguin
垢版 |
02/02/01 08:36ID:hfC7cfcj
>>20
リロケートってのは、一般的にいって、コンパイル/アセンブル
したときとりあえず付けておいたてきとーなアドレスを、
実行時の環境にあわせて番号付け直すこと。

たとえば、オレサマ言語で
function hoge
print "逝ってヨシ"
end

function fuge
print "オマエモナー"
end

function 2ch
call hoge
call fuge

ってプログラムがあるとする。コンパイルすると、たとえば
0x000 jump 0x300
jump 0x400
return
0x100 "逝ってヨシ"
0x200 "オマエモナー"
0x300 print 0x100
return
0x400 print 0x200
retun

みたいな感じになる。0x000から始まるのは、とりあえず
そうしているだけであって、これをリンク(か、動的ロードか)
しようとすると他の部分と競合してしまって、まずい。
で、ロードすると、linkerがいまのメモリ状態に合わせて、
たとえば空きメモリが0x400000から始まってたとすると

0x400000 jump 0x400300
jump 0x400400
return
0x400100 "逝ってヨシ"
0x400200 "オマエモナー"
0x400300 print 0x400100
return
0x400400 print 0x400200
retun
って内容に書き換えてから、メモリ上に置く。
で、0x400000にジャンプすることで、始めて
関数2chが使えるようになる、ってこった。
基本的には、動的にロードする場合でも、静的に
リンクする場合でも、どこかしらで似たようなことを
やってくれてる。
(で、そういうリロケートとかの方式の一つがELFバイナリで
あったり、a.out形式バイナリであったりするわけだ。)

ここいらの話は、Loader Linker とかいう本にかいてあるよ。
(ちょっと書名自信なし)
02/02/01 08:51ID:Oxc8LS21
つーか、その辺はお馬さんの本を見れば全部丁寧に解説してるし。
02/02/01 09:12ID:Dg5fN5Aj
まさか2ちゃんねるでこんなにわかりやすい答えがもらえるとは
思ってなかった。わかったような気がします
考えてみればメモリ上に読みこまれる実行バイナリ
が常に同じ場所に置かれるわけじゃないから、そういう仕組みが無いと
毎回呼び出すたびに大変なことになりそうな

コンピュータの本ってなんかむやみに高く無いですか?
自分のレベルに合ってない本を買ってしまったときのむなしさ
と言ったらエロ本どころの騒ぎじゃないような
26login:Penguin
垢版 |
02/02/01 09:22ID:CW11eql0
稀に見る良スレ age
02/02/01 09:24ID:Y0QPm9tf
>>25
レベルが違う分には、ざっと目を通しておくとあとで理解できたり、
「あ、あのときあの本に書いてあったな」って読み返したりできる。
方向性が違う時には、虚しいこともある。
レベル低すぎな本は、そもそも買うときに弾くことができる。
02/02/01 09:28ID:K+86rTMk
>>25
つーか、こんなの基本じゃないっすか・・・
わかり易いとか、わかりにくいとか以前の問題だと思うんですけど・・・
2923
垢版 |
02/02/01 09:34ID:zfB82tu1
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 先輩、LinkerLoader読まなくても
| お馬さんにかいてあるそうですよ。
| 先輩って確か第1版もってましたよね?
\
   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・)  ∧ ∧ < いや、読んだ覚えはねぇぞゴルァ
 (    )  (゚Д゚ ) \____________
   ̄ ̄ ̄ ̄ ̄ (つ_つ__
   ̄ ̄ ̄日∇ ̄\|Amity VP|\
       ̄   =======  \

トウジハ リカイデキナクテ ミナカッタコトニシタラシィ
02/02/01 09:37ID:Dg5fN5Aj
>>28
スマソ、本当にはじめて知った。
コンピュータは趣味というだけなんで誰から教わったわけでもなく
わからない事だらけなんです少しずつわかってけばいいかなと。
3123
垢版 |
02/02/01 09:38ID:zfB82tu1
>>28
ん?基本を説明するのに解りやすかったり解りにくかったりする
ことになんの不思議が?
おまえは分数の計算を生まれたときからできたのか問い詰めたいよ。
いくら算数が数学の基本だっつったって、解りやすい先生がついた
ときと、そうでないときとで、生徒の苦労はケタ違い。

32login:Penguin
垢版 |
02/02/01 09:53ID:VTxWGKIN
http://www.iecc.com/linker/
linker&loadersの草稿が英語で読めるYO!
http://www.linux.or.jp/JF/JFdocs/INDEX-programming.html
Library HOWTO はわかりやすいス
02/02/01 10:02ID:wGSa/qxe
ディバイディングドライバァァァァーッ!!
02/02/01 10:21ID:RSGobFLl
>>31
あんた自分の理解力にコンプレックスでもあるの?

まあ気の弱い犬ほどよく吠えると言うが・・・
02/02/01 10:35ID:a6zdq5Rc
>>34
オマエガナー
赤の他人に理解力について
罵られるいわれもコンプレックスを持つ必要性も
無いと思われ。
28は上司に尻叩かれて性格が曲がっちゃった
職業プログラマに3ガバス
36login:Penguin
垢版 |
02/02/01 10:51ID:Oxc8LS21
喧嘩は〜やめて〜争わ〜ないで〜

>>33
承認

モジュールをつくる
http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/linux/drivers/module.html
デバイスドライバ開発入門
http://www.net-newbie.com/linux/driver/
Linux 拡張ボードデバイスドライバの作り方
http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/research/library/drivers/make_dd.html

>>10へ
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/ioctl-number.txt.html
37login:Penguin
垢版 |
02/02/01 10:53ID:Oxc8LS21
お馬さん 2ndEdition タダで読めますよ
http://www.xml.com/ldd/chapter/book/index.html
02/02/01 11:02ID:0zxTeFbY
>>37 サンクスコ
ちなみに23の説明は楽しかった。
02/02/01 11:35ID:0DxQaaOu
>3ガバス
ガバスって、ファミ通だっけ?デバイスと関係なのでsage
02/02/01 13:40ID:fvbQ/5zX
>>25
お前はまだ仮想アドレスについても学ばなければならない。

>自分のレベルに合ってない本を買ってしまったときのむなしさ

レベル上がってから読みなよ。
4125
垢版 |
02/02/01 14:20ID:LgazE6G1
>>40
うむ、了解。
じゃあまず仮想アドレスについてから勉強するよ。
なんかこのスレでブックマークが一杯になってしまったなあ
02/02/01 14:38ID:HC9Yhxcp
デバイスドライバーだけじゃないけどさ
ソフトバンクからでてるLinuxのプログラム本と
詳細なKernel(2.2系)の本はあった方がいいかなぁ・・・
43login:Penguin
垢版 |
02/02/01 15:00ID:OYnwkLox
とりあえず、ここまでのレスは全部読んで
なんとなく概要は理解できた気がするのですが、、。

お仕事でドライバの事少し勉強しなければいけませんので、
ソースから学ぼうと思ってるんですが。
Linux2.4系のKernelソースの中で
全く、ドライバをやった事の無い初心者にも
わかりやすいソースってどれでしょうか?
どなたか有識者で知ってらっしゃる方はいらっしゃいませんか?
「お馬さん」は2.2系の日本語を読んでますけど、
非常に難解です、、。
Kernelが2.4系なので、
文献も英語しかなく、
読解力のないわたしは苦しんでいます。(^^;)

ここを良スレと見込んでよろしくお願いしますm(_ _)m
■ このスレッドは過去ログ倉庫に格納されています

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