お前ら*BSDのカーネルをハックしますか? (378レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
26(5): 名無しさん@Emacs 01/10/30 23:45 AAS
>>3
えっと、もうmain()って名前じゃなくてmi_startup()という
名前に代わってるよん>init_main.cの関数。
FreeBSDの場合だと、mi_startup()はSYSINITマクロで作られた配列を
順番に実行するように作られてます。割と追いにくいです。
/sys/sys/linker_set.h
/sys/sys/kernel.h
あたりに小細工があります。
50(1): 02/01/11 07:01 AAS
>>26
SYSINITの所で、つまずいたです。
出来れば簡単に説明して頂けるとうれしいのですが。。
52(2): 26 02/01/14 18:50 AAS
以下の実験は実行ファイル形式としてELFを使用しgccをコンパイラとして
利用している事が前提である。
実験1.
まず以下のソースをコンパイルし結果を見よ。
--------a.c
extern int __start_b;
extern int __stop_b;
static int a1 __attribute__((__section__("b"))) = 0;
main()
{
int *a;
for(a = &__start_b; a < &__stop_b; a++){
printf("%d\n",*a);
}
}
-------
実験2
上のソースと次に挙げるソースをリンクし、結果を見よ。
----b.c
int a2 __attribute__((__section__("b")))=1;
int a3 __attribute__((__section__("b")))=2;
-----
実験3
/boot/kernel/kernelと、今作った実行ファイルそれぞれに対し
objdump --all-headers
をかけて結果を見よ。
考察欄
56: 52 02/01/15 00:31 AAS
>>55
>>26参照。
57: 26 02/01/15 00:34 AAS
それから、__attribute__はgccの拡張だよ。info参照。
63(1): 26 02/01/17 00:04 AAS
>>58
どんな簡単な物でもいいから、とりあえずドライバ書いて見たら?
今まであるドライバからコピペしたり、/usr/share/examples/にある
スクリプトを使ったテンプレートを元に書けばそんなに難しくないよ。
頭から追っていくってのは正直言うとかなり効率の悪い方法だと思う。
カーネルがprintf(9)で吐くメッセージをたよりにしたりしながら
調べるのが吉。そうすれば例えばSYSINITの実装はとりあえず理解しなくても
先に進むことが出来るし。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s